基于VB的MCGS与涡轮流量计通信实现

摘要: 针对目前 MCGS 组态软件与智能化仪器仪表通信时存在的问题,基于对象链接与嵌入( Object Linking and Em-bedding,OLE) 技术,研究了 MCGS 与 Visual Basic( VB) 数据交换的方法,实现了 MCGS 与涡轮流量计的实时通信,间接扩展了 MCGS 的驱动程序。目前该方法已应用于实际项目中,运行结果表明,基于 VB 的 MCGS 和流量计通信具有良好的实时性、稳定性和可靠性。

0、引言:
  计算机测控系统通常需要上位计算机与工业现场各种仪器仪表进行通信,及时了解现场仪器仪表的运行情况,实现对现场状态的实时监控[1]。
  MCGS 组态软件作为工业过程控制和实时监测领域的通用计算机系统软件,由于其具有功能完善、操作简便、可视性好、可维护性强、采用开放式结构可与广泛的数据源交换数据等特点而得到越来越广泛的应用。MCGS 为数据采集和控制提供了底层设备驱动程序,允许它直接与大多数智能设备进行通信。然而,MCGS 提供的设备驱动程序主要是针对目前市场上一些主流控制器或其他智能设备,在实际应用中,或因为所用设备的特殊性,或因为实际工程需要,其设备驱动功能总会有些不尽人意[2],甚至没有提供某种智能设备的驱动程序,这给用户使用该软件实现与某些智能设备通信带来诸多不便
  为了解决上述问题,常用的方法有 2 种: 向厂家购买 MCGS开发工具包,按照 MCGS 提供的规范设备驱动程序接口,用户根据自己的需求开发设备驱动程序; 采用 MCGS 提供的OLE 技术,用户利用其他支持 OLE 技术的通用软件诸如 VB、VC、Delphi 等开发应用程序操作 MCGS 中的对象,利用这些通用软件提供的数据通讯和处理功能编写数据通讯程序并嵌入到 MCGS 监控系统中,实现数据交换。
  VB 是一款简单、易用的可视化编程语言,开发者可以方便地使用其提供的组件快速建立应用程序。利用 VB 支持的 OLE技术可以方便地开发出 Windows 环境下的 OLE 通信程序。因此文中给出了一种基于 VB 和 OLE 技术的上位计算机与流量计通信方法,解决了 MCGS 与流量计通信时存在的问题,实现了 MCGS 对流量计的实时监控。

1、系统的基本结构:
  基于 MCGS 和 VB 的涡轮流量计实时监控系统主要由工控机、RS - 232 通信电缆、RS - 485 /RS - 232 适配器、流量计、打印机、投影仪等组成。

  系统流量计选用 QWLJ 系列气体涡轮流量计。QWLJ 系列流量计集流量传感器、温度传感器、压力传感器和智能流量积算仪于一体,可实现流量的温压补偿和压缩因子修正,直接显示标准状态下的体积流量。多台流量计通过 RS - 485 接口总线连接,经 RS - 485 /RS - 232 适配器连接到上位机的 COM 口。QWLJ 系列流量计支持厂家自定义通信协议和 MODBUS 通信协议,考虑到将来的扩展开发和组网通信,
系统选用 MODBUS协议实现上位机与流量计通信,协议具体格式如表 1 和表 2 所示。上位机通过发送命令帧对流量计指定寄存器的读写获得流量、压力、温度等信息,这里只涉及到功能码 03( 读取保持寄存器) 和功能码 16( 预置多寄存器) 。

2、系统的工作原理:
  MCGS 组态软件与涡轮流量计的通信原理如图 1 所示。系统通信包括 2 部分: MCGS 与 VB 程序的 OLE 通信; VB 程序通过 RS - 232 /RS - 485 与现场流量计的通信。
表 1 上位机发送命令帧格式

表 1 上位机发送命令帧格式
表 2 流量计回送消息帧格式

表 2 流量计回送消息帧格式
图 1 MCGS 组态软件与涡轮流量计通信原理
图 1 MCGS 组态软件与涡轮流量计通信原理

2. 1、MCGS 与 VB 的 OLE 通信:
  实时数据库是 MCGS 的核心,MCGS 把整个实时数据库作为一个对象封装起来,提供一系列的方法和属性,外部程序通过这些方法和属性对 MCGS 进行各种操作[2]。MCGS 运行起来后,实时数据库对象被暴露出来,通过 OLE 自动化操作可以取得实时数据库对象,再利用实时数据库对象的 Set Value From-Name 方法,即可实现外部程序直接刷新 MCGS 实时数据库[3]。以下为 MCGS 与 VB 实现 OLE 通信的部分程序。
Dim Dat Obj As ObjectPrivate Sub Form_Load( )Timer1. Enabled = TrueTimer2. Enabled = True………………On Error Resume NextSet Dat Obj = Get Object( ,
”Mcgs Run. Data Centre)If Err ThenMsg Box ( " 请先启动 MCGS 运行环境! " )EndEnd IfEnd SubPrivate Sub Timer1_Timer( )Dim msg As String,
Value As VariantFor i = 0 To 19msg =“Dat” + Format $ ( i,
“00”)Value = Val( Text2( i) . Text)Dat Obj. Set Value From Name msg,
ValueNext iEnd Sub

2. 2、VB 与流量计通信

  该系统采用一主多从通信方式,其中上位计算机作为主机,各流量计作为从机。主机采用查询方式接收从机发送过来的数据。为了实现多机无冲突可靠通信,每台从机必须有的地址,可以通过流量计面板的菜单模式下进行地址设置。在VB 环境下编制的通信程序,主要用到了 MSComm 控件,其提供了非常丰富的属性和方法,已将通信的大部分底层操作封装在控件内部,为实现 VB 与各种设备进行通信提供了一种有效径。文中采用模块化编程方法编写数据通讯程序,实现 VB 与流量计间的通信。由于篇幅所限,只介绍 VB 与 1#流量计通信的主要程序模块:
( 1) 程序初始化模块。主要完成串口的选择、波特率、数据位、校验位设置、打开串口等工作。
( 2) 发送数据模块。有手动发送和自动发送命令帧 2 种方式。手动发送方式功能主要实现预置多寄存器的值,主要是设置参数上、下限值及报警值,功能码为 16; 自动发送方式功能主要实现读取保持寄存器的值,主要是读取压力、温度、流量等信息,功能码为 03。自动发送方式下程序的实现采用定时触发方式。当上位机发送完命令帧,延时等待,如在规定的时间内,流量计没有应答,上位机重发此命令帧,
这里设置为 3 次呼叫,若都无应答则给出报警提示。部分程序如下:Private Sub Timer2_Timer( )Dim CRCDim bt CRCHi As Byte,bt CRCLo As ByteRe Dim Receive( 8)Re Dim Send( 7)Send( 0) = 1' 设备地址Send( 1) = 3' 功能码Send( 2) = 1' 回送累计流量低位………………CRC = Cal CRC16Fast( Send,
6,
bt CRCLo,
bt CRCHi) 'modbus 校验Send( 6) = bt CRCLoSend( 7) = bt CRCHiMSComm1. Output = SendReceive Module'接收模块Send( 2) = 10'回送累计流量高位………………End Sub
( 3) 接收数据模块。通过查询方式来完成数据的接收,即在程序中定时查询 MSComm 控件的 In Buffer Count 属性是否发生变化。如果串口接收到数据,且数据缓冲区的内容等于设定的字节数时,取出完整的通讯数据帧。在数据处理过程中,首先进行 CRC 校验,若不正确,丢弃本帧应答数据,上位机重发命令帧。否则对数据进行处理,并将处理结果与 MCGS 实时数据库对象进行 OLE 数据交换。部分程序如下:Sub Receive Module ( )Dim Count As Integerdelay_time = 0. 2delay_start = TimerWith MSComm1DoDo EventsLoop Until . In Buffer Count = 8 Or Timer > delay_start + delay_time. Input Len = 8Receive = . InputOn Error Resume NextIf Receive( 1) = Send( 1) Then………………For Count = 0 To 8 Text1( Count) . Text = Receive( Count)Next CountEnd IfEnd With…………End Sub
3、结束语:
  通过 MCGS 与 VB 间的 OLE 通信及 VB 与涡轮流量计间的串口通信,利用 VB 提供的强大的数据通讯和处理功能实现数据采集、处理及控制,并利用 MCGS 组态软件丰富的图形化来实现界面设计,将两种方法结合起来则是一种很好的选择。目前该方法已应用于天然气气化输配监控系统中,运行结果表明,基于 VB 的 MCGS 和涡轮流量计间的通信具有良好的实时性、稳定性和可靠性。解决了 MCGS 与 QWLJ 系列涡轮流量计的通信问题,实现了 MCGS 对涡轮流量计的实时监控。

相关新闻

返回顶部
0517-8699 6066 欢迎来电咨询
Hello. Add your message here.