1. 程式人生 > >python工業網際網路監控專案實戰4—python opcua

python工業網際網路監控專案實戰4—python opcua

  前面章節我們採用OPC作為裝置到上位的資訊互動的協議,本章我們介紹跨平臺的OPC UA。OPC作為早期的工業通訊規範,是基於COM/DCOM的技術實現的,用於裝置和軟體之間交換資料,最初,OPC標準僅限於Windows作業系統。OPC是OLE for Process Control的縮寫(中文意思:用於過程控制的OLE)。

OPC規範包括了3大部分:

  1. OPC DA:OPC實時資料訪問規範,定義了包括資料值,更新時間與資料品質資訊的相關標準。前面實戰2我們使用openOPC獲取的tag位號值就屬於OPC DA,通過OPC DA讀取底層裝置的狀態、工業引數等位號的實時資料。
  2. OPC HDA:OPC歷史資料訪問規範,定義了查詢、分析歷史資料和含有時標的資料的方法。
  3. OPC AE:OPC報警事件訪問規範,定義了報警與時間型別的訊息類資訊,以及狀態變化管理等相關標準。

由於基於COM/DCOM的技術有著不能跨平臺的根本缺點,隨著技術的發展,OPC基金會在2008年釋出了新的規範:OPC UA (OPC Unified Architecture)OPC 統一框架。

1. OPC UA是什麼 

  2008年釋出的OPC統一架構(UA)將各個OPC Classic規範的所有功能整合到一個可擴充套件的框架中,獨立於平臺並且面向服務。OPC UA規範不再是基於COM/DCOM技術,因此OPC UA不僅能在Windows平臺上實現,更可以在Linux,以及其它的嵌入式平臺中實現。 

這種多層方法實現了最初設計UA規範時的目標: 

  1. 功能對等性:所有COM OPC Classic規範都對映到UA
  2. 平臺獨立性:從嵌入式微控制器到基於雲的基礎設施
  3. 安全性:資訊加密、身份驗證和稽核
  4. 可擴充套件性:新增新功能而不影響現有應用程式的能力
  5. 綜合資訊建模:用於定義複雜資訊

2. OPC UA相對於傳統OPC的變化 

功能對等性 

OPC UA不僅支援傳統OPC的所有功能,更支援更多新的功能: 

  1. 發現:在本地PC和/或網路上查詢可用的OPC伺服器
  2. 地址空間:所有資料都是分層表示的(例如檔案和資料夾),允許OPC客戶端發現、利用簡單和複雜的資料結構
  3. 按需:基於訪問許可權讀取和寫入資料/資訊
  4. 訂閱:監視資料/資訊,並且當值變化超出客戶端的設定時報告異常
  5. 事件:基於客戶端的設定通知重要資訊
  6. 方法:客戶端可以基於在伺服器上定義的方法來執行程式等
  7. OPC UA產品和OPC Classic產品之間的整合可以通過COM/Proxy Wrappers輕鬆實現。

平臺獨立性

  鑑於市場上有各種各樣的硬體平臺和作業系統,平臺獨立性就顯得至關重要。OPC UA包含但不限於以下平臺及系統:

  硬體平臺:傳統PC硬體、雲伺服器、PLC、微控制器(ARM等)

  作業系統:Microsoft Windows、Apple OSX、Android或任何Linux發行版本等

  OPC UA為企業之間的互操作性提供必要的M2M、M2E及兩者之間的基礎架構。

安全性

  最大的變化是OPC UA可以通過任何單一埠(經管理員開放後)進行通訊,這使得OPC通訊不再會由於防火牆受到大量的限制,實現Internet 通訊。

綜合資訊建模

  OPC UA資訊建模框架將資料轉換為資訊。通過完全面向物件的功能,即使是最複雜的多級結構也可以建模和擴充套件。資料型別和結構在配置檔案中定義。 例如,現有的OPC Classic規範被建模為UA配置檔案,也可以由其他組織擴充套件:

 

 

    更詳細的內容請參閱OPC基金會官網:http://opcfoundation.cn/ 

 3. 安裝python-opcua元件 

  pip安裝:pip install opcua  

  元件按照完畢後,我們可以在python環境執行uadiscover命令檢視效果: 

   由於執行電腦上沒有執行的opcua服務端,命令沒有發現任何opcua服務。下面通過執行opcua上最新的服務端程式碼再來看看效果。

  1. 在C:\Python\Python36-32\Scripts\下建立examples目錄;
  2. Copy opcua原始碼下的server-minimal.py到C:\Python\Python36-32\Scripts\examples;
  3. 在C:\Python\Python36-32目錄下執行命令,如下圖:
  4. python C:\Python\Python36-32\Scripts\examples\server-minimal.py 

  重新執行uadiscover命令,結果如下:

    現在連線到 OPCUA Sever 的模擬器提供的 OPC UA 服務了。

4. 建立一個4C9反應罐的OPCUA Server模擬器

4.1. 在Solution上新增一個Python Application Project  Tank4C9Svr

 

   開啟Tank4C9Svr.py檔案,修改Example裡的server-minimal.py檔案裡程式碼,模擬4C9反應罐如下: 

import sys
sys.path.insert(0, "..")
import time
import random

from opcua import ua, Server


if __name__ == "__main__":

    # setup our server
    server = Server()
    server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")

    # setup our own namespace, not really necessary but should as spec
    uri = "http://examples.freeopcua.github.io"
    idx = server.register_namespace(uri)

    # get Objects node, this is where we should put our nodes
    objects = server.get_objects_node()

    # populating our address space
    myobj = objects.add_object(idx, "Tank4C9")
    status = myobj.add_variable(idx, "Status", 0)
    overheadFlow = myobj.add_variable(idx, "OverheadFlow", 0)
    buttomsFlow = myobj.add_variable(idx, "ButtomsFlow", 0)
    power = myobj.add_variable(idx, "Power", 0)

    #myVar.set_writable()    # Set MyVariable to be writable by clients


    # starting!
    server.start()
    
    try:
        count = 0
        while True:
            time.sleep(5)
            count = count + 1
            print(count%4)
            if count%4>0:
                status.set_value(1)
            else:
                status.set_value(0)

            a= random.randint(100,500)
            print("OverheadFlow:"+str(a))
            overheadFlow.set_value(a)
            buttomsFlow.set_value(random.randint(50,500))
            power.set_value(random.randint(1000,5000))
    finally:
        #close connection, remove subcsriptions, etc
        server.stop()

   我們把Tank4C9Svr設定成solution預設啟動專案後,F5除錯執行Tank4C9Svr,如下圖:

 5. opcua-client瀏覽4C9 opcua伺服器

  安裝:pip install opcua-client

  cmd視窗C:\Python\Python36-32\Scripts目錄下執行opcua-client.exe命令,如下圖: 

 

 

 

    位址列輸入 opc.tcp://localhost:4840 點選連線按鈕,就能看見我們構建的Tank4C9裝置和對於的tag變量了,如下圖:

  我們可以在變數上右鍵來訂閱資料變化的讀取最新的資料值。

 

 

  6. 小結

  本小節主要介紹了OPC DA到OPC UA之間的關係,更多詳細的資訊參考OPC基金會官網。首先,我們使用 python-opcua 元件模擬構建一個Tank4C9的反應罐OPC UA伺服器,然後,演示OPC UA的Objects是如何構建的。最後,展示opcua-client連線這個OPCUA伺服器並訂閱資料變化是如何的顯示效果。下一節我們將用演示監控如何遷移到OPC UA資料通訊協議。

&n