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