VB編寫(xiě)OPC客戶端程序Word版_第1頁(yè)
VB編寫(xiě)OPC客戶端程序Word版_第2頁(yè)
VB編寫(xiě)OPC客戶端程序Word版_第3頁(yè)
VB編寫(xiě)OPC客戶端程序Word版_第4頁(yè)
VB編寫(xiě)OPC客戶端程序Word版_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、傳播優(yōu)秀Word版文檔 ,希望對(duì)您有幫助,可雙擊去除!如何用VB編寫(xiě)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)用軟件開(kāi)發(fā)商要為每一種硬件開(kāi)發(fā)驅(qū)動(dòng)程序,由于硬件的種類繁多,特征各異,軟件開(kāi)發(fā)商的負(fù)擔(dān)異常繁重,尤其是如果硬件特征發(fā)生了變化,整個(gè)應(yīng)用軟件相應(yīng)的驅(qū)動(dòng)程序也要相應(yīng)地修改,這對(duì)軟件開(kāi)發(fā)商,對(duì)整個(gè)工程都是很不利的。而且由于驅(qū)動(dòng)程序的不統(tǒng)一,不同應(yīng)用程序訪問(wèn)同一硬件設(shè)備時(shí)常常發(fā)生沖突。OPC(OLE for Process Control)

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

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

4、,效率也比后者高,可以用C+語(yǔ)言調(diào)用此類接口,自動(dòng)化接口主要用于VB、DELPHI等開(kāi)發(fā)工具。按照OPC規(guī)范,定制接口是服務(wù)商必須提供的,而自動(dòng)化接口則是可選的,不過(guò),OPC基金會(huì)(管理OPC標(biāo)準(zhǔn)的國(guó)際組織)提供了一個(gè)叫做“自動(dòng)化包裝器”的動(dòng)態(tài)連接庫(kù),用于在兩者間轉(zhuǎn)換。如圖二所示:傳播優(yōu)秀Word版文檔 ,希望對(duì)您有幫助,可雙擊去除!在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ǔ)上通過(guò)增加對(duì)象、擴(kuò)展接口而來(lái)的,所以該規(guī)范也是其它OPC

5、規(guī)范的基礎(chǔ)。OPC數(shù)據(jù)存取規(guī)范規(guī)定的基本對(duì)象有三類:OPC Server、OPC Group和OPC Item,OPC Server包含服務(wù)器的所有信息,也是OPC Group的容器,OPC Group除了包含它自身信息外,還負(fù)責(zé)管理OPC Item。它們的結(jié)構(gòu)如圖三所示。每一個(gè)OPC Item代表到數(shù)據(jù)源的一個(gè)連接,但它沒(méi)有提供外部接口,客戶端程序無(wú)法對(duì)OPC Item直接進(jìn)行操作,應(yīng)用程序必須依靠OPC Item的容器OPC Group來(lái)對(duì)它進(jìn)行操作,這在下面的程序中會(huì)有具體說(shuō)明。2.2 OPC數(shù)據(jù)訪問(wèn)方式OPC客戶程序?qū)PC服務(wù)器中數(shù)據(jù)的存取方式分為同步讀寫(xiě)方式和異步讀寫(xiě)方式。客戶程序

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

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

8、做訂閱方式(Subscribe)這種情況下,應(yīng)用程序不需要發(fā)出讀請(qǐng)求,OPC服務(wù)器在定期更新數(shù)據(jù)的時(shí)候,如果發(fā)現(xiàn)數(shù)據(jù)有一定變化,則自動(dòng)向應(yīng)用程序發(fā)出通知和傳輸變化的數(shù)據(jù)。2.3編寫(xiě)OPC客戶端應(yīng)用程序傳播優(yōu)秀Word版文檔 ,希望對(duì)您有幫助,可雙擊去除!VB簡(jiǎn)單實(shí)用,是比較理想的OPC應(yīng)用程序快速開(kāi)發(fā)工具,若要用VB開(kāi)發(fā)OPC應(yīng)用程序,必須要使用OPC自動(dòng)化包裝器,這在前文已經(jīng)提過(guò),這種包裝器一般由OPC服務(wù)器的供應(yīng)商以DLL形式提供,下面就以SIEMENS提供的sopcdaauto.dll為例,介紹如何開(kāi)發(fā)OPC應(yīng)用程序,這也正是筆者在最近的工程中實(shí)際應(yīng)用到的,這是基于DA2.0的版本。首先

9、,新建VB工程后,作圖四所示的引用:2.3.1建立OPC對(duì)象首先申明OPC對(duì)象:Option Base 1Dim WithEvents ServerObj As OPCServerOPC Server對(duì)象,連接OPC服務(wù)器Dim GroupsObj As OPCGroupsOPC Groups對(duì)象,添加OPC組Dim WithEvents GroupObj As OPCGroupOPC Group對(duì)象Dim ItemsObj As OPCItemsOPC Item集合Dim ServerHandles() As Long服務(wù)器端OPC Item的句柄Dim ClientHandles() as

10、 Long客戶端OPC Item的句柄Dim ItemId(2) As StringDim Errors() As Long接下來(lái),生成各個(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ī)End IfIf GroupsObj Is Nothing Then Set GroupsObj = ServerObj.OPCGr

11、oupsIf 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位開(kāi)關(guān)量輸入,一個(gè)是8位開(kāi)關(guān)量輸出ItemId(1) = S7:S7 connection_1IB0ItemId(2) = S7:S7 connection_1QB0ClientHandles(1) = 1ClientHandles(2) = 2添加組項(xiàng)目,Server

12、Handles數(shù)組的值為各個(gè)OPC Item的服務(wù)器句柄,傳播優(yōu)秀Word版文檔 ,希望對(duì)您有幫助,可雙擊去除! ClientHandles數(shù)組的值為各個(gè)OPC Item的客戶端句柄,由應(yīng)用程序設(shè)定Call ItemsObj.AddItems(2, ItemId, ClientHandles, ServerHandles, Errors)2.3.2異步數(shù)據(jù)讀取 OPC Item的服務(wù)器句柄,添加OPC Item時(shí)由服務(wù)器分配Dim TempServerHandles(1) As Long事務(wù)標(biāo)志符,由客戶端產(chǎn)生,它包含的信息提供給OnReadComplete事件Dim TransactionI

13、D As Long取消標(biāo)志符,服務(wù)器端產(chǎn)生,用于操作需要被取消的時(shí)候Dim CancelID As Long包含讀取每個(gè)OPC Item時(shí)返回的信息Dim ErrorNr() As LongTempServerHandles(1) = ServerHandles(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ù)器通過(guò)IconnectionPointContainer接口配

14、合IOPCDataCallback接口反調(diào)用應(yīng)用程序的事務(wù)處理程序:Private Sub GroupObj_AsyncReadComplete(ByVal TransactionID As Long, 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

15、在被讀取。其它參數(shù)的說(shuō)明如下:TransactionID:客戶端自由使用,應(yīng)用程序開(kāi)發(fā)商自定義;NumItems:表示讀取的OPC Item的個(gè)數(shù);ItemValues():各個(gè)OPC Item連接的數(shù)據(jù)源的值,類型為Variant;Qualities():OPC Item的品質(zhì)值;TimeStamps():時(shí)間戳;Errors():記錄服務(wù)器返回的信息。2.3.3異步數(shù)據(jù)寫(xiě)入Dim TempServerHandles (1) As LongDim VValue(1) As Variant傳播優(yōu)秀Word版文檔 ,希望對(duì)您有幫助,可雙擊去除!Dim ErrorNr() As LongDim T

16、ransactionID As LongDim CancelID As LongTempServerHandles(1)=ServerHandles(2)VValue(1)=1假設(shè)要將“1”寫(xiě)入ClientHandle為2的OPC ItemGroupObj.AsyncWrite 1,TempServerHandles,VValue, ErrorNr, TransactionID, CancelID同樣,AsyncWrite也對(duì)應(yīng)一個(gè)事務(wù)處理程序:Private Sub groupObj_AsyncWriteComplete(ByVal TransactionID As Long, ByVal

17、NumItems As Long, ClientHandles() As Long, Errors() As Long)它的參數(shù)的含義和AsuncReadComplete中的含義是類似的,這里一般需要處理的是寫(xiě)數(shù)據(jù)之后的返回狀態(tài),這里不再贅述。2.3.4斷開(kāi)與服務(wù)器的連接ItemsObj.Remove ItemsObj.Count,ServerHandles, Errors 清除OPC ItemSet ItemsObj = Nothing釋放資源,下同If Not GroupObj Is Nothing ThenGroupsObj.RemoveGroupObj.ServerHandle刪除組End IfIf Not GroupsObj Is Nothing ThenSet GroupsObj = NothingEnd IfIf Not ServerObj Is Nothing ThenIf ServerObj.ServerState O

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論