咨询电话:0755-88840386
工业自动化称重仪表 分类
首页 > 学习专题 > 专业技术专题 > 工业自动化称重仪表

基于MSComm控件下监测系统与称重仪表串行通信

来源:网络转载更新时间:2020-12-01 10:00:32点击次数:1687次

作为能源、物资的计量设备——称重仪表,在工业生产中分布在现场的各个区域,给设备的监控和数据的统计带来诸多不便。随着智能仪表技术的不断发展,其通信技术也在不断加强,当今的测量仪表大多带有RS-485或RS-232通讯接口,用现场总线方式可以实现多台测量仪表的集中监控与数据釆集,从而可实现仪表直接接入PC机中的监测系统中,实时显示计量仪表数据,使现场配料人员做到心中有数,利用“远程传输”实现了Window泌境下一台PC机与多台测量仪表的串行通信功能,并且对仪表数据实现自动计量与自动汇总。
考虑到Delphi集中了许多技术,包括可视化的开发环境、数据库以及编译器的技术,支持DDE和OLE以方便地与其他Windows应用程序通信、开发的应用程序运行速度快,与C++类库构建的应用程序相比代码更小,运行时不需要运行解释器等,且可以通过微软的MSCom唯件等一些优秀的控件来方便有效地实现通信功能。因此,这将使得用Delphi编写的监测系统应用程序与称重仪表之间的串行通信实现简单化,并且增加了程序运行的可靠性。
Delphi应用程序与称重仪表通信协议
根据RS-485电气规定,在两线制传输方式下,RS-485驱动器可带32个接收器,实现多半点双工通信,其系统方框图如图1所示。监测系统通过RS-232接口,经232-48娘块与多台流量计仪表相连接,一条总线上最多可接32台,每台仪表被赋予各自的通讯地址码用于识别身份,这样上位PC即能通过RS-485总线对挂在总线上的每台仪表进离信。
通常釆用MODBUS通讯协议,釆用RS-485半双工的方式,积算仪表作为从机,上位PC机作为主机,控制和监视称重仪表等计量仪表的运行。
要实现对称重仪表信息的外部调用就要求同时运行称重仪表应用程序和Delphi编写的监测系统应用程序,并在两者之间建立起相互访问对方数据的通信协议,故在每个数据包都加上了数据包起始或终止信息,并在接受数据端维护一个环形接收缓冲区。专门用一个线程负责接收数据,收到的数据包放入环形接收缓冲区,同时,另外一个线程不停地分析、处理缓冲区的数据。这是整个程序通信功能的实现结构。数据包的总体结构为:(一)传输速率9600bps,8位数埔立,E禺校验位,I位停止位;(二)数据包格式,内容釆用16进制。通信波特率大多为9600bps。每个从站被赋予唯一的本机地址,采用主机轮询、从机应答的通信方式。主机通过发送命令帧启动一次通信,从机接收到数据后,判断呼叫地址是否和本机地址相同,若不同,则不予理睬,若相同则根据命令帧中的特征字(命令字),发送主机要求的数据帧。
二、Delphi平台上MSComm控件串行通信
(一)安装MSCommS件
在Delphi中添加MSComm控件时,首先找到下列3个文件:MSComm.srg,MSComm32.ocxftMSComm32.dep,把这3个文件拷贝到system目录下(如果安装过VisualBasic,这3个文件已经存在)。用Windows下的注册工具regsvrm32注册该ocx控件,例如:Regsvr32・”system目录\MSComm32.ocx。另外,为了能正确使用该控件,需要修改注册表相应信息。在注册表的HKEY_CLASSES_ROOT\Licenses下建f项:4250E830-6AC2-1lcf-8ADB-OOAA00C00905,该项的内容为:
kjljvjjjoquqmjjjvpqqkqmqykypoqjquou
然后启动Delphi,进入Delphi环境在Component菜单下选ImportActiveXControl,这时在列表中可以看到MicrosoftCommControl6.0选项,选中这个选项并点击Install按钮,编译后完成安装。这时在ActiveX控件页上可以看到一个图标为电话的控件,这就是MSComm控件。这样就可以像在VisualBasic中一样方便的使用MSComm控件了。
(-)MSComm控件的主要属性及事件
MSComm控件的属性较多,与本文有关的属性主要为:l.CommPort://设量并返回通信端口号;2-CommEvent:雁回通信事件或错误;3.1nput://返回并删除接收缓冲区中的数据,在设计时无效,运行时为只读;4.InputLen:濾定被Input属性读取的字符数;5.InputMode:〃设置并返回被Input属性读取的数据类型,其中ComlnputModeText以文本形式返回,而ComlnputModeBinary以二进制形式返回;6.0utput://向输出缓冲区中写入数据,在设计时无效,运行时为只读;7.Port0pen://设置并返回通信端口幵或关的状态,运行时有效;8.RThreshold://在MSComm控件设置CommEvent属性为ComnEvReceive并产生OnComm事件之前,设置并返回要接收的字符数;^Settings://设置并返回初始化参数,即波特率、奇偶校验、数据位和停止住;lO.OnComm事件://当CommEvent属性的值变化时,就产生此事件,标志发生了一个通信事件或错误。
(三)    MSCommS件串行通信方式和步骤
MSComm控件提供了两种处理通信的方式:
1.事件驱动方式。相当于一般程序中中断方式,当串口发生事件或错误时,MSComm会产生OnComm事件,用户程序可以获得该事件相应处理,这是一种处理端口通信的有效的方法,它可以利用OnComm事件捕获并处理串行通信中发生的字件或错误,实时性较强。
2.查询方式。在用户程序中设计定时器或不定时查询MSComm®件的某些属性是否发生变化,从而确定相应的处理。该方式是在程序通过查询CommEvent属性的值来判断通信过程中的事件或错误;这种方式适合于应用程序较小、实时性要求不是很高的系统中。
为此,MSComm控件串行通信的一般步骤为:(1)设置通信对象、通信端口号以及其它属性;(2)设定通信协议;(3)打开通信端口,进行数据的传送;(4)关闭通信端口。
(四)    Delphi平台上MSComm^件串行通信实现
在用Delphi语言编写的监测系统应用程序中,往往只对称重仪表的数据进行采集和显示,因此只发送请求数据命令;接受数据过程从称重仪表接收时间和其它数据信息。
在FormCreate事件过程中,对串口进行初始化:
ProcedureMForml.FormCreate(Sender:TObject)
Begin
MSComml.InBufferCount:=0//$青空接受缓冲区
MSComml.commPort:=1
MSComml.Settings-'9600,1,&r//W通信口设置为9600biVs,1位剖禺校验位、8个数位,1个停止位
MSComml.InputLen:=0    //Input读取整个缓冲区内容
MSComml.RTTireshold:=1海次接受到字符即产生OnComir#件MSComml.InputMode:=InputModeText
MSComml.PortOpen:=true    務J开串口
MSComml.DTREnable:=true傩备好数据终端
MSComml.DTSEnable:=true/牖求发送
End
结束时,关闭串口
ProcedureWIForml.ClosebuttonCSender:TObject)
MSComml.PortOpen:=false    //关闭串口
MSComml.DTREnable:=false//关闭数据终端
MSComml.DTSEnable:=false〃停止发送
End
在通信的过程中,由于某些原因不能保证每次通信都成功,在这种情况下不能简单的宣布通信失败或通信线路故障。本程序进行了通信超时设定,只有规定的时间内还未进行正常的数据通信才确定是通信故障并进行处理,从而提高了通信的容错能力。
在称重仪表回传数据时即可在主机上引发DoEvenK)函数来解决,DoEvents()函数可以将控制权转给其他任务使用,然后再跳回通信处理程序。函数中,首先判断接收数据的完整性,然后将数据一次全部读到所定义的变量参数中,根据称重仪表通信协议中定义的内容,分别取出各个字节,解析出意义,在屏幕上显示,利用在Delphi监控程序中加入DATA控件,将数据存入数据库中,使用Delphi的报表功能即可产生日报、月报及年报。
三、结束语
(—)在Delphi环境下用MSComm®件成功地设计了称重仪表与监测主机之间的串行通信程序。实践表明,Delphi力吐好的通信控制(如MSComm)来进行串行通信程序的幵发不失为一种好的方式。
(二)本实例已投入实际使用,它虽然只是针对称重仪表的协议编写的,但其方法和步骤完全适用于其它仪器设备。实践证明,这种方法是简单、可靠、可扩充好,具有一定的通用性。

 

本文源于网络转载,如有侵权,请联系删除

(此文关键词:称重仪表;称重类仪表,称重控制仪表厂家,称重仪表多少钱,称重仪表价格)
相关文章
More» 相关产品推荐

在浏览器打开×