OPCUA+MQTT構建物聯網通用框架

常哥說程式設計發表於2020-05-25

 寫在前面:

為了應對標準化和跨平臺的趨勢,更好的推廣OPC,OPC基金會在OPCDA成功應用的基礎上推出了一個新的OPC標準——OPC UA,OPCUA不再基於分散式元件物件模型(DCOM),而是以面向服務架構(SOA)為基礎,因此,在未來的若干年中,OPCUA將逐步取代OPCDA,成為新一代的OPC標準,助力工業4.0。

而提起MQTT,或許大家有些陌生。MQTT是一個基於客戶端-伺服器的訊息釋出/訂閱傳輸協議。具有輕量、簡單、開放和易於實現的特點,尤其在物聯網IOT領域應用非常廣泛。

物聯網一直都是一個很熱門的話題,而資料上雲,也是現在工業上很普遍的一個需求。至於如何實現,各個廠家都提供了各種不同的解決方案,無分好壞,最適合的就是最好的。

剛看完一篇名為《OPCUA+MQTT=物聯網擴充套件的熱門組合》的公眾號文章之後,文思泉湧,想著如何將OPCUA與MQTT聯合起來,構建一個物聯網通用框架,實現資料遠傳。

整體網路架構

很多時候,我們的需求是這樣的:現場有N臺不同的裝置或系統,每臺裝置或者系統的協議是各不相同的,希望可以用一種通用並且簡單的方法,將這些資料傳到雲端,實現遠端訪問。

這樣的需求,其實是物聯網最典型的應用之一,那麼採用OPCUA+MQTT或許是個不錯的選擇,整體的框架設計如下:

圖表 1 整體網路架構

 

為了實現整體功能,這裡的裝置層,採用Modbus Slave,基於Modbus TCP協議來做模擬測試,增加5個變數,分為為壓力1-壓力5,對應地址從40001-40010,資料型別為浮點型,執行Modbus Slave模擬結果如下:

圖表 2 ModbusTCP伺服器

 

服務層

至於服務層,主要是OPCUA伺服器的開發應用,這裡我們有兩個選擇,一種是採用第三方的OPC軟體,比如Kepware、Knight、Matrikon這些公司的產品,這種比較容易,做下相關配置即可,另外一種方式就是自己開發,相對來說難度要大一些。

這裡我使用自己開發的一款軟體——CMS配置一體化軟體,通過簡單配置,在10秒內,實現了ModbusTCP客戶端資料通訊,結果如下:

圖表 3 ModbusTCPClient通訊測試

 

然而,這部分,僅僅是實現了ModbusTCP客戶端的功能,如果要實現OPCUA伺服器的功能,需要啟用一下OPCUA伺服器,在伺服器節點下新增一臺OPCUA伺服器即可,新增完成後,儲存重新執行,結果如下:

圖表 4 開啟OPCUAServer

 

為了測試OPCUA伺服器是否開啟成功,需要進行測試,可以使用官方軟體UAExpert軟體來測試一下:

圖表 5 OPCUAClient通訊測試

 

資料層

(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伺服器資料接收

 

應用層

通過以上的相關部署,即可實現整個OPCUA+MQTT的實現,實際應用時,只需要開啟一個MQTT客戶端,連線指定的MQTT伺服器,並訂閱相應的主題,即可獲取到裝置層的實時資料,這裡使用一個常用的MQTT客戶端軟體,即MQTT.fx:

圖表 11 MQTT.fx通訊測試


寫在最後:

本文旨在結合當下主流的OPCUA統一架構和MQTT通訊協議,實現一種資料上雲的途徑,對於自動化行業的工程師來說,可以擴充大家的思路。未來更多是IT和OT相結合的一種趨勢,因此,作為每個工控技術人員,都要時刻保持危機感,不斷學習,不斷進步,這樣才能更好地面對未來工業的快速發展。

 

 

 

公眾號:thinger_swj

長按識別二維碼關注


相關文章