OPC函數(shù)及方法_第1頁(yè)
OPC函數(shù)及方法_第2頁(yè)
OPC函數(shù)及方法_第3頁(yè)
OPC函數(shù)及方法_第4頁(yè)
OPC函數(shù)及方法_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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、開(kāi)發(fā)OPC客戶端程序時(shí),首先應(yīng)該生成OPC服務(wù)器支持的OPC對(duì)象,然后就可以使用OPC對(duì)象支持的屬性和方法,對(duì)其進(jìn)行各種操作。這樣使得客戶程序可以像使用自己支持的數(shù)據(jù)和功能一樣,去使用服務(wù)器對(duì)象支持的數(shù)據(jù)和功能。在VisualBasic6.0里,是以對(duì)象為單位對(duì)OPC服務(wù)器進(jìn)行訪問(wèn)的。通過(guò)OPC自動(dòng)化服務(wù)器的對(duì)象模型,可以得知OPC自動(dòng)化接口由以下四種對(duì)象所定義。1OPCServer服務(wù)器對(duì)象OPCServer的一個(gè)實(shí)例,OPC服務(wù)器自動(dòng)含有一個(gè)OPC組集合對(duì)象,并可在其基礎(chǔ)上生成一個(gè)OPC瀏覽器對(duì)象。OPCServer服務(wù)器對(duì)象在使用其它OPC對(duì)象前必須生成,也就是說(shuō)在引用其他對(duì)象之前必須先

2、創(chuàng)建OPCServer。OPCServer對(duì)象提供了對(duì)數(shù)據(jù)源訪問(wèn)和通信的方法,其提供了“Connect”方法來(lái)連接OPC自動(dòng)化服務(wù)器。主要的屬性有:StartTime(只讀屬性,服務(wù)器啟動(dòng)運(yùn)行的時(shí)間)、CurrentTime(只讀屬性,返回服務(wù)器顯示的當(dāng)前時(shí)間)、LastUpdateTime(對(duì)于本OPC應(yīng)用程序的最后數(shù)據(jù)更新時(shí)間)、MajorVersion(只讀屬性,OPC服務(wù)器的主版本號(hào))、MinorVersion(只讀屬性,OPC服務(wù)器的次版本號(hào))、Bandwith(只讀屬性,返回OPC服務(wù)器的不敏感區(qū)的百分比)、ServerState(只讀屬性,返回服務(wù)器的運(yùn)行狀態(tài),這個(gè)屬性是比較重要

3、的,方便客戶端程序查詢服務(wù)器的狀態(tài),從而達(dá)到排除故障的目的)、ServerName(只讀屬性,返回客戶程序所要連接的服務(wù)器名,也就是OPC服務(wù)器的ProgID)、ServerNode(服務(wù)器所在計(jì)算機(jī)名或者計(jì)算機(jī)的IP,用于連接遠(yuǎn)程的計(jì)算機(jī))等。主要方法有:GetOPCservers(獲得己經(jīng)注冊(cè)的OPC服務(wù)器的程序標(biāo)識(shí)符,即ProgID)、Connect(用來(lái)建立與OPC數(shù)據(jù)存取服務(wù)器的連接)、Disconnect(斷開(kāi)與服務(wù)器的連接)、CreatBrowser(創(chuàng)建OPC瀏覽器的對(duì)象)等。事件:只有一個(gè)ServerShutDown(關(guān)閉服務(wù)器,這個(gè)事件在服務(wù)器即將關(guān)閉之前發(fā)生,OPC服務(wù)器

4、以此通知OPC客戶程序預(yù)告即將關(guān)閉,OPC客戶程序應(yīng)該在接到此事件通知后,立即清除所有的OPC組并斷開(kāi)與OPC服務(wù)器的連接)。2OPCGroups組集合對(duì)象OPC組的容器,包含所有客戶端創(chuàng)建的OPCGroup對(duì)象的自動(dòng)化集合。這個(gè)對(duì)象的用途是添加、清除和管理OPC組主要的屬性有:DefaultGroupIsActive(新添加的OPC組的活動(dòng)狀態(tài)的默認(rèn)值。默認(rèn)初始值是活動(dòng)狀態(tài))、DefaultGroupUpdateRate(新添加的OPC組的默認(rèn)數(shù)據(jù)更新周期,默認(rèn)初始值是1000毫秒)、DefaultGrouPDeadband(新添加的OPC組的默認(rèn)不敏感區(qū)的默認(rèn)值,即能引起數(shù)據(jù)變化的最小數(shù)值

5、百分比,默認(rèn)值是0%)、DefaultGroupLocaleID(新添加的OPC組區(qū)域標(biāo)識(shí)符的默認(rèn)值)、DefaultGroupTimeBias(新添加的OPC組的時(shí)間偏差的默認(rèn)值)等。主要方法:Item(OPC組集合的默認(rèn)方法。返回由集合索引指定的OPC組對(duì)象)、Add(在OPC組集合對(duì)象中添加一個(gè)組對(duì)象)、GetOPCGroup(返回指定的OPC組)、RemoveAll(為服務(wù)器關(guān)機(jī)作準(zhǔn)備,刪除所有組和標(biāo)簽)、Remove(刪除一個(gè)指定的組)、ConnectPublicGroup(連接到公共組)等。事件:AllGroupsDataChange(由多個(gè)OPC組的數(shù)據(jù)變化而引發(fā)的事件)。3OP

6、CGroup組對(duì)象,OPCGroup的一個(gè)實(shí)例,它包含自身的信息,同時(shí)向OPCItems對(duì)象提供數(shù)據(jù)獲取服務(wù),它自動(dòng)含有一個(gè)Items集合對(duì)象,允許客戶端來(lái)組織它們需要訪問(wèn)的數(shù)據(jù)。OPCGroup可以作為一個(gè)單元來(lái)進(jìn)行激活或停止激活操作。主要屬性:Name(OPC組的名稱)、IsPublic(判斷是否公共組)、IsActive(控制組的激活狀態(tài)。只有活動(dòng)狀態(tài)的OPC組才進(jìn)行定期的數(shù)據(jù)更新)、IsSubscribed(控制組的訂閱狀態(tài))、ClientHandle(客戶句柄是由客戶端程序指定的用于識(shí)別某個(gè)OPC組的長(zhǎng)整型數(shù)。當(dāng)進(jìn)行數(shù)據(jù)訪問(wèn)或詢問(wèn)OPC組狀態(tài)時(shí),服務(wù)器將這個(gè)數(shù)值和結(jié)果一起返回給OPC

7、客戶程序)、TimeBias(數(shù)據(jù)采樣時(shí)間的時(shí)間偏差值,用于調(diào)整設(shè)備時(shí)間和OPC服務(wù)器時(shí)間的偏差)、DeadBand(不敏感區(qū),只有數(shù)據(jù)變化超過(guò)此不敏感區(qū)時(shí),服務(wù)器才觸發(fā)數(shù)據(jù)變化事件發(fā)生)、UpdateRate(數(shù)據(jù)更新周期)、OPCItems(OPC組的默認(rèn)屬性,OPC標(biāo)簽集合對(duì)象)。主要方法:SyncRead(同步讀OPC組內(nèi)單個(gè)或多個(gè)OPC項(xiàng)的數(shù)據(jù)值、質(zhì)量標(biāo)志和采樣時(shí)間)、Syncwrite(同步寫(xiě)入OPC組內(nèi)單個(gè)或多個(gè)OPC項(xiàng)的數(shù)據(jù)值)、AsyncRead(異步讀)、Asyncwrite(異步寫(xiě))、AsyncRefresh(觸發(fā)數(shù)據(jù)變化事件發(fā)生,刷新OPC組內(nèi)所有活動(dòng)的OPC標(biāo)簽的數(shù)據(jù)

8、。結(jié)果有數(shù)據(jù)變化事件DataChange返回)等。主要事件:DataChange(在OPC組內(nèi)任何OPC項(xiàng)的數(shù)據(jù)值或質(zhì)量標(biāo)志變化時(shí)觸發(fā)的事件)、AsyncReadComplete(異步讀結(jié)束時(shí)發(fā)生的事件)、AsyncWriteComplete(異步寫(xiě)結(jié)束時(shí)發(fā)生的事件)等。4OPCItems項(xiàng)集合對(duì)象,是OPC項(xiàng)對(duì)象的容器,自動(dòng)化客戶程序創(chuàng)建的OPCGroup對(duì)象所包含的所有OPCItems對(duì)象的自動(dòng)化集合。屬性:Parent(返回所屬的OPC組對(duì)象)、DefaultRequestedDataType(添加OPC項(xiàng)時(shí),默認(rèn)的要求的數(shù)據(jù)類型。初始值是控制設(shè)備的固有數(shù)據(jù)類型,既是VT_Empty)、

9、DefaultAccessPath(添加OPC項(xiàng)時(shí),默認(rèn)的數(shù)據(jù)訪問(wèn)路徑。初始值是空)、DefaultIsActive(添加OPC項(xiàng)時(shí),默認(rèn)的激活狀態(tài),初始值是真)、Count(集合對(duì)象的固有屬性。OPC項(xiàng)集合中的OPC項(xiàng)數(shù))。方法:Item(返回OPC標(biāo)簽集合中由集合索引指定的OPC標(biāo)簽)、GetOPCItem(返回OPC項(xiàng)集合中由服務(wù)器句柄指定的OPC項(xiàng))、Addltem(在OPC項(xiàng)集合中添加新的OPC項(xiàng))、Remove(刪除指定的項(xiàng))、Aalidate(檢查項(xiàng)創(chuàng)建的有效性)、SetActive(分別設(shè)置項(xiàng)為活動(dòng)或非活動(dòng)狀態(tài))、SetClientHandles(設(shè)置OPC項(xiàng)的客戶句柄)、Se

10、tDataTypes(設(shè)置OPC項(xiàng)要求的數(shù)據(jù)類型)。5OPCItem項(xiàng)對(duì)象表示與OPC服務(wù)器內(nèi)某個(gè)數(shù)據(jù)的連接。各個(gè)項(xiàng)包含了數(shù)據(jù)值、質(zhì)量標(biāo)志以及采樣時(shí)間。數(shù)據(jù)值的類型為VARIANT。主要屬性:ClientHandle(客戶句柄是由客戶端程序指定的用于識(shí)別某個(gè)OPC組的長(zhǎng)整型數(shù)。當(dāng)OPC組事件發(fā)生時(shí),服務(wù)器將這個(gè)客戶句柄和結(jié)果一起返回給OPC客戶程序)、ServerHandle(服務(wù)器句柄是有OPC服務(wù)器設(shè)置的用于識(shí)別某個(gè)OPC標(biāo)簽的一個(gè)全局唯一長(zhǎng)整型數(shù))、AccessPath(返回OPC客戶程序指定的訪問(wèn)路徑)、AccessRights(返回OPC項(xiàng)的訪問(wèn)權(quán))、ItemID(返回識(shí)別這個(gè)OPC

11、項(xiàng)的標(biāo)識(shí)符)、IsActive(用以控制OPC項(xiàng)的活動(dòng)狀態(tài))、RequestedDataType(獲取項(xiàng)的值的數(shù)據(jù)類型)、Value(返回從OPC服務(wù)器讀取的最新數(shù)據(jù)值)、Quality(返回從OPC服務(wù)器讀取的最新數(shù)據(jù)值的質(zhì)量標(biāo)志)、TimeStamp(時(shí)間戳)等。主要方法:Read(從服務(wù)器讀取OPC項(xiàng)的數(shù)值)、Write(向服務(wù)器寫(xiě)入OPC項(xiàng)的數(shù)值)。6OPC瀏覽器對(duì)象OPCBrowser是OPC服務(wù)器名稱空間的枝和葉的集合,可以瀏覽服務(wù)器配置中項(xiàng)的名字,一個(gè)OPCServer對(duì)象實(shí)例中只能有一個(gè)OPCBrowser對(duì)象的實(shí)例。瀏覽器功能是選用功能,OPC服務(wù)器不支持瀏覽器的時(shí)候,即使執(zhí)

12、行CreateBrowser也不生成這個(gè)對(duì)象。主要屬性:Organization(OPC服務(wù)器的名稱空間的類型,有平面型和樹(shù)型兩種類型)、Filter(使用ShowBrancher或ShowLeafs方法時(shí)的瀏覽對(duì)象過(guò)濾器,使用這個(gè)過(guò)濾器可以縮小被瀏覽的名稱范圍)、DataType(使用ShowLeafs方法時(shí),希望瀏覽的標(biāo)簽的數(shù)據(jù)類型)、Count(瀏覽結(jié)果中的瀏覽標(biāo)簽數(shù))。主要方法:Item(返回瀏覽結(jié)果中按集合索引ItemSpecifier指定的對(duì)象)、ShowBranches(將現(xiàn)在位置下的所有符合過(guò)濾條件的枝加入到瀏覽結(jié)果中)、ShowLeafs(將現(xiàn)在位置下的所有符合過(guò)濾條件的葉加

13、入到瀏覽結(jié)果中)、MoveUp(向現(xiàn)在位置的上一層移動(dòng))、MoveToRoot(向名稱空間的最上層移動(dòng))、MoveDown(向現(xiàn)在位置的下一層移動(dòng))、MoveTo(向?yàn)g覽器的絕對(duì)位置移動(dòng))、GetItemID(由瀏覽標(biāo)簽的名稱返回OPC標(biāo)簽的標(biāo)識(shí)符)。(1)建立新工程或項(xiàng)目,在“工程”菜單下選擇“引用”,如圖5-3所示。只有引用OPCDAAuoto.DLL后,在程序中才能創(chuàng)建服務(wù)器對(duì)象,然后進(jìn)行一系列的操作。(2)在彈出的引用窗口里單擊“瀏覽(B)”按鈕,彈出添加引用窗口,選擇OPCDAAuoto.DLL文件。(3)在引用窗口里的OPCAutomation2.0前面打鉤,按“確定”按鈕。(4)

14、定義全局變量,這樣可以在窗體的任何方法的代碼內(nèi)應(yīng)用。變量類型應(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)事件。OptionExplicitOptionBase1 Dim WithEventsobjServer As OPCServerDim ob

15、jGroups As OPCGroups Dim WithEventsobjTestGrp As OPCGroupDim objItems As OPCItems(5)連接OPC服務(wù)器和建立OPC組考慮到代碼的可反復(fù)使用性,采用子程序進(jìn)行編程。 SubConnect(strProgIDAsString,OptionalstrNodeAsString)If objServerIsNothing Then 建立一個(gè)OPC服務(wù)器對(duì)象SetobjServer=NewOPCServerEndIf服務(wù)器狀態(tài)ServerState屬性一共有OPCRunning、OPCFailed、OPCNoconfig、O

16、PCSuspended、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地址。If objServer.ServerState = OPCDisconnected Then連接OPC服務(wù)器objServer.Connect strProgID,strNodeEndIf在VisualBasic中,通過(guò)執(zhí)行一個(gè)Set操作實(shí)現(xiàn)調(diào)用其它

17、接口的方法。If objGroupsIsNothing Then 建立一個(gè)OPC組集合Set objGroups = objServer.OPCGroupsEndIfIf objTestGrpIsNothing Then 添加一個(gè)OPC組 Set objTestGrp = objGroups.Add(Group) EndIf EndSub(6)添加OPC標(biāo)簽對(duì)服務(wù)器進(jìn)行訪問(wèn)前,必須先在OPC組里添加要訪問(wèn)的OPC標(biāo)簽。 OPC客戶端程序要按照用戶指定的標(biāo)簽或者從組態(tài)文件里讀取需要添加的OPC標(biāo)簽。Sub AddItem()DimstrItemIDs(17) As StringDimlClien

18、tHandles(17) As LongDim lErrors () As Long DimI As IntegerIf ObjTestGrpIsNothing Then ExitSub EndIf If NotobjItemsIsNothing ThenIf objItems.Count0 Then ExitSub EndIf EndIf設(shè)置組活動(dòng)狀態(tài)。只有處于活動(dòng)狀態(tài)的OPC才進(jìn)行定期的數(shù)據(jù)更新。非活動(dòng)狀態(tài)的OPC組,除了在接到顯然的數(shù)據(jù)讀寫(xiě)要求外,并不收集任何數(shù)據(jù)。If mnuSubscribtion.Checked = True Then objTestGrp.IsActive = T

19、rue Else objTestGrp.IsActive=False EndIf啟動(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,l

20、Errors)EndSub(7)異步讀取代碼的實(shí)現(xiàn)在定時(shí)器事件內(nèi)進(jìn)行執(zhí)行AsyncRead子程序的讀取代碼,而在讀取完成事件處理返回的數(shù)據(jù)訪問(wèn)結(jié)果。SubAsyncRead()DimlErrors()AsLongIfobjTestGrpIsNothingThenExitSubEndIfIfobjTestGrp.OPCItems.Count0Then異步讀取lTransID_Rd=lTransID_Rd+1objTestGrp.AsyncRead17,lServerHandles,lErrors,lTransID_Rd,lCancelID_RdEndIfEndSubPrivateSubobjTe

21、stGrp_AsyncReadComplete(_ByValTransactionIDAsLong,ByValNumItemsAsLong,_ClientHandles()AsLong,ItemValues()AsVariant,_Qualities()AsLong,TimeStamps()AsDate,Errors()AsLong)Sub(8)在按鈕中執(zhí)行AsyncWrite子程序,完成異步寫(xiě)的操作。SubAsyncWrite(nIndexAsInteger,ByRefvtItemValues()AsVariant,_ByReflErrors()AsLong)DimlHandle(1)AsL

22、ongIfobjTestGrpIsNothingThenExitSubEndIfIfobjTestGrp.OPCItems.Count0ThenlHandle(1)=lServerHandles(nIndex)異步寫(xiě)入lTransID_Wt=lTransID_Wt+1objTestGrp.AsyncWrite1,lHandle(),vtItemValues,_lErrors,lTransID_Wt,lCancelID_WtEndIfEndSub(9)斷開(kāi)OPC服務(wù)器連接著OPC服務(wù)器的OPC客戶應(yīng)用程序,在退出前必須斷開(kāi)和OPC服務(wù)器的連接。因?yàn)镺PC服務(wù)器并不知道OPC客戶應(yīng)用程序的退出。如

23、果不先斷開(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”。SubDisconnect()DimlErrors()AsLongIfNotobjItemsIsNothingThenIfobjItems.Count0ThenobjItems.Remove17,lServerHandles,lErrors清除OPC項(xiàng)EndIfSetobjItems=NothingEndIfIfNotobjTestGrpIsNothingThenobjGroups.RemoveG

24、roup清除OPC組SetobjTestGrp=NothingEndIfIfNotobjGroupsIsNothingThenSetobjGroups=NothingEndIfIfNotobjServerIsNothingThenIfobjServer.ServerStateOPCDisconnectedThenobjServer.Disconnect斷開(kāi)OPC服務(wù)器.EndIfSetobjServer=NothingEndIfEndSubWTOPCSvr.DLL作為一個(gè)快速開(kāi)發(fā)OPC服務(wù)器的工具包,它封裝了所有關(guān)于COM和OPC的技術(shù)細(xì)節(jié),將Microsoft公司的OLE、COM、DCOM技

25、術(shù)和OPC的技術(shù)細(xì)節(jié)隱藏起來(lái),使開(kāi)發(fā)OPC服務(wù)器的工作集中在特定的數(shù)據(jù)采集任務(wù)上來(lái)。利用DLL開(kāi)發(fā)OPC服務(wù)器的開(kāi)發(fā)者無(wú)需考慮許多涉及到底層接口實(shí)現(xiàn)方面的工作,開(kāi)發(fā)者無(wú)須掌握ATL、COM/DCOM,也無(wú)須了解OPC技術(shù)的細(xì)節(jié),只需具有基本的編程基礎(chǔ)即可快速上手。開(kāi)發(fā)者的應(yīng)用程序完全可以在一個(gè)較高層次上去描述OPC數(shù)據(jù)。利用這個(gè)DLL也可以很容易的實(shí)現(xiàn)對(duì)現(xiàn)有系統(tǒng)的改造,因?yàn)樗梢院苋菀椎丶傻浆F(xiàn)有的應(yīng)用系統(tǒng)中,而無(wú)需太多的工作。該工具包支持多個(gè)客戶端并發(fā)訪問(wèn)服務(wù)器,并為每個(gè)客戶端創(chuàng)建一個(gè)獨(dú)立線程。WTOPCSvr.DLL工具包其實(shí)就是一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL)。支持OPCl.0和OPC2.0數(shù)據(jù)

26、存取規(guī)范定義的所有接口,包括實(shí)現(xiàn)了瀏覽器功能的接口。服務(wù)器應(yīng)用程序通過(guò)傳遞一個(gè)名字和值給動(dòng)態(tài)鏈接庫(kù)去創(chuàng)建過(guò)程標(biāo)簽,動(dòng)態(tài)鏈接庫(kù)記錄這個(gè)數(shù)據(jù)點(diǎn),同時(shí)傳送給所有使用這個(gè)數(shù)據(jù)點(diǎn)的客戶。任何時(shí)候這個(gè)服務(wù)器應(yīng)用程序都可以改變這個(gè)數(shù)據(jù)點(diǎn)的值,而所有使用這個(gè)數(shù)據(jù)點(diǎn)的客戶都會(huì)得到數(shù)據(jù)值改變的通報(bào)。一個(gè)連接到服務(wù)器的客戶改變?nèi)魏芜^(guò)程標(biāo)簽都會(huì)得到調(diào)用返回通報(bào)消息。動(dòng)態(tài)鏈接庫(kù)還支持動(dòng)態(tài)創(chuàng)建OPC標(biāo)簽,如果一個(gè)客戶請(qǐng)求一個(gè)還沒(méi)有創(chuàng)建的標(biāo)簽,則產(chǎn)生一個(gè)調(diào)用返回,應(yīng)用程序就根據(jù)這個(gè)調(diào)用返回的信息創(chuàng)建一個(gè)標(biāo)簽。使用這個(gè)動(dòng)態(tài)鏈接庫(kù)(WTOPCSvr.DLL)可以迅速地開(kāi)發(fā)OPC數(shù)據(jù)存取服務(wù)器,它提供了一些把定制數(shù)據(jù)集成到OPC

27、服務(wù)器的易于使用的API函數(shù)。另外這個(gè)動(dòng)態(tài)鏈接庫(kù)可以很容易的集成到現(xiàn)有應(yīng)用中,也可以集成到一個(gè)新的應(yīng)用中。使用動(dòng)態(tài)鏈接庫(kù)開(kāi)發(fā)OPC服務(wù)器時(shí),關(guān)鍵要求用戶對(duì)動(dòng)態(tài)鏈接庫(kù)的各個(gè)API函數(shù)要熟悉,從而提高軟件開(kāi)發(fā)的靈活性。這個(gè)動(dòng)態(tài)鏈接庫(kù)包含五大功能塊:調(diào)用返回定義、初始化和注冊(cè)函數(shù)、OPC項(xiàng)函數(shù)、實(shí)時(shí)信息函數(shù)和輔助功能函數(shù)。1調(diào)用返回定義明確地定義了DLL用于返回給服務(wù)器程序的調(diào)用返回的具體含義,以實(shí)現(xiàn)客戶應(yīng)用與服務(wù)器應(yīng)用之間的數(shù)據(jù)交換,DLL提供了以下一些API函數(shù)。DeclareFunctionEnableUnknownItemNotificationLibWtOPCSvrAlias_Enable

28、UnknownItemNotification4(ByValCallbackAsLong)AsLong:這個(gè)函數(shù)的返回值表示一個(gè)客戶請(qǐng)求了一個(gè)沒(méi)有定義或是己經(jīng)被暫停刷新的標(biāo)簽,但無(wú)論客戶請(qǐng)求的標(biāo)簽是否是己定義的標(biāo)簽,這個(gè)函數(shù)都定義了一個(gè)從DLL返回的調(diào)用返回。當(dāng)連接建立后,服務(wù)器應(yīng)用可以使用這個(gè)調(diào)用返回對(duì)動(dòng)態(tài)創(chuàng)建的標(biāo)簽進(jìn)行操作。DeclareFunctionEnableItemRemovalNotificationLibWtOPCSvrAlias_EnableItemRemovalNotification4(ByValCallbackAsLong)AsLong:當(dāng)對(duì)一個(gè)標(biāo)簽的最后客戶引用釋放后

29、,這個(gè)函數(shù)將定義一個(gè)來(lái)自DLL的調(diào)用返回,服務(wù)器應(yīng)用程序可以刪除這個(gè)標(biāo)簽或暫停這個(gè)標(biāo)簽的刷新。DeclareFunctionEnableDisconnectNotificationLibWtOPCSvrAlias_EnableDisconnectNotification4(ByValCallbackAsLong)AsLong:當(dāng)客戶應(yīng)用請(qǐng)求斷開(kāi)連接時(shí),這個(gè)函數(shù)產(chǎn)生一個(gè)來(lái)自DLL的調(diào)用返回通知服務(wù)器應(yīng)用斷開(kāi)連接。DeclareFunctionEnableWriteNotificationLibWtOPCSvrAlias_EnableWriteNotification8(ByValCallback

30、AsLong,ByValConvertToNativeAsLong)AsLong:當(dāng)OPC客戶寫(xiě)一個(gè)己定義的標(biāo)簽時(shí),這個(gè)函數(shù)產(chǎn)生一個(gè)來(lái)自DLL的調(diào)用返回。正常情況下,DLL將把值轉(zhuǎn)變成項(xiàng)的私有類型,但在某些情況下,它要求應(yīng)用自己完成這個(gè)轉(zhuǎn)變過(guò)程。2初始化與注冊(cè)函數(shù)DeclareFunctionInitWTOPCsvrLibWtOPCSvrAlias_InitWTOPCsvr8(ByRefCLSID_SvrAsByte,ByValServerRateAsLong)AsLong:這個(gè)函數(shù)實(shí)現(xiàn)對(duì)DCOM的初始化和創(chuàng)建OPC服務(wù)器對(duì)象。其中參數(shù)CLSID_Svr是OPC服務(wù)器的類標(biāo)識(shí)(CLSID)用于

31、OPC客戶連接服務(wù)器;參數(shù)ServerRate定義了客戶的數(shù)據(jù)刷新速率,其單位是毫秒。如果函數(shù)調(diào)用成功則返回TRUE,否則返回FALSE。DeclareFunctionUpdateRegistryLibWtOPCSvrAlias_UpdateRegistry16(ByRefCLSID_SvrAsByte,ByRefNameAsByte,ByRefDescrAsByte,ByRefExePathAsByte)AsLong:這個(gè)函數(shù)封裝了Windows注冊(cè)函數(shù),用于OPC服務(wù)器的注冊(cè)。其中參數(shù)CLSID_Svr是OPC服務(wù)器的類標(biāo)識(shí)(CLSID);參數(shù)Name定義了服務(wù)器的名字;參數(shù)Descr可以

32、是任何描述服務(wù)器的字符串,但常常包含一些版本信息;參數(shù)ExePath定義了可執(zhí)行程序的完整的Windows路徑。如果函數(shù)調(diào)用成功則返回TRUE,否則返回FALSE。DeclareFunctionUnregisterServerLibWtOPCSvrAlias_UnregisterServer8(ByRefCLSID_SvrAsByte,ByRefNameAsByte)AsLong:這是一個(gè)服務(wù)器注銷函數(shù),其參數(shù)CLSID_Svr是OPC服務(wù)器的類標(biāo)識(shí)(CLSID);參數(shù)Name為服務(wù)器的名字。如果函數(shù)調(diào)用成功則返回TRUE,否則返回FALSE。3OPC項(xiàng)函數(shù)DeclareFunctionCre

33、ateTagLibWtOPCSvrAlias_CreateTag28(ByRefNameAsByte,ByValValueAsVariant,ByValInitialQualityAsInteger,ByValIsWritableAsLong)AsLong:這是一個(gè)在動(dòng)態(tài)鏈接庫(kù)里創(chuàng)建過(guò)程標(biāo)簽的函數(shù),參數(shù)Name定義了OPC客戶要訪問(wèn)的過(guò)程標(biāo)簽,這個(gè)名字字符串可以是服務(wù)器可接受的任何文本字符串,其中也可使用分層名字(使用“.”分隔符),這將導(dǎo)致動(dòng)態(tài)鏈接庫(kù)創(chuàng)建OPC分層名字空間;參數(shù)Value定義了標(biāo)簽的初始數(shù)據(jù);參數(shù)InitialQuality定義了標(biāo)簽的OPC屬性標(biāo)志;參數(shù)IsWriteabl

34、e決定標(biāo)簽是否是可寫(xiě)標(biāo)簽。如果標(biāo)簽創(chuàng)建成功,函數(shù)返回?cái)?shù)據(jù)點(diǎn)的句柄(HANDLE),否則返回INVALID_HANDLE_VALUE。DeclareFunctionUpdateTagLibWtOPCSvrAlias_UpdateTag24(ByValTagHandleAsLong,ByValValueAsVariant,ByValQualityAsInteger)AsLong:這個(gè)函數(shù)調(diào)用實(shí)現(xiàn)對(duì)過(guò)程標(biāo)簽的數(shù)據(jù)刷新。Value就是來(lái)自現(xiàn)場(chǎng)硬件的數(shù)據(jù)。DeclareFunctionUpdateTagWithTimeStampLibWtOPCSvrAlias_UpdateTagWithTimeStam

35、p32(ByValTagHandleAsLong,ByValValueAsVariant,ByValQualityAsInteger,ByValTimestampAsDouble)AsLong:這個(gè)函數(shù)允許應(yīng)用改變一個(gè)己定義的標(biāo)簽的值、屬性標(biāo)志和時(shí)間標(biāo)簽。如果應(yīng)用沒(méi)有提供時(shí)間標(biāo)簽(timestamp),則DLL將采用系統(tǒng)時(shí)間。參數(shù)TagHandle表示數(shù)據(jù)點(diǎn);參數(shù)Value表示數(shù)據(jù)值;參數(shù)Quality表示新的屬性條件。如果函數(shù)調(diào)用成功則返回TRUE,否則返回FALSE。DeclareFunctionSetTagPropertiesLibWtOPCSvrAlias_SetTagProperti

36、es28(ByValTagHandleAsLong,ByValPropertyIDAsLong,ByRefDescriptionAsByte,ByValValueAsVariant)AsLong:任何數(shù)量的OPC項(xiàng)屬性都可以用這個(gè)函數(shù)設(shè)置,DLL保持了所有已定義屬性的一個(gè)列表,OPC客戶可以訪問(wèn)這些屬性。DeclareFunctionUpdateTagByNameLibWtOPCSvrAlias_UpdateTagByName24(ByRefNameAsByte,ByValValueAsVariant,ByValQualityAsInteger)AsLong:可以使用這個(gè)函數(shù)來(lái)改變一個(gè)已定義過(guò)

37、程標(biāo)簽的值。DeclareFunctionSuspendTagUpdatesLibWtOPCSvrAlias_SuspendTagUpdates8(ByValTagHandleAsLong,ByValOnOffAsLong)AsLong:這個(gè)函數(shù)可以使服務(wù)器知道一個(gè)客戶描述的特殊標(biāo)簽的調(diào)用返回。在多數(shù)情況下,服務(wù)器是隨著其接收數(shù)據(jù)的變化而刷新標(biāo)簽的,DLL處理所有客戶請(qǐng)求、通報(bào)和刷新。在一定條件下,當(dāng)客戶訪問(wèn)一個(gè)項(xiàng)時(shí),希望服務(wù)器僅僅刷新OPC標(biāo)簽數(shù)據(jù)庫(kù)。通過(guò)暫停刷新功能,當(dāng)客戶試圖訪問(wèn)這個(gè)項(xiàng)時(shí),DLL將處理一個(gè)未知項(xiàng)的調(diào)用返回,然后,服務(wù)器開(kāi)始重新開(kāi)始刷新標(biāo)簽直到下一個(gè)暫停刷新產(chǎn)生。TagHa

38、ndle定義了暫停刷新的項(xiàng)。DeclareFunctionReadTagLibWtOPCSvrAlias_ReadTag8(ByValTagHandleAsLong,ByRefValueAsVariant)AsLong:這是一個(gè)讀標(biāo)簽的函數(shù)。DeclareFunctionReadTagWithTimeStampLibWtOPCSvrAlias_ReadTagWithTimeStamp&16(ByValTagHandleAsLong,ByRefValueAsVariant,ByRefQualityAsInteger,ByRefTimestampAsFileTime)AsLong:應(yīng)用程序使用這個(gè)

39、函數(shù)去獲取一個(gè)標(biāo)簽的當(dāng)前值。參數(shù)Value表示了接收的數(shù)據(jù)值,參數(shù)Timestamp是標(biāo)簽的當(dāng)前時(shí)間標(biāo)簽值。4實(shí)時(shí)信息DeclareFunctionStartUpdateTagsLibWtOPCSvrAlias_StartUpdateTags0()AsLong:開(kāi)始刷新。DeclareFunctionUpdateTagToListLibWtOPCSvrAlias_UpdateTagToList24(ByValTagHandleAsLong,ByValValueAsVariant,ByValQualityAsInteger)AsLong:刷新標(biāo)簽列表。DeclareFunctionEndUpda

40、teTagsLibWtOPCSvrAlias_EndUpdateTags0()AsLong:上面三個(gè)函數(shù)必須一起使用,它們一起提供了一次刷新多個(gè)標(biāo)簽的有效方式。首先調(diào)用StartUpdateTags,然后用UpdateTagToList代替UpdateTag()調(diào)用,當(dāng)所有標(biāo)簽都被刷新后再調(diào)用EndUpdateTags()結(jié)束此次刷新操作。5輔助功能函數(shù)DeclareFunctionRefreshAllClientsLibWtOPCSvrAlias_RefreshAllClients0()AsLong:服務(wù)器可以使用此函數(shù)對(duì)所有連接的客戶進(jìn)行初始化。正常情況下,客戶應(yīng)用數(shù)據(jù)是基于DLL中的異步時(shí)針?biāo)⑿碌模@個(gè)函數(shù)讓服務(wù)器可以刷新所有客戶數(shù)據(jù)。DeclareFunctionResetServerRateLibWtOPCS

溫馨提示

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