基于VB的MCGS與渦輪流量計(jì)通信實(shí)現(xiàn)
摘要: 針對(duì)目前 MCGS 組態(tài)軟件與智能化儀器儀表通信時(shí)存在的問(wèn)題,基于對(duì)象鏈接與嵌入( Object Linking and Em-bedding,OLE) 技術(shù),研究了 MCGS 與 Visual Basic( VB) 數(shù)據(jù)交換的方法,實(shí)現(xiàn)了 MCGS 與渦輪流量計(jì)的實(shí)時(shí)通信,間接擴(kuò)展了 MCGS 的驅(qū)動(dòng)程序。目前該方法已應(yīng)用于實(shí)際項(xiàng)目中,運(yùn)行結(jié)果表明,基于 VB 的 MCGS 和流量計(jì)通信具有良好的實(shí)時(shí)性、穩(wěn)定性和可靠性。
0、引言:
計(jì)算機(jī)測(cè)控系統(tǒng)通常需要上位計(jì)算機(jī)與工業(yè)現(xiàn)場(chǎng)各種儀器儀表進(jìn)行通信,及時(shí)了解現(xiàn)場(chǎng)儀器儀表的運(yùn)行情況,實(shí)現(xiàn)對(duì)現(xiàn)場(chǎng)狀態(tài)的實(shí)時(shí)監(jiān)控[1]。
計(jì)算機(jī)測(cè)控系統(tǒng)通常需要上位計(jì)算機(jī)與工業(yè)現(xiàn)場(chǎng)各種儀器儀表進(jìn)行通信,及時(shí)了解現(xiàn)場(chǎng)儀器儀表的運(yùn)行情況,實(shí)現(xiàn)對(duì)現(xiàn)場(chǎng)狀態(tài)的實(shí)時(shí)監(jiān)控[1]。
MCGS 組態(tài)軟件作為工業(yè)過(guò)程控制和實(shí)時(shí)監(jiān)測(cè)領(lǐng)域的通用計(jì)算機(jī)系統(tǒng)軟件,由于其具有功能完善、操作簡(jiǎn)便、可視性好、可維護(hù)性強(qiáng)、采用開(kāi)放式結(jié)構(gòu)可與廣泛的數(shù)據(jù)源交換數(shù)據(jù)等特點(diǎn)而得到越來(lái)越廣泛的應(yīng)用。MCGS 為數(shù)據(jù)采集和控制提供了底層設(shè)備驅(qū)動(dòng)程序,允許它直接與大多數(shù)智能設(shè)備進(jìn)行通信。然而,MCGS 提供的設(shè)備驅(qū)動(dòng)程序主要是針對(duì)目前市場(chǎng)上一些主流控制器或其他智能設(shè)備,在實(shí)際應(yīng)用中,或因?yàn)樗迷O(shè)備的特殊性,或因?yàn)閷?shí)際工程需要,其設(shè)備驅(qū)動(dòng)功能總會(huì)有些不盡人意[2],甚至沒(méi)有提供某種智能設(shè)備的驅(qū)動(dòng)程序,這給用戶使用該軟件實(shí)現(xiàn)與某些智能設(shè)備通信帶來(lái)諸多不便
為了解決上述問(wèn)題,常用的方法有 2 種: 向廠家購(gòu)買(mǎi) MCGS開(kāi)發(fā)工具包,按照 MCGS 提供的規(guī)范設(shè)備驅(qū)動(dòng)程序接口,用戶根據(jù)自己的需求開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序; 采用 MCGS 提供的OLE 技術(shù),用戶利用其他支持 OLE 技術(shù)的通用軟件諸如 VB、VC、Delphi 等開(kāi)發(fā)應(yīng)用程序操作 MCGS 中的對(duì)象,利用這些通用軟件提供的數(shù)據(jù)通訊和處理功能編寫(xiě)數(shù)據(jù)通訊程序并嵌入到 MCGS 監(jiān)控系統(tǒng)中,實(shí)現(xiàn)數(shù)據(jù)交換。
VB 是一款簡(jiǎn)單、易用的可視化編程語(yǔ)言,開(kāi)發(fā)者可以方便地使用其提供的組件快速建立應(yīng)用程序。利用 VB 支持的 OLE技術(shù)可以方便地開(kāi)發(fā)出 Windows 環(huán)境下的 OLE 通信程序。因此文中給出了一種基于 VB 和 OLE 技術(shù)的上位計(jì)算機(jī)與流量計(jì)通信方法,解決了 MCGS 與流量計(jì)通信時(shí)存在的問(wèn)題,實(shí)現(xiàn)了 MCGS 對(duì)流量計(jì)的實(shí)時(shí)監(jiān)控。
1、系統(tǒng)的基本結(jié)構(gòu):
基于 MCGS 和 VB 的渦輪流量計(jì)實(shí)時(shí)監(jiān)控系統(tǒng)主要由工控機(jī)、RS - 232 通信電纜、RS - 485 /RS - 232 適配器、流量計(jì)、打印機(jī)、投影儀等組成。
系統(tǒng)流量計(jì)選用 QWLJ 系列氣體渦輪流量計(jì)。QWLJ 系列流量計(jì)集流量傳感器、溫度傳感器、壓力傳感器和智能流量積算儀于一體,可實(shí)現(xiàn)流量的溫壓補(bǔ)償和壓縮因子修正,直接顯示標(biāo)準(zhǔn)狀態(tài)下的體積流量。多臺(tái)流量計(jì)通過(guò) RS - 485 接口總線連接,經(jīng) RS - 485 /RS - 232 適配器連接到上位機(jī)的 COM 口。QWLJ 系列流量計(jì)支持廠家自定義通信協(xié)議和 MODBUS 通信協(xié)議,考慮到將來(lái)的擴(kuò)展開(kāi)發(fā)和組網(wǎng)通信,
系統(tǒng)選用 MODBUS協(xié)議實(shí)現(xiàn)上位機(jī)與流量計(jì)通信,協(xié)議具體格式如表 1 和表 2 所示。上位機(jī)通過(guò)發(fā)送命令幀對(duì)流量計(jì)指定寄存器的讀寫(xiě)獲得流量、壓力、溫度等信息,這里只涉及到功能碼 03( 讀取保持寄存器) 和功能碼 16( 預(yù)置多寄存器) 。
2、系統(tǒng)的工作原理:
MCGS 組態(tài)軟件與渦輪流量計(jì)的通信原理如圖 1 所示。系統(tǒng)通信包括 2 部分: MCGS 與 VB 程序的 OLE 通信; VB 程序通過(guò) RS - 232 /RS - 485 與現(xiàn)場(chǎng)流量計(jì)的通信。
表 1 上位機(jī)發(fā)送命令幀格式
表 2 流量計(jì)回送消息幀格式
圖 1 MCGS 組態(tài)軟件與渦輪流量計(jì)通信原理
2. 1、MCGS 與 VB 的 OLE 通信:
實(shí)時(shí)數(shù)據(jù)庫(kù)是 MCGS 的核心,MCGS 把整個(gè)實(shí)時(shí)數(shù)據(jù)庫(kù)作為一個(gè)對(duì)象封裝起來(lái),提供一系列的方法和屬性,外部程序通過(guò)這些方法和屬性對(duì) MCGS 進(jìn)行各種操作[2]。MCGS 運(yùn)行起來(lái)后,實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象被暴露出來(lái),通過(guò) OLE 自動(dòng)化操作可以取得實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象,再利用實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象的 Set Value From-Name 方法,即可實(shí)現(xiàn)外部程序直接刷新 MCGS 實(shí)時(shí)數(shù)據(jù)庫(kù)[3]。以下為 MCGS 與 VB 實(shí)現(xiàn) OLE 通信的部分程序。
實(shí)時(shí)數(shù)據(jù)庫(kù)是 MCGS 的核心,MCGS 把整個(gè)實(shí)時(shí)數(shù)據(jù)庫(kù)作為一個(gè)對(duì)象封裝起來(lái),提供一系列的方法和屬性,外部程序通過(guò)這些方法和屬性對(duì) MCGS 進(jìn)行各種操作[2]。MCGS 運(yùn)行起來(lái)后,實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象被暴露出來(lái),通過(guò) OLE 自動(dòng)化操作可以取得實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象,再利用實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象的 Set Value From-Name 方法,即可實(shí)現(xiàn)外部程序直接刷新 MCGS 實(shí)時(shí)數(shù)據(jù)庫(kù)[3]。以下為 MCGS 與 VB 實(shí)現(xiàn) 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 ( " 請(qǐng)先啟動(dòng) MCGS 運(yùn)行環(huán)境! " )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 與流量計(jì)通信
該系統(tǒng)采用一主多從通信方式,其中上位計(jì)算機(jī)作為主機(jī),各流量計(jì)作為從機(jī)。主機(jī)采用查詢方式接收從機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù)。為了實(shí)現(xiàn)多機(jī)無(wú)沖突可靠通信,每臺(tái)從機(jī)必須有的地址,可以通過(guò)流量計(jì)面板的菜單模式下進(jìn)行地址設(shè)置。在VB 環(huán)境下編制的通信程序,主要用到了 MSComm 控件,其提供了非常豐富的屬性和方法,已將通信的大部分底層操作封裝在控件內(nèi)部,為實(shí)現(xiàn) VB 與各種設(shè)備進(jìn)行通信提供了一種有效徑。文中采用模塊化編程方法編寫(xiě)數(shù)據(jù)通訊程序,實(shí)現(xiàn) VB 與流量計(jì)間的通信。由于篇幅所限,只介紹 VB 與 1#流量計(jì)通信的主要程序模塊:
( 1) 程序初始化模塊。主要完成串口的選擇、波特率、數(shù)據(jù)位、校驗(yàn)位設(shè)置、打開(kāi)串口等工作。
( 2) 發(fā)送數(shù)據(jù)模塊。有手動(dòng)發(fā)送和自動(dòng)發(fā)送命令幀 2 種方式。手動(dòng)發(fā)送方式功能主要實(shí)現(xiàn)預(yù)置多寄存器的值,主要是設(shè)置參數(shù)上、下限值及報(bào)警值,功能碼為 16; 自動(dòng)發(fā)送方式功能主要實(shí)現(xiàn)讀取保持寄存器的值,主要是讀取壓力、溫度、流量等信息,功能碼為 03。自動(dòng)發(fā)送方式下程序的實(shí)現(xiàn)采用定時(shí)觸發(fā)方式。當(dāng)上位機(jī)發(fā)送完命令幀,延時(shí)等待,如在規(guī)定的時(shí)間內(nèi),流量計(jì)沒(méi)有應(yīng)答,上位機(jī)重發(fā)此命令幀,
( 2) 發(fā)送數(shù)據(jù)模塊。有手動(dòng)發(fā)送和自動(dòng)發(fā)送命令幀 2 種方式。手動(dòng)發(fā)送方式功能主要實(shí)現(xiàn)預(yù)置多寄存器的值,主要是設(shè)置參數(shù)上、下限值及報(bào)警值,功能碼為 16; 自動(dòng)發(fā)送方式功能主要實(shí)現(xiàn)讀取保持寄存器的值,主要是讀取壓力、溫度、流量等信息,功能碼為 03。自動(dòng)發(fā)送方式下程序的實(shí)現(xiàn)采用定時(shí)觸發(fā)方式。當(dāng)上位機(jī)發(fā)送完命令幀,延時(shí)等待,如在規(guī)定的時(shí)間內(nèi),流量計(jì)沒(méi)有應(yīng)答,上位機(jī)重發(fā)此命令幀,
這里設(shè)置為 3 次呼叫,若都無(wú)應(yīng)答則給出報(bào)警提示。部分程序如下:Private Sub Timer2_Timer( )Dim CRCDim bt CRCHi As Byte,bt CRCLo As ByteRe Dim Receive( 8)Re Dim Send( 7)Send( 0) = 1' 設(shè)備地址Send( 1) = 3' 功能碼Send( 2) = 1' 回送累計(jì)流量低位………………CRC = Cal CRC16Fast( Send,
6,
bt CRCLo,
bt CRCHi) 'modbus 校驗(yàn)Send( 6) = bt CRCLoSend( 7) = bt CRCHiMSComm1. Output = SendReceive Module'接收模塊Send( 2) = 10'回送累計(jì)流量高位………………End Sub
( 3) 接收數(shù)據(jù)模塊。通過(guò)查詢方式來(lái)完成數(shù)據(jù)的接收,即在程序中定時(shí)查詢 MSComm 控件的 In Buffer Count 屬性是否發(fā)生變化。如果串口接收到數(shù)據(jù),且數(shù)據(jù)緩沖區(qū)的內(nèi)容等于設(shè)定的字節(jié)數(shù)時(shí),取出完整的通訊數(shù)據(jù)幀。在數(shù)據(jù)處理過(guò)程中,首先進(jìn)行 CRC 校驗(yàn),若不正確,丟棄本幀應(yīng)答數(shù)據(jù),上位機(jī)重發(fā)命令幀。否則對(duì)數(shù)據(jù)進(jìn)行處理,并將處理結(jié)果與 MCGS 實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)象進(jìn)行 OLE 數(shù)據(jù)交換。部分程序如下: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、結(jié)束語(yǔ):
通過(guò) MCGS 與 VB 間的 OLE 通信及 VB 與渦輪流量計(jì)間的串口通信,利用 VB 提供的強(qiáng)大的數(shù)據(jù)通訊和處理功能實(shí)現(xiàn)數(shù)據(jù)采集、處理及控制,并利用 MCGS 組態(tài)軟件豐富的圖形化來(lái)實(shí)現(xiàn)界面設(shè)計(jì),將兩種方法結(jié)合起來(lái)則是一種很好的選擇。目前該方法已應(yīng)用于天然氣氣化輸配監(jiān)控系統(tǒng)中,運(yùn)行結(jié)果表明,基于 VB 的 MCGS 和渦輪流量計(jì)間的通信具有良好的實(shí)時(shí)性、穩(wěn)定性和可靠性。解決了 MCGS 與 QWLJ 系列渦輪流量計(jì)的通信問(wèn)題,實(shí)現(xiàn)了 MCGS 對(duì)渦輪流量計(jì)的實(shí)時(shí)監(jiān)控。
通過(guò) MCGS 與 VB 間的 OLE 通信及 VB 與渦輪流量計(jì)間的串口通信,利用 VB 提供的強(qiáng)大的數(shù)據(jù)通訊和處理功能實(shí)現(xiàn)數(shù)據(jù)采集、處理及控制,并利用 MCGS 組態(tài)軟件豐富的圖形化來(lái)實(shí)現(xiàn)界面設(shè)計(jì),將兩種方法結(jié)合起來(lái)則是一種很好的選擇。目前該方法已應(yīng)用于天然氣氣化輸配監(jiān)控系統(tǒng)中,運(yùn)行結(jié)果表明,基于 VB 的 MCGS 和渦輪流量計(jì)間的通信具有良好的實(shí)時(shí)性、穩(wěn)定性和可靠性。解決了 MCGS 與 QWLJ 系列渦輪流量計(jì)的通信問(wèn)題,實(shí)現(xiàn)了 MCGS 對(duì)渦輪流量計(jì)的實(shí)時(shí)監(jiān)控。