OPCclient在VC環(huán)境下編程_第1頁
OPCclient在VC環(huán)境下編程_第2頁
免費預覽已結束,剩余20頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、OPC client在VC環(huán)境下編程一( 連接使用到變量的說明類型 說明HRESULT 函數返回值, 用來檢測函數返回值(如:初始化 COM 庫, 查找 CLSID,創(chuàng) 建 OPCK務等),提供函數執(zhí)行情況CLSID 全球唯一標示符,用來確定 OPCK務的標識,從注冊表查找獲得LPWSTR LPST 和 LPWST 是 Win32 和 VC+所使用的一種字符串數據類型。LPSTF 被定義成是一個指向以 NULL 0)結尾的 8 位 ANSI 字符數組指針,而 LPWST 是一個指向以NULL 結尾的 16 位雙字節(jié)字符數組指針OPC 接口說明IOPCServer *m_IOPCServer;I

2、OPCServer 接口及成員函數主要用于對組對象進行創(chuàng)建 , 刪除,枚 舉和獲取當 前狀態(tài)等操作 . 是OPC 服務器對象的主要接口 接口及成員IOPCItemMgt *m_IOPCItemMgt;lOPCItemMgt 接口及成員函數用于 OPC 客戶程序添加、刪除 和組對象中組員等控制操作。IOPCSyncIO *m_IOPCSyncIO;IOPCSyncIO 用于同步數據訪問。OPCITEMDEF m_Items1;OPCITEMDE 數組,包含著項的存取路徑,定義和被請求的數據類OPCITEMRESULT *m_ItemResult;OPCITEMRESU數組, 服務器用來告訴客戶關

3、于項的附加的信息(項句柄和規(guī) 范的數據類型 )OPCHANDLE m_GrpSrvHandle;OPCI艮務的句柄,在多個函數中都會用到使用到的函數說明CoInitialize(NULL);初始化 COM 庫CoInitialize是 Windows 提供的 API 函數,用來告訴 Windows 以單線程的方式創(chuàng)建 com 對象。應用程序調用 com 庫函數(除 CoGetMalloc 和內存分配函數)之前 必須初始化com 庫。返回值 S_OK :該線程中 COM 庫初始化成功 S_FALSE 該線程中 COM 庫已經被初 始化CoInitialize ()標明以單線程方式創(chuàng)建。使用 Co

4、Initialize創(chuàng)建可以使對象直接與線程連接,得到最高的性能。CoInitialize并不裝載 COM 庫,它只用來初始化當前線程使用什么樣的套間。使用這個函數后,線程就和一個套間建立了對應關系。線程的套間模式決定了 該線程如何調用 COM 寸象,是否需要列集等。CoInitialize () 并不會干擾客戶和服務器之間的通信,它所做的事情是讓線 程注冊一個套間,而線程運行過程中必然在此套間。CoInitialize 和 CoUninitialize 必須成對使用查找 OPCI 艮務CLSIDFromProglD(LOPQ 艮務的名稱,&clsid);通過 ProgID, 查找注冊

5、表中的相關 CLSID參數:1. 服務的名稱2. CLSID 型變量,用來接收注冊表中查找到的 CLSID創(chuàng)建 OPC 服務器對象CoCreateInstance (clsid, NULL, CLSCTX_LOCAL_SERVER ,IID_IOPCServer,(void*)&m_IOPCServer);創(chuàng)建 OPC 服務器對象,并查詢對象的 IID_IOPCServer 接口參數:1. CLSID 型變量,使用 CLSIDFromProgID 函數查找到的 CLSID2.3.函數功能描述:用指定的類標識符創(chuàng)建一個 Com 對象,用指定的類標識符創(chuàng)建一 個未初始化的對象。當在本機中只

6、創(chuàng)建一個對象時,可以調用 CoCreateInstance; 在遠程系統(tǒng)中創(chuàng)建一個對象時,可以調用 CoCreateInstanceEx;創(chuàng)建多個同一 CLSID 的對象時,可以參考 CoGetClassObject 函數。函數原形:STDAPI CoCreateInstance(REFCLSID rclsid, / 創(chuàng)建的 Com 對象的類標識符(CLSID)LPUNKNOWN pUnkOuter,指向接口 IUnknown 的指針DWORD dwClsContext, / 運行可執(zhí)行代碼的上下文REFIID riid, / 創(chuàng)建的 Com 對象的接口標識符LPVOID * ppv /用來接

7、收指向 Com 對象接口地址的指針變量);參數:rclsidin用來唯一標識一個對象的 CLSID(128 位),需要用它來創(chuàng)建指定對象。pUnkOuterin 如果為 NULL, 表明此對象不是聚合式對象一部分。如果不是 NULL, 則指 針指向一個聚合式對象的 IUnknown 接口。dwClsContextin 組件類別.可使用 CLSCT 敕舉器中預定義的值.riidin 引用接口標識符 , 用來與對象通信。ppvout 用來接收指向接口地址的指針變量。如果函數調用成功 ,*ppv 包括請求 的接口指針。返回值:S_OK指定的 Com 對象實例被成功創(chuàng)建。REGDB_E_CLASSNO

8、TREG指定的類沒有在注冊表中注冊 . 也可能是指定的 dwClsContext 沒有注冊或注 冊表中的服務器類型損壞CLASS_E_NOAGGREGATION 這個類不能創(chuàng)建為聚合型。E_NOINTERFACE指定的類沒有實現請求的接口,或者是 IUnknown 接口沒有暴露請求的接口 .注釋:CoCreatelnstanee 幫助者函數通過使用對象的 CLSID,提供了一種便潔的方式 與類對象連接 ,創(chuàng)建未初始化的實例 , 以及釋放類對象。它封裝了以下的功能 :CoGetClassObjeet(relsid, dwClsContext, NULL, IID_IClassFaetory,&a

9、mp;pCF);hresult = pCF-CreateInstance(pUnkOuter, riid, ppvObj);pCF-Release();當在本機中只創(chuàng)建一個對象時,調用 CoCreateInstance 是最方便的 ; 如果要在 遠程系統(tǒng)中創(chuàng)建一個對象時,可以調用 CoCreateInstanceEx; 創(chuàng)建多個同一 CLSID 的對象時 , 可以參考CoGetClassObject 函數;如果創(chuàng)建多個對象實例 , 可以獲得類 對象的 IClassFactory 接口指針,并使用需要的方法 , 可以使用 CoGetClassObject 函數。在 CLSCT 救舉器中,你可以指

10、定用來管理對象的服務器類型.這些常量可以是CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER或是它們的任何組合.常量 CLSCTX_AL 被定義為這三個值的組合.想獲得更 多的有關這些常量的用法 , 請參考 CLSCTX.添加組到 OPC 服務器m_IOPCServer-AddGroup(Lgrp1, / in 組名TRUE, / in 活動狀態(tài)500, / in 向服務器發(fā)送請求的刷新率1, / in 客戶端的操作句柄&TimeBias, / in 與標準時間的校正值&PercentDeadband

11、, / in 要舍棄的數據LOCALE_ID, / in 服務器使用的語言&m_GrpSrvHandle, / out 添加組以后服務器返回的組句柄&RevisedUpdateRate, / out 服務器的數據刷新率IID_IOPCItemMgt, / in 添加組的接口類型(LPUNKNOWN*)&m_IOPCItemMgt); / out 服務器返回的接口對象指針AddGroup 函數的說明HRESULT AddGroup(in, string LPCWSTR szName,in BOOL bActive,in DWORD dwRequestedUpdateRat

12、e,in OPCHANDLE hClientGroup,unique, in LONG *pTimeBias,in FLOAT * pPercentDeadband,in DWORD dwLCID,out OPCHANDLE * phServerGroup,out DWORD *pRevisedUpdateRate,in REFIID riid,out, iid_is(riid) LPUNKNOWN * ppUnk);Parameters DescriptionszName Name of the group. The name must be unique among the other g

13、roups created bythis client. If no name is provided (szName is pointer to a NUL string) the server will generatea unique name. The server generated name will also be unique relative to any existing publicgroups. bActive FALSE if the Group is to be created as inactive.TRUE if the Group is to be creat

14、ed as active.dwRequestedUpdateRate Client Specifies the fastest rate at which data changesmay be sent to OnDataChange for items in this group.This also indicates the desired accuracy of Cached Data.This is intended only to control the behavior of the interface. How the server deals with theupdate ra

15、te and how often it actually polls the hardware internally is an implementation detail.Passing 0 indicates the server should use the fastest practical rate. The rate is specified inmilliseconds.hClientGroup Client provided handle for this group. refer to descriptionof data types, parameters, and str

16、uctures for moreinformation about this parameterpTimeBias Pointer to Long containing the initial TimeBias (in minutes) for the Group. Pass aNULL Pointer if you wish the group to use the default system TimeBias. See discussion ofTimeBias in General Properties Section See Comments below.pPercentDeadba

17、nd The percent change in an item value that will cause asubscription callback for that value to a client. This parameter only applies to items in thegroup that have dwEUType of Analog. See discussion of PercentDeadband in General Properties Section. A NULLpointer is equivalent to 0.0.dwLCID The lang

18、uage to be used by the server when returning values (including EUenumeration s) as textforoperations on this group. This could also include such things as alarm or status conditions ordigital contact states.phServerGroup Place to store the unique server generated handle to thenewly created group. Th

19、e client will use the serverprovided handle for many of the subsequent functions that the client requests the server toperform on the group. pRevisedUpdateRate The server returns the value it will actually use fortheUpdateRate which may differ from theRequestedUpdateRate.Note that this may also be s

20、lower than the rate at which the server is internally obtaining thedata and updating the cache.In general the server shouldround up the requested rateto the next available supported rate. The rate is specified in milliseconds. Server returnsHRESULT ofOPC_S_UNSUPPORTEDRATE when it returns a valuein r

21、evisedUpdateRate that is different thanRequestedUpdateRate.riid The type of interface desired (e.g. IID_IOPCItemMgt) ppUnk Where to store the returnedinterface pointer. NULL is returned for any FAILED HRESULT.添加項目 m_IOPCItemMgt-AddItems(1, / in 添加 1 個 item m_Items, / in 添加的 item 的指針 &m_ItemResul

22、t, / out 添加 item 的結果 &m_pErrors); / out 發(fā)生的錯誤 m_Items 的說明定義:OPCITEMDEF mtems1;這個參數為 OPCITEMDE 結構,包含著項的存取路徑,定義和被請求的數據類 AddItems 函數說明HRESULT AddItems( in DWORD dwCount,in, size_is(dwCount) OPCITEMDEF * pItemArray,out, size_is(,dwCount) OPCITEMRESULT * ppAddResults,out, size_is(,dwCount) HRESULT *

23、ppErrors);Parameters Description dwCount The number of items to be addedpItemArray Array of OPCITEMDEFs. These tell the servereverything it needs to know about the item including the access path, definition andrequested datatype ppAddResults Array of OPCITEMRESULTs. This tells the client additionali

24、nformation about the item including the server assigned item handle and the canonical datatype.ppErrors Array of HRESULTs. This tells the client which of the items was successfully added.For any item which failed it provides a reason.OPCITEMDE 結構說明typedef struct string LPWSTR szAccessPath; /OPC 服務器存

25、取路徑string LPWSTR szItemID; /item 的名稱 BOOL bActive ; / 活動狀態(tài)OPCHANDLE hClient; / 操作句柄 DWORD dwBlobSize; /item 的 pBlob 大小size_is(dwBlobSize) BYTE * pBlob; / 二進制指針 VARTYPE vtRequestedDataType; / 數據類型由客戶端請求 WORD wReserved; / 保留字 OPCITEMDEF;Member Used by DescriptionszAccessPath both The access path the s

26、erver should associate with this item. Byconvention a pointer to a NUL string specifies that the server should select the access path.Support for accesspath is optionalNOTE: version 1 indicated that a NULL pointer would allow the server to pick the pathhowever passing a NULL pointer will cause a fau

27、lt in the proxy/stub code and thus is notallowed.szItemID both A null-terminated string that uniquely identifies the OPC data item. See theItem ID discussion and the AddItems function for specific information about the contents ofthis field.bActive add This Boolean value a ffects the behavior variou

28、s methods as describedelsewhere in this specification.hClient add The handle the client wishes to associate with the item. See the OPCHANDLE formore specific information about the contents of this field.dwBlobSize both The size of the pBlob for this item. pBlob both pBlob is a pointer to the Blob.vt

29、RequestedDataType both The data type requested by the client. An error isreturned (See Additems or ValidateItems) if the server cannot provide the item in this format.Passing VT_EMPTY means the client will accept the servers canonical datatype. 查詢同步接口m_IOPCItemMgt-QueryInterface(IID_IOPCSyncIO, (voi

30、d*)&m_IOPCSyncIO);參數:1. IID_IOPCSyncIO 同步接口2. 服務器返回的用于操作同步接口的指針。同步接口讀取數據m_IOPCSyncIO-Read(OPC_DS_DEVICE, 1, phServer, &pItemValue,&pErrors);參數:1(0PC_DS_DEVIC 從 OPC 設備讀取 另一個選擇是 OPC_DS_CAC 從爰存讀取2( 讀取的數量3( 這個 item 的服務句柄返回值的 OPCITEMSTATE 構數值指針 4(5( 返回的錯誤指針HRESULT Read(in OPCDATASOURCE dwSour

31、ce,in DWORD dwCount,in, size_is(dwCount) OPCHANDLE * phServer,out, size_is(,dwCount) OPCITEMSTATE * ppItemValues,out, size_is(,dwCount) HRESULT * ppErrors);Parameters DescriptiondwSource The data source ; OPC_DS_CACHE orOPC_DS_DEVICEdwCount The number of items to be read.phServer The list of server

32、item handles for the items to be readppItemValues Array of structures in which the item values are returned.ppErrors Array of HRESULTs indicating the success of the individual item reads. The errorscorrespond to the handles passed in phServer. This indicates whether the read succeeded inobtaining a

33、defined value, quality and timestamp. NOTE any FAILED error code indicatesthat the corresponding Value, Quality and Time stamp are UNDEFINED.OPCITEMSTATE 構說明typedef struct OPCHANDLE hClient; FILETIME ftTimeStamp;WORD wQuality;WORD wReserved;VARIANT vDataValue; OPCITEMSTATE;Member Description hClient

34、 the client provided handle for this item ftTimeStamp UTCTimeStamp for this items value. If the device cannot provide a timestamp then the servershould provide one.wQuality The quality of this item.vDataValue The value itself as a variant./ 釋放同步接口m_IOPCSyncIO-Release(); m_IOPCSyncIO = NULL;/ 釋放 item

35、 管理接口 m_IOPCItemMgt-Release();m_IOPCItemMgt = NULL;/釋放 OPC 服務器m_IOPCServer-Release(); m_IOPCServer = NULL;/關閉 COM 庫CoUninitialize();異步 OPC 數據讀取查詢 group 對象的異步接口 m_IOPCItemMgt-QueryInterface(IID_IOPCAsyncIO2,(void*)&m_IOPCAsyncIO2); 參數:1. IID_IOPCAsyncIO2 異步 2.0 接口2. 服務器返回的用于操作異步接口的指針。獲得 IOPCGroup

36、StateMgt 接口m_IOPCItemMgt-QueryInterface(IID_IOPCGroupStateMgt,(void*)&m_IOPCGroupStateMgt); 參數:1. IID_IOPCGroupStateMgt 組狀態(tài)接口2. 服務器返回的用于操作接口的指針。建立異步回調CComObject* pCOPCDataCallback; / 回調對象的指針 通過 ATL 模板創(chuàng)建回調對象的實例CComObject:CreateInstance(&pCOPCDataCallback);查詢 IUnknown 接口LPUNKNOWN pCbUnk;pCbUnk

37、 = pCOPCDataCallback-GetUnknown(); 建立一個服務器的連接點與客戶程序接收器之間的連接AtlAdvise 函數告訴一個可連接對象客戶想從此可連接對象接收事件 . 該函數 封裝實現接收事件 HRESULT hRes = AtlAdvise( m_IOPCGroupStateMgt, / in 獲得的 IOPCGroupStateMgt 接口指針pCbUnk, / in IUnknown 接口指針I(yè)ID_IOPCDataCallback, / in 回調接口&m_dwAdvise / out 服務器返回的回調接口的標識); 異步 OPC 數據釋放退出連接點時

38、使用 AtlUnadviseHRESULT hRes = AtlUnadvise(m_IOPCGroupStateMgt, IID_IOPCDataCallback,m_dwAdvise); m_IOPCGroupStateMgt-Release();/異步的以下釋放類似同步的 OPC?放m_IOPCItemMgt-RemoveItems( 1, / in刪除項目phServer, / in被刪除項目的服務句柄&pErrors / out有錯誤時的指針);m_IOPCAsyncIO2-Release();/ 釋放異步接口m_IOPCAsyncIO2 = NULL;mOPCItemMgt

39、-Release(); 釋放 ITEM 接口m_IOPCItemMgt = NULL;m0PCServer-Release(); 釋放 OPCjj 艮務 m_IOPCServer = NULL;CoUninitialize();/ 釋放 COM 用于客戶端的異步回調定義功能: 客戶提供用來操作組的數據變化和刷新IOPCDataCallbackIOPCDataCallback:OnDataChangeHRESULT OnDataChange(in DWORD dwTransid,in OPCHANDLE hGroup,in HRESULT hrMasterquality,in HRESULT h

40、rMastererror,in DWORD dwCount,in, sizeis(dwCount) OPCHANDLE * phClientItems,in, sizeis(dwCount) VARIANT * pvValues,in, sizeis(dwCount) WORD * pwQualities,in, sizeis(dwCount) FILETIME * pftTimeStamps,in, sizeis(dwCount) HRESULT *pErrors);參數描述dwTransid 事務標識符,如果是一般的回調,此值為0。 hGroup 組的客戶句 柄。hrMasterquali

41、ty S_OK ,如果 OPC_QUALITY_MA 是 OPC_QUALITY_GO 否則 為S_FALSE 。hrMastererror 如果無錯誤,返回 S_OK 否則返回 S_FALSE. dwCount 讀取 的在客戶句柄表里的項數目。phClientItems 數據發(fā)生變化的項的客戶句柄表。 .pvValues 數據發(fā)生變化的項的 VARIANTS 類型數據表。 pwQualities 讀取的 項的品質值的表。pftTimeStamps 讀取的項的時間戳表。pErrors 項的 HRESULT 表。如果數據項的品質變?yōu)?UNCERTAIN 或者 BAD,這 里返回附加的服務器提供的

42、更有用的錯誤信息。Parameters DescriptiondwTransid 0 if the call is the result of an ordinary subscription.If the call is the result of a call to Refresh2 then thisis the value passed to Refresh2.hGroup The Client handle of the grouphrMasterquality S_OK if OPC_QUALITY_MASK for all qualities are OPC_QUALITY_GO

43、OD, S_FALSE otherwise.hrMastererror S_OK if allerrors are S_OK, S_FALS E otherwise.dwCount The number of items in the client handle listphClientItems The list of client handles for the items which have changed.pvValues A List of VARIANTS containing the values (inRequestedDataType) for the items whic

44、h havechanged.pwQualities A List of Quality values for the items pftTimeStamps A list of TimeStamps for theitems pErrors A list of HRESULTS for the items. If the quality of a data item has changed toUNCERTAIN or BAD., this field allows the server to return additional server specific errorswhich prov

45、ide more useful information to the user. See below.HRESULT 返回碼返回碼描述S_OK 客戶總是返回 S_OK ppErrors 返回碼 返回碼描述S_OK 項的數據的品質是好的(OPC_QUALITY_GOQD) E_FAIL 項的操作失敗。OPC_E_BADRIGHTS 作的項是不可讀的。OPC_E_UNKNOWNITE 項在)月艮務器的地址空間是不可用的。S_xxx, E_xxxS_xxx -賣方特殊信息。賣方指定的特殊錯誤。E_xxx -對于所有的 S_xxx 錯誤碼,客戶需要假設相應的值,品質和時間戳都 已經定義好了,不管品質是

46、 UNCERTAIN 或者 BAD 建議服務器賣主提 供關于 UNCRTAIN 或 BAD 項的附加的信息?;卣{發(fā)生在以下情況 :一個或者多個的數據變化事件。 事件在活動 Group 中的活動項的值或 者品質發(fā)生變化時發(fā)生?;卣{不會以超過刷新速率的速度發(fā)生。一般而 言,除非值或者品質發(fā)生變化,否則回調不會發(fā)生。 transaction ID 為 0 通過 AsyncIO2 接口的刷新請求。一旦請求發(fā)生,在活動 Group中的 活動項都會刷新。 Transaction ID 不為 0。OPCDataCallback:OnReadCompleteHRESULT OnReadComplete(in

47、DWORD dwTransid, / 事務標識符,如果是一般的回調,此值為 0。in OPCHANDLE hGroup, / 組的客戶句柄。in HRESULT hrMasterquality, S_OK,如果 OPC_QUALITY_MA 是OPC_QUALITY_GOOD!J為 S_FALSE 。in HRESULT hrMastererror, / 如果無錯誤,返回 S_OK 否則返回S_FALSE。.in DWORD dwCount, / 客戶句柄里的項數目in, sizeis(dwCount) OPCHANDLE * phClientItems, /in, sizeis(dwCoun

48、t) VARIANT * pvValues, /VARIANTS 類型數據表in, sizeis(dwCount) WORD * pwQualities,/讀取的項的品質值的表。in, sizeis(dwCount) FILETIME * pftTimeStamps,/讀取的項的時間戳表。in, sizeis(dwCount) HRESULT *pErrors /項的 HRESULT 表。如果數據項的品質變?yōu)?UNCERTAIN 或者 BAD,這里返回附加的服務器提供的更有用的錯誤信息項的客戶句柄表數據發(fā)生變化的項的);DescriptionThis method is provided by

49、 the client to handle notifications fromthe OPC Group on completion of Async Reads.Parameters DescriptiondwTransid The TransactionID returned to the client when the Read was initiated.hGroup The Client handle of the grouphrMasterqualityS_OK if OPC_QUALITY_MASK for all qualities areOPC_QUALITY_GOOD,

50、S_FALSE otherwise.hrMastererror S_OK if allerrors are S_OK, S_FAL SE otherwise.dwCount The number of items in the client handle, values, qualities, times and errors lists.This may be less than the number of items passed to Read. Items for whic errors weredetected and returned from Read are not inclu

51、ded in the callback.phClientItems The list of client handles for the items which wereread. This is NOT guarenteed to be in any particularorder although it will match the values, qualities,times and errors array.pvValues A List of VARIANTS containing the values (in RequestedDataType) for the items.pwQualities A List of Quality values for the itemspftTimeStamps A list of TimeStamps for the itemspErrors A list of HRESULTS for the items. If the system isunable to return data for an item, this field allows theserver to retur

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論