關於OPC

開發OPC客戶端程序時,首先應該生成OPC服務器支持的OPC對象,然後就可以使用OPC對象支持的屬性和方法,對其進行各種操作。這樣使得客戶程序可以像使用自己支持的數據和功能一樣,去使用服務器對象支持的數據和功能。在VisualBasic6.0裏,是以對象爲單位對OPC服務器進行訪問的。通過OPC自動化服務器的對象模型,可以得知OPC自動化接口由以下四種對象所定義。

1 OPCServer服務器對象OPCServer的一個實例,OPC服務器自動含有一個OPC組集合對象,並可在其基礎上生成一個OPC瀏覽器對象。OPCServer服務器對象在使用其它OPC對象前必須生成,也就是說在引用其他對象之前必須先創建OPCServer。OPCServer對象提供了對數據源訪問和通信的方法,其提供了“Connect”方法來連接OPC自動化服務器。

主要的屬性有:

StartTime(只讀屬性,服務器啓動運行的時間)、

CurrentTime(只讀屬性,返回服務器顯示的當前時間)、

LastUpdateTime(對於本OPC應用程序的最後數據更新時間)、

MajorVersion(只讀屬性,OPC服務器的主版本號)、

MinorVersion(只讀屬性,OPC服務器的次版本號)、

Bandwith(只讀屬性,返回OPC服務器的不敏感區的百分比)、

ServerState(只讀屬性,返回服務器的運行狀態,這個屬性是比較重要的,方便客戶端程序查詢服務器的狀態,從而達到排除故障的目的)、

ServerName(只讀屬性,返回客戶程序所要連接的服務器名,也就是OPC服務器的ProgID)、

ServerNode(服務器所在計算機名或者計算機的IP,用於連接遠程的計算機)等。

主要方法有:

GetOPCservers(獲得己經註冊的OPC服務器的程序標識符,即ProgID)、Connect(用來建立與OPC數據存取服務器的連接)、

Disconnect(斷開與服務器的連接)、

CreatBrowser(創建OPC瀏覽器的對象)等。

事件:

只有一個ServerShutDown(關閉服務器,這個事件在服務器即將關閉之前發生,OPC服務器以此通知OPC客戶程序預告即將關閉,OPC客戶程序應該在接到此事件通知後,立即清除所有的OPC組並斷開與OPC服務器的連接)。

 

2 OPCGroups組集合對象OPC組的容器,包含所有客戶端創建的OPCGroup對象的自動化集合。這個對象的用途是添加、清除和管理OPC組

主要的屬性有:

DefaultGroupIsActive(新添加的OPC組的活動狀態的默認值。默認初始值是活動狀態)、

DefaultGroupUpdateRate(新添加的OPC組的默認數據更新週期,默認初始值是1000毫秒)、DefaultGrouPDeadband(新添加的OPC組的默認不敏感區的默認值,即能引起數據變化的最小數值百分比,默認值是0%)、

DefaultGroupLocaleID(新添加的OPC組區域標識符的默認值)、

DefaultGroupTimeBias(新添加的OPC組的時間偏差的默認值)等。

主要方法:

Item(OPC組集合的默認方法。返回由集合索引指定的OPC組對象)、

Add(在OPC組集合對象中添加一個組對象)、

GetOPCGroup(返回指定的OPC組)、

RemoveAll(爲服務器關機作準備,刪除所有組和標籤)、

Remove(刪除一個指定的組)、

ConnectPublicGroup(連接到公共組)等。

事件:

AllGroupsDataChange(由多個OPC組的數據變化而引發的事件)。

3 OPCGroup組對象,OPCGroup的一個實例,它包含自身的信息,同時向OPCItems對象提供數據獲取服務,它自動含有一個Items集合對象,允許客戶端來組織它們需要訪問的數據。OPCGroup可以作爲一個單元來進行激活或停止激活操作。

主要屬性:

Name(OPC組的名稱)、

IsPublic(判斷是否公共組)、

IsActive(控制組的激活狀態。只有活動狀態的OPC組才進行定期的數據更新)、

IsSubscribed(控制組的訂閱狀態)、

ClientHandle(客戶句柄是由客戶端程序指定的用於識別某個OPC組的長整型數。當進行數據訪問或詢問OPC組狀態時,服務器將這個數值和結果一起返回給OPC客戶程序)、TimeBias(數據採樣時間的時間偏差值,用於調整設備時間和OPC服務器時間的偏差)、DeadBand(不敏感區,只有數據變化超過此不敏感區時,服務器才觸發數據變化事件發生)、

UpdateRate(數據更新週期)、

OPCItems(OPC組的默認屬性,OPC標籤集合對象)。

主要方法:

SyncRead(同步讀OPC組內單個或多個OPC項的數據值、質量標誌和採樣時間)、

Syncwrite(同步寫入OPC組內單個或多個OPC項的數據值)、

AsyncRead(異步讀)、Asyncwrite(異步寫)、

AsyncRefresh(觸發數據變化事件發生,刷新OPC組內所有活動的OPC標籤的數據。結果有數據變化事件DataChange返回)等。

主要事件:

DataChange(在OPC組內任何OPC項的數據值或質量標誌變化時觸發的事件)、AsyncReadComplete(異步讀結束時發生的事件)、

AsyncWriteComplete(異步寫結束時發生的事件)等。

 

4 OPCItems項集合對象,是OPC項對象的容器,自動化客戶程序創建的OPCGroup對象所包含的所有OPCItems對象的自動化集合。

屬性:

Parent(返回所屬的OPC組對象)、

DefaultRequestedDataType(添加OPC項時,默認的要求的數據類型。初始值是控制設備的固有數據類型,既是VT_Empty)、

DefaultAccessPath(添加OPC項時,默認的數據訪問路徑。初始值是空)、

DefaultIsActive(添加OPC項時,默認的激活狀態,初始值是真)、

Count(集合對象的固有屬性。OPC項集合中的OPC項數)。

方法:

Item(返回OPC標籤集合中由集合索引指定的OPC標籤)、

GetOPCItem(返回OPC項集合中由服務器句柄指定的OPC項)、

Addltem(在OPC項集合中添加新的OPC項)、

Remove(刪除指定的項)、

Aalidate(檢查項創建的有效性)、

SetActive(分別設置項爲活動或非活動狀態)、

SetClientHandles(設置OPC項的客戶句柄)、

SetDataTypes(設置OPC項要求的數據類型)。

 

5 OPCItem項對象表示與OPC服務器內某個數據的連接。各個項包含了數據值、質量標誌以及採樣時間。數據值的類型爲VARIANT。

主要屬性:

ClientHandle(客戶句柄是由客戶端程序指定的用於識別某個OPC組的長整型數。當OPC組事件發生時,服務器將這個客戶句柄和結果一起返回給OPC客戶程序)、

ServerHandle(服務器句柄是有OPC服務器設置的用於識別某個OPC標籤的一個全局唯一長整型數)、

AccessPath(返回OPC客戶程序指定的訪問路徑)、

AccessRights(返回OPC項的訪問權)、

ItemID(返回識別這個OPC項的標識符)、

IsActive(用以控制OPC項的活動狀態)、

RequestedDataType(獲取項的值的數據類型)、

Value(返回從OPC服務器讀取的最新數據值)、

Quality(返回從OPC服務器讀取的最新數據值的質量標誌)、

TimeStamp(時間戳)等。

主要方法:

Read(從服務器讀取OPC項的數值)、Write(向服務器寫入OPC項的數值)。

 

6 OPC瀏覽器對象OPCBrowser是OPC服務器名稱空間的枝和葉的集合,可以瀏覽服務器配置中項的名字,一個OPCServer對象實例中只能有一個OPCBrowser對象的實例。瀏覽器功能是選用功能,OPC服務器不支持瀏覽器的時候,即使執行CreateBrowser也不生成這個對象。

主要屬性:

Organization(OPC服務器的名稱空間的類型,有平面型和樹型兩種類型)、

Filter(使用ShowBrancher或ShowLeafs方法時的瀏覽對象過濾器,使用這個過濾器可以縮小被瀏覽的名稱範圍)、

DataType(使用ShowLeafs方法時,希望瀏覽的標籤的數據類型)、

Count(瀏覽結果中的瀏覽標籤數)。

 

主要方法:

Item(返回瀏覽結果中按集合索引ItemSpecifier指定的對象)、

ShowBranches(將現在位置下的所有符合過濾條件的枝加入到瀏覽結果中)、

ShowLeafs(將現在位置下的所有符合過濾條件的葉加入到瀏覽結果中)、

MoveUp(向現在位置的上一層移動)、

MoveToRoot(向名稱空間的最上層移動)、

MoveDown(向現在位置的下一層移動)、

MoveTo(向瀏覽器的絕對位置移動)、

GetItemID(由瀏覽標籤的名稱返回OPC標籤的標識符)。

 

 


(1)建立新工程或項目,在“工程”菜單下選擇“引用”,如圖5-3所示。只有引用OPCDAAuoto.DLL後,在程序中才能創建服務器對象,然後進行一系列的操作。

(2)在彈出的引用窗口裏單擊“瀏覽(B)…”按鈕,彈出添加引用窗口,選擇OPCDAAuoto.DLL文件。

(3)在引用窗口裏的OPCAutomation2.0前面打鉤,按“確定”按鈕。

(4)定義全局變量,這樣可以在窗體的任何方法的代碼內應用。變量類型應該指定爲對象型。這些對象最好在窗體的通用部分聲明加上“OptionExplicit”語句,表示模塊裏的所有變量都需要顯式聲明。由於OPC自動化接口的數組的索引要求必須從1開始,而系統默認是從0開始,爲了避免錯誤最好在代碼的最初加上“OptionBase1”語句。爲了使對象可以處理事件,必須將objTestGrp和objServer的聲明中加上“WithEvents”語句,表示聲明的對象可以響應事件。

OptionExplicitOptionBase1

Dim WithEventsobjServer As OPCServer

Dim objGroups As OPCGroups

Dim WithEventsobjTestGrp As OPCGroup

Dim objItems As OPCItems

(5)連接OPC服務器和建立OPC組考慮到代碼的可反覆使用性,採用子程序進行編程。    

    SubConnect(strProgIDAsString,OptionalstrNodeAsString)

    If   objServerIsNothing  Then    '建立一個OPC服務器對象

         SetobjServer=NewOPCServer

    EndIf

服務器狀態ServerState屬性一共有OPCRunning、OPCFailed、OPCNoconfig、OPCSuspended、OPCTest和OPCDisconnected六個值,分別表示正在運行、失敗、沒有配置、暫停、測試和沒有連接六種OPC服務器當前的狀態。

如果OPC服務器沒有連接,我們才執行objServer.ConnectstrProgID,strNode語句。strProgID就是ProgID,strNode就是用於遠程通信的IP地址。

    If  objServer.ServerState  =  OPCDisconnected   Then'連接OPC服務器

        objServer.Connect strProgID,strNode

    EndIf

 

在VisualBasic中,通過執行一個Set操作實現調用其它接口的方法。

    If  objGroupsIsNothing   Then '建立一個OPC組集合

         Set    objGroups = objServer.OPCGroups

    EndIf

    If  objTestGrpIsNothing    Then '添加一個OPC組

         Set   objTestGrp = objGroups.Add("Group")

    EndIf

    EndSub

 

(6)添加OPC標籤對服務器進行訪問前,必須先在OPC組裏添加要訪問的OPC標籤。

   OPC客戶端程序要按照用戶指定的標籤或者從組態文件裏讀取需要添加的OPC標籤。

Sub AddItem()

Dim    strItemIDs(17) As String

Dim    lClientHandles(17) As Long

Dim    lErrors ()  As Long

DimI   As Integer

     If ObjTestGrpIsNothing Then 

            ExitSub

     EndIf

     If NotobjItemsIsNothing Then

         If objItems.Count>0 Then

              ExitSub

         EndIf

       EndIf'設置組活動狀態。只有處於活動狀態的OPC才進行定期的數據更新。非活動狀態的OPC組,除了在接到顯然的數據讀寫要求外,並不收集任何數據。

        If mnuSubscribtion.Checked = True Then

            objTestGrp.IsActive = True

        Else objTestGrp.IsActive=False

        EndIf'啓動組異步通知。進行訂閱的OPC組可以自動收到從服務器送來的數據變化通知。

        objTestGrp.IsSubscribed=True'建立OPC項集合SetobjItems=objTestGrp.OPCItems'生成從TAG1到TAG17的項標識符ForI=1To17strItemIDs(I)="Server.Group.TAG"&IlClientHandles(I)=INext'添加OPC項CallobjItems.AddItems(17,strItemIDs,lClientHandles,lServerHandles,lErrors)EndSub(7)異步讀取代碼的實現在定時器事件內進行執行AsyncRead子程序的讀取代碼,而在讀取完成事件處理返回的數據訪問結果。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(8)在按鈕中執行AsyncWrite子程序,完成異步寫的操作。SubAsyncWrite(nIndexAsInteger,ByRefvtItemValues()AsVariant,_ByReflErrors()AsLong)DimlHandle(1)AsLongIfobjTestGrpIsNothingThenExitSubEndIfIfobjTestGrp.OPCItems.Count>0ThenlHandle(1)=lServerHandles(nIndex)'異步寫入lTransID_Wt=lTransID_Wt+1objTestGrp.AsyncWrite1,lHandle(),vtItemValues,_lErrors,lTransID_Wt,lCancelID_WtEndIfEndSub(9)斷開OPC服務器連接着OPC服務器的OPC客戶應用程序,在退出前必須斷開和OPC服務器的連接。因爲OPC服務器並不知道OPC客戶應用程序的退出。如果不先斷開連接,那麼OPC服務器使用的計算機資源就不會被釋放。如果這樣的問題反覆發生,久而久之,連續運轉的自動控制系統可能會計算機資源漸漸枯竭從而發生嚴重問題,可以顯式地把它設置爲“Nothing”。SubDisconnect()DimlErrors()AsLongIfNotobjItemsIsNothingThenIfobjItems.Count>0ThenobjItems.Remove17,lServerHandles,lErrors'清除OPC項EndIfSetobjItems=NothingEndIfIfNotobjTestGrpIsNothingThenobjGroups.Remove"Group"'清除OPC組SetobjTestGrp=NothingEndIfIfNotobjGroupsIsNothingThenSetobjGroups=NothingEndIfIfNotobjServerIsNothingThenIfobjServer.ServerState<>OPCDisconnectedThenobjServer.Disconnect'斷開OPC服務器.EndIfSetobjServer=NothingEndIfEndSub
WTOPCSvr.DLL作爲一個快速開發OPC服務器的工具包,它封裝了所有關於COM和OPC的技術細節,將Microsoft公司的OLE、COM、DCOM技術和OPC的技術細節隱藏起來,使開發OPC服務器的工作集中在特定的數據採集任務上來。利用DLL開發OPC服務器的開發者無需考慮許多涉及到底層接口實現方面的工作,開發者無須掌握ATL、COM/DCOM,也無須瞭解OPC技術的細節,只需具有基本的編程基礎即可快速上手。開發者的應用程序完全可以在一個較高層次上去描述OPC數據。利用這個DLL也可以很容易的實現對現有系統的改造,因爲它可以很容易地集成到現有的應用系統中,而無需太多的工作。該工具包支持多個客戶端併發訪問服務器,併爲每個客戶端創建一個獨立線程。WTOPCSvr.DLL工具包其實就是一個動態鏈接庫(DLL)。支持OPCl.0和OPC2.0數據存取規範定義的所有接口,包括實現了瀏覽器功能的接口。服務器應用程序通過傳遞一個名字和值給動態鏈接庫去創建過程標籤,動態鏈接庫記錄這個數據點,同時傳送給所有使用這個數據點的客戶。任何時候這個服務器應用程序都可以改變這個數據點的值,而所有使用這個數據點的客戶都會得到數據值改變的通報。一個連接到服務器的客戶改變任何過程標籤都會得到調用返回通報消息。動態鏈接庫還支持動態創建OPC標籤,如果一個客戶請求一個還沒有創建的標籤,則產生一個調用返回,應用程序就根據這個調用返回的信息創建一個標籤。使用這個動態鏈接庫(WTOPCSvr.DLL)可以迅速地開發OPC數據存取服務器,它提供了一些把定製數據集成到OPC服務器的易於使用的API函數。另外這個動態鏈接庫可以很容易的集成到現有應用中,也可以集成到一個新的應用中。使用動態鏈接庫開發OPC服務器時,關鍵要求用戶對動態鏈接庫的各個API函數要熟悉,從而提高軟件開發的靈活性。這個動態鏈接庫包含五大功能塊:調用返回定義、初始化和註冊函數、OPC項函數、實時信息函數和輔助功能函數。1 調用返回定義明確地定義了DLL用於返回給服務器程序的調用返回的具體含義,以實現客戶應用與服務器應用之間的數據交換,DLL提供了以下一些API函數。DeclareFunctionEnableUnknownItemNotificationLib"WtOPCSvr"Alias"_EnableUnknownItemNotification@4"(ByValCallbackAsLong)AsLong:這個函數的返回值表示一個客戶請求了一個沒有定義或是己經被暫停刷新的標籤,但無論客戶請求的標籤是否是己定義的標籤,這個函數都定義了一個從DLL返回的調用返回。當連接建立後,服務器應用可以使用這個調用返回對動態創建的標籤進行操作。DeclareFunctionEnableItemRemovalNotificationLib"WtOPCSvr"Alias"_EnableItemRemovalNotification@4"(ByValCallbackAsLong)AsLong:當對一個標籤的最後客戶引用釋放後,這個函數將定義一個來自DLL的調用返回,服務器應用程序可以刪除這個標籤或暫停這個標籤的刷新。DeclareFunctionEnableDisconnectNotificationLib"WtOPCSvr"Alias"_EnableDisconnectNotification@4"(ByValCallbackAsLong)AsLong:當客戶應用請求斷開連接時,這個函數產生一個來自DLL的調用返回通知服務器應用斷開連接。DeclareFunctionEnableWriteNotificationLib"WtOPCSvr"Alias"_EnableWriteNotification@8"(ByValCallbackAsLong,ByValConvertToNativeAsLong)AsLong:當OPC客戶寫一個己定義的標籤時,這個函數產生一個來自DLL的調用返回。正常情況下,DLL將把值轉變成項的私有類型,但在某些情況下,它要求應用自己完成這個轉變過程。2 初始化與註冊函數DeclareFunctionInitWTOPCsvrLib"WtOPCSvr"Alias"_InitWTOPCsvr@8"(ByRefCLSID_SvrAsByte,ByValServerRateAsLong)AsLong:這個函數實現對DCOM的初始化和創建OPC服務器對象。其中參數CLSID_Svr是OPC服務器的類標識(CLSID)——用於OPC客戶連接服務器;參數ServerRate定義了客戶的數據刷新速率,其單位是毫秒。如果函數調用成功則返回TRUE,否則返回FALSE。DeclareFunctionUpdateRegistryLib"WtOPCSvr"Alias"_UpdateRegistry@16"(ByRefCLSID_SvrAsByte,ByRefNameAsByte,ByRefDescrAsByte,ByRefExePathAsByte)AsLong:這個函數封裝了Windows註冊函數,用於OPC服務器的註冊。其中參數CLSID_Svr是OPC服務器的類標識(CLSID);參數Name定義了服務器的名字;參數Descr可以是任何描述服務器的字符串,但常常包含一些版本信息;參數ExePath定義了可執行程序的完整的Windows路徑。如果函數調用成功則返回TRUE,否則返回FALSE。DeclareFunctionUnregisterServerLib"WtOPCSvr"Alias"_UnregisterServer@8"(ByRefCLSID_SvrAsByte,ByRefNameAsByte)AsLong:這是一個服務器註銷函數,其參數CLSID_Svr是OPC服務器的類標識(CLSID);參數Name爲服務器的名字。如果函數調用成功則返回TRUE,否則返回FALSE。3 OPC項函數DeclareFunctionCreateTagLib"WtOPCSvr"Alias"_CreateTag@28"(ByRefNameAsByte,ByValValueAsVariant,ByValInitialQualityAsInteger,ByValIsWritableAsLong)AsLong:這是一個在動態鏈接庫裏創建過程標籤的函數,參數Name定義了OPC客戶要訪問的過程標籤,這個名字字符串可以是服務器可接受的任何文本字符串,其中也可使用分層名字(使用“.”分隔符),這將導致動態鏈接庫創建OPC分層名字空間;參數Value定義了標籤的初始數據;參數InitialQuality定義了標籤的OPC屬性標誌;參數IsWriteable決定標籤是否是可寫標籤。如果標籤創建成功,函數返回數據點的句柄(HANDLE),否則返回INVALID_HANDLE_VALUE。DeclareFunctionUpdateTagLib"WtOPCSvr"Alias"_UpdateTag@24"(ByValTagHandleAsLong,ByValValueAsVariant,ByValQualityAsInteger)AsLong:這個函數調用實現對過程標籤的數據刷新。Value就是來自現場硬件的數據。DeclareFunctionUpdateTagWithTimeStampLib"WtOPCSvr"Alias"_UpdateTagWithTimeStamp@32"(ByValTagHandleAsLong,ByValValueAsVariant,ByValQualityAsInteger,ByValTimestampAsDouble)AsLong:這個函數允許應用改變一個己定義的標籤的值、屬性標誌和時間標籤。如果應用沒有提供時間標籤(timestamp),則DLL將採用系統時間。參數TagHandle表示數據點;參數Value表示數據值;參數Quality表示新的屬性條件。如果函數調用成功則返回TRUE,否則返回FALSE。DeclareFunctionSetTagPropertiesLib"WtOPCSvr"Alias"_SetTagProperties@28"(ByValTagHandleAsLong,ByValPropertyIDAsLong,ByRefDescriptionAsByte,ByValValueAsVariant)AsLong:任何數量的OPC項屬性都可以用這個函數設置,DLL保持了所有已定義屬性的一個列表,OPC客戶可以訪問這些屬性。DeclareFunctionUpdateTagByNameLib"WtOPCSvr"Alias"_UpdateTagByName@24"(ByRefNameAsByte,ByValValueAsVariant,ByValQualityAsInteger)AsLong:可以使用這個函數來改變一個已定義過程標籤的值。DeclareFunctionSuspendTagUpdatesLib"WtOPCSvr"Alias"_SuspendTagUpdates@8"(ByValTagHandleAsLong,ByValOnOffAsLong)AsLong:這個函數可以使服務器知道一個客戶描述的特殊標籤的調用返回。在多數情況下,服務器是隨着其接收數據的變化而刷新標籤的,DLL處理所有客戶請求、通報和刷新。在一定條件下,當客戶訪問一個項時,希望服務器僅僅刷新OPC標籤數據庫。通過暫停刷新功能,當客戶試圖訪問這個項時,DLL將處理一個未知項的調用返回,然後,服務器開始重新開始刷新標籤直到下一個暫停刷新產生。TagHandle定義了暫停刷新的項。DeclareFunctionReadTagLib"WtOPCSvr"Alias"_ReadTag@8"(ByValTagHandleAsLong,ByRefValueAsVariant)AsLong:這是一個讀標籤的函數。DeclareFunctionReadTagWithTimeStampLib"WtOPCSvr"Alias"_ReadTagWithTimeStamp&16"(ByValTagHandleAsLong,ByRefValueAsVariant,ByRefQualityAsInteger,ByRefTimestampAsFileTime)AsLong:應用程序使用這個函數去獲取一個標籤的當前值。參數Value表示了接收的數據值,參數Timestamp是標籤的當前時間標籤值。4 實時信息DeclareFunctionStartUpdateTagsLib"WtOPCSvr"Alias"_StartUpdateTags@0"()AsLong:開始刷新。DeclareFunctionUpdateTagToListLib"WtOPCSvr"Alias"_UpdateTagToList@24"(ByValTagHandleAsLong,ByValValueAsVariant,ByValQualityAsInteger)AsLong:刷新標籤列表。DeclareFunctionEndUpdateTagsLib"WtOPCSvr"Alias"_EndUpdateTags@0"()AsLong:上面三個函數必須一起使用,它們一起提供了一次刷新多個標籤的有效方式。首先調用StartUpdateTags,然後用UpdateTagToList代替UpdateTag()調用,當所有標籤都被刷新後再調用EndUpdateTags()結束此次刷新操作。5 輔助功能函數DeclareFunctionRefreshAllClientsLib"WtOPCSvr"Alias"_RefreshAllClients@0"()AsLong:服務器可以使用此函數對所有連接的客戶進行初始化。正常情況下,客戶應用數據是基於DLL中的異步時針刷新的,這個函數讓服務器可以刷新所有客戶數據。DeclareFunctionResetServerRateLib"WtOPCSvr"Alias"_ResetServerRate@4"(ByValServerRateAsLong)AsLong:此函數用於改變服務器應用的數據刷新率。DeclareFunctionSetVendorInfoLib"WtOPCSvr"Alias"_SetVendorInfo@4"(ByRefVendorInfoAsByte)AsLong:設置一些服務器的版本信息。DeclareFunctionNumbrClientConnectionsLib"WtOPCSvr"Alias"_NumbrClientConnections@0"()AsLong:這個函數返回當前連接到服務器的客戶數。DeclareSubRequestDisconnectLib"WtOPCSvr"Alias"_RequestDisconnect@0"():此函數提供了請求所有客戶斷開連接的功能,但它並不保證這個請求得到響應或者客戶真正斷開連接。服務器請求客戶斷開的功能僅僅對那些符合OPC2.0和OPC3.0規範的客戶有用。DeclareFunctionRemoveTagLib"WtOPCSvr"Alias"_RemoveTag@4"(ByValTagHandleAsLong)AsLong:此函數從DLL中刪除一個過程標籤。如果在刪除過程標籤時有客戶連接正在訪問這個標籤,則這個連接仍然有效,但是將沒有新的數據來刷新這個連接。6 對報警與事件的支持DeclareFunctionUserAEMessageLib"WtOPCSvr"Alias"_UserAEMessage@8"(ByRefMsgAsByte,ByValSeverityAsLong)AsLong:此函數發送用戶定義的事件消息給所有連接的OPC報警與事件客戶。DeclareFunctionSetItemLevelAlarmLib"WtOPCSvr"Alias"_SetItemLevelAlarm@20"(ByValTagHandleAsLong,ByValLevelIDAsLong,ByValLimitAsSingle,ByValSeverityAsLong,ByValEnabledAsLong)AsLong:每個過程標籤可以定義幾個報警級別,DLL將檢測所有報警級別同時在刷新項時通知連接的OPC報警與事件客戶。參數LevelID有以下幾個級別:#defineID_LOLO_LIMITl、#defineID_LO_LIMIT2、#defineID_HI_LIMIT3、#defineID_HIHI_LIMIT4。DeclareFunctionGetItemLevelAlarmLib"WtOPCSvr"Alias"_GetItemLevelAlarm@20"(ByValTagHandleAsLong,ByValLevelIDAsLong,ByRefLimitAsSingle,ByRefSeverityAsLong,ByRefEnabledAsLong)AsLong:獲取一個過程標籤的報警級別。
我需要在wince下開發opcserver,急求wince下的opc開發工具。[email protected]

    當然支持,包括DCOM。
  
  只是在COM對象的支持上不完全,如不支持serverlist方法查找OPC服務器。  

發佈了57 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章