摘 要:以水轮发电机组流量效率监测系统为例,介绍利用LabWindows/CVI实现的上位机和监测仪之间的串行通信。
关键词:虚拟仪器;串行通信;LabWindows/CVI
Realization of Serial Communication Based on LabWindows/CVI
HUANGTian-shu,LIShi-han,HUANGMian-hua
(School of Electronic Information,Wuhan University,Wuhan 430072,China)
1 实现串行通信的两种基本方法
1.1 调用Windows API函数
Windows操作系统通过WinAPI函数为应用程序提供编程接口和执行环境。串行通信时,用CreatFile函数打开串口,并配置串行端口的通信
数,用Write-File函数向串行端口写入数据,ReadFile函数读取串口中的数据。通信结束时必须用CloseHandle函数关闭串口,当此函数返回True时,关闭动作完成。
1.2 使用MSComm控件
为了简化串行通信编程,Microsoft公司提供了一种ActiveX控件MSComm。使用串口之前要先设置属性MSComm1->PortOpen=true打开串口,使用完之后设置PortOpen=false关闭串口,串口的通信功能都要在PortOpen的true和false之间完成。
2 Lab Windows/CVI简介
2.1 简介
LabWindows/CVI
NI公司开发的32位面向计算机测控领域的虚拟仪器软件开发平台,可以在多种操作系统下运行。它将功能强大、使用灵活的C语言平台与用于数据采集、分析和表达的测控专业工具有机地结合起来,为熟悉C语言的开发
员建立检测系统、自动测量系统、过程监控系统等提供了一个理想的软件开发环境。在虚拟仪器系统开发中,与其他编程语言相比,它提供丰富的虚拟仪表控件,使界面非常类似传统仪器;它具有很好的硬件接口功能,几乎为所有的数据卡、采集仪器之类的采集设备都提供了CVI专 门的驱动程序,
不仅使得编程方便,还使程序稳定可靠;它集成了许多工业用的数学分析功能,如:傅立叶变换、功率谱分析、统计分析等,而且,要实现这些分析功能只需要简单地调用几个库函数。
2.2 LabWindows/CVI中的RS-232函数
CVI提供了专门的RS-232通信函数库。
(1)打开/关闭函数:OpenCom,OpenComConfig和CloseCom。
(2)I/O读写函数:总计有7组函数,以下为其中常用的四组:
ComRd:从串口的接收缓冲区读指定
度的字符;ComRdByte:从串口的接收缓冲区读取一个字符;ComWrt:向串口的输出缓冲区中写指定长度的字符;ComWrtByte:向串口的输出缓冲区中写一个字符。
(3)Xmodem函数:它使用了一种包含出错检测的文件传输协议进行串口通信。在这种协议中,文件通过信息包来传送,信息包中不仅包括了文件中的数据,还包括了校验和同步信息。
(4)串口控制函数:总计有7组函数,以下为其中常用的四组:
SetComTime:设置I/O操作超时的时间限制;
SetCTSMode:禁止或允许硬件握手并设置硬件握手方式;FlushInQ/FlushOutQ:清空输入/输出队列。
(5)状态函数:主要包括端口状态信息和通信错误代码信息等。
(6)回调函数InstallComCallback:为指定的串口安装回调函数。在Lab Windows/CVI中提供了两种机制实现串口通信(即查询或使用回调函数)。在Windows操作系统下,回调函数有可能由于消息堵塞造成数据的丢失,因此,对于通讯速率较高的场合最好使用查询的机制。
3 实例
3.1实例简介
水轮发电机组流量效率监测系统是由监测仪和上位机(即PC机或IPC)构成的虚拟仪器系统。系统中监测仪的基本功能是测量机组当前运行状态,各相关部件的压力以及流量和效率等参数。但是,由于监测仪一般由单片机构建,它本身的存贮、处理和显示功能有限。系统中的高级数据分析处理功能,如长期的(一年或半年)在不同水头下机组效率和耗水率的变化情况,不同出力情况下机组效率和耗水率的变化情况,机组用水量的变化趋势等这些功能就要借助上位机才能实现。因为该系统中通信数据量不大,对通信速率的要求不高,所以,监测仪和上位机之间采用串行通信。
3.2 通信协议
系统的通信参数为:波特率9600bps,没有奇偶校验,8位数据位,1位停止位。
流量效率监测仪的通信协议帧的构成见表1。


3.3.2上位机和监测仪的通信初始化
通信端口成功打开后,初始化上位机和监测仪之间的通信通路,上位机向监测仪发送询问当前状态帧
InitFrame={0xEB,0x90,0xEB,0x90,0x01,0x00,0x00,0x01},NSendbytes=ComWrt(Comport,InitFrame,8);//向输出缓冲区写8个字节的数据
如果在5秒钟之内监测仪有确认帧InitComeback={0xEB,0x90,0xEB,0x90,0x41,0x00,0x00,0x41},说明通信初始化成功,通信通路建立。
3.3.3 上位机请求监测仪发送数据
当通信通路建立后,上位机可以通过多种方式向监测仪索求数据。在本例中采用一个时间间隔为2秒钟的定时器,定时向监测仪发送数据请求帧SendQ={0xEB,0x90,0xEB,0x90,0x03,0x00,0x00,0x03},在定时器的EVENT_TIMER_TICK事件中发送:

3.3.4 上位机接收监测仪发送的返回确认帧
当监测仪接收到上位机发送的数据请求帧后,首先要根据情况发回确认帧。上位机接收监测仪的返回数据有查询方式和端口事件的方式。在本系统中采用查询方式,其程序段如下:

0x00,0x83},说明出现了某种错误,需要进行重发;如果Recv={0xEB,0x90,0xEB,0x90,0x43,0x00,0x00,0x43},则说明监测仪紧接着将发送具体的测量数据。
3.3.5上位机接收监测仪发送的测量数据帧
上位机收到接收正确的确认帧后,马上就接收测量数据帧,并按协议规定的数据格式进行相应的处理,部分程序代码如下:

数据接收后,检查帧头、帧类型、数据长度及计算校验和,对这些数据进行检验看它是否正确;如果以上检验都正确,可以认为该次数据通信传输是成功的,上位机马上向监测仪发送接收正确的确认帧SendRG={0xEB,0x90,0xEB,0x90,0x43,0x00,0x00,0x43},并对接收的数据进行处理,相应的程序代码如下:

低字在前,高字在后;而每个字中又是低字节在前,高字节在后,所以要进行换算。例如换算瞬时流量,其实际值程序代码如下,其他12个量的处理方法相同

3.3.6 通信结束,关闭通信通路
关闭通信通路就是关闭通信端口,其程序段如下:
CloseCom(Comport);
至此,在LabWidows/CVI平台中实现串行端口通信的过程结束。
4 结束语
在通信速率要求不高的测量系统中,使用串行总线构建的虚拟仪器系统,接口简单,使用方便,价格低廉。应用实践表明,利用串行通信端口实现的流量效率监测仪虚拟仪器系统实用可靠,实现了对机组流量效率的长期监测,使运行人员能利用机组的运行规律适时的调整负荷调度方案,使机组在运行时达到能量转换效率的最大化,从而实现水电厂的经济运行。

过去开发一个多处理器应用,可能只需要写下那些要求,核对一下那些大型DSP供应商所供应...

数字平板电视持续增长,可望2008年在全球的电视市场取得超过50%的份额。平板电视(包括...

引 言 嵌入式实时系统要求系统有很好的实时性,能够及时处理各种异常事件,因此中断系...

黄氏兄弟初到北京时物色下的珠市口的那家两层小店,本是一家国营服装厂的门市部,名叫...

HAND(汉德)系列产品作为国内领先产品,将工业市场现场仪器、仪表产品技术含量提高到...