VB編寫OPC客戶端程序_第1頁
VB編寫OPC客戶端程序_第2頁
VB編寫OPC客戶端程序_第3頁
VB編寫OPC客戶端程序_第4頁
VB編寫OPC客戶端程序_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、如何用VB編寫OPC客戶端程序一、引言在工業自動化領域,計算機早已成為必不可少的工具,計算機技術的不斷發展,大大加速了工業自動化技術的進步,而各種各樣的工業控制應用軟件正是具體實現這一進程的最重要的工具。以往,應用軟件開發商要為每一種硬件開發驅動程序,由于硬件的種類繁多,特征各異,軟件開發商的負擔異常繁重,尤其是如果硬件特征發生了變化,整個應用軟件相應的驅動程序也要相應地修改,這對軟件開發商,對整個工程都是很不利的。而且由于驅動程序的不統一,不同應用程序訪問同一硬件設備時常常發生沖突。OPC(OLE for Process Control)技術標準正是在這種情況下產生的。OPC基于微軟的OLE

2、、COM和DCOM技術,而且它本身就是一種特殊的COM,也正因為有微軟的參與,以及以已經成熟的技術為基礎,它比一般的工業標準制定的效率更高,它從開始制定到第一個可運行的規范開始運行,只用了不到一年的時間。二、OPC原理及應用OPC技術為工業自動化軟件面向對象的開發提供了統一的標準。它大大減輕了軟件開發商的負擔,軟件開發商不必再為每一硬件單獨編寫驅動程序,只要硬件的特征符合統一的OPC接口程序標準,或者硬件生產商提供OPC服務器,如圖一所示,不同的應用軟件開發商都可以采用OPC標準設計工控軟件,以標準規定的統一接口通過OPC服務器存取現場數據。這樣,當現場設備發生變化或系統中加入新設備時,OPC

3、服務器的提供商需要重新實現服務器接口,以適應硬件的變化,但由于服務器所提供的接口的一致性,工控軟件不作更改即可繼續使用,只是某些情況下可能需要重新組態(如添加新的PLC站點等),這樣,軟件開發商可以節省大量的時間致力于工控軟件的性能方面的提高,不必再考慮硬件變化帶來的影響,大大減小了軟件維護的工作量。這正如OPC規范里所說,OPC將應用軟件和硬件設備劃清了界限。2.1 OPC基本結構OPC服務器有兩類接口:定制接口(Custom Interface) 、自動化接口(Automation Interface),定制接口比較低級,它提供更多的功能,效率也比后者高,可以用C+語言調用此類接

4、口,自動化接口主要用于VB、DELPHI等開發工具。按照OPC規范,定制接口是服務商必須提供的,而自動化接口則是可選的,不過,OPC基金會(管理OPC標準的國際組織)提供了一個叫做“自動化包裝器”的動態連接庫,用于在兩者間轉換。如圖二所示:在OPC的早期規范里主要包括OPC數據存取規范、OPC報警和事件、OPC歷史數據存取規范。OPC數據存取規范詳細規定了客戶程序和服務器程序進行數據通信的機制,其它類型的OPC服務器往往是在數據存取服務器的基礎上通過增加對象、擴展接口而來的,所以該規范也是其它OPC規范的基礎。OPC數據存取規范規定的基本對象有三類:OPC Server、OPC Group和O

5、PC Item,OPC Server包含服務器的所有信息,也是OPC Group的容器,OPC Group除了包含它自身信息外,還負責管理OPC Item。它們的結構如圖三所示。每一個OPC Item代表到數據源的一個連接,但它沒有提供外部接口,客戶端程序無法對OPC Item直接進行操作,應用程序必須依靠OPC Item的容器OPC Group來對它進行操作,這在下面的程序中會有具體說明。2.2 OPC數據訪問方式 OPC客戶程序對OPC服務器中數據的存取方式分為同步讀寫方式和異步讀寫方式。客戶程序可按照一定的周期調用OPC Group對象的IOPCSyncIO接口對服務器程序進行

6、數據同步存取操作,此時客戶方的調用函數一直運行到所有數據讀寫完成,然后才能執行其它操作,因此,這種方法適合與讀取少量數據,如果數據多的話,會使系統處于假死狀態,無法進行操作。IOPCSyncIO2是從3.0版才出現的,是對IOPCSyncIO的增強。IOPCAsyncIO2和IOPCAsyncIO3是異步方式中使用的接口,異步訪問時,當客戶端對服務器提出訪問要求后,立即返回到OPC應用程序執行其它操作,無須等待,當OPC服務器完成數據讀取后通知OPC應用程序,應用程序從而得到數據。其中前者是在2.0版本中新定義的,具有較高的通信性能;后者則是在3.0版本中才剛剛出現,同IOPCSyncIO2類

7、似,IOPCAsyncIO3是對IOPCAsyncIO2的增強。在異步方式下,服務器程序收到讀請求后,調用客戶程序方的IOPCDataCallback接口,將數據發送給客戶程序。異步方式中允許服務器將讀寫操作進行排隊,使客戶方的調用函數可立刻返回,當服務器讀寫操作完成后再通知客戶程序。顯然,異步通報方式的通信效率更高,這種方式也是本文所要討論的方式,但有多個客戶程序與服務器相連時,同步讀寫方式更具時效性。對于每個組對象,客戶程序可根據需要采用其中一種數據存取方式,而不能兩者都使用。異步讀取還有一種特殊的方式,叫做訂閱方式(Subscribe)這種情況下,應用程序不需要發出讀請求,OPC服務器在

8、定期更新數據的時候,如果發現數據有一定變化,則自動向應用程序發出通知和傳輸變化的數據。2.3 編寫OPC客戶端應用程序     VB簡單實用,是比較理想的OPC應用程序快速開發工具,若要用VB開發OPC應用程序,必須要使用OPC自動化包裝器,這在前文已經提過,這種包裝器一般由OPC服務器的供應商以DLL形式提供,下面就以SIEMENS提供的sopcdaauto.dll為例,介紹如何開發OPC應用程序,這也正是筆者在最近的工程中實際應用到的,這是基于DA2.0的版本。首先,新建VB工程后,作圖四所示的引用:2.3.1 建立OP

9、C對象     首先申明OPC對象:Option Base 1Dim WithEvents ServerObj As OPCServer  'OPC Server對象,連接OPC服務器Dim GroupsObj As OPCGroups          'OPC Groups對象,添加OPC組Dim WithEvents GroupObj As OPCGroup  'OPC Gro

10、up對象Dim ItemsObj As OPCItems             'OPC Item集合Dim ServerHandles() As Long           '服務器端OPC Item的句柄Dim ClientHandles() as Long      

11、60;     '客戶端OPC Item的句柄Dim ItemId(2) As StringDim Errors() As Long接下來,生成各個對象:If ServerObj Is Nothing Then Set ServerObj = New OPCServer'連接OPC服務器If ServerObj.ServerState = OPCDisconnected ThenServerObj.Connect ("OPC.SimaticNET") '假設OPC服務器運行在本機  

12、;End IfIf GroupsObj Is Nothing Then Set GroupsObj = ServerObj.OPCGroupsIf GroupObj Is Nothing Then Set GroupObj = GroupsObj.AddIf ItemsObj Is Nothing Then Set ItemsObj = GroupObj.OPCItemsGroupObj.IsActive = True     '設置組為活動狀態'假設有兩個數據源,一個是8位開關量輸入,一個是8位開關量輸出ItemId(1) =

13、 "S7:S7 connection_1IB0"ItemId(2) = "S7:S7 connection_1QB0"ClientHandles(1) = 1ClientHandles(2) = 2'添加組項目,ServerHandles數組的值為各個OPC Item的服務器句柄,' ClientHandles數組的值為各個OPC Item的客戶端句柄,由應用程序設定Call ItemsObj.AddItems(2, ItemId, ClientHandles, ServerHandles, Errors)  2.3.

14、2異步數據讀取 ' OPC Item的服務器句柄,添加OPC Item時由服務器分配Dim TempServerHandles(1) As Long'事務標志符,由客戶端產生,它包含的信息提供給OnReadComplete事件Dim TransactionID As Long'取消標志符,服務器端產生,用于操作需要被取消的時候Dim CancelID As Long'包含讀取每個OPC Item時返回的信息    Dim ErrorNr() As LongTempServerHandles(1) = Server

15、Handles(1) '對應第一個OPC ItemGroupObj.AsyncRead 1, TempServerHandles, ErrorNr, TransactionID, CancelID  第一個參數是要讀的OPC Item的個數,這里只含有一個OPC Item。讀取的結果由OPC服務器通過IconnectionPointContainer接口配合IOPCDataCallback接口反調用應用程序的事務處理程序: Private Sub GroupObj_AsyncReadComplete(ByVal TransactionID As Long,

16、 ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date, Errors() As Long)這里的參數ClientHandles和AddItems方法中的ClientHandles是對應的,用于判斷哪一個OPC Item在被讀取。其它參數的說明如下:TransactionID:客戶端自由使用,應用程序開發商自定義;NumItems:表示讀取的OPC Item的個數;ItemValues():各個OPC Item連接的數

17、據源的值,類型為Variant;Qualities():OPC Item的品質值;TimeStamps():時間戳;Errors():記錄服務器返回的信息。2.3.3 異步數據寫入 Dim TempServerHandles (1) As LongDim VValue(1) As VariantDim ErrorNr() As LongDim TransactionID As LongDim CancelID As LongTempServerHandles(1)=ServerHandles(2)VValue(1)=1'假設要將“1”寫入ClientHandle為2

18、的OPC ItemGroupObj.AsyncWrite 1,TempServerHandles,VValue, ErrorNr, TransactionID, CancelID    同樣,AsyncWrite也對應一個事務處理程序:Private Sub groupObj_AsyncWriteComplete(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, Errors() As Long)它的參數的含義和AsuncReadComplete中的

19、含義是類似的,這里一般需要處理的是寫數據之后的返回狀態,這里不再贅述。2.3.4斷開與服務器的連接     ItemsObj.Remove ItemsObj.Count,ServerHandles, Errors '清除OPC Item    Set ItemsObj = Nothing  '釋放資源,下同    If Not GroupObj Is Nothing Then        GroupsObj.Remove  GroupObj.ServerHandle  '刪除組    End If    If Not GroupsObj Is Nothing Then        Set GroupsObj = No

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論