OPC UA(開放式連接和訊息架構)是一個開放標準,用於在工業自動化領域中建立跨平台、互操作性的通訊和數據交換。它的出現是為了解決不同廠商的工業自動化設備之間通訊和數據共享的問題。
在過去,許多工業自動化系統都是封閉的,使用各種不同的通訊協定和數據格式。這導致了設備之間的互操作性問題,並且使得數據集成和監控變得困難。為了克服這些問題,OPC UA標準應運而生。
OPC UA提供了一個統一的框架,使得不同廠商的設備和系統能夠輕鬆地進行通訊和數據交換。它支持各種不同的通訊協定,包括Ethernet、TCP/IP和Web服務等,並且提供了豐富的數據模型和安全機制,確保數據的安全性和一致性。
OPC UA被廣泛應用於工業自動化、製造業、能源管理、智慧城市等領域。它可以用於監控和控制工廠設備、收集和分析生產數據、實現製造執行系統(MES)和企業資源計劃(ERP)之間的集成,以及實現設備的遠程監控和維護等功能。總的來說,OPC UA通過提供標準化的通訊和數據交換機制,促進了工業自動化系統的互操作性和智能化水平的提升。
OPC UA的設計目標包括以下幾點:
- 跨平台互操作性: OPC UA支持多種不同的平台和操作系統,包括Windows、Linux、嵌入式系統等,並且提供了豐富的通訊協定選擇,使得不同設備之間能夠實現無縫的互操作性。
- 豐富的數據模型: OPC UA定義了豐富的數據模型,包括工業設備、生產過程、企業資源等,並且提供了標準化的數據描述和結構,使得不同系統能夠準確地理解和解釋數據。
- 安全性和可擴展性: OPC UA提供了多層次的安全機制,包括加密、身份驗證、授權等,確保通訊和數據交換的安全性。同時,它還提供了可擴展的架構,支持大規模系統和高性能需求。
- 標準化和開放性: OPC UA是一個開放標準,由國際組織制定,並且得到了廣泛的行業支持和採用。它提供了完整的文檔和規範,使得廠商和開發者能夠自由地實現和使用OPC UA相關的技術。
總的來說,OPC UA通過提供標準化的通訊和數據交換機制,促進了工業自動化和物聯網技術的發展,並且推動了工業4.0和智慧製造等新興應用的應用和發展。
在Modus 範例中我們規劃一個記憶體區塊,使用30個位址。
這裡Demo 使用Python撰寫一個OpcUa Server,內有30個變數,來達到相同的功能。
接下來在Node-Red中安裝下列package.
- node-red-contrib-opcua
Python OpcUa 30 個變數,可以看到變數的NoeId, DataType, Value, Name
Node-Red 流程規劃:每一秒輪詢OpcUa Server讀取數據更新到LED燈。
Node | 作用 |
Inject Node | 設定每秒觸發一次 |
OpcUa Item | 指定數據 NodeID: ns=2,i=3; DataType: int64; |
OpcUa Client | 連線到OpcUa Server opc.tcp://opcua-server:4840/freeopcua/server/ 指定要執行的指令 READ |
function | 將OpcUa Server讀取的數據指定給GUI msg.payload = msg.payload[0];return msg; |
ui_led | 接收 funtion 的 msg.payload 顯示紅燈或綠燈 |
LED Node 外觀 | LED Node 設定值 |
- 紅色區塊:從OpcUa Server讀出數據,指定給GUI Node
- 緣色區塊:當GUI Node被切換時,會將其值寫入OpcUa Server
Node | 作用 |
Inject Node | 程式開始運行時執行一次 |
OpcUa Item | 指定數據 NodeID: ns=2,i=3; DataType: int64; |
OpcUa Client | 連線到OpcUa Server opc.tcp://opcua-server:4840/freeopcua/server/ 指定要執行的指令 READ |
function | 將OpcUa Server讀取的數據指定給GUI msg.payload = { “arrayType”: 0, “dataType”: 8, “value”: [ msg.payload[0], 0 ]}return msg; |
switch | 接收 funtion 的 msg.payload 顯示開或關 |
OpcUa Item | 接收switch的數據 NodeID: ns=2,i=3; DataType: int64; |
OpcUa Client | 連線到OpcUa Server opc.tcp://opcua-server:4840/freeopcua/server/ 指定要執行的指令 WRITE |