田茂琴
摘 要: 針對OPC技術(shù)在國內(nèi)的應(yīng)用現(xiàn)狀,以O(shè)PC數(shù)據(jù)的存取規(guī)范為依據(jù),利用國產(chǎn)MultiBus?RTU系列模塊基于ModbusTCP協(xié)議對OPC數(shù)據(jù)訪問服務(wù)器進(jìn)行開發(fā),設(shè)計采用OPCMaster公司的OPC開發(fā)工具OM_OPCSvr.dll實現(xiàn)OPC數(shù)據(jù)傳輸服務(wù)器的開發(fā),通過以太網(wǎng)方式,在Modbus設(shè)備和OPC客戶端之間提供數(shù)據(jù)交換通道。通過對OPC數(shù)據(jù)訪問服務(wù)器結(jié)構(gòu)和操作流程的設(shè)計,構(gòu)建了服務(wù)器的功能框架?;贛odbus TCP OPC服務(wù)器和Windows平臺,通過對服務(wù)器進(jìn)行初始化,對通信驅(qū)動模塊和用戶界面進(jìn)行規(guī)劃,進(jìn)而對OPC數(shù)據(jù)訪問服務(wù)器進(jìn)行了詳細(xì)的實現(xiàn)。通過進(jìn)一步的OPC服務(wù)器測試發(fā)現(xiàn),該服務(wù)器具有可靠的穩(wěn)定性,能切實地節(jié)約成本,減少通信驅(qū)動數(shù)量,并縮短開發(fā)周期。
關(guān)鍵詞: OPC服務(wù)器; COM/DCOM; 數(shù)據(jù)訪問; Modbus TCP
中圖分類號: TN911?34; TP273.5 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2015)21?0072?04
Research and application of OPC data access server
TIAN Maoqin
(Tongren Radio & TV University, Tongren 554300, China)
Abstract: Aiming at the domestic application status of OPC technology, and taking the access specification of OPC data as the basis, the OPC data access server was developed by using domestic MultiBus?RTU series module based on ModbusTCP protocol. The OPC development tool OM_OPCSvr.dll created by OPCMaster company is adopted to achieve the development of OPC data access server. The exchange channels of data are provided between the Modbus device and the OPC client with the Ethernet. The function framework of the server was constructed by designing the structure and operation process of OPC data access server. Based on the Modbus TCP OPC server and the Windows platform, the communication driver module and user interface were planned by initializing the server, and then the OPC data access server was realized. The further test to the OPC server found that the server has reliable stability, and can save the cost effectively, reduce the number of communication driver, and shorten the development cycle.
Keywords: OPC server; COM/DCOM; data access; Modbus TCP
0 引 言
計算機(jī)技術(shù)的不斷發(fā)展,使得應(yīng)用于工業(yè)控制領(lǐng)域的軟件與硬件設(shè)備種類越來越豐富[1],由于沒有統(tǒng)一的通信接口標(biāo)準(zhǔn),難以方便高效地實現(xiàn)來自不同廠商的應(yīng)用程序與硬件設(shè)備之間的數(shù)據(jù)通信,因此嚴(yán)重制約了工控領(lǐng)域的拓展。OPC技術(shù)的出現(xiàn)使來自不同數(shù)據(jù)源的數(shù)據(jù)與運行在各種平臺上的應(yīng)用軟件能夠順利地集成在一起[2]。目前,OPC技術(shù)已經(jīng)成為工業(yè)控制中系統(tǒng)集成與數(shù)據(jù)交換的重要工具。近年來國內(nèi)不少高等院校、研究院所和軟硬件開發(fā)商都對OPC技術(shù)進(jìn)行了研究和開發(fā)應(yīng)用。為了進(jìn)一步地節(jié)約成本,減少通信驅(qū)動數(shù)量,縮短開發(fā)周期,針對嵌入式多總線RTU硬件產(chǎn)品開發(fā)基于Modbus TCP通信協(xié)議的OPC數(shù)據(jù)訪問服務(wù)器變得非常具有現(xiàn)實意義。
1 OPC數(shù)據(jù)訪問規(guī)范
OPC技術(shù)是COM在工業(yè)領(lǐng)域的一種特殊應(yīng)用,針對敏感度高的實時數(shù)據(jù),可以將其從實時數(shù)據(jù)中分離。從COM的角度分析,OPC規(guī)范實質(zhì)就是定義了一些用于實時數(shù)據(jù)存取、事件報警處理、歷史數(shù)據(jù)存取等的COM對象和接口[3]。
基于OPC軟總線的過程控制系統(tǒng)(PCS)的基本架構(gòu)中,整個PCS以O(shè)PC DA服務(wù)器為中心,以從OPC DA服務(wù)器上獲得的實時數(shù)據(jù)為基礎(chǔ),OPC AE服務(wù)器根據(jù)用戶的設(shè)置進(jìn)行相關(guān)邏輯分析和處理,可以產(chǎn)生相應(yīng)的事件/報警消息發(fā)送到客戶端;OPC HAD服務(wù)器將按照用戶設(shè)置要求進(jìn)行保存歷史數(shù)據(jù),方便客戶端用戶進(jìn)行查詢和分析統(tǒng)計過程數(shù)據(jù)在過去的時間段內(nèi)的變化情況;OPC DX服務(wù)器根據(jù)實際現(xiàn)場需要可以將多個OPC DA服務(wù)器的數(shù)據(jù)聯(lián)系起來,便于多個OPC DA服務(wù)器之間進(jìn)行數(shù)據(jù)交換[4];OPC XML DA服務(wù)器通過將實時數(shù)據(jù)轉(zhuǎn)換成XML文本,以提供將過程數(shù)據(jù)發(fā)布到互聯(lián)網(wǎng)的功能,實現(xiàn)更大范圍內(nèi)的數(shù)據(jù)共享;OPC Security服務(wù)器提供了訪問數(shù)據(jù)的安全訪問機(jī)制,可以對整個PCS中的數(shù)據(jù)進(jìn)行安全保護(hù)。
OPC數(shù)據(jù)訪問規(guī)范是OPC協(xié)議族中的核心和基礎(chǔ),其他所有的OPC相關(guān)規(guī)范都是以O(shè)PC DA規(guī)范為基礎(chǔ)進(jìn)行擴(kuò)展制定的。本文主要參照OPC Data Access Specification Version 3.0研究和應(yīng)用OPC DA服務(wù)器。
只要遵循OPC規(guī)范實現(xiàn)OPC接口的客戶應(yīng)用端,即可無縫連接OPC服務(wù)器進(jìn)行數(shù)據(jù)通信,一個客戶應(yīng)用端可以同時訪問多個OPC服務(wù)器,而一個OPC服務(wù)器也可以被多個OPC客戶應(yīng)用端訪問,根據(jù)OPC服務(wù)器提供的功能可以知道OPC服務(wù)器內(nèi)部結(jié)構(gòu)大致分為3部分:設(shè)備驅(qū)動模塊、數(shù)據(jù)管理模塊和數(shù)據(jù)調(diào)度與分發(fā)模塊。如圖1所示。
OPC服務(wù)器支持多客戶并發(fā)訪問及數(shù)據(jù)存取請求,數(shù)據(jù)調(diào)度與分發(fā)模塊對客戶的訪問及數(shù)據(jù)存取請求進(jìn)行協(xié)調(diào)和管理,然后將具體數(shù)據(jù)存取請求交給數(shù)據(jù)管理模塊,數(shù)據(jù)管理模塊將數(shù)據(jù)存取請求傳遞給設(shè)備驅(qū)動模塊,設(shè)備驅(qū)動模塊將數(shù)據(jù)存取請求轉(zhuǎn)換為讀寫設(shè)備消息,對設(shè)備進(jìn)行具體的讀寫操作,操作完成后將數(shù)據(jù)返回給數(shù)據(jù)管理模塊,數(shù)據(jù)管理模塊再更新數(shù)據(jù)緩沖區(qū)中對應(yīng)的數(shù)據(jù),并將更新的數(shù)據(jù)返回給各個請求數(shù)據(jù)的客戶端。
OPC數(shù)據(jù)訪問規(guī)范中定義了OPC客戶端和服務(wù)器如何交互數(shù)據(jù)和數(shù)據(jù)存儲結(jié)構(gòu)[5],OPC服務(wù)器中的數(shù)據(jù)調(diào)度與分發(fā)模塊負(fù)責(zé)與OPC客戶端進(jìn)行數(shù)據(jù)交互,其模塊實現(xiàn)必須與OPC規(guī)范規(guī)定保持一致。數(shù)據(jù)管理模塊與設(shè)備驅(qū)動模塊由于針對不同的設(shè)備,讀寫數(shù)據(jù)方式和獲取的數(shù)據(jù)就不同,因此需要根據(jù)具體需求開發(fā)實現(xiàn)。因此OPC服務(wù)器的具體實現(xiàn)會由于不同的應(yīng)用而有所不同。
通常的數(shù)據(jù)采集應(yīng)用的是主從式的應(yīng)用結(jié)構(gòu),客戶周期性地查詢服務(wù)器的數(shù)據(jù)。在這種應(yīng)用模式下,增加了系統(tǒng)的額外開銷,而且效率比較低。基于COM的OPC支持的雙向通信機(jī)制,具有事件驅(qū)動功能,當(dāng)OPC服務(wù)器的數(shù)據(jù)發(fā)生變化時,能夠自動通知OPC客戶,客戶可以從周期性的輪詢中脫離出來,從而大大提高了效率,降低了系統(tǒng)負(fù)荷。OPC規(guī)范主要定義了3種數(shù)據(jù)訪問方式:同步通信、異步通信和數(shù)據(jù)訂閱。
2 OPC服務(wù)器設(shè)計
由于COM規(guī)范一般以C++語言描述,所以通常采用VC++開發(fā)OPC數(shù)據(jù)訪問服務(wù)器[6]。在本文中,基于Windows的Dot NET平臺,利用OPC接口動態(tài)庫來開發(fā)OPC服務(wù)器。本文實現(xiàn)的OPC數(shù)據(jù)訪問服務(wù)器要完成對ModbusTCP設(shè)備的數(shù)據(jù)采集功能,提供OPC數(shù)據(jù)存取規(guī)定的定制接口,同時通過數(shù)據(jù)存取區(qū)將設(shè)備數(shù)據(jù)與OPC接口聯(lián)系起來。如圖2所示的OPC數(shù)據(jù)存取服務(wù)器總體結(jié)構(gòu),各個功能模塊之間相對獨立又相互協(xié)作,形成了一個有機(jī)整體。
本文設(shè)計的OPC數(shù)據(jù)存取服務(wù)器屬于進(jìn)程外服務(wù)器,擁有獨立的進(jìn)程空間,與客戶進(jìn)行數(shù)據(jù)交換時穩(wěn)定性高,同時提供了用戶友好的人機(jī)界面,便于用戶的自定義組態(tài)操作。OPC對象接口模塊通過數(shù)據(jù)存儲區(qū)間接與設(shè)備驅(qū)動相互聯(lián)系,以獲取數(shù)據(jù)存儲區(qū)內(nèi)的數(shù)據(jù)或直接訪問設(shè)備獲取過程數(shù)據(jù)。OPC客戶程序通過Group對象訪問數(shù)據(jù)存儲區(qū)中的數(shù)據(jù)項,設(shè)備通信驅(qū)動周期性將最新的設(shè)備過程數(shù)據(jù)寫入到數(shù)據(jù)存儲區(qū)內(nèi)。客戶通過Server對象的IOPCBrowse接口可以瀏覽數(shù)據(jù)存儲區(qū)內(nèi)所有數(shù)據(jù)項Item對象的相關(guān)屬性。
針對某國產(chǎn)的硬件設(shè)備多總線RTU,硬件設(shè)備通信模塊實現(xiàn)了標(biāo)準(zhǔn)的MdbusTCP通信協(xié)議,可以和實現(xiàn)標(biāo)準(zhǔn)的ModbusTCP設(shè)備無縫互聯(lián)通信,簡單方便地獲取硬件設(shè)備的過程數(shù)據(jù)。在實際應(yīng)用中,此處采用了OPCMaster的OM_OPCSvr.dll OPC接口動態(tài)庫工具來實現(xiàn)OPC接口模塊部分,ModbusTCP是Modbus協(xié)議的網(wǎng)絡(luò)協(xié)議,TCP端口號為502。ModbusTCP在ModbusRTU協(xié)議前,增加了6個字節(jié)的協(xié)議頭MBAP[7],同時去掉了2 B的CRC16校驗和協(xié)議格式。通信驅(qū)動模塊主要使用6種標(biāo)準(zhǔn)的Modbus功能碼。當(dāng)主設(shè)備向從機(jī)發(fā)送請求,希望獲取一個正常響應(yīng),但是可能由于各種原因,從機(jī)返回一個異常消息幀。因此需要通過異常碼來標(biāo)識發(fā)生了什么錯誤導(dǎo)致了異常響應(yīng)。本Modbus TCP協(xié)議通信驅(qū)動模塊屬Modbus Slave,需要對設(shè)備返回的Modbus TCP消息幀進(jìn)行MBAP驗證、請求數(shù)據(jù)獲取。圖3是對設(shè)備進(jìn)行讀取數(shù)據(jù)的流程。
為了方便用戶操作和使用OPC服務(wù)器,提高人機(jī)交互性,本文設(shè)計的OPC服務(wù)器設(shè)計了類Windows窗口的用戶界面。通過將屬性列表來對數(shù)據(jù)項進(jìn)行組織和標(biāo)識,通過屬性設(shè)置對話框?qū)?shù)據(jù)項與硬件設(shè)備的數(shù)據(jù)綁定,并將數(shù)據(jù)存儲區(qū)與硬件通信接口聯(lián)系起來,進(jìn)而可以實現(xiàn)用戶自定義組態(tài)功能。另外還需要將數(shù)據(jù)項的屬性和設(shè)備設(shè)置參數(shù)保存到配置文件中,便于下次在OPC服務(wù)器程序啟動運行時,可以自動打開組態(tài)配置文件完成初始設(shè)置。
3 OPC服務(wù)器的實現(xiàn)
本文設(shè)計的基于Modbus TCP OPC服務(wù)器基于Windows平臺開發(fā),開發(fā)環(huán)境詳細(xì)列表見表1和圖4。
OPC服務(wù)器程序的基礎(chǔ)代碼創(chuàng)建完成后,通過調(diào)用Init OPCSvr(byte *pSvrCLSID, bool bExeSvr,DWord dwCoInit)對OPC服務(wù)器的CLSID、程序應(yīng)用模型和初始化COM庫的線程模式進(jìn)行初始化設(shè)置。將數(shù)據(jù)項用樹形結(jié)構(gòu)標(biāo)識,然后設(shè)計數(shù)據(jù)項和硬件設(shè)備的數(shù)據(jù)綁定設(shè)置界面以及實時顯示數(shù)據(jù)項列表界面,并將數(shù)據(jù)存儲區(qū)與硬件通信接口聯(lián)系起來,實現(xiàn)用戶自定義組態(tài)功能。設(shè)計用戶界面主要包括6部分,分別是:菜單欄、工具欄、設(shè)備樹形列表、標(biāo)簽列表、信息列表和狀態(tài)欄。借助Dot Net4.0平臺的Socket類定義封裝了一個TcpSocket TCP通信類,通過此類可以完成TCP連接斷開、發(fā)送接收數(shù)據(jù)和發(fā)現(xiàn)斷開自動重連功能。
在OPC服務(wù)器程序關(guān)閉時需要將數(shù)據(jù)項的屬性以及硬件設(shè)備設(shè)置的參數(shù)作為組態(tài)配置文件保存起來,便于下次OPC服務(wù)器運行時能自動調(diào)入組態(tài)配置文件,自動完成初始設(shè)置。利用DotNet 4.0的序列化和反序列化技術(shù),可以將數(shù)據(jù)對象序列化到文件中和將文件反序列化到數(shù)據(jù)對象[8]。
經(jīng)過用戶自定義組態(tài)配置好數(shù)據(jù)點后,可以運行OPC服務(wù)器開始輪詢設(shè)備數(shù)據(jù),將實時獲取的數(shù)據(jù)更新到數(shù)據(jù)緩沖區(qū)內(nèi)。根據(jù)OPC服務(wù)器數(shù)據(jù)結(jié)構(gòu)關(guān)系,每一個設(shè)備對應(yīng)一個輪詢線程,這樣OPC服務(wù)器可以對多個設(shè)備獨立地讀寫設(shè)備數(shù)據(jù)。其中輪詢線程是由Back Groud Monitor類實現(xiàn)的。
4 OPC服務(wù)器的測試結(jié)果與分析
如表2所示,OPC服務(wù)器的測試環(huán)境包括軟件環(huán)境和硬件環(huán)境。圖5顯示了測試環(huán)境的結(jié)構(gòu)圖,在一臺普通操作系統(tǒng)為Windosw XP的普通PC機(jī)上依次安裝SIEMENS WinCC6.2,KEPware測試客戶端和Modbus Slave數(shù)據(jù)模擬器。通過普通雙絞線將PC與交換機(jī)連接,一臺MultiBus?RTU網(wǎng)口直接連接交換機(jī),另一臺MultiBus?RTU的RS 485口通過MultiBus網(wǎng)關(guān)與交換機(jī)連接。
4.1 OPC服務(wù)器功能測試
打開KEPware測試客戶端,選中“Lensys.Modbus.TCP.DA.3”節(jié)點,可建立與OPC服務(wù)器的通信連接。在Lensys.Modbus. TCP.DA.3”節(jié)點中可查看OPC服務(wù)器的屬性,打開WinCC項目管理器WinCC Exploer,點擊新建菜單,創(chuàng)建一個單用戶測試項目,項目名稱為OPCServerTest。創(chuàng)建一個如圖6所示的OPC服務(wù)器測試界面。其中MultiBus?RTU1#直接連接交換機(jī),MultiBus?RTU 2#通過MultiBus網(wǎng)關(guān)間接連接交換機(jī)。分別獲取MultiBus?RTU的4類共8個數(shù)據(jù),具體含義參見表3。
4.2 OPC服務(wù)器性能測試
OPC服務(wù)器的性能測試需要大量數(shù)據(jù)源才能進(jìn)行,由于MultiBus?RTU可以提供的數(shù)據(jù)量有限,因此利用Modbus Slave提供數(shù)據(jù)源。通過Modbus Slave,可以模擬一個通信協(xié)議為Modbus的設(shè)備,這個設(shè)備可以包含無限量的數(shù)據(jù)。打開一個Modbus Slaves進(jìn)程,配置設(shè)備ID為1,通信參數(shù)Port為502,IP默認(rèn)為本機(jī)地址。然后依次配置如表4所示的數(shù)據(jù)點。
按照上述配置,依次打開10個Modbus Slave進(jìn)程,此時有了10個模擬設(shè)備,每個模擬設(shè)備包括4類數(shù)據(jù),每類數(shù)據(jù)數(shù)量為25個,即共計1 000個數(shù)據(jù)點。
經(jīng)過上述Modbus數(shù)據(jù)源配置、OPC服務(wù)器配置,首先將10個模擬設(shè)備(Modbus Slave)進(jìn)行本地TCP綁定,作為數(shù)據(jù)提供源;其次點擊OPC服務(wù)器界面工具欄中的“啟動服務(wù)器”按鈕,則OPC服務(wù)器開始存取10個模擬設(shè)備數(shù)據(jù),此時觀察OPC服務(wù)器下側(cè)的信息列表,是否有警告或錯誤信息,打開Windows任務(wù)管理器,觀察OPC服務(wù)器進(jìn)程的CPU和內(nèi)存消耗。經(jīng)過1天時間的測試,無任何警告或錯誤信息,OPC服務(wù)器進(jìn)程的CPU占用保持在3%左右,內(nèi)存消耗保持在8 MB左右。
5 結(jié) 論
本文基于Modbus TCP協(xié)議的OPC數(shù)據(jù)存取服務(wù),在對市場進(jìn)行深入調(diào)研的基礎(chǔ)上,結(jié)合國產(chǎn)嵌入式產(chǎn)品工程應(yīng)用的現(xiàn)狀,開發(fā)了OPC數(shù)據(jù)存取服務(wù)器。通過OPC數(shù)據(jù)存取服務(wù)器實時獲取設(shè)備過程數(shù)據(jù),利用國內(nèi)外現(xiàn)有SCADA的OPC客戶端接口,輕松地實現(xiàn)了與某國產(chǎn)MultiBus?RTU互聯(lián)通信。不僅利用了OPC的技術(shù)優(yōu)勢,如訪問速度和穩(wěn)定性,還節(jié)約了成本,減少了通信驅(qū)動數(shù)量。鑒于Windows在工控領(lǐng)域的成熟度和穩(wěn)定性,以及Dot Net FrameWork的跨平臺性,基于Dot Net4.0平臺封裝OPC接口,通過編程實現(xiàn)了Modbus TCP通信協(xié)議以及良好的人機(jī)交互界面,并通過了功能測試和性能測試。
參考文獻(xiàn)
[1] 李紹成,馬連祥.面向PLC的OPC服務(wù)器設(shè)計與開發(fā)[J].制造業(yè)自動化,2011,33(12):19?21.
[2] 望荊沙.基于OPC DA 3.0的OPC服務(wù)器與客戶端的研究與實現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[3] 孫緒潔,梁嵐珍.基于TLSvrRDK.dll技術(shù)的電廠燃煤數(shù)據(jù)OPC服務(wù)器研究[J].化工自動化及儀表,2011(12):1461?1465.
[4] 劉瑞祥,倪福生,顧明.基于VC++和OPC的冗余監(jiān)控程序設(shè)計[J].機(jī)電工程,2012,31(8):1094?1097.
[5] 楊之樂,鄭學(xué)理,蘇偉,等.工業(yè)無線網(wǎng)絡(luò)測控系統(tǒng)OPC數(shù)據(jù)服務(wù)器的設(shè)計實現(xiàn)[J].計算機(jī)測量與控制,2013,21(4):865?869.
[6] 呂亞鋒,成立存.基于Modbus TCP/IP協(xié)議的海上油田發(fā)電機(jī)組網(wǎng)絡(luò)監(jiān)控系統(tǒng)[J].北京聯(lián)合大學(xué)學(xué)報:自然科學(xué)版,2014,28(3):389?393.
[7] 黃禮超,巫茜.基于OPC的工控系統(tǒng)軟件集成[J].重慶理工大學(xué)學(xué)報:自然科學(xué)版,2012(3):109?113.
[8] 張立華,張文仲,王釗,等.基于OPC技術(shù)的多平臺數(shù)據(jù)共享技術(shù)在選煤廠中的應(yīng)用[J].電子技術(shù),2012(10):57?59.