寫在前面:
為了應對標準化和跨平臺的趨勢,更好的推廣OPC,OPC基金會在OPCDA成功應用的基礎上推出了一個新的OPC標準——OPC UA,OPCUA不再基于分布式組件對象模型(DCOM),而是以面向服務架構(SOA)為基礎,因此,在未來的若干年中,OPCUA將逐步取代OPCDA,成為新一代的OPC標準,助力工業4.0。
而提起MQTT,或許大家有些陌生。MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。具有輕量、簡單、開放和易于實現的特點,尤其在物聯網IOT領域應用非常廣泛。
物聯網一直都是一個很熱門的話題,而數據上云,也是現在工業上很普遍的一個需求。至于如何實現,各個廠家都提供了各種不同的解決方案,無分好壞,最適合的就是最好的。
剛看完一篇名為《OPCUA+MQTT=物聯網擴展的熱門組合》的公眾號文章之后,文思泉涌,想著如何將OPCUA與MQTT聯合起來,構建一個物聯網通用框架,實現數據遠傳。
01
PART
整體網絡架構
很多時候,我們的需求是這樣的:現場有N臺不同的設備或系統,每臺設備或者系統的協議是各不相同的,希望可以用一種通用并且簡單的方法,將這些數據傳到云端,實現遠程訪問。
這樣的需求,在上位機中其實是物聯網最典型的應用之一,那么采用OPCUA+MQTT或許是個不錯的選擇,整體的框架設計如下:

圖表 1 整體網絡架構
為了實現整體功能,這里的設備層,采用Modbus Slave,基于Modbus TCP協議來做仿真測試,增加5個變量,分為為壓力1-壓力5,對應地址從40001-40010,數據類型為浮點型,運行Modbus Slave仿真結果如下:

圖表 2 ModbusTCP服務器
02
PART
服務層
至于服務層,主要是OPCUA服務器的開發應用,這里我們有兩個選擇,一種是采用第三方的OPC軟件,比如Kepware、Knight、Matrikon這些公司的產品,這種比較容易,做下相關配置即可,另外一種方式就是自己開發,相對來說難度要大一些。
這里我使用自己開發的一款軟件——上位機CMS配置一體化軟件,通過簡單配置,在10秒內,實現了ModbusTCP客戶端數據通信,結果如下:

圖表 3 ModbusTCPClient通信測試
然而,這部分,僅僅是實現了ModbusTCP客戶端的功能,如果要實現OPCUA服務器的功能,需要激活一下OPCUA服務器,在服務器節點下添加一臺OPCUA服務器即可,添加完成后,保存重新運行,結果如下:

圖表 4 開啟OPCUAServer
為了測試OPCUA服務器是否開啟成功,需要進行測試,可以使用官方軟件UAExpert軟件來測試一下:

圖表 5 OPCUAClient通信測試
03
PART
數據層
(1)在實現數據層功能之前,需要創建一個MQTT服務器,這里基于.NET CORE編寫了一個MQTT服務器的程序,并在阿里云服務器中部署運行(這里要注意開放端口1883),運行效果如下:

圖表 6 MQTT服務器
(2)MQTT服務器創建完成之后,重新打開一個CMS配置軟件來進行OPCUAClient的功能測試,上一節中的UAExpert是官方的OPCUA客戶端軟件,僅用于測試使用,這里的使用的CMS配置軟件的OPCUAClient是自己開發的客戶端程序,經過配置之后,運行結果如下:

圖表 7 OPCUAClient
(3)在CMS配置人家的服務器節點中,右擊添加一個MQTTClient,根據MQTT服務器配置相關IP、用戶、密碼、主題及更新時間等信息,具體如下:

圖表 8 MQTT客戶端配置
(4)配置完成后點擊啟動按鈕,整體運行之后,可以看到MQTT連接成功,并按照設定的周期將最新的數據發布到指定的主題中,效果如下:

圖表 9 啟動MQTT客戶端
(5)打開MQTT服務器,也可以看到不斷地有數據發布過來,這里為了便于觀察結果,將壓力1的數據仿真成每秒加1,MQTT服務器數據接收如下:

圖表 10 MQTT服務器數據接收
04
PART
應用層
通過以上的相關部署,即可實現整個OPCUA+MQTT的實現,實際應用時,只需要開啟一個MQTT客戶端,連接指定的MQTT服務器,并訂閱相應的主題,即可獲取到設備層的實時數據,這里使用一個常用的MQTT客戶端軟件,即MQTT.fx:

圖表 11 MQTT.fx通信測試
寫在最后:
本文旨在結合當下主流的OPCUA統一架構和MQTT通信協議,實現一種數據上云的途徑,對于自動化行業的上位機工程師來說,可以拓展大家的思路。未來更多是IT和OT相結合的一種趨勢,因此,作為每個工控技術人員,都要時刻保持危機感,不斷學習,不斷進步,這樣才能更好地面對未來工業的快速發展。