1. 程式人生 > >ApolloStudio高手之路(6):用Python以極簡方式讀寫OPC DA、OPC UA資料並實現UI控制元件自動繫結重新整理顯示

ApolloStudio高手之路(6):用Python以極簡方式讀寫OPC DA、OPC UA資料並實現UI控制元件自動繫結重新整理顯示

OPC(OLE for Process Control, 用於過程控制的OLE)是一個工業標準,OPC是為了連線資料來源(OPC伺服器)和資料的使用者(OPC應用程式)之間的軟體介面標準。資料來源可以是PLC,DCS,條形碼讀取器等控制裝置。隨控制系統構成的不同,作為資料來源的OPC伺服器既可以是和OPC應用程式在同一臺計算機上執行的本地OPC伺服器,也可以是在另外的計算機上執行的遠端OPC伺服器。OPC介面既適用於通過網路把最下層的控制裝置的原始資料提供給作為資料的使用者(OPC應用程式)的HMI(硬體監督介面)/SCADA(監督控制與資料採集),批處理等自動化程式,以至更上層的歷史資料庫等應用程式,也適用於應用程式和物理裝置的直接連線。所以OPC介面是適用於很多系統的具有高厚度柔軟性的介面標準。

在ApolloStudio裡面對OPC DA(經典架構)和OPC UA(統一架構)均以OPC Client的形式提供了深度的支援,無論是在OPC DA還是在OPC UA當中,均提供了節點瀏覽器(用於測試和節點管理)以及簡單的統一讀寫框架(無需關心變數型別),我們先通過指令碼工具集來預覽下:

OPC DA操作詳解

OPC DA是基於微軟DCOM機制上的,故需先安裝OPC DA元件(該元件已在本文最下方網盤地址內提供),安裝完OPC DA核心元件後,我們在ApolloStudio任務列表內新增OPC DA通訊後進入配置介面:(我們事先在本機器上安裝了KepServerEX6作為本次測試的OPC資料來源(OPC Server))

我們這裡測試的是本地OPC Server(如果資料來源服務端在遠端,需配置DCOM,配置過程比較繁瑣,這裡不作細說,不推薦該方式,遠端訪問建議使用OPC UA訪問) 。

在OPC DA客戶端配置中,我們首先重新整理獲取本地OPC伺服器列表,然後連線OPC伺服器,之後我們便可以在中間的列表中看到伺服器中所有的變數標籤,接下來我們點選我們所需的標籤,新增到監控物件就可以觀察到變數的實時資料了(如果需要刪除監控變數僅需選擇需要刪除的行後再按鍵盤的DEL鍵即可),將所有需要監控的資料都新增完畢後,點選儲存當前所有配置按鈕即可儲存所有監控變數到系統配置中。

在ApolloStudio中,無論是OPC DA還是OPC UA資料,系統都會自動根據新增到監控的順序進行自動編號,在OPC  DA中,監控變數地址列表的最後一欄“索引地址”即為系統自動分配的,後面在指令碼中呼叫時,僅需輸入索引號即可,程式碼如下:

#-*- coding: UTF-8 -*-
#載入內嵌模組
import clr,sys,time,datetime

mydata = AS.Func_OPC_DA_Read(0)#讀取0號索引的資料,返回值型別為String
AS.Func_OPC_DA_Write(0, "123")#寫0號索引資料為123,可以根據資料型別進行自動轉換

 OPC UA操作詳解

OPC UA作為面向未來的統一框架,摒棄了OPC DA的諸多弊病,基於TCP協議實現,無論資料來源是在本地還是遠端均可輕鬆訪問(遠端訪問需注意配置下服務端的防火牆出入站規則即可),我們同樣以KepServerEX為例,我們先將OPC UA配置中的伺服器端點的安全策略勾選“無”,否則需提供證書方可登入,我們這裡以無證書登入為例:

 同時,我們在上圖中獲取到了本地服務端的埠站點為:opc.tcp://127.0.0.1:49320(根據裝置不同,該地址略有差異),然後必須點選重新初始化(滑鼠右鍵托盤區的KepServerEX圖示即可看到快捷選單),讓我們剛才配置的安全策略生效。

我們回到ApolloStudio中,還是先在任務連結串列中新增OPC UA通訊單元,然後右鍵開啟配置,輸入剛才的伺服器地址,點選連線伺服器按鈕,這裡我們選擇匿名登入(剛才勾選的安全策略為無在這裡發揮了作用):

然後我們便可以看到服務端上所有的節點資料:

這裡有個問題點需要特別注意下,所選節點一定要配置為節點(比如上圖中,R暫存器即為分支點,在分支點以下的Boolean1...為節點),如果選擇的不是節點將會收到系統的提示(新增節點的時候系統會自動校驗該節點在伺服器上是否存在,不存在將收到提示),當我們儲存所有節點資料時,會收到節點提示框:

確定無誤後,點選確定儲存即可儲存所有配置的資料 。

同樣的,在ApolloStudio中指令碼也是以非常簡單的方式來讀寫OPC UA資料:

#-*- coding: UTF-8 -*-
#載入內嵌模組
import clr,sys,time,datetime

mydata = AS.Func_OPC_UA_Read(0)#讀取0號索引的資料,返回值型別為String
AS.Func_OPC_UA_Write(0, "123")#寫0號索引資料為123,可以根據資料型別進行自動轉換

 UI控制元件自動繫結重新整理顯示

為了適應更多資料監測的需求,在ApolloStudio中,無論是使用了OPC DA還是OPC UA通訊,可以無需寫指令碼即可對資料值進行監測,具體怎麼新增節點的方法上文中已進行了充分的描述,要實現資料來源與顯示控制元件進行繫結,只需在組態UI介面編輯器中,對控制元件的自定義事件屬性進行繫結即可:

直接載入該UI檔案,點選執行即可觀察到對應節點的資料變化(圖中僅以OPC DA為例,OPC UA的操作與此一致)。

 

***********************************************************************************************************************************************

ApolloStudio最新版下載地址:

連結:https://pan.baidu.com/s/1UAgivKlM4E9dNT06V9spUw 密碼:a316

歡迎加入Q群:793683827 進行學習交流