盧建勤 趙彥鴻
摘 要:OPC為工業監控編程帶來了便利,用戶不用再為各種復雜的通訊協議而苦惱,OPC可以說是對幾乎所有可編程控制器的萬能通訊工具。本文以InCoSol公司的S7A為例,介紹了OPC的簡單應用過程,并從使用的方便實用性和系統資源占用率兩方面給出了相關建議。從OPC服務器的安裝設置和OPC客戶端的VB編程,提出了如何使得OPC服務器更加易用和友好,為讀者提供參考。
關鍵詞:OPC;服務器;應用;客戶端;實踐
1 概述
OPC(OLE for Process Control, 用于過程控制的OLE)是一個工業標準,管理這個標準的國際組織是OPC基金會,OPC基金會現有會員遍布全球,包括世界上所有主要的自動化控制系統、儀器儀表及過程控制系統的公司。 換言之,主流的PLC廠家都是OPC的會員單位,它們的每一種主流PLC,都有相應的OPC-Server應用軟件與之配套,如西門子公司的S7-200的PC_ACCESS,S7-300/400的SimaticNET,ORMON 的ORMON-OPCserver。
這些OPC-Server軟件有什么作用?當計算機安裝了這些軟件之后,一旦運行該軟件,便主動實時采集有關PLC的數據到計算機上,然后為其他應用程序提供所需的數據。
基于微軟的OLE(現在的Active X)、COM (部件對象模型)和DCOM (分布式部件對象模型)技術。OPC包括一整套接口、屬性和方法的標準集,用于過程控制和制造業自動化系統。
我們要編寫一個監控PLC的監控軟件,只要在程序中放一個OPC-Client的對象,或者叫控件,通過簡單的設置,就可以通過OPC-Server取到PLC中的實時數據。而且,這個方法適用于任何支持OPC的PLC。
OPC為工業監控編程帶來了便利,用戶不用再為各種復雜的通訊協議而苦惱,OPC可以說是對幾乎所有可編程控制器的萬能通訊工具。本文將在使用的方便實用性和系統資源占用率給出相關建議。
2 西門子S7-300/400OPC服務器應用
SimaticNET軟件包是西門子公司為其S7-300/400可編程控制器提供的OPC服務器軟件。在需要的計算機上安裝SimaticNET軟件后重啟。SimaticNET后臺要運行許多與之相關的進程,會占用一些系統資源,在設置數據通訊時經常會出現編譯下載失敗的問題。
在此介紹另外一個S7-300/400的OPC服務器,InCoSol公司的S7A。
InCoSol分別取自以下三個單詞Industrial Communications Solutions,意為工業通訊解決方案。這家公司的產品在其網站上只有一個,就是S7A。這款產品,它既是IFIX與西門子S7-300/400的I/O驅動程序,同時也是一個針對S7-300/400的獨立的OPCServer。
它的7.20 224版本的安裝包不到4M,不僅短小精悍,安裝過程也很友好。如果是在已安裝IFIX的計算機上,它會自動安裝到IFIX軟件所在目錄中,反之,它會提示指定一個安裝位置。作為S7-300/400的OPC服務器,它不需要西門子任何軟件的支持。
安裝完成后,它的使用也很方便,在“開始”中,就會出現如圖1的快捷項,點擊進入設置。DEFAULT.S7A是默認的配置文件,也是一個配置的實例。此實例中六項代表六種不同的接口和協議。如圖2所示。
我們以通過ETHERNET建立OPC與S7-300PLC的連接為例,介紹設置過程,點擊File->New,或者點擊工具欄上的New,新建一個配置文件,如圖3。
然后點擊File->Save,取個名稱為TEST.S7A,保存;點擊Option
->Setup,跳出一個對話框,點擊Default Path,輸入TEST.S7A,表明OPC服務運行時的工作配置文件,如圖4。
具體配置過程如下:第一步,添加一個Channel(通道),選擇接口協議S7 TCP/IP,通道的名稱可以由系統自動產生,并使能。第二步,添加一個Device(設備),設備名稱修改為PLC1,配置IP地址為192.168.100.101,并使能,如圖5。如有多臺PLC,則繼續添加設備。第三步,添加Data Block(數據塊),指定數據區域,起始地址,數據長度,并使能。根據需要添加一個或多個數據塊。設置完成,保存。點擊Display Mode->Start進行運行,Display Mode->Stats Mode,立即可以看到通訊狀態。
上述的三步,回答了三個問題,一是用什么通訊,用鼠標點擊選擇即可;二是和誰通訊,輸入相應PLC的IP地址即可;三是要什么數據,選擇PLC的存儲區域,輸入起始地址和字節數。S7A作為OPC服務器軟件,安裝方便,簡單易用,功能強大,是優秀的OPC服務器軟件的典范。
3 OPC客戶端應用
OPC服務器軟件正常運行后,就可以采集到PLC的實時數據。這些實時數據提供給OPC客戶端軟件使用,這個OPC客戶端軟件可以是組態軟件的一個I/O驅動程序,也可以是一個獨立的應用程序。
當前作為針對PLC的數據監控系統,大多采用組態軟件平臺開發,而較少采用VB/VC等通用平臺開發。即使采用組態平臺開發數據監控系統,當用戶提出一些復雜的報表系統,或者是給模擬屏發送顯示數據之類的功能,組態平臺就力不從心,甚至無法實現,而用VB編寫一個OPC客戶端的小程序,就可以輕松完成此類功能。
下面舉個簡例:PLC1是S7-300/400站點,S7A作OPC服務器。標簽是OPC服務器和OPC客戶端交換數據的基本單位,例中是3個標簽。在VB中先定義一組全局變量,這是OPC客戶端必須要有的。
Private Const TagNum = 3? ? ? ? ? ? ? ? ?'標簽數
Dim WithEvents MyOPCServer As OPCServer ? ?'OPC服務器對象
Dim MyOPCGroupColl As OPCGroups? ? ? ? ?'OPC標簽組集合
Dim WithEvents MyOPCGroup As OPCGroup'OPC標簽組
Dim MyOPCItemColl As OPCItems? ? ? ?? ?'OPC標簽集合
Dim ServerIDs() As Long? ? ? ? ? ? ? ? ? ? ?'服務端標識
Dim ClientIDs(1 To TagN) As Long? ? ? ?? ?'客戶端標識
Dim ItemIDs(1 To TagN) As String? ? ? ? '標簽標識
Private Sub StartClient()? ? ? ? ? ? ? ? '啟動OPC客戶端
Dim Errs() as long
On Error Resume Next
For nn = 1 To TagN? ?'初始化客戶端標識,每個標簽有唯一的數字
ClientIDs(nn) = nn
Next nn
ItemIDs(1)= "PLC1:DB1.DBW0"? ?? ? '整數型
ItemIDs(2)= "PLC1:DB1.DBW2"? ? ? ? ?'整數型
ItemIDs(3)= "PLC1:DB1.DBF4"? ?? ? ?'浮點型
MyOPCServer.Connect? "InCoSol.S7AOPC" ,? "127.0.0.1"
Set MyOPCGroupColl = MyOPCServer.OPCGroups
MyOPCGroupColl.DefaultGroupIsActive = True
Set MyOPCGroup = MyOPCGroupColl.Add("ABC")
Set MyOPCItemColl = MyOPCGroup.OPCItems
MyOPCItemColl.AddItems TagN, ItemIDs, ClientIDs, ServerIDs, Errs
MyOPCGroup.IsSubscribed = True
End Sub
只要運行StartClient(可以放在FormLoad中),即可連接OPC服務器。OPC服務器總是在客戶端第一次連接時,發送全部標簽的數據,然后,只發送數據產生變化的標簽。OPC客戶端則在接收到數據后,激活DataChange事件,我們可以在此事件中處理數據。
Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
'在此加入數據處理代碼
End Sub
4 OPC的工作效率問題
有了OPC服務器,用戶取得PLC的實時數據變得簡單了。如果只是從一臺或幾臺PLC中,取幾個或幾十個數據,那一切表現都正常;而當監控軟件要通過OPC從幾十臺PLC中,取幾百到幾千個數據時,問題就來了,系統變得很慢,CPU占用率高達90%以上。SimaticNET,ORMON-OPCserver我們都有應用案例,說明它們的效率是不高的。
下面我們來探討一下如何提高OPC的工作效率。OPC服務器的兩個主要工作,一是和PLC通訊,二是和OPC客戶端通訊。當OPC服務器和OPC客戶端運行于同一臺計算機時,相比這兩者占用的時間和系統資源,前者占了絕大部分。因為前者使用的網絡等硬件資源帶寬通常小于100MBPS,而后者是CPU和內存之間交換數據通常大于10000MBPS。
因此,提高OPC服務器和PLC通訊的效率是關鍵。這個效率取決于兩個因素:通訊次數和數據量。當OPC服務器要從PLC取得數據量一定時,通訊次數越少,則通訊效率越高。
SimaticNET,ORMON-OPCserver效率不高的原因是它們和PLC通訊的次數太多或者數據太多了。假設之一:OPC客戶端所需的每個標簽,OPC服務器都要和PLC進行一次通訊,這樣通訊次數太多自然效率低下;假設之二:OPC服務器讀取PLC所有存儲器的數據,這個工作量很大,這樣的通訊數據太多次數也不少,數據利用率低,總體效率也不會高。
S7A作為OPC服務器,增加了一項數據塊定義,用戶可以把所需數據標簽盡量集中到一個或幾個數據塊中,減少了通訊次數,提高了數據利用率。它為所有PLC廠家樹立了OPC服務器的典范。
5 結束語
本文以S7A為例,介紹了OPC的簡單應用過程,給出OPC服務器的安裝設置和OPC客戶端的VB編程,提出如何使得OPC服務器更加易用和友好及如何提高OPC的效率,為讀者提供參考,以適應復雜工程項目的需求。
參考文獻:
[1]呂正斌.淺析OPC應用[J].2009.
[2]崔堅.西門子工業網絡通信指南[S].2006.
[3]OPC基金會.數據訪問自動化接口標準規范[S].1999,2(02).