利用C++Builder开发串口通信程序对工艺流量计进行实时监控
一、前言
C++Builder是当今世界上相当优秀的WINDOWS开发工具之一,其良好的图形用户接口(GUI)、面向对象的程序设汁和结构化的事件与驱动编程模式,使得编程效率提高,现场应用功能大大增强。加拿大C0MPU-WATT称重系统公司的工艺流量计―智能型功率表是一种可编程的智能型电工仪表,具有称重计量设备的全部功能,同时具有RS232和RS485通讯接口, 可实现远程联网操作。本文介绍了在Windows98/NT操作系统下用C++Builder开发串行通信程序对流量计进行监控的编程方法。
二、C0MPU-WATT工艺流量计通讯协议简介
1、该流量计的通讯设置如下:数据长度:8位;停止位:1位;奇偶校验:无;波特率:1200或9600
2、通讯协议如下:
1)、命令帧格式:
第1个字符 | 第2个字符 | 第3个字符 | 第4、5个字符 | 第6个字符 |
$ | 设备地址 | 命令字符 | 校验码 | 回车符 |
设备地址为地址为流量计的编号,为字符1-9、A-Z中的一个。
命令字符的代号和含义如下:
S― 停止重量累计 K― 清除累计的重量数据C― 继续重量累计 m― 指定设备工作模式,可取值1―6
z― 零校准 w― 传送重量数据和满载百分率R― 传送瞬时流量和平均流量
校验码的计算方法为:第1、2、3字符的ASCII码相加的和转换为l6进制。
2)、应答帧格式:
a、如果命令帧的设备地址和命令字符都正确,则应答帧的第1个字符是*,第2、3个字符与命令帧的第2、3个字符相同,第4、5、6个字符为校验和与回车符。
于W命令 | |||||||||
第1个 字符 |
第2个 字符 |
第3个 字符 |
前4个 字符 |
第5个 字符 |
后7个 字符 |
第13个 字符 |
后4个 字符 |
第18、19个字符 |
第20个 字符 |
# | 设备地址 | 设备状态 | 设备模式 | ・ | 流量数据 | ・ | 满载百分率 | 校验和 | 回车符 |
对于R命令 | |||||||||
第1个 字符 |
第2个 字符 |
第3个 字符 |
第4个 字符 |
第5个 字符 |
后6个 字符 |
第12个 字符 |
后6个 字符 |
第19、20个字符 |
第21个 字符 |
# | 设备地址 | 设备状态 | 设备模式 | ・ | 瞬时流量 | ・ | 平均流量 | 校验和 | 回车符 |
b、如果命令帧的设备地址或命令字符中的任何一个不正确,则应答帧的第1个字符是?,第2、3个字符与命令帧的第2、3个字符相同,第4、5、6个字符为校验和与回车符。
c、如果命令帧的校验码不正确,则应答帧的第1个字符是?,第2、3个字符是CE,第4、5、6个字符为校验和与回车符。
d、当命令字符是W或R时,则流量计会直接将请求的数据返回,而不会返回应答帧。返回的数据格式如:
三、编程实现
1、首先利用C++Builder的可视化编程工具建立如下运行界面。
2、然后在C++/Builder中建立串口类,该类定义了操作串口的方法,综述如下:
1)、打开串口: BOOLOpenCom(intnPort=1);
2)、关闭串口:BOOLClose(・void);
3)、取得串口通信配置:void GetComState(DCB*dcb);
4)、设置串口通信配置:void SetComState(DCB*dcb);
5)、读串口:int ReadData(void*);
6)、写串口:int SendData(const char*int);
7)、获取缓冲区字符个数:int GetCharNumber (void);
8)、判断串口是否打开:BOOL IsOpened(void);
3、串口的打开、关闭和配置
利用串口类的打开串口、关闭串口和配置串口通信配置方法,对给定的串口进行相关的操作。
4、命令的发送和数据的处理
为了连续进行数据采集,在程序中设置了一个定时器,用于周期性的发送命令帧给流量计,同时读取接收到的数据。下面以读取重量数据为例,介绍发送命令和处理数据的方法。
第l步,建立发送的命令字符串“SlWACr”。
第2步,利用串口类的写串口方法将上面建立的字符串写入串口。
第3步,利用串口类的读串口方法将从流量计返回的重量数据读入监控程序。
第4步,利用C++Builder的字符串函数处理接收的重量数据,抽取其中的第6位到12位字符,然后将其显示在重量数据文本框中。
对于瞬时流量的命令发送和数据处理,可以用与上面相同的方法进行处理。
5、为了便于同上位机组态软件交换数据,本程序采用了DDE(动态数据交换)方式进行设计。
四、结束语
利用以上方法,笔者成功地将其应用于粮库仓储自动化监控系统。同时笔者也成功的实现了对OMRON PLC的监控。
参考文献
1、《C++Builder3 编程指南》徐新华编著人民邮电出版社
2、MSDN技术文档
3、加拿大COMPU-WATT智能型功率表技术文档