|
摘 要:介绍了Win2000环境下利用Delphi和VB的通信控件MSComm实现温度巡回检测仪与PC机的串行通信方法,详细描述了温度巡回检测仪与PC机之间通信涉及的通信端口初始化、串口捕捉、串口读写、数据库和各功能窗口的设置,并给出了部分串行通信的源程序。 关键词:串行通信;DELPHI;Mscomm;温度巡回检测仪 1 引 言 由于温度巡回检测仪具有结构简单、使用方便、测量准确和可靠性好等优点,因而,它广泛应用于工业温度测量中。98系列上润仪表WP-RD温度巡回检测仪,能完成温度显示、输出控制、网络通信等功能。但温度巡回检测仪内部存储容量有限,需要与具有强大数据处理能力和丰富软件资源的微机组成分布式系统,实现由微机对整个测量过程的温度数据进行统一的显示、存储、打印报表、参数设定和数据的进一步处理,这样必须实现PC机与温度巡回检测仪之间的通信。它们之间的通信可以通过并行通信或串行通信两种方式实现,由于串行通信自身的长处,现已被广泛的使用。Borland公司推出的Delphi是一种功能强大的高级编程语言,是新一代可视化开发工具,具有功能强大、简便易用和代码执行速度快等特点,特别适用在Windows环境下图形界面和用户程序的编制。本文开发的温度智能化巡回检测系统,使用温度巡回检测仪作为下位机采集温度数据,经过预处理后通过自带的RS232串行口将数据送给上位机PC。在PC机上Win2000环境下运行用Delphi和VB的通信控件MSComm编制的实时监测系统软件,接受串行口送来的数据,进行相应的数据处理,在用户界面上进行实时显示和设置。 2 温度智能化巡回检测系统通信协议 温度巡回检测仪与PC机之间通过RS232异步串行通信接口通信,波特率为1200bps;字节数据格式为1位起始位、8位数据位和1位停止位;仪表地址传送格式为双字节、16进制、高字节在前、低字节在后,数据传输格式为3字节定点数(3字节定点数=低字节高4位ASCⅡ码+低字节低4位ASCⅡ码+高字节高4位ASCⅡ码+高字节低4位ASCⅡ码+小数点高4位ASCⅡ码+小数点低4位ASCⅡ码);巡检仪与上位机的数据通信是以“帧”为单位进行的,“@”为起始符号。 3 MSComm控件的注册和属性 3.1 MSComm控件的注册 用Delphi实现串行通信,可用的方法有两种:(1)使用Windows API;(2)使用在Windows操作系统中注册的控件。其中调用API函数较为复杂,需要掌握大量通信知识;而利用MSComm控件,程序实现相对简单,结构清晰,并且该控件具有丰富与串行通信密切相关的属性和事件,提供对串口的各种操作,使用很方便,因此本实时监测系统软件使用第2种方法。 采用MSComm控件进行串行通信时,必须添加一MSComm控件到窗体中。其具体步骤是将MSComm.ocx拷入winnt\\system32下,在Delphi主菜单中的Component,选择Import ActiveX Control命令,弹出Import ActiveX窗口,选择Microsoft Comm Control5.0,再选择Add命令,加上MSComm32.ocx,在窗体中生成了一个MSComm对象,就可自由地设置它的属性了。 3.2 MSComm控件的属性设置 MSComm控件提供了2种处理通信的方式:事件驱动(实时)方式和查询方式。由于查询方式会占用大量的CPU时间,效率很低,所以本程序中使用的是事件驱动方式。 利用MSComm控件控制通信程序,关键是准确理解和设置通信控件的属性。下面对程序中所用到的主要属性事件加以说明。 (1) CommPort属性。设置或返回串行端口号,其取值范围为1~99,缺省为1; (2) Setting属性。设置或返回串行端口波特率、奇偶校验位、数据位、停止位等参数,本系统设置为MSComm.Setting=“1200,N,8,1"; (3) PortOpen属性。打开或关闭串行端口,格式为:MSComm.PortOpen={TRUE/FALSE}; (4) InputMode属性。设置从缓冲区读取数据格式,本程序中设置为0,表示为字符串格式; (5) Input属性。从接收缓冲区读取数据; (6) Output属性。向发送缓冲区写入数据; (7) InBufferSize属性。接收缓冲区的大小,缺省值为1024B; (8) InBufferCount属性。接收缓冲区中接收字节数; (9) OutBufferSize属性。发送缓冲区的大小,缺省值为512B; (10) OutBufferCount属性。发送缓冲区中待发送字节数; (11) Inputlen属性。设置或返回Input每次读出的字节数; (12) Rthreshold属性。在MSComm控件设置CommEvent属性为comEvReceive并产生Oncomm前,设置并返回的要接收的字符数,缺省值为0,不产生Oncomm事件; (13) Sthreshold属性。在MSComm控件设置CommEvent属性为comEvSend并产生Oncomm前,设置并返回传输缓冲区中允许的最小字符数,缺省值为0,不产生Oncomm事件; (14) CommEvent属性。串口事件或错误。 4 串行通信程序和人机界面设计 4.1 初始化串行口 串行口选为COM1口,波特率为1200bps,无奇偶校验位,字节长度为8位,停止位为1。下面给出初始化串行口的部分源程序:
 4.2 捕捉串口事项和串口读写(读仪表动态数据帧) 采用MSComm控件的事件驱动方法从端口读取数据,在程序中需要捕获并处理这些通信事件。完成读写的函数很简单,MSComm.input()和MSComm.output()就可以完成。下面给出读仪表动态数据(实时测量值)帧的源程序,其中包括ASCⅡ码转化为十进制,数据保存显示在数据库中。





 4.3 人机界面设计 4.3.1数据库的设置 温度智能化巡回检测系统中需要检测和保存的数据较多,考虑到数据使用的简洁性和确保软件的可靠性,在程序中设置了温度原始数据库、单次测量均值数据库和通道均值数据库。数据库的设置主要运用了Table、Datasource、DBGrid、DBNavigator等组件。Table用于把数据库于应用软件连接起来,是一个非可视组件;Datasource用于将Table组件连接到数据维护组件上,也是非可视组件;DBGrid用于创建数据维护网,在这种数据网中可以按照行和列的形式来显示数据,其关联的数据集是Table组件,是可视组件。DBNavigator用于创建周游数据库并具有编辑数据库能力的组件,与DBGrid配合使用,可以很方便地浏览和添减数据库的记录。 4.3.2 人机界面的设计 在开发实时监测系统软件时,考虑到人机接口的友好性,利用Delphi编制了主控界面。主控界面构成整个应用程序自始自终的背景,其上布有菜单和和导航器,如图1所示。菜单通过Delphi内置的菜单编辑器完成,能实现打开端口、显示数据、数据保存和打印、标准差计算、通道均值计算和单次测量计算等功能。另外还根据PC机作为上位机的任务,编制了系统初始化窗口、实时数据窗口、单通道测量均值窗口、单次测量均值窗口、标准差计算窗口、报警窗口和系统日期、时间窗口等功能窗口。

5 结束语 该温度智能化巡回检测系统为一主从分布式系统,上位机为PC机,应用程序全部用Delphi和VB的通信控件MSComm开发,实现由微机对整个测量过程的温度数据进行统一的显示、存储、打印报表、参数设定和数据的进一步处理,其测温精度高,传输数据准确,人机界面友好,使用方便,已成功应用于某大型设备的多点温度实时监测,它的监测系统软件编写方法对其他类似仪器的串行通信也可起到一个借鉴的作用。 参考文献 [1]张树兵.Visual Basic 6.0入门与提高[M].北京:清华大学出版社,1999. [2]范逸之. Visual Basic与RS232串行通信控制[M].北京:中国青年出版社,2000. [3]张立材. Delphi编程中用MSComm控件实现串行通信[J].计算机信息,2001,17(3). [4]郝启堂,程旭,毕维升译.Delphi入门及实例祥解[M].北京:电子工业出版社,1996. () |