閔曉霜,楊 鑫
(中國電子信息產(chǎn)業(yè)集團有限公司第六研究所,北京 102209)
在工業(yè)4.0與智能制造時代,首先需要解決的就是互聯(lián)互通的問題,為了實現(xiàn)M2M(機器到機器)、B2M(商業(yè)系統(tǒng)與機器)以及B2B(商業(yè)系統(tǒng)之間)的協(xié)同,滿足來自各個維度的數(shù)據(jù)交互需求,OPC UA成為最佳的選擇[1]。OPC UA作為數(shù)據(jù)互聯(lián)的標準與規(guī)范,為工業(yè)4.0時代提供底層技術(shù)支撐及解決方案。在工業(yè)控制現(xiàn)場,OPC UA能夠有效實現(xiàn)嵌入式現(xiàn)場設(shè)備、DCS、PLC等設(shè)備與生產(chǎn)管理系統(tǒng)、SCADA、HMI等管理監(jiān)視系統(tǒng)的互操作。
OPC統(tǒng)一架構(gòu)(OPC UA)是由OPC基金會繼傳統(tǒng)OPC技術(shù)獲得成功應(yīng)用之后推出的新的OPC標準。傳統(tǒng)OPC基于COM/DCOM技術(shù),而這項基礎(chǔ)技術(shù)不再發(fā)展并且只能支持Windows操作系統(tǒng);同時,傳統(tǒng)OPC提供的服務(wù)數(shù)據(jù)模型不統(tǒng)一,導致用戶訪問不同數(shù)據(jù)的方法不統(tǒng)一,不支持復雜的數(shù)據(jù)結(jié)構(gòu),且在安全方面也存在不足[2],為解決這些問題,滿足時代發(fā)展需求,OPC UA得以推出并大力發(fā)展。OPC UA基于Socket傳輸層,采用以信息為中心的分層架構(gòu),與平臺無關(guān),能夠兼容Windows、Linux等操作系統(tǒng),OPC UA提供一系列通用信息模型,提供完全面向?qū)ο?,同時包含元數(shù)據(jù)和對象描述的地址空間,在一個地址空間中就可訪問所有對象,支持客戶服務(wù)器模型、發(fā)布訂閱模型,提供復雜數(shù)據(jù)規(guī)范,集成安全功能,并且OPC UA兼容傳統(tǒng)OPC。
自O(shè)PC UA規(guī)范發(fā)布以來,很多國外知名廠商如艾默生、西門子、倍福等已經(jīng)研發(fā)并推出支持OPC UA標準的產(chǎn)品,并得到了應(yīng)用[3]。我國于2017年9月正式發(fā)布了GB/T 33863.1~.8-2017《OPC統(tǒng)一架構(gòu)》標準,并成立了OPC中國認證測試實驗室,標志著OPC UA技術(shù)正式成為我國智能制造發(fā)展的關(guān)鍵技術(shù)之一[4],文獻[5]實現(xiàn)了數(shù)據(jù)管理功能,文獻[6]實現(xiàn)了具備一定安全機制的OPC UA服務(wù)器,但二者都是基于微軟平臺實現(xiàn)的,并不能滿足服務(wù)器的安全需求。
為了滿足工業(yè)控制系統(tǒng)中核心基礎(chǔ)設(shè)備的安全保密,本文基于國產(chǎn)軟硬件平臺設(shè)計并實現(xiàn)OPC UA服務(wù)器,提供數(shù)據(jù)訪問服務(wù),能夠?qū)刂圃O(shè)備進行安全隔離,并在PLC系統(tǒng)中進行測試驗證,能夠支持第三方客戶端的數(shù)據(jù)訪問,滿足工業(yè)現(xiàn)場數(shù)據(jù)交互需求。
本文OPC UA服務(wù)器基于國產(chǎn)軟硬件平臺,采用國產(chǎn)控制器,搭載麒麟操作系統(tǒng),采用Qt5開發(fā)OPC UA服務(wù)器。
1.1.1OPCUA服務(wù)器模式
OPC UA服務(wù)器可以同時支持客戶端-服務(wù)器模型和發(fā)布訂閱模型,這兩種通信機制獨立于實際通信協(xié)議,如TCP和HTTPS可用于客戶端-服務(wù)器模式,而UDP、AMQP和MQTT可用于發(fā)布訂閱模式。
(1)客戶端-服務(wù)器模式
OPC UA客戶端訪問OPC UA服務(wù)器的專用服務(wù)。這是一種對等的方式,提供了信息安全和確定的信息交換,對連接數(shù)量有一定限制。適合客戶端個數(shù)一定,交換信息需求確定的系統(tǒng)。
(2)發(fā)布者-訂閱者模式
OPC UA服務(wù)器通過配置信息可供任意數(shù)量的訂閱者使用。這是一種廣播機制,提供了一個無需信息確認的即發(fā)即棄的信息交換方式。適合多點連接且對實時性要求高的系統(tǒng)。
本文的OPC UA服務(wù)器使用客戶端-服務(wù)器模式,通過建立TCP連接,提供安全、確定的數(shù)據(jù)交換。
1.1.2軟件分層架構(gòu)
OPC UA應(yīng)用程序開發(fā)基于軟件分層架構(gòu)。OPC UA堆棧位于分層架構(gòu)的底層,它采用OPC基金會定義的TCP / IP通信協(xié)議,能夠?qū)崿F(xiàn)所有的OPC UA服務(wù)呼叫,處理通信協(xié)議;在堆棧上層為OPC UA軟件工具開發(fā)包(Software Development Kit,SDK),SDK的主要功能為運行OPC UA服務(wù)器的服務(wù),包括數(shù)據(jù)訪問、報警功能、信息模型建立、節(jié)點管理、訂閱管理、會議管理以及身份認證管理;分層架構(gòu)的最上層為OPC UA服務(wù)器應(yīng)用程序。
本文的OPC UA服務(wù)器采用軟件分層架構(gòu),基于C++ OPC UA服務(wù)器SDK進行開發(fā),利用Qt的跨平臺特性以及對標準C++的支持,首先將SDK移植到國產(chǎn)系統(tǒng)中,然后基于SDK進行應(yīng)用功能開發(fā)。
1.2.1功能說明
OPC UA服務(wù)器的主要功能是將控制器的數(shù)據(jù)映射到服務(wù)器地址空間中進行管理,并與控制器進行數(shù)據(jù)交互,同時,對外與支持OPC UA協(xié)議的設(shè)備(如SCADA、HMI和第三方客戶端等)基于地址空間進行數(shù)據(jù)讀寫操作,支持啟動/停止服務(wù)、配置可訪問數(shù)據(jù)及訪問權(quán)限、運行守護以及冗余防護等功能。
該OPC UA服務(wù)器實現(xiàn)的主要功能如圖1所示,配置功能負責人機交互的配置及配置數(shù)據(jù)生成,服務(wù)器啟動服務(wù)時根據(jù)配置數(shù)據(jù)的參數(shù)啟動并執(zhí)行數(shù)據(jù)訪問功能,安全認證和冗余功能用于保證服務(wù)器運行過程中的通信與運行安全。
圖1 OPC UA服務(wù)器功能圖
(1)基于協(xié)議棧的數(shù)據(jù)訪問功能
包括數(shù)據(jù)的讀寫、讀寫權(quán)限的修改、登錄服務(wù)和退出登錄服務(wù)??蛻舳送ㄟ^服務(wù)器對控制器中的數(shù)據(jù)進行實時獲取,并將數(shù)據(jù)映射到服務(wù)器的地址空間,客戶端通過對地址空間的訪問進行對數(shù)據(jù)的讀寫操作。在與下位機進行通信時采用一問多答、循環(huán)收包的方式。
(2)配置功能
通過配置界面對服務(wù)器地址空間的數(shù)據(jù)進行配置,以便服務(wù)器能夠管理服務(wù)器中的數(shù)據(jù)。
(3)啟停服務(wù)功能
服務(wù)器開啟服務(wù)后,客戶端能夠進行相應(yīng)的訪問操作;停止服務(wù)后,客戶端則無法繼續(xù)對服務(wù)器進行訪問。
(4)安全認證功能
包括身份鑒別機制、基于角色的用戶授權(quán)機制以及數(shù)據(jù)傳輸過程的安全機制。身份鑒別機制指客戶端與服務(wù)器建立連接進行數(shù)據(jù)訪問時,系統(tǒng)對用戶進行輸入用戶名和密碼的登錄身份驗證?;诮巧挠脩羰跈?quán)機制指的是對工程師、管理員以及操作員等不同身份的角色,設(shè)置不同的訪問權(quán)限。數(shù)據(jù)傳輸安全機制指的是對通信數(shù)據(jù)加密以及OPC變量表的CRC校驗功能。
(5)冗余功能
在服務(wù)器啟動之后,自動開啟冗余守護進程機制,實時備份服務(wù)器中的數(shù)據(jù),檢測主機的運行狀態(tài),因此能夠在主機無響應(yīng)時啟用備機功能。
1.2.2工作過程
當OPC UA服務(wù)器應(yīng)用在工控系統(tǒng)中時,系統(tǒng)的工作過程如下:
(1)用戶在編程組態(tài)軟件中,將控制程序與OPC數(shù)據(jù)配置信息下裝到控制器中,同時生成OPC數(shù)據(jù)配置文件。
(2)在服務(wù)器中可創(chuàng)建站,通過加載解析上述OPC數(shù)據(jù)配置文件,能夠?qū)υ撜镜淖兞窟M行配置,將其添加到服務(wù)器的數(shù)據(jù)列表中,即加入地址空間管理,每個變量對應(yīng)一個節(jié)點,可對節(jié)點的訪問權(quán)限及屬性進行配置。配置完成后,可啟動OPC UA服務(wù)器,則服務(wù)器開始與PLC通信交互OPC數(shù)據(jù)表中的數(shù)據(jù),同時,管理地址空間中的節(jié)點,處理來自客戶端的連接以及服務(wù)請求。
(3)客戶端想要訪問PLC中的變量信息時,首先對服務(wù)器發(fā)送服務(wù)請求,要求建立與服務(wù)器的連接,服務(wù)器收到請求后,在其地址空間內(nèi)查找對應(yīng)的節(jié)點信息,服務(wù)器根據(jù)變量與節(jié)點的映射,與控制器通過私有協(xié)議進行變量讀寫等操作,最后在服務(wù)器接口調(diào)用請求/響應(yīng)服務(wù),給客戶端返回有效信息。
上述過程的數(shù)據(jù)流圖如圖2所示。
圖2 系統(tǒng)的數(shù)據(jù)流圖
OPC UA SDK產(chǎn)品供應(yīng)商常見的有MatrikonOPC、ProSys、Unified Automation等,在選擇采購SDK時主要注意的包括SDK提供的是庫還是源碼、提供的功能、支持的平臺以及技術(shù)支持等因素[7]。本文使用的SDK以C++源碼的形式提供,提供數(shù)據(jù)訪問等功能。本文首先將SDK移植到國內(nèi)操作系統(tǒng)中,使用Qt開發(fā)環(huán)境進行編譯,然后基于SDK提供的API進行應(yīng)用功能開發(fā)。
SDK開發(fā)包目錄結(jié)構(gòu)如圖3所示,主要包括:
…/OPC_UA_SDK/lib:用于存放SDK編譯以后生成的庫。
…/OPC_UA_SDK/Examples:包含示例程序,可基于例程進行應(yīng)用開發(fā)。
圖3 OPC UA軟件開發(fā)包
使用Qt編譯生成的庫在lib目錄下,應(yīng)用軟件直接引用生成的動態(tài)庫,examples中包含示例程序,基于示例程序、調(diào)用SDK提供的API進行應(yīng)用開發(fā)。
OPC UA服務(wù)器應(yīng)用程序開發(fā)分為4個模塊,分別為:通用功能模塊Global、基礎(chǔ)應(yīng)用功能模塊CommonOPCUA、配置管理模塊ConfigUI、OPC UA服務(wù)器模塊OPCUASvr。
(1)Global模塊提供基礎(chǔ)功能支持,與OPC UA業(yè)務(wù)無關(guān),實現(xiàn)了數(shù)據(jù)類型轉(zhuǎn)換、字符串轉(zhuǎn)換、CRC校驗算法等功能。
(2)CommonOPCUA模塊實現(xiàn)OPC UA業(yè)務(wù)相關(guān)的通用功能,包括OPC UA服務(wù)器所需的地址空間、序列化、反序列化、變量表文件解析、對象節(jié)點的管理等。通過調(diào)用該功能接口能夠?qū)崿F(xiàn)與文件數(shù)據(jù)進行交互,加載控制器生成的服務(wù)器配置文件并進行解析,生成包含地址空間信息的二進制文件。
(3)ConfigUI模塊實現(xiàn)服務(wù)器配置的人機交互功能,包括主界面、數(shù)據(jù)訪問配置界面、添加站對話框、編輯節(jié)點屬性對話框。
(4)OPCUASvr模塊實現(xiàn)OCPUA協(xié)議棧功能,提供OPC UA服務(wù),包括啟動、停止服務(wù)、數(shù)據(jù)訪問服務(wù)等,使用SDK提供的API接口,引用了SDK的動態(tài)庫。
地址空間的開發(fā)為OPC UA服務(wù)器應(yīng)用程序開發(fā)中關(guān)鍵的部分,當服務(wù)器對底層PLC設(shè)備中的數(shù)據(jù)進行采集處理時,把每個PLC設(shè)備抽象為一個對象,把所要訪問的數(shù)據(jù)信息,即對象中的地址空間,作為其中的一個節(jié)點,從而創(chuàng)建一個從節(jié)點到對象自下而上的類似文件夾結(jié)構(gòu)的地址空間結(jié)構(gòu),增強了數(shù)據(jù)處理效率。
本文服務(wù)器地址空間中的數(shù)據(jù)為測量模擬數(shù)據(jù),即通過數(shù)據(jù)訪問獲取的實時IO模擬量。地址空間的編碼實現(xiàn),首先需要在程序中定義節(jié)點管理類,用于管理整個地址空間的所有節(jié)點,并在服務(wù)器啟動時申請內(nèi)存空間。NodeManagerDemo的主要功能是實現(xiàn)服務(wù)器和PLC控制器等下位機設(shè)備的通信,完成數(shù)據(jù)的讀寫。NodeManagerDemoBase主要是在地址空間內(nèi)部建立點表,包括定義節(jié)點的ID、節(jié)點的名稱、節(jié)點類型等,方便OPC UA客戶端對服務(wù)器地址空間的數(shù)據(jù)進行處理。地址空間編碼實現(xiàn)的具體空間結(jié)構(gòu)如圖4和圖5所示。
圖4 地址空間主要類圖
圖5 服務(wù)器主要類圖
服務(wù)器軟件的主要流程圖如圖6和圖7所示,包括服務(wù)器啟動以及地址空間節(jié)點管理。
圖6 服務(wù)器啟動流程圖
圖7 節(jié)點管理流程圖
本文OPC UA服務(wù)器在PLC系統(tǒng)中進行驗證,并采用第三方提供的標準OPC UA客戶端驗證OPC UA服務(wù)器功能。驗證功能包括數(shù)據(jù)訪問、數(shù)據(jù)讀寫、數(shù)據(jù)讀寫權(quán)限設(shè)置、安全認證。在測試過程中,用一個及多個客戶端對服務(wù)器設(shè)備進行連接,最終,定義監(jiān)視的變量在OPC UA客戶端能夠看到變量節(jié)點,并能夠?qū)ψ兞窟M行讀寫操作。驗證結(jié)果表明該OPC UA服務(wù)器滿足功能和設(shè)計需求,具備在實際工業(yè)現(xiàn)場使用的條件。
隨著工業(yè)信息化及智能制造的發(fā)展,我國工控行業(yè)也在加強對關(guān)鍵基礎(chǔ)技術(shù)的研究與應(yīng)用。OPC UA作為數(shù)據(jù)互聯(lián)的基礎(chǔ)標準與規(guī)范,在工業(yè)控制系統(tǒng)中是一個必須掌握與深入研究的技術(shù)。本文所開發(fā)的OPC UA服務(wù)器實現(xiàn)了基本的數(shù)據(jù)訪問、地址空間與節(jié)點管理等功能。后續(xù)將再此基礎(chǔ)上,將OPC UA服務(wù)器移植到嵌入式操作系統(tǒng)中,并實現(xiàn)歷史數(shù)據(jù)訪問、報警與事件,增強安全功能設(shè)計,提供功能更加豐富、更加安全、更加通用的OPC UA產(chǎn)品。此外,OPC UA與其他新興技術(shù)的結(jié)合,也是今后重要的研究方向。