閔曉霜,楊 鑫
(中國電子信息產(chǎn)業(yè)集團(tuán)有限公司第六研究所,北京 102209)
在工業(yè)4.0與智能制造時(shí)代,首先需要解決的就是互聯(lián)互通的問題,為了實(shí)現(xiàn)M2M(機(jī)器到機(jī)器)、B2M(商業(yè)系統(tǒng)與機(jī)器)以及B2B(商業(yè)系統(tǒng)之間)的協(xié)同,滿足來自各個(gè)維度的數(shù)據(jù)交互需求,OPC UA成為最佳的選擇[1]。OPC UA作為數(shù)據(jù)互聯(lián)的標(biāo)準(zhǔn)與規(guī)范,為工業(yè)4.0時(shí)代提供底層技術(shù)支撐及解決方案。在工業(yè)控制現(xiàn)場(chǎng),OPC UA能夠有效實(shí)現(xiàn)嵌入式現(xiàn)場(chǎng)設(shè)備、DCS、PLC等設(shè)備與生產(chǎn)管理系統(tǒng)、SCADA、HMI等管理監(jiān)視系統(tǒng)的互操作。
OPC統(tǒng)一架構(gòu)(OPC UA)是由OPC基金會(huì)繼傳統(tǒng)OPC技術(shù)獲得成功應(yīng)用之后推出的新的OPC標(biāo)準(zhǔn)。傳統(tǒng)OPC基于COM/DCOM技術(shù),而這項(xiàng)基礎(chǔ)技術(shù)不再發(fā)展并且只能支持Windows操作系統(tǒng);同時(shí),傳統(tǒng)OPC提供的服務(wù)數(shù)據(jù)模型不統(tǒng)一,導(dǎo)致用戶訪問不同數(shù)據(jù)的方法不統(tǒng)一,不支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),且在安全方面也存在不足[2],為解決這些問題,滿足時(shí)代發(fā)展需求,OPC UA得以推出并大力發(fā)展。OPC UA基于Socket傳輸層,采用以信息為中心的分層架構(gòu),與平臺(tái)無關(guān),能夠兼容Windows、Linux等操作系統(tǒng),OPC UA提供一系列通用信息模型,提供完全面向?qū)ο?,同時(shí)包含元數(shù)據(jù)和對(duì)象描述的地址空間,在一個(gè)地址空間中就可訪問所有對(duì)象,支持客戶服務(wù)器模型、發(fā)布訂閱模型,提供復(fù)雜數(shù)據(jù)規(guī)范,集成安全功能,并且OPC UA兼容傳統(tǒng)OPC。
自O(shè)PC UA規(guī)范發(fā)布以來,很多國外知名廠商如艾默生、西門子、倍福等已經(jīng)研發(fā)并推出支持OPC UA標(biāo)準(zhǔn)的產(chǎn)品,并得到了應(yīng)用[3]。我國于2017年9月正式發(fā)布了GB/T 33863.1~.8-2017《OPC統(tǒng)一架構(gòu)》標(biāo)準(zhǔn),并成立了OPC中國認(rèn)證測(cè)試實(shí)驗(yàn)室,標(biāo)志著OPC UA技術(shù)正式成為我國智能制造發(fā)展的關(guān)鍵技術(shù)之一[4],文獻(xiàn)[5]實(shí)現(xiàn)了數(shù)據(jù)管理功能,文獻(xiàn)[6]實(shí)現(xiàn)了具備一定安全機(jī)制的OPC UA服務(wù)器,但二者都是基于微軟平臺(tái)實(shí)現(xiàn)的,并不能滿足服務(wù)器的安全需求。
為了滿足工業(yè)控制系統(tǒng)中核心基礎(chǔ)設(shè)備的安全保密,本文基于國產(chǎn)軟硬件平臺(tái)設(shè)計(jì)并實(shí)現(xiàn)OPC UA服務(wù)器,提供數(shù)據(jù)訪問服務(wù),能夠?qū)刂圃O(shè)備進(jìn)行安全隔離,并在PLC系統(tǒng)中進(jìn)行測(cè)試驗(yàn)證,能夠支持第三方客戶端的數(shù)據(jù)訪問,滿足工業(yè)現(xiàn)場(chǎng)數(shù)據(jù)交互需求。
本文OPC UA服務(wù)器基于國產(chǎn)軟硬件平臺(tái),采用國產(chǎn)控制器,搭載麒麟操作系統(tǒng),采用Qt5開發(fā)OPC UA服務(wù)器。
1.1.1OPCUA服務(wù)器模式
OPC UA服務(wù)器可以同時(shí)支持客戶端-服務(wù)器模型和發(fā)布訂閱模型,這兩種通信機(jī)制獨(dú)立于實(shí)際通信協(xié)議,如TCP和HTTPS可用于客戶端-服務(wù)器模式,而UDP、AMQP和MQTT可用于發(fā)布訂閱模式。
(1)客戶端-服務(wù)器模式
OPC UA客戶端訪問OPC UA服務(wù)器的專用服務(wù)。這是一種對(duì)等的方式,提供了信息安全和確定的信息交換,對(duì)連接數(shù)量有一定限制。適合客戶端個(gè)數(shù)一定,交換信息需求確定的系統(tǒng)。
(2)發(fā)布者-訂閱者模式
OPC UA服務(wù)器通過配置信息可供任意數(shù)量的訂閱者使用。這是一種廣播機(jī)制,提供了一個(gè)無需信息確認(rèn)的即發(fā)即棄的信息交換方式。適合多點(diǎn)連接且對(duì)實(shí)時(shí)性要求高的系統(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基金會(huì)定義的TCP / IP通信協(xié)議,能夠?qū)崿F(xiàn)所有的OPC UA服務(wù)呼叫,處理通信協(xié)議;在堆棧上層為OPC UA軟件工具開發(fā)包(Software Development Kit,SDK),SDK的主要功能為運(yùn)行OPC UA服務(wù)器的服務(wù),包括數(shù)據(jù)訪問、報(bào)警功能、信息模型建立、節(jié)點(diǎn)管理、訂閱管理、會(huì)議管理以及身份認(rèn)證管理;分層架構(gòu)的最上層為OPC UA服務(wù)器應(yīng)用程序。
本文的OPC UA服務(wù)器采用軟件分層架構(gòu),基于C++ OPC UA服務(wù)器SDK進(jìn)行開發(fā),利用Qt的跨平臺(tái)特性以及對(duì)標(biāo)準(zhǔn)C++的支持,首先將SDK移植到國產(chǎn)系統(tǒng)中,然后基于SDK進(jìn)行應(yīng)用功能開發(fā)。
1.2.1功能說明
OPC UA服務(wù)器的主要功能是將控制器的數(shù)據(jù)映射到服務(wù)器地址空間中進(jìn)行管理,并與控制器進(jìn)行數(shù)據(jù)交互,同時(shí),對(duì)外與支持OPC UA協(xié)議的設(shè)備(如SCADA、HMI和第三方客戶端等)基于地址空間進(jìn)行數(shù)據(jù)讀寫操作,支持啟動(dòng)/停止服務(wù)、配置可訪問數(shù)據(jù)及訪問權(quán)限、運(yùn)行守護(hù)以及冗余防護(hù)等功能。
該OPC UA服務(wù)器實(shí)現(xiàn)的主要功能如圖1所示,配置功能負(fù)責(zé)人機(jī)交互的配置及配置數(shù)據(jù)生成,服務(wù)器啟動(dòng)服務(wù)時(shí)根據(jù)配置數(shù)據(jù)的參數(shù)啟動(dòng)并執(zhí)行數(shù)據(jù)訪問功能,安全認(rèn)證和冗余功能用于保證服務(wù)器運(yùn)行過程中的通信與運(yùn)行安全。

圖1 OPC UA服務(wù)器功能圖
(1)基于協(xié)議棧的數(shù)據(jù)訪問功能
包括數(shù)據(jù)的讀寫、讀寫權(quán)限的修改、登錄服務(wù)和退出登錄服務(wù)。客戶端通過服務(wù)器對(duì)控制器中的數(shù)據(jù)進(jìn)行實(shí)時(shí)獲取,并將數(shù)據(jù)映射到服務(wù)器的地址空間,客戶端通過對(duì)地址空間的訪問進(jìn)行對(duì)數(shù)據(jù)的讀寫操作。在與下位機(jī)進(jìn)行通信時(shí)采用一問多答、循環(huán)收包的方式。
(2)配置功能
通過配置界面對(duì)服務(wù)器地址空間的數(shù)據(jù)進(jìn)行配置,以便服務(wù)器能夠管理服務(wù)器中的數(shù)據(jù)。
(3)啟停服務(wù)功能
服務(wù)器開啟服務(wù)后,客戶端能夠進(jìn)行相應(yīng)的訪問操作;停止服務(wù)后,客戶端則無法繼續(xù)對(duì)服務(wù)器進(jìn)行訪問。
(4)安全認(rèn)證功能
包括身份鑒別機(jī)制、基于角色的用戶授權(quán)機(jī)制以及數(shù)據(jù)傳輸過程的安全機(jī)制。身份鑒別機(jī)制指客戶端與服務(wù)器建立連接進(jìn)行數(shù)據(jù)訪問時(shí),系統(tǒng)對(duì)用戶進(jìn)行輸入用戶名和密碼的登錄身份驗(yàn)證?;诮巧挠脩羰跈?quán)機(jī)制指的是對(duì)工程師、管理員以及操作員等不同身份的角色,設(shè)置不同的訪問權(quán)限。數(shù)據(jù)傳輸安全機(jī)制指的是對(duì)通信數(shù)據(jù)加密以及OPC變量表的CRC校驗(yàn)功能。
(5)冗余功能
在服務(wù)器啟動(dòng)之后,自動(dòng)開啟冗余守護(hù)進(jìn)程機(jī)制,實(shí)時(shí)備份服務(wù)器中的數(shù)據(jù),檢測(cè)主機(jī)的運(yùn)行狀態(tài),因此能夠在主機(jī)無響應(yīng)時(shí)啟用備機(jī)功能。
1.2.2工作過程
當(dāng)OPC UA服務(wù)器應(yīng)用在工控系統(tǒng)中時(shí),系統(tǒng)的工作過程如下:
(1)用戶在編程組態(tài)軟件中,將控制程序與OPC數(shù)據(jù)配置信息下裝到控制器中,同時(shí)生成OPC數(shù)據(jù)配置文件。
(2)在服務(wù)器中可創(chuàng)建站,通過加載解析上述OPC數(shù)據(jù)配置文件,能夠?qū)υ撜镜淖兞窟M(jìn)行配置,將其添加到服務(wù)器的數(shù)據(jù)列表中,即加入地址空間管理,每個(gè)變量對(duì)應(yīng)一個(gè)節(jié)點(diǎn),可對(duì)節(jié)點(diǎn)的訪問權(quán)限及屬性進(jìn)行配置。配置完成后,可啟動(dòng)OPC UA服務(wù)器,則服務(wù)器開始與PLC通信交互OPC數(shù)據(jù)表中的數(shù)據(jù),同時(shí),管理地址空間中的節(jié)點(diǎn),處理來自客戶端的連接以及服務(wù)請(qǐng)求。
(3)客戶端想要訪問PLC中的變量信息時(shí),首先對(duì)服務(wù)器發(fā)送服務(wù)請(qǐng)求,要求建立與服務(wù)器的連接,服務(wù)器收到請(qǐng)求后,在其地址空間內(nèi)查找對(duì)應(yīng)的節(jié)點(diǎn)信息,服務(wù)器根據(jù)變量與節(jié)點(diǎn)的映射,與控制器通過私有協(xié)議進(jìn)行變量讀寫等操作,最后在服務(wù)器接口調(diào)用請(qǐng)求/響應(yīng)服務(wù),給客戶端返回有效信息。
上述過程的數(shù)據(jù)流圖如圖2所示。

圖2 系統(tǒng)的數(shù)據(jù)流圖
OPC UA SDK產(chǎn)品供應(yīng)商常見的有MatrikonOPC、ProSys、Unified Automation等,在選擇采購SDK時(shí)主要注意的包括SDK提供的是庫還是源碼、提供的功能、支持的平臺(tái)以及技術(shù)支持等因素[7]。本文使用的SDK以C++源碼的形式提供,提供數(shù)據(jù)訪問等功能。本文首先將SDK移植到國內(nèi)操作系統(tǒng)中,使用Qt開發(fā)環(huán)境進(jìn)行編譯,然后基于SDK提供的API進(jìn)行應(yīng)用功能開發(fā)。
SDK開發(fā)包目錄結(jié)構(gòu)如圖3所示,主要包括:
…/OPC_UA_SDK/lib:用于存放SDK編譯以后生成的庫。
…/OPC_UA_SDK/Examples:包含示例程序,可基于例程進(jìn)行應(yīng)用開發(fā)。

圖3 OPC UA軟件開發(fā)包
使用Qt編譯生成的庫在lib目錄下,應(yīng)用軟件直接引用生成的動(dòng)態(tài)庫,examples中包含示例程序,基于示例程序、調(diào)用SDK提供的API進(jìn)行應(yīng)用開發(fā)。
OPC UA服務(wù)器應(yīng)用程序開發(fā)分為4個(gè)模塊,分別為:通用功能模塊Global、基礎(chǔ)應(yīng)用功能模塊CommonOPCUA、配置管理模塊ConfigUI、OPC UA服務(wù)器模塊OPCUASvr。
(1)Global模塊提供基礎(chǔ)功能支持,與OPC UA業(yè)務(wù)無關(guān),實(shí)現(xiàn)了數(shù)據(jù)類型轉(zhuǎn)換、字符串轉(zhuǎn)換、CRC校驗(yàn)算法等功能。
(2)CommonOPCUA模塊實(shí)現(xiàn)OPC UA業(yè)務(wù)相關(guān)的通用功能,包括OPC UA服務(wù)器所需的地址空間、序列化、反序列化、變量表文件解析、對(duì)象節(jié)點(diǎn)的管理等。通過調(diào)用該功能接口能夠?qū)崿F(xiàn)與文件數(shù)據(jù)進(jìn)行交互,加載控制器生成的服務(wù)器配置文件并進(jìn)行解析,生成包含地址空間信息的二進(jìn)制文件。
(3)ConfigUI模塊實(shí)現(xiàn)服務(wù)器配置的人機(jī)交互功能,包括主界面、數(shù)據(jù)訪問配置界面、添加站對(duì)話框、編輯節(jié)點(diǎn)屬性對(duì)話框。
(4)OPCUASvr模塊實(shí)現(xiàn)OCPUA協(xié)議棧功能,提供OPC UA服務(wù),包括啟動(dòng)、停止服務(wù)、數(shù)據(jù)訪問服務(wù)等,使用SDK提供的API接口,引用了SDK的動(dòng)態(tài)庫。
地址空間的開發(fā)為OPC UA服務(wù)器應(yīng)用程序開發(fā)中關(guān)鍵的部分,當(dāng)服務(wù)器對(duì)底層PLC設(shè)備中的數(shù)據(jù)進(jìn)行采集處理時(shí),把每個(gè)PLC設(shè)備抽象為一個(gè)對(duì)象,把所要訪問的數(shù)據(jù)信息,即對(duì)象中的地址空間,作為其中的一個(gè)節(jié)點(diǎn),從而創(chuàng)建一個(gè)從節(jié)點(diǎn)到對(duì)象自下而上的類似文件夾結(jié)構(gòu)的地址空間結(jié)構(gòu),增強(qiáng)了數(shù)據(jù)處理效率。
本文服務(wù)器地址空間中的數(shù)據(jù)為測(cè)量模擬數(shù)據(jù),即通過數(shù)據(jù)訪問獲取的實(shí)時(shí)IO模擬量。地址空間的編碼實(shí)現(xiàn),首先需要在程序中定義節(jié)點(diǎn)管理類,用于管理整個(gè)地址空間的所有節(jié)點(diǎn),并在服務(wù)器啟動(dòng)時(shí)申請(qǐng)內(nèi)存空間。NodeManagerDemo的主要功能是實(shí)現(xiàn)服務(wù)器和PLC控制器等下位機(jī)設(shè)備的通信,完成數(shù)據(jù)的讀寫。NodeManagerDemoBase主要是在地址空間內(nèi)部建立點(diǎn)表,包括定義節(jié)點(diǎn)的ID、節(jié)點(diǎn)的名稱、節(jié)點(diǎn)類型等,方便OPC UA客戶端對(duì)服務(wù)器地址空間的數(shù)據(jù)進(jìn)行處理。地址空間編碼實(shí)現(xiàn)的具體空間結(jié)構(gòu)如圖4和圖5所示。

圖4 地址空間主要類圖

圖5 服務(wù)器主要類圖
服務(wù)器軟件的主要流程圖如圖6和圖7所示,包括服務(wù)器啟動(dòng)以及地址空間節(jié)點(diǎn)管理。

圖6 服務(wù)器啟動(dòng)流程圖

圖7 節(jié)點(diǎn)管理流程圖
本文OPC UA服務(wù)器在PLC系統(tǒng)中進(jìn)行驗(yàn)證,并采用第三方提供的標(biāo)準(zhǔn)OPC UA客戶端驗(yàn)證OPC UA服務(wù)器功能。驗(yàn)證功能包括數(shù)據(jù)訪問、數(shù)據(jù)讀寫、數(shù)據(jù)讀寫權(quán)限設(shè)置、安全認(rèn)證。在測(cè)試過程中,用一個(gè)及多個(gè)客戶端對(duì)服務(wù)器設(shè)備進(jìn)行連接,最終,定義監(jiān)視的變量在OPC UA客戶端能夠看到變量節(jié)點(diǎn),并能夠?qū)ψ兞窟M(jìn)行讀寫操作。驗(yàn)證結(jié)果表明該OPC UA服務(wù)器滿足功能和設(shè)計(jì)需求,具備在實(shí)際工業(yè)現(xiàn)場(chǎng)使用的條件。
隨著工業(yè)信息化及智能制造的發(fā)展,我國工控行業(yè)也在加強(qiáng)對(duì)關(guān)鍵基礎(chǔ)技術(shù)的研究與應(yīng)用。OPC UA作為數(shù)據(jù)互聯(lián)的基礎(chǔ)標(biāo)準(zhǔn)與規(guī)范,在工業(yè)控制系統(tǒng)中是一個(gè)必須掌握與深入研究的技術(shù)。本文所開發(fā)的OPC UA服務(wù)器實(shí)現(xiàn)了基本的數(shù)據(jù)訪問、地址空間與節(jié)點(diǎn)管理等功能。后續(xù)將再此基礎(chǔ)上,將OPC UA服務(wù)器移植到嵌入式操作系統(tǒng)中,并實(shí)現(xiàn)歷史數(shù)據(jù)訪問、報(bào)警與事件,增強(qiáng)安全功能設(shè)計(jì),提供功能更加豐富、更加安全、更加通用的OPC UA產(chǎn)品。此外,OPC UA與其他新興技術(shù)的結(jié)合,也是今后重要的研究方向。