石春竹,柴處處,蘭培霖,魏利卓,王 盈
(中國電子信息產業集團有限公司第六研究所,北京 100083)
鑒于制造業在推動貿易增長、提高研發創新水平以及促進就業等方面起著重要作用,世界上許多國家提出了制造業國家戰略,中國也出臺了《中國制造2025》,將智能制造作為兩化深度融合的主攻方向[1]。國家政策大力支撐智能制造,企業紛紛進入傳統制造業向智能制造轉型升級的過渡中,但由于我國制造業相較發達國家起步晚,信息化、自動化程度不高,在向智能制造轉型升級時,存在著底層數據采集困難、不同信息系統間數據不能交互等問題[2]。高質、高效的數據流通成為迫切需求。
OPC UA又稱為OPC統一架構,它是一套集信息模型定義、服務集與通信標準為一體的標準化技術框架,既能為分布式系統之間進行信息交換,也能描述一個系統和現有信息,為應用程序之間提供了互操作的、平臺獨立的、高性能的、可拓展的、安全和可靠的通信[3],利用OPC UA技術,可解決系統間數據交互難問題。憑借其架構的先進性,OPC UA已成為工業4.0在通信層實施方面唯一推薦的技術。目前許多廠家的設備和工業應用平臺都開放了OPC UA接口,可以說,未來的工業物聯網中,OPC UA會是主流的通信技術。但是,目前工業現場已有設備有些支持OPC UA,有些不支持OPC UA,這樣在利用OPC UA技術作為工業現場主要通信技術時,需對不支持OPC UA的設備設計額外的通信接口。本文研發了一種通信中間件,采集底層設備數據后,將數據組態到OPC UA地址空間中,向外提供數據訪問服務,這可以使不支持OPC UA的設備也能夠通過OPC UA技術與外界進行通信。OPC UA服務器中間件應用環境如圖1所示。各系統間(如SCADA、MES、ERP、PLM)皆可通過OPC UA技術傳輸數據,形成互聯的網狀結構,打破了原有工業現場數據層層傳遞的限制。

圖1 利用OPC UA技術打造工業現場網狀架構
OPC UA服務器中間件從現場設備中獲取狀態數據,并將數據以統一形式存儲在OPC UA地址空間中。此中間件對外提供數據訪問服務(OPC UA與數據庫),供其他客戶端進行設備狀態監控與其他業務邏輯。系統整體架構如圖2所示。

圖2 OPC UA服務器中間件架構
(1)系統通過數據訪問服務(OPC UA Server)向集成了OPC UA Client的ERP、MES等系統提供數據。也可提供數據庫表,其他系統利用SQL語句訪問本系統數據庫。
(2)系統包括現場數據采集、報文解析、數據轉存、地址空間、數據顯示、配置界面、報警服務、歷史數據服務、日志服務、數據訪問服務模塊[4]。其中配置界面、現場數據采集、報文解析模塊完成從底層設備中采集數據;數據轉存模塊將采集到的數據分別存儲到數據庫與地址空間中;地址空間定義了數據在OPC UA Server中對數據的組織管理形式;數據訪問服務可向其他OPC UA Client提供數據。
用戶通過配置界面可以管理鏈路與設備,并設置采集變量:
(1)支持鏈路的創建與配置,選擇計算機與設備連接的途徑,如串口、以太網、OPC UA等,依據選擇不同的方式進行配置。
(2)支持設備組的新建、刪除、編輯,設備組中可以添加多個設備,同一設備可以在不同的設備組中。
(3)支持設備的新建、刪除、編輯,包括設備名稱、設備系列。
(4)支持變量組的新建、刪除、編輯,變量組中可以添加多個變量,同一變量可以在不同的變量組中。
(5)采集變量的新建、刪除、編輯,同時支持變量添加到變量組,并設置變量,包括變量名稱、數據類型、描述,采集寄存器地址、采集數據類型、采集頻率、讀寫類型,數據轉換的設置等。
用戶在配置界面新建鏈路與設備時即配置了設備驅動,系統將使用用戶配置的驅動進行數據采集。其流程如圖3所示。

圖3 設備驅動配置流程圖
Modbus驅動設計類圖如圖4所示。其中,Connect類是連接類,負責管理Socket與設備進行連接;Disconnect類是斷開連接類,負責與設備斷開連接;SendAndReceive類是發送報文與接收報文類,主要負責發送與接收消息;Message類是消息類,主要負責消息結構體的定義以及組Modbus消息幀和解析Modbus消息幀。

圖4 Modbus驅動設計類圖
在OPC UA服務器的地址空間中創建OPC UA節點后,將與Modbus寄存器信息(寄存器類型、地址、長度)建立關聯,使節點與指定寄存器綁定。接著會等待用戶的節點請求。若為瀏覽請求,則列出當前節點的子節點。若為讀請求,則依據節點對應的Modbus寄存器信息,生成Modbus讀命令,即通過將節點參數傳遞給讀操作構造函數創建對應的Message類的對象,再通過SendAndReceive()方法將報文發送給設備。若為寫請求,同樣依據節點對應的Modbus寄存器信息,生成Modbus寫命令,即通過將節點參數傳遞給寫操作構造函數創建對應的Message類的對象,再通過SendAndReceive()方法將報文發送給設備。隨后,通過SendAndReceive()方法接收設備返回的報文。解析后得到寄存器的當前值,賦值給用戶請求的指定OPC UA節點[5]。本平臺地址空間多使用CacheVariable節點和CacheProperty節點。前者一般用來表示變量,后者一般用來表示屬性。這兩種節點均來自平臺使用的SDK。整個過程流程圖如圖5所示。

圖5 Modbus TCP協議與OPC UA傳遞數據流程圖
一個典型的OPC UA應用是由圖6所示的三個軟件層次組成的。整個完整的軟件棧可以使用C/C++、.Net或Java實現。本文選擇在Prosys OPC UA Java SDK基礎上設計實現OPC UA Server。Prosys OPC UA Java SDK中封裝了實現OPC UA Server的基本類與方法,減少了開發工作。

圖6 OPC UA軟件層次
實現本平臺的OPC UA Server中間件需要完成以下幾步:
(1)實例化UaServer對象
UaServer類定義了一個完整的OPC UA服務器的實現。創建服務器:
UaServer server=new UaServer();
(2)定義程序實例證書
程序實例證書是必須定義的,用來驗證正在交互的其他應用程序是可相信的實例證書。
(3)定義服務器終端
服務器終端就是客戶端程序能連接的連接點。每個終端都包含URL地址和安全模式。服務器定義了哪一個終端是可用的,客戶端決定使用哪一個可用的終端。終端格式如下:
本中間件的OPC UA Serve的終端URL:
opc.tcp://192.168.25.104:4840/UaServer
OPC UA通用客戶端可通過此URL連接至本服務器對數據進行瀏覽、訂閱等操作。
(4)通過證明驗證客戶端應用程序
為了驗證連接服務器的客戶端應用程序,需要將一個整數驗證器添加到服務器中。
(5)注冊發現服務器
UA服務器能自己執行內部發現服務。所以可以使用任何客戶端應用程序的發現服務器的服務來獲得服務器和可到達的終端列表。
(6)初始化服務器
調用Server.init();
(7)管理地址空間
服務器最重要的一方面是地址空間,它定義了服務器的數據和怎樣管理這些數據。地址空間是通過節點管理器對象來管理的,節點管理器通常用來定義OPC UA的節點。節點指地址空間的所有要素,包括對象(objects)、變量(variables)、類型(types)等。
依照系統能夠采集的數據類型,在設計地址空間時,抽象出了以下幾種地址空間類型節點:ChannelType(鏈路)、DeviceType(設備)、AnalogInputType(AI)、AnalogOutputType(AO)、DigitInputType(DI)、DigitOutputType(DO)等。下節以ChannelType、AnalogInputType為例介紹地址空間中節點類型的設計思路。
4.2.1ChannelType類
ChannelType類用來在地址空間中表示“鏈路”類型,鏈路類型主要有以下幾個重要屬性:鏈路名稱、驅動類型、診斷、適配器等。這些屬性對應到地址空間的CacheProperty節點類型。圖7為ChannelType類的成員變量。

圖7 ChannelType類設計
圖7中ChannelType類幾個重要函數說明如下:
(1)構造函數ChannelType:可用節點管理與名稱構造一個ChannelType類型節點。
(2)createType:將創建的ChannelType類型加入到地址空間。
(3)createMember:可為ChannelType增加屬性,如驅動類型。
(4)setConfigure:可為ChannelType的驅動類型賦值。
4.2.2AnalogInputType類(AI)
AnalogInputType類用來在地址空間中標示AI(模擬量輸入)采集點類型,它有如下幾個重要屬性:原始值、高限值、低限值、過程值、所屬設備、對應寄存器地址等。圖8所示為AnalogInputType類的成員變量。

圖8 AnalogInputType類設計
AnalogInputType類的幾個重要方法如下:
(1)構造函數:可用節點管理器構造一個AnalogInputType類型節點。
(2)createType:可將創建的AnalogInputType類型加入到地址空間中。
(3)createMember:可為AnalogInputType增加屬性:原始值、過程值、高限值等。
以上是本文OPC UA Server中間件的兩種典型的地址空間節點類型設計,其他如DeviceType類、AnalogOutputType類、DigitInputType類、DigitOutputType類與上述類似,不再贅述。
在為地址空間增加節點時,需實例化以上類,并添加節點引用使節點與其他節點進行關聯。若節點為監測變量,當監測到值發生變化后,為節點賦新值,可調用set函數,更改對象成員變量即可。
針對一些工業現場設備無法利用OPC UA向其他系統提供設備狀態數據的問題,本文設計了一種基于OPC UA Server的中間件。此中間件利用ModbusTCP協議提取設備數據,將數據以統一格式存入OPC UA服務器地址空間中,再為OPC UA Client提供數據訪問服務。這使得支持ModbusTCP協議的設備均可以傳遞數據給OPC UA客戶端。此中間件不足之處在于目前只支持通過ModbusTCP協議從設備讀取數據,今后的研究方向是為此中間件增加多種主流驅動。