第2节 Labwindows/CVI串口程序
一、串口的相关函数:
1、打开串口函数OpenComConfig,相关定义如下:
int OpenComConfig (int portNumber, char deviceName[], long baudRate, int parity, int dataBits, int stopBits, int inputQueueSize, int outputQueueSize);
——int portNumber 需要开启的串口号
——char deviceName[] 将要打开的串口号的名称,比如串口号1,名 称 为”COM1”
——long baudRate 设置串口读数的速度,波特率:110, 150, 300, 600, 1,200, 2,400, 4,800, 9,600, 14,400, 19,200, 28,800, 38,400, 56,000, 57,600, 115,200, 128,000, and 256,000,默认值为9600。
——int parity 选择串口的校验模式, Default Value: 0—no parity;Valid Values:0 = no parity,1 = odd parity,2 = even parity,3 = mark parity,4 = space parity
——int dataBits 数据位数 Default Value: 7 data bits;Valid Values: 5,6,7 or 8 data bits
——int stopBits 停止位 Default Value: 1 stop bit ;Valid Values: 1 or 2 stop bits
——int inputQueueSize 串口输入的数据量,一般选择的4,096
—— int outputQueueSize 串口输出的数据量,一般选择的4,096
函数的返回值来判定串口的状态。返回值为0,表示串口打开成功,为负值串口打开失败!具体使用见下面的程序:
/////////////////////////////串口开启程序///////////////////////////
void ConnectEquipment(int serial_num, long baudrate,int parity ,int databits,int stopbits)
{
int RS232Error;
DisableBreakOnLibraryErrors();
RS232Error =OpenComConfig (serial_num, "", baudrate, parity,databits,stopbits, inputq,outputq);
EnableBreakOnLibraryErrors();
if(RS232Error ==0)
MessagePopup("RS232信息:","端口打开成功");
if (RS232Error==-1)
MessagePopup("RS232信息:","未知的系统错误");
if (RS232Error==-2)
MessagePopup("RS232信息:","端口号无效");
if (RS232Error==-3)
MessagePopup("RS232信息:","端口无法打开");
if (RS232Error==-4)
MessagePopup("RS232信息:","未知的I/O错误");
if (RS232Error==-6)
MessagePopup("RS232信息:","没有发现串行端口");
if (RS232Error==-7)
MessagePopup("RS232信息:","无法打开端口");
if (RS232Error==-1)
MessagePopup("RS232信息:","未知的系统错误");
}
(1)串口打开后,在使用中一般不会出现连接等硬件错误;
(2)可以通过通讯协议用软件方法判定串口通讯是否正确;
(3)一定要每次发送都判定串口状态的话,请使用GetComConnectionState (int portNumber)函数!
(4)GetCommStat()返回指定串口的信息,为两个字节的十六进制数,每个位代表不同的状态信息。但是不建议使用它:使用它虽然能够知道串口是否发生错误,但通过返回值却并不能具体知道究竟是什么错误(这可能是NI自己的一个bug吧)。
(5)打开串口后发送数据前要先清除串口中以前的数据,避免送出的数据错误,用的函数为: FlushOutQ(Serial_num);
2、串口关闭函数CloseCom
int CloseCom (int portNumber);
int portNumber 是刚刚开启的串口号。在串口使用完后,要即使对串口关闭,避免在后面使用的时候,再次打开错误!
3、设置超时函数SetComTime
int SetComTime (int portNumber, double timeoutSeconds);
int portNumber 为开启的串口号
double timeoutSeconds 时间,单位为s
此函数用在input/ouput数据的输入输出的时候,为读取操作设定一个时间限制,如果在这个时间段中,如果读取的数据位空,串口中数据为空的时候,没有完成读取,则时间溢出。
4、写数据到串口ComWrt ,ComWrt Byte
(1)int ComWrt (int portNumber, char buffer[], int count);
功能:写一串数据到开启的串口的数据队列中去。数据位字符的形式传输。
int portNumber 开启的串口号;
char buffer[]存储待传输的数据;
int count 数据的长度
返回值:返回传输数据个数count表示传输成功,否则传输失败或没有传输完。
(2)int ComWrtByte (int portNumber, int byte);
功能:写一个int byte数据到int portNumber串口中去。
虽然写的数据为int型,但是被传输出去的仅仅是int型数据的低8位,高8位字符自动屏蔽,为0。
5、读取串口数据ComRd,ComRdByte
(1)int ComRd (int portNumber, char buffer[], int count);
功能:将串口portNumber的输入队列中读取conut个数据到buffer中存储,返回值:读取正确返回数据的个数count,否则返回值错误!
(2)int ComRdByte (int portNumber);
功能:从串口号portNumber的输入队列中读取一个数据,并保存为int类型,读取的为一个char型的数据,即将8位的数据存在int型的低8位中。
作者: sharcky, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-221763.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
用户377235 2013-4-27 15:42
你姓叶?