VB編寫OPC客戶端程序--精選文檔_第1頁(yè)
VB編寫OPC客戶端程序--精選文檔_第2頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

2、、COM和DCOM技術(shù),而且它本身就是一種特殊的COM,也正因?yàn)橛形④浀膮⑴c,以及以已經(jīng)成熟的技術(shù)為基礎(chǔ),它比一般的工業(yè)標(biāo)準(zhǔn)制定的效率更高,它從開始制定到第一個(gè)可運(yùn)行的規(guī)范開始運(yùn)行,只用了不到一年的時(shí)間。二、OPC原理及應(yīng)用OPC技術(shù)為工業(yè)自動(dòng)化軟件面向?qū)ο蟮拈_發(fā)提供了統(tǒng)一的標(biāo)準(zhǔn)。它大大減輕了軟件開發(fā)商的負(fù)擔(dān),軟件開發(fā)商不必再為每一硬件單獨(dú)編寫驅(qū)動(dòng)程序,只要硬件的特征符合統(tǒng)一的OPC接口程序標(biāo)準(zhǔn),或者硬件生產(chǎn)商提供OPC服務(wù)器,如圖一所示,不同的應(yīng)用軟件開發(fā)商都可以采用OPC標(biāo)準(zhǔn)設(shè)計(jì)工控軟件,以標(biāo)準(zhǔn)規(guī)定的統(tǒng)一接口通過OPC服務(wù)器存取現(xiàn)場(chǎng)數(shù)據(jù)。這樣,當(dāng)現(xiàn)場(chǎng)設(shè)備發(fā)生變化或系統(tǒng)中加入新設(shè)備時(shí),OPC

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

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

5、PC Item,OPC Server包含服務(wù)器的所有信息,也是OPC Group的容器,OPC Group除了包含它自身信息外,還負(fù)責(zé)管理OPC Item。它們的結(jié)構(gòu)如圖三所示。每一個(gè)OPC Item代表到數(shù)據(jù)源的一個(gè)連接,但它沒有提供外部接口,客戶端程序無法對(duì)OPC Item直接進(jìn)行操作,應(yīng)用程序必須依靠OPC Item的容器OPC Group來對(duì)它進(jìn)行操作,這在下面的程序中會(huì)有具體說明。2.2 OPC數(shù)據(jù)訪問方式 OPC客戶程序?qū)PC服務(wù)器中數(shù)據(jù)的存取方式分為同步讀寫方式和異步讀寫方式??蛻舫绦蚩砂凑找欢ǖ闹芷谡{(diào)用OPC Group對(duì)象的IOPCSyncIO接口對(duì)服務(wù)器程序進(jìn)行

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

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

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

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

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

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

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     '設(shè)置組為活動(dòng)狀態(tài)'假設(shè)有兩個(gè)數(shù)據(jù)源,一個(gè)是8位開關(guān)量輸入,一個(gè)是8位開關(guān)量輸出ItemId(1) =

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

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

15、Handles(1) '對(duì)應(yīng)第一個(gè)OPC ItemGroupObj.AsyncRead 1, TempServerHandles, ErrorNr, TransactionID, CancelID  第一個(gè)參數(shù)是要讀的OPC Item的個(gè)數(shù),這里只含有一個(gè)OPC Item。讀取的結(jié)果由OPC服務(wù)器通過IconnectionPointContainer接口配合IOPCDataCallback接口反調(diào)用應(yīng)用程序的事務(wù)處理程序: 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)這里的參數(shù)ClientHandles和AddItems方法中的ClientHandles是對(duì)應(yīng)的,用于判斷哪一個(gè)OPC Item在被讀取。其它參數(shù)的說明如下:TransactionID:客戶端自由使用,應(yīng)用程序開發(fā)商自定義;NumItems:表示讀取的OPC Item的個(gè)數(shù);ItemValues():各個(gè)OPC Item連接的數(shù)

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

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

19、含義是類似的,這里一般需要處理的是寫數(shù)據(jù)之后的返回狀態(tài),這里不再贅述。2.3.4斷開與服務(wù)器的連接     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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論