快速发布求购| | | | | 加微群|
关注我们
本站客户服务

线上客服更便捷

仪表网官微

扫一扫关注我们

|
客户端
仪表APP

安卓版

仪表手机版

手机访问更快捷

仪表小程序

更多流量 更易传播


您现在的位置:仪表网>成套系统>技术列表>基于组态王和VB的智能仪表实时监控系统

基于组态王和VB的智能仪表实时监控系统

2013年01月30日 14:51:55 人气: 1658 来源:
  摘要:针对目前组态王与智能化仪表通信时存在的问题,基于VB和动态数据交换技术DDE,研究了组态王与VB数据交换的方法,并采用VB可视化的编程方法,编写了上位机与智能化仪表间的串口通信程序及组态软件与VB间的OLE数据交换程序。实现了组态王与智能化仪表的实时通信,间接扩展了组态王的驱动程序库。另外,设计完成了基于组态王和VB的智能化仪表监控系统。运行结果表明,该系统具有良好的稳定性、实时性,可以较好地实现工业现场的实时监控。
  
  引言
  
  随着科学技术的不断发展,计算机测控技术在工业现场的各种测量及控制系统中应用越来越广泛。通常情况下,工业现场的各种测控系统需要上位计算机与工业现场各种智能化仪表进行通信,以便及时了解现场仪表的运行情况,从而实现对现场各种状态的实时监控。
  
  组态王软件作为一种的上位机监控软件,在许多领域的远程监控中都得到了广泛的应用。然而,组态王为数据采集和控制提供的大量底层设备驱动程序,主要是针对较大规模厂商的板卡和模块,对于较小规模厂商开发的各种智能化仪表及用户自己设计的板卡,却没有现成的驱动程序提供。因此,利用组态王与智能化仪表及用户自己设计的板卡进行通信时,往往需要用户自己开发底层的驱动程序,给用户的使用带来了诸多的不便。为了解决上述问题,组态王专门提供了一种DDE技术,能够使用户方便地实现组态王与其它支持动态数据交换的应用程序进行数据交换。
  
  VisualBasic6.0(简称VB)是一款简单、易用的可视化编程语言,可以方便地利用其提供的组件快速建立一个应用程序。因而,在各种程序开发中,VB得到了广泛的应用,同时在VB中提供的串行通信控件MSComm,为实现上位计算机与现场各种仪表进行通信提供了一种有效途径。另外,VB还支持DDE技术,利用该技术可以方便地开发出Windows环境下的DDE程序。
  
  本文针对目前组态王与智能化仪表通信时存在的问题,给出了一种基于VB和DDE技术的上位计算机与现场智能仪表进行通信的方法。开发了一套组态王与VB相结合的智能化仪表监控系统,较好地实现了工业现场各种智能化设备运行状态的实时监控。
  
  1、系统的基本结构
  
  基于组态王和VB的智能化仪表监控系统的结构如图1所示。由图1可知,该系统由上位计算机、RS2232/485通信电缆和现场各种智能化仪表构成,该系统采用的是一对多的通信链接形式,即现场多种智能化仪表挂接在RS2485总线上,然后再由RS2232/485转换器转换后,连接到上位计算机。
  
  图1系统基本原理图。
  
  2、系统的工作原理
  
  组态王与现场智能仪表的通信原理如图2所示。
  
  由图2可以看出,该系统的通信包括两部分:组态王与VB程序的DDE通信;VB程序通过RS2232/485与现场智能仪表的通信。
  
  图2组态王与现场智能仪表通信原理
  
  2.1组态王与VB的动态数据交换
  
  动态数据交换(DDE)是Windows平台上的一个完整通信协议,该协议使应用程序能彼此交换数据和发送指令。组态王和VB进行DDE通信的过程中,请求发送数据的一方称为"客户",被请求的一方称为"服务器".由于DDE通信时,交换双方需实现数据或控制命令的双向传输。因此,它们既是"客户",又是"服务器".
  
  2.1.1DDE通信时组态王的设定
  
  组态王与VB之间数据交换内容是通过三个标志名来约定的:
  
  ①应用程序名。进行DDE对话的双方的名称。
  
  组态王运行系统的程序名是View.
  
  ②主题。被讨论的数据域。组态王主题规定为tagname.
  
  ③项目。被讨论的特定数据对象。在组态王的数据词典里,定义I/O变量的同时,也定义了项目名称。
  
  为了建立DDE链接,需要在组态王的数据词典里建立一个I/O变量,并登记服务器程序的三个标志名。
  
  本系统中应用程序名为VBDDE,话题名为form1,项目名为INCREA100,程序交换的方式为标准WindowsDDE交换。
  
  2.1.2DDE通信时VB的设定
  
  在VB编程软件中,DDE连接主要是通过控件的属性和方法实现的。通常情况下,DDE通信主要是通过文本框、标签或图片框等控件进行。
  
  如果VB作为顾客,数据交换时,则需要对上述控件的LinkTopic、LinkItem、LinkMode属性进行如下设置:
  
  Control.LinkTopic=服务器程序名|主题名
  
  Control.LinkItem=项目名
  
  Control.LinkMode有四种选择:0表示关闭DDE;
  
  1表示热链接;2表示冷链接;3表示通告链接。
  
  其中,Control表示文本框、标签或图片框的名字。
  
  本系统中Control表示文本框Text1,LinkTopic设置为View|Tagname,LinkItem设置为PLC1.INCREA100,LinkMode设置为1.
  
  如果组态王作为顾客,只要把VB应用程序中提供数据窗体的LinkMode属性设置为1,其它无需再在VB中增加任何程序。
  
  在对组态王和VB的初始设置完成后,结合VB编写的与智能仪表的通信程序,分别按照服务器和顾客运行应用程序,即可实现组态王与VB的自动数据交换。
  
  2.2VB与智能仪表的通信
  
  本系统采用VB专业版的MSComm控件与VB模块化编程相结合,实现了VB与智能仪表间的通信,主要程序模块及部分程序如下:
  
  ①程序初始化模块。主要完成串口的选择、波特率、帧结构设置、打开串口等串口的设置工作。
  
  ②发送数据模块。由手动发送控制命令字和自动发送控制命令字两种方式,实现手动采集数据和自动采集数据。其中,自动发送数据方式包括一个定时器发送程序和一个定时器时间响应程序;定时器发送程序用来控制控制命令字的发送周期,定时器响应程序用来完成现场各智能化仪表地址的循环赋值及控制命令字的发送。
  
  上述模块中定时器响应程序的部分程序如下:
  
  PrivateSubTimer1Timer
  
  Timer1.Enabled=False
  
  Text_SEND.Text=""∥清空发送文本框
  
  MSComm.OutBufferCount=0∥清除发送缓冲区数据
  
  DimOutByte(1To3)AsByte
  
  IfNotMSComm.PortOpenThen∥保证串口打开
  
  MSComm.PortOpen=True
  
  EndIf
  
  '24台积算仪循环数据采集
  
  Ifk=1Then
  
  OutByte(1)=&HCA
  
  OutByte(2)=0
  
  OutByte(3)=1
  
  EndIf
  
  Ifk=2Then
  
  OutByte(1)=&HCA
  
  OutByte(2)=0
  
  OutByte(3)=2
  
  EndIf
  
  ??
  
  k=k+1
  
  Ifk>24Then
  
  k=1
  
  EndIf
  
  MSComm.InBufferCount=0∥清除接收缓冲区数据
  
  MSComm.OutBufferCount=0∥清除发送缓冲区数据
  
  MSComm.Output=OutByte
  
  Forj=1To3
  
  OutByteagain(j)=OutByte(j)
  
  Next
  
  Fori=1To50000000
  
  '延时Next
  
  EndSub
  
  ③接收数据模块。通过事件响应的方式来完成现场数据的接收。如果串口收到现场数据,并且使得数据缓冲区中的内容超过一个字节时,就会引发com2EvReceive事件。OnComm函数用来负责捕捉com2EvReceive事件,并且将发送缓冲区中的现场内容写入VB的文本框进行显示,同时与组态王进行DDE数据交换。
  
  该模块中的OnComm函数响应程序如下:
  
  PrivateSubTimer1Timer
  
  Timer1.Enabled=False
  
  Text_SEND.Text=""∥清空发送文本框
  
  MSComm.OutBufferCount=0∥清除发送缓冲区数据
  
  DimOutByte(1To3)AsByte
  
  IfNotMSComm.PortOpenThen∥保证串口打开
  
  MSComm.PortOpen=True
  
  EndIf
  
  '24台积算仪循环数据采集
  
  Ifk=1Then
  
  OutByte(1)=&HCA
  
  OutByte(2)=0
  
  OutByte(3)=1
  
  EndIf
  
  Ifk=2Then
  
  OutByte(1)=&HCA
  
  OutByte(2)=0
  
  OutByte(3)=2
  
  EndIf
  
  k=k+1
  
  Ifk>24Then
  
  k=1
  
  EndIf
  
  MSComm.InBufferCount=0∥清除接收缓冲区数据
  
  MSComm.OutBufferCount=0∥清除发送缓冲区数据
  
  MSComm.Output=OutByte
  
  Forj=1To3
  
  OutByteagain(j)=OutByte(j)
  
  Next
  
  Fori=1To50000000
  
  '延时Next
  
  EndSub
  
  PrivateSubTimer1Timer
  
  Timer1.Enabled=False
  
  Text_SEND.Text=""∥清空发送文本框
  
  MSComm.OutBufferCount=0∥清除发送缓冲区数据
  
  DimOutByte(1To3)AsByte
  
  IfNotMSComm.PortOpenThen∥保证串口打开
  
  MSComm.PortOpen=True
  
  EndIf
  
  '24台积算仪循环数据采集
  
  Ifk=1Then
  
  OutByte(1)=&HCA
  
  OutByte(2)=0
  
  OutByte(3)=1
  
  EndIf
  
  Ifk=2Then
  
  OutByte(1)=&HCA
  
  OutByte(2)=0
  
  OutByte(3)=2
  
  EndIf
  
  ??
  
  k=k+1
  
  Ifk>24Then
  
  k=1
  
  EndIf
  
  MSComm.InBufferCount=0∥清除接收缓冲区数据
  
  MSComm.OutBufferCount=0∥清除发送缓冲区数据
  
  MSComm.Output=OutByte
  
  Forj=1To3
  
  OutByteagain(j)=OutByte(j)
  
  Next
  
  Fori=1To50000000
  
  '延时Next
  
  EndSub
  
  ④容错模块。通过增加数据采集容错模块,保证数据采集的实时性、准确性,提高系统工作可靠性。
  
  ⑤数据库模块。主要利用Access数据库,实现对计算机采集数据存储、管理、分析及历史数据的查询等。
  
  ⑥其他程序模块。主要完成发送、接收文本框的清空工作等。
  
  通过上述几个模块的协调工作,就可以较好地实现VB与智能仪表间的串行通信、数据分析及历史数据查询等。
  
  3、结束语
  
  通过VB与智能仪表间的串行通信及组态王与VB间的DDE通信,并利用组态王丰富的图形和组态工艺,较好地完成了数据的实时刷新、各种曲线、报警的显示。运行结果表明,该系统具有友好的人机界面,良好的稳定性、可靠性,较好地解决了组态王与一般智能仪表间的实时通信问题,实现了组态王对智能化仪表的实时监控。
关键词: 智能化仪表
全年征稿/资讯合作 联系邮箱:ybzhan@qq.com
版权与免责声明
1、凡本网注明"来源:仪表网"的所有作品,版权均属于仪表网,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明"来源:仪表网"。违反上述声明者,本网将追究其相关法律责任。
2、本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
3、如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
4、合作、投稿、转载授权等相关事宜,请联系本网。

企业推荐

更多
联系我们

客服热线: 0571-87759942

加盟热线: 0571-87756399

媒体合作: 0571-87759945

投诉热线: 0571-87759942

关注我们
  • 下载仪表站APP

  • Ybzhan手机版

  • Ybzhan公众号

  • Ybzhan小程序