VB開(kāi)發(fā)OPC客戶端程序的步驟與實(shí)現(xiàn)_第1頁(yè)
VB開(kāi)發(fā)OPC客戶端程序的步驟與實(shí)現(xiàn)_第2頁(yè)
VB開(kāi)發(fā)OPC客戶端程序的步驟與實(shí)現(xiàn)_第3頁(yè)
VB開(kāi)發(fā)OPC客戶端程序的步驟與實(shí)現(xiàn)_第4頁(yè)
VB開(kāi)發(fā)OPC客戶端程序的步驟與實(shí)現(xiàn)_第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)介

VB開(kāi)發(fā)OPC客戶端程序的步驟與實(shí)現(xiàn)(1)建立新工程或項(xiàng)目,在“工程”菜單下選擇“引用”,如圖5-3所示。只有引用OPCDAAuoto.DLL后,在程序中才能創(chuàng)建服務(wù)器對(duì)象,然后進(jìn)行一系列的操作。(2)在彈出的引用窗口里單擊“瀏覽(B)...”按鈕,彈出添加引用窗口,選擇OPCDAAuoto.DLL文件。(3)在引用窗口里的OPCAutomation2.0前面打鉤,按“確定”按鈕。(4)定義全局變量,這樣可以在窗體的任何方法的代碼內(nèi)應(yīng)用。變量類(lèi)型應(yīng)該指定為對(duì)象型。這些對(duì)象最好在窗體的通用部分聲明加上“OptionExplicit”語(yǔ)句,表示模塊里的所有變量都需要顯式聲明。由于OPC自動(dòng)化接口的數(shù)組的索引要求必須從1開(kāi)始,而系統(tǒng)默認(rèn)是從0開(kāi)始,為了避免錯(cuò)誤最好在代碼的最初加上“OptionBase1”語(yǔ)句。為了使對(duì)象可以處理事件,必須將objTestGrp和objServer的聲明中加上“WithEvents”語(yǔ)句,表示聲明的對(duì)象可以響應(yīng)事件。OptionExplicitOptionBase1DimWithEventsobjServerAsOPCServerDimobjGroupsAsOPCGroupsDimWithEventsobjTestGrpAsOPCGroupDimobjItemsAsOPCItems(5)連接OPC服務(wù)器和建立OPC?br>考慮到代碼的可反復(fù)使用性,采用子程序進(jìn)行編程。SubConnect(strProgIDAsString,OptionalstrNodeAsString)IfobjServerIsNothingThen'建立一個(gè)OPC服務(wù)器對(duì)象SetobjServer=NewOPCServerEndIf服務(wù)器狀態(tài)ServerState屬性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六個(gè)值,分別表示正在運(yùn)行、失敗、沒(méi)有配置、暫停、測(cè)試和沒(méi)有連接六種OPC服務(wù)器當(dāng)前的狀態(tài)。如果OPC服務(wù)器沒(méi)有連接,我們才執(zhí)行objServer.ConnectstrProgID,strNode語(yǔ)句。strProgID就是ProgID,strNode就是用于遠(yuǎn)程通信的IP地址。IfobjServer.ServerState=OPCDisconnectedThen'連接OPC服務(wù)器objServer.ConnectstrProgID,strNodeEndIf在VisualBasic中通過(guò)執(zhí)行一個(gè)Set操作實(shí)現(xiàn)調(diào)用其它接口的方法。IfobjGroupsIsNothingThen'建立一個(gè)OPC組集合SetobjGroups=objServer.OPCGroupsEndIfIfobjTestGrpIsNothingThen'添加一個(gè)OPC組SetobjTestGrp=objGroups.Add("Group")EndIfEndSub添加OPC標(biāo)簽對(duì)服務(wù)器進(jìn)行訪問(wèn)前,必須先在OPC組里添加要訪問(wèn)的OPC標(biāo)簽。OPC客戶端程序要按照用戶指定的標(biāo)簽或者從組態(tài)文件里讀取需要添加的OPC標(biāo)簽。SubAddItem()DimstrItemIDs(17)AsStringDimlClientHandles(17)AsLongDimlErrors()AsLongDimIAsIntegerIfobjTestGrpIsNothingThenExitSubEndIfIfNotobjItemsIsNothingThenIfobjItems.Count>0ThenExitSubEndIfEndIf'設(shè)置組活動(dòng)狀態(tài)。只有處于活動(dòng)狀態(tài)的OPC才進(jìn)行定期的數(shù)據(jù)更新。非活動(dòng)狀態(tài)的OPC組,除了在接到顯然的數(shù)據(jù)讀寫(xiě)要求外,并不收集任何數(shù)據(jù)。IfmnuSubscribtion.Checked=TrueThenobjTestGrp.IsActive=TrueElseobjTestGrp.IsActive=FalseEndIf'啟動(dòng)組異步通知。進(jìn)行訂閱的OPC組可以自動(dòng)收到從服務(wù)器送來(lái)的數(shù)據(jù)變化通知。objTestGrp.IsSubscribed=True'建立OPC項(xiàng)集合SetobjItems=objTestGrp.OPCItems'生成從TAG1到TAG17的項(xiàng)標(biāo)識(shí)符ForI=1To17strItemIDs(I)="Server.Group.TAG"&IlClientHandles(I)=INext'添加OPC項(xiàng)CallobjItems.AddItems(17,strItemIDs,lClientHandles,lServerHandles,lErrors)EndSub異步讀取代碼的實(shí)現(xiàn)在定時(shí)器事件內(nèi)進(jìn)行執(zhí)行AsyncRead子程序的讀取代碼,而在讀取完成事件處理返回的數(shù)據(jù)訪問(wèn)結(jié)果。SubAsyncRead()DimlErrors()AsLongIfobjTestGrpIsNothingThenExitSubEndIfIfobjTestGrp.OPCItems.Count>0Then'異步讀取lTransID_Rd=lTransID_Rd+1objTestGrp.AsyncRead17,lServerHandles,lErrors,lTransID_Rd,lCancelID_RdEndIfEndSubPrivateSubobjTestGrp_AsyncReadComplete(_ByValTransactionIDAsLong,ByValNumItemsAsLong,_ClientHandles()AsLong,ItemValues()AsVariant,_Qualities()AsLong,TimeStamps()AsDate,Errors()AsLong)Sub在按鈕中執(zhí)行AsyncWrite子程序,完成異步寫(xiě)的操作。SubAsyncWrite(nIndexAsInteger,ByRefvtItemValues()AsVariant,ByReflErrors()AsLong)DimlHandle(1)AsLongIfobjTestGrpIsNothingThenExitSubEndIfIfobjTestGrp.OPCItems.Count>0ThenlHandle(1)=lServerHandles(nIndex)'異步寫(xiě)入lTransID_Wt=lTransID_Wt+1objTestGrp.AsyncWrite1,lHandle(),vtItemValues,_lErrors,lTransID_Wt,lCancelID_WtEndIfEndSub斷開(kāi)OPC服務(wù)器連接著OPC服務(wù)器的OPC客戶應(yīng)用程序,在退出前必須斷開(kāi)和OPC服務(wù)器的連接。因?yàn)镺PC服務(wù)器并不知道OPC客戶應(yīng)用程序的退出。如果不先斷開(kāi)連接,那么OPC服務(wù)器使用的計(jì)算機(jī)資源就不會(huì)被釋放。如果這樣的問(wèn)題反復(fù)發(fā)生,久而久之,連續(xù)運(yùn)轉(zhuǎn)的自動(dòng)控制系統(tǒng)可能會(huì)計(jì)算機(jī)資源漸漸枯竭從而發(fā)生嚴(yán)重問(wèn)題,可以顯式地把它設(shè)置為“Nothing?!盨ubDisconnect()DimlErrors()AsLongIfNotobjItemsIsNothingThenIfobjItems.Count>0ThenobjItems.Remove17,lServerHandles,lErrors'清除OPC項(xiàng)EndIfSetobjItems=NothingEndIfIfNotobjTestGrpIsNothingThenobjGroups.Remove"Group"'清除OPC組SetobjTestGrp=NothingEndIfIfNotobjGroupsIsNothing

溫馨提示

  • 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)論