石春竹,柴處處,蘭培霖,魏利卓,王 盈
(中國電子信息產(chǎn)業(yè)集團(tuán)有限公司第六研究所,北京 100083)
鑒于制造業(yè)在推動貿(mào)易增長、提高研發(fā)創(chuàng)新水平以及促進(jìn)就業(yè)等方面起著重要作用,世界上許多國家提出了制造業(yè)國家戰(zhàn)略,中國也出臺了《中國制造2025》,將智能制造作為兩化深度融合的主攻方向[1]。國家政策大力支撐智能制造,企業(yè)紛紛進(jìn)入傳統(tǒng)制造業(yè)向智能制造轉(zhuǎn)型升級的過渡中,但由于我國制造業(yè)相較發(fā)達(dá)國家起步晚,信息化、自動化程度不高,在向智能制造轉(zhuǎn)型升級時,存在著底層數(shù)據(jù)采集困難、不同信息系統(tǒng)間數(shù)據(jù)不能交互等問題[2]。高質(zhì)、高效的數(shù)據(jù)流通成為迫切需求。
OPC UA又稱為OPC統(tǒng)一架構(gòu),它是一套集信息模型定義、服務(wù)集與通信標(biāo)準(zhǔn)為一體的標(biāo)準(zhǔn)化技術(shù)框架,既能為分布式系統(tǒng)之間進(jìn)行信息交換,也能描述一個系統(tǒng)和現(xiàn)有信息,為應(yīng)用程序之間提供了互操作的、平臺獨(dú)立的、高性能的、可拓展的、安全和可靠的通信[3],利用OPC UA技術(shù),可解決系統(tǒng)間數(shù)據(jù)交互難問題。憑借其架構(gòu)的先進(jìn)性,OPC UA已成為工業(yè)4.0在通信層實(shí)施方面唯一推薦的技術(shù)。目前許多廠家的設(shè)備和工業(yè)應(yīng)用平臺都開放了OPC UA接口,可以說,未來的工業(yè)物聯(lián)網(wǎng)中,OPC UA會是主流的通信技術(shù)。但是,目前工業(yè)現(xiàn)場已有設(shè)備有些支持OPC UA,有些不支持OPC UA,這樣在利用OPC UA技術(shù)作為工業(yè)現(xiàn)場主要通信技術(shù)時,需對不支持OPC UA的設(shè)備設(shè)計額外的通信接口。本文研發(fā)了一種通信中間件,采集底層設(shè)備數(shù)據(jù)后,將數(shù)據(jù)組態(tài)到OPC UA地址空間中,向外提供數(shù)據(jù)訪問服務(wù),這可以使不支持OPC UA的設(shè)備也能夠通過OPC UA技術(shù)與外界進(jìn)行通信。OPC UA服務(wù)器中間件應(yīng)用環(huán)境如圖1所示。各系統(tǒng)間(如SCADA、MES、ERP、PLM)皆可通過OPC UA技術(shù)傳輸數(shù)據(jù),形成互聯(lián)的網(wǎng)狀結(jié)構(gòu),打破了原有工業(yè)現(xiàn)場數(shù)據(jù)層層傳遞的限制。
圖1 利用OPC UA技術(shù)打造工業(yè)現(xiàn)場網(wǎng)狀架構(gòu)
OPC UA服務(wù)器中間件從現(xiàn)場設(shè)備中獲取狀態(tài)數(shù)據(jù),并將數(shù)據(jù)以統(tǒng)一形式存儲在OPC UA地址空間中。此中間件對外提供數(shù)據(jù)訪問服務(wù)(OPC UA與數(shù)據(jù)庫),供其他客戶端進(jìn)行設(shè)備狀態(tài)監(jiān)控與其他業(yè)務(wù)邏輯。系統(tǒng)整體架構(gòu)如圖2所示。
圖2 OPC UA服務(wù)器中間件架構(gòu)
(1)系統(tǒng)通過數(shù)據(jù)訪問服務(wù)(OPC UA Server)向集成了OPC UA Client的ERP、MES等系統(tǒng)提供數(shù)據(jù)。也可提供數(shù)據(jù)庫表,其他系統(tǒng)利用SQL語句訪問本系統(tǒng)數(shù)據(jù)庫。
(2)系統(tǒng)包括現(xiàn)場數(shù)據(jù)采集、報文解析、數(shù)據(jù)轉(zhuǎn)存、地址空間、數(shù)據(jù)顯示、配置界面、報警服務(wù)、歷史數(shù)據(jù)服務(wù)、日志服務(wù)、數(shù)據(jù)訪問服務(wù)模塊[4]。其中配置界面、現(xiàn)場數(shù)據(jù)采集、報文解析模塊完成從底層設(shè)備中采集數(shù)據(jù);數(shù)據(jù)轉(zhuǎn)存模塊將采集到的數(shù)據(jù)分別存儲到數(shù)據(jù)庫與地址空間中;地址空間定義了數(shù)據(jù)在OPC UA Server中對數(shù)據(jù)的組織管理形式;數(shù)據(jù)訪問服務(wù)可向其他OPC UA Client提供數(shù)據(jù)。
用戶通過配置界面可以管理鏈路與設(shè)備,并設(shè)置采集變量:
(1)支持鏈路的創(chuàng)建與配置,選擇計算機(jī)與設(shè)備連接的途徑,如串口、以太網(wǎng)、OPC UA等,依據(jù)選擇不同的方式進(jìn)行配置。
(2)支持設(shè)備組的新建、刪除、編輯,設(shè)備組中可以添加多個設(shè)備,同一設(shè)備可以在不同的設(shè)備組中。
(3)支持設(shè)備的新建、刪除、編輯,包括設(shè)備名稱、設(shè)備系列。
(4)支持變量組的新建、刪除、編輯,變量組中可以添加多個變量,同一變量可以在不同的變量組中。
(5)采集變量的新建、刪除、編輯,同時支持變量添加到變量組,并設(shè)置變量,包括變量名稱、數(shù)據(jù)類型、描述,采集寄存器地址、采集數(shù)據(jù)類型、采集頻率、讀寫類型,數(shù)據(jù)轉(zhuǎn)換的設(shè)置等。
用戶在配置界面新建鏈路與設(shè)備時即配置了設(shè)備驅(qū)動,系統(tǒng)將使用用戶配置的驅(qū)動進(jìn)行數(shù)據(jù)采集。其流程如圖3所示。
圖3 設(shè)備驅(qū)動配置流程圖
Modbus驅(qū)動設(shè)計類圖如圖4所示。其中,Connect類是連接類,負(fù)責(zé)管理Socket與設(shè)備進(jìn)行連接;Disconnect類是斷開連接類,負(fù)責(zé)與設(shè)備斷開連接;SendAndReceive類是發(fā)送報文與接收報文類,主要負(fù)責(zé)發(fā)送與接收消息;Message類是消息類,主要負(fù)責(zé)消息結(jié)構(gòu)體的定義以及組Modbus消息幀和解析Modbus消息幀。
圖4 Modbus驅(qū)動設(shè)計類圖
在OPC UA服務(wù)器的地址空間中創(chuàng)建OPC UA節(jié)點(diǎn)后,將與Modbus寄存器信息(寄存器類型、地址、長度)建立關(guān)聯(lián),使節(jié)點(diǎn)與指定寄存器綁定。接著會等待用戶的節(jié)點(diǎn)請求。若為瀏覽請求,則列出當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)。若為讀請求,則依據(jù)節(jié)點(diǎn)對應(yīng)的Modbus寄存器信息,生成Modbus讀命令,即通過將節(jié)點(diǎn)參數(shù)傳遞給讀操作構(gòu)造函數(shù)創(chuàng)建對應(yīng)的Message類的對象,再通過SendAndReceive()方法將報文發(fā)送給設(shè)備。若為寫請求,同樣依據(jù)節(jié)點(diǎn)對應(yīng)的Modbus寄存器信息,生成Modbus寫命令,即通過將節(jié)點(diǎn)參數(shù)傳遞給寫操作構(gòu)造函數(shù)創(chuàng)建對應(yīng)的Message類的對象,再通過SendAndReceive()方法將報文發(fā)送給設(shè)備。隨后,通過SendAndReceive()方法接收設(shè)備返回的報文。解析后得到寄存器的當(dāng)前值,賦值給用戶請求的指定OPC UA節(jié)點(diǎn)[5]。本平臺地址空間多使用CacheVariable節(jié)點(diǎn)和CacheProperty節(jié)點(diǎn)。前者一般用來表示變量,后者一般用來表示屬性。這兩種節(jié)點(diǎn)均來自平臺使用的SDK。整個過程流程圖如圖5所示。
圖5 Modbus TCP協(xié)議與OPC UA傳遞數(shù)據(jù)流程圖
一個典型的OPC UA應(yīng)用是由圖6所示的三個軟件層次組成的。整個完整的軟件??梢允褂肅/C++、.Net或Java實(shí)現(xiàn)。本文選擇在Prosys OPC UA Java SDK基礎(chǔ)上設(shè)計實(shí)現(xiàn)OPC UA Server。Prosys OPC UA Java SDK中封裝了實(shí)現(xiàn)OPC UA Server的基本類與方法,減少了開發(fā)工作。
圖6 OPC UA軟件層次
實(shí)現(xiàn)本平臺的OPC UA Server中間件需要完成以下幾步:
(1)實(shí)例化UaServer對象
UaServer類定義了一個完整的OPC UA服務(wù)器的實(shí)現(xiàn)。創(chuàng)建服務(wù)器:
UaServer server=new UaServer();
(2)定義程序?qū)嵗C書
程序?qū)嵗C書是必須定義的,用來驗(yàn)證正在交互的其他應(yīng)用程序是可相信的實(shí)例證書。
(3)定義服務(wù)器終端
服務(wù)器終端就是客戶端程序能連接的連接點(diǎn)。每個終端都包含URL地址和安全模式。服務(wù)器定義了哪一個終端是可用的,客戶端決定使用哪一個可用的終端。終端格式如下:
本中間件的OPC UA Serve的終端URL:
opc.tcp://192.168.25.104:4840/UaServer
OPC UA通用客戶端可通過此URL連接至本服務(wù)器對數(shù)據(jù)進(jìn)行瀏覽、訂閱等操作。
(4)通過證明驗(yàn)證客戶端應(yīng)用程序
為了驗(yàn)證連接服務(wù)器的客戶端應(yīng)用程序,需要將一個整數(shù)驗(yàn)證器添加到服務(wù)器中。
(5)注冊發(fā)現(xiàn)服務(wù)器
UA服務(wù)器能自己執(zhí)行內(nèi)部發(fā)現(xiàn)服務(wù)。所以可以使用任何客戶端應(yīng)用程序的發(fā)現(xiàn)服務(wù)器的服務(wù)來獲得服務(wù)器和可到達(dá)的終端列表。
(6)初始化服務(wù)器
調(diào)用Server.init();
(7)管理地址空間
服務(wù)器最重要的一方面是地址空間,它定義了服務(wù)器的數(shù)據(jù)和怎樣管理這些數(shù)據(jù)。地址空間是通過節(jié)點(diǎn)管理器對象來管理的,節(jié)點(diǎn)管理器通常用來定義OPC UA的節(jié)點(diǎn)。節(jié)點(diǎn)指地址空間的所有要素,包括對象(objects)、變量(variables)、類型(types)等。
依照系統(tǒng)能夠采集的數(shù)據(jù)類型,在設(shè)計地址空間時,抽象出了以下幾種地址空間類型節(jié)點(diǎn):ChannelType(鏈路)、DeviceType(設(shè)備)、AnalogInputType(AI)、AnalogOutputType(AO)、DigitInputType(DI)、DigitOutputType(DO)等。下節(jié)以ChannelType、AnalogInputType為例介紹地址空間中節(jié)點(diǎn)類型的設(shè)計思路。
4.2.1ChannelType類
ChannelType類用來在地址空間中表示“鏈路”類型,鏈路類型主要有以下幾個重要屬性:鏈路名稱、驅(qū)動類型、診斷、適配器等。這些屬性對應(yīng)到地址空間的CacheProperty節(jié)點(diǎn)類型。圖7為ChannelType類的成員變量。
圖7 ChannelType類設(shè)計
圖7中ChannelType類幾個重要函數(shù)說明如下:
(1)構(gòu)造函數(shù)ChannelType:可用節(jié)點(diǎn)管理與名稱構(gòu)造一個ChannelType類型節(jié)點(diǎn)。
(2)createType:將創(chuàng)建的ChannelType類型加入到地址空間。
(3)createMember:可為ChannelType增加屬性,如驅(qū)動類型。
(4)setConfigure:可為ChannelType的驅(qū)動類型賦值。
4.2.2AnalogInputType類(AI)
AnalogInputType類用來在地址空間中標(biāo)示AI(模擬量輸入)采集點(diǎn)類型,它有如下幾個重要屬性:原始值、高限值、低限值、過程值、所屬設(shè)備、對應(yīng)寄存器地址等。圖8所示為AnalogInputType類的成員變量。
圖8 AnalogInputType類設(shè)計
AnalogInputType類的幾個重要方法如下:
(1)構(gòu)造函數(shù):可用節(jié)點(diǎn)管理器構(gòu)造一個AnalogInputType類型節(jié)點(diǎn)。
(2)createType:可將創(chuàng)建的AnalogInputType類型加入到地址空間中。
(3)createMember:可為AnalogInputType增加屬性:原始值、過程值、高限值等。
以上是本文OPC UA Server中間件的兩種典型的地址空間節(jié)點(diǎn)類型設(shè)計,其他如DeviceType類、AnalogOutputType類、DigitInputType類、DigitOutputType類與上述類似,不再贅述。
在為地址空間增加節(jié)點(diǎn)時,需實(shí)例化以上類,并添加節(jié)點(diǎn)引用使節(jié)點(diǎn)與其他節(jié)點(diǎn)進(jìn)行關(guān)聯(lián)。若節(jié)點(diǎn)為監(jiān)測變量,當(dāng)監(jiān)測到值發(fā)生變化后,為節(jié)點(diǎn)賦新值,可調(diào)用set函數(shù),更改對象成員變量即可。
針對一些工業(yè)現(xiàn)場設(shè)備無法利用OPC UA向其他系統(tǒng)提供設(shè)備狀態(tài)數(shù)據(jù)的問題,本文設(shè)計了一種基于OPC UA Server的中間件。此中間件利用ModbusTCP協(xié)議提取設(shè)備數(shù)據(jù),將數(shù)據(jù)以統(tǒng)一格式存入OPC UA服務(wù)器地址空間中,再為OPC UA Client提供數(shù)據(jù)訪問服務(wù)。這使得支持ModbusTCP協(xié)議的設(shè)備均可以傳遞數(shù)據(jù)給OPC UA客戶端。此中間件不足之處在于目前只支持通過ModbusTCP協(xié)議從設(shè)備讀取數(shù)據(jù),今后的研究方向是為此中間件增加多種主流驅(qū)動。