原创 第2节 LabWindows/CVI串口开启

2012-3-23 20:51 9519 16 17 分类: 软件与OS 文集: Labwindows技术板块

第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

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

用户377235 2013-4-27 15:42

你姓叶?

相关推荐阅读
sharcky 2020-06-07 21:37
技术书籍分享
最近将自己一直积累收藏的一些电子书籍拿出来给大家分享一下,希望对大家有帮助!电子电路相关书籍: (1)有源滤波器的设计手册.pdf 下载地址:http://www.yimuhe.com/file...
sharcky 2020-06-07 20:57
第9节 CVI添加日历控件及操作
1、如何添加日历控件 (1)在需要添加日历控件的界面,点击鼠标右键,选择“ActiveX…”,如图3-1所示。然后进入选择外部插件的界面,如图3-2所示。 图3-1 添加外部控件 图3-...
sharcky 2020-06-07 20:52
第8节 鼠标右键实现菜单功能
(1)在主界面下,新建一个界面,菜单Create中,选择Panel..,直接就生成一个新的面板,双击新建的面板,修改参数。 图2-1 右键菜单面板参数设置界面 如图2-1所示,设置界面的名称代...
sharcky 2020-06-07 18:14
第1节 CVI实现无标题栏界面如何实现界面的移动
(1)首先需要在主界面添加一个函数,如图1所示,在Callback function 中加入主界面回调函数,命名为mainTableFunction,点击“ok”按钮确定设置。 图1 程序的主界...
sharcky 2013-03-03 13:37
放大电路的级间耦合及多级放大电路
   电子设备中所用的放大电路常将微弱的信号放大,使之成为能带动负载的有用信号。这就要求放大电路有很高的放大倍数,并能输出一定的功率。单级放大器通常是无法胜任的。通常将若干个单...
sharcky 2013-03-03 13:31
交流信号幅度的微小变化的检测,遇到问题...
1、引言:分子力学研究一个或多个分子的非键合原子的相互作用,它能够决定某种结构的空间构型或邻近分子导致的构型转变,概括地说,分子力学是分子结构、相互作用及其变化的模型,以及根据物理和物理化学第一定...
我要评论
1
16
关闭 站长推荐上一条 /2 下一条