|
摘 要:以水轮发电机组流量效率监测系统为例,介绍利用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)
Abstract:This paper presents the application of virtual instrument technologytotheflux and efficiency monitoring system of a hydroelectric gen-erating set.This systemuses LabWindows/CVIto realize the serial communication between the PCand the instrument. Keywords:virtualinstrument;serialcommunication;LabWindows/CVI
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。  其中帧头FH为固定内容EBH,90H,EBH,90H。 帧类别FT主要表征当前通信帧的性质,具体内容为: FT=01H,上位机发送的询问监测仪当前准备状态的数据帧; FT=02H,上位机发送的设置监测仪参数的数据帧; FT=03H,上位机向监测仪发送的数据请求帧; FT=04H,监测仪发送的数据帧。帧类别为04H时,数据场内容依次为:瞬时流量、累计用水量、机组效率、机组出力、累计发电量、发电耗水率、蜗壳压力、下游水位、工作水头、前日用水量、前日发电量、前日均耗水率和拦污栅压差等13个量,每个量4个字节,总共52个字节。 校验和SUM=帧类别+数据长度+数据场。 在通信过程中,接收方接收到数据后,要立即返回确认帧:接收错误返回时,将相应帧类别最高位置1,数据长度置00;接收正确返回时,将相应帧类别次高位置1,数据长度置00。上下位机之间如果通信失败,发送方要重发5次,每次间隔1秒。 3.3 通信实现 3.3.1 配置和打开串行端口 通信端口的选择和通信参数配置面板如图1所示,在“Config/Open”按钮的回调函数中,按所选的参数 配置并打开通信端口。  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 结束语 在通信速率要求不高的测量系统中,使用串行总线构建的虚拟仪器系统,接口简单,使用方便,价格低廉。应用实践表明,利用串行通信端口实现的流量效率监测仪虚拟仪器系统实用可靠,实现了对机组流量效率的长期监测,使运行人员能利用机组的运行规律适时的调整负荷调度方案,使机组在运行时达到能量转换效率的最大化,从而实现水电厂的经济运行。
参考文献 [1]NI.LabWindows/CVIProgrammer Reference manual[Z].2003. [2]张凤均.LabWindows/CVI开发入门和进阶[M].北京:北京航天航空大学出版社,2001. () |