OPC client 在VC环境下编程.docx
- 文档编号:3064878
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:18
- 大小:25.13KB
OPC client 在VC环境下编程.docx
《OPC client 在VC环境下编程.docx》由会员分享,可在线阅读,更多相关《OPC client 在VC环境下编程.docx(18页珍藏版)》请在冰豆网上搜索。
OPCclient在VC环境下编程
OPCclient在VC环境下编程
一(连接
使用到变量的说明
类型说明
HRESULT函数返回值,用来检测函数返回值(如:
初始化COM库,查找CLSID,创建OPC服务等),提供函
数执行情况
CLSID全球唯一标示符,用来确定OPC服务的标识,从注册表查找获得
LPWSTRLPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。
LPSTR被定义成是一个指向
以NULL(‘\0’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字
节字符数组指针
OPC接口说明
IOPCServer*m_IOPCServer;
IOPCServer接口及成员函数主要用于对组对象进行创建,删除,枚举和获取当前状态等操作.是
OPC服务器对象的主要接口.接口及成员
IOPCItemMgt*m_IOPCItemMgt;
IOPCItemMgt接口及成员函数用于OPC客户程序添加、删除
和组对象中组员等控制操作。
IOPCSyncIO*m_IOPCSyncIO;
IOPCSyncIO用于同步数据访问。
OPCITEMDEFm_Items[1];
OPCITEMDEF数组,包含着项的存取路径,定义和被请求的数据类
OPCITEMRESULT*m_ItemResult;
OPCITEMRESULT数组,服务器用来告诉客户关于项的附加的信息(项句柄和规范的数据类型)OPCHANDLEm_GrpSrvHandle;
OPC服务的句柄,在多个函数中都会用到
使用到的函数说明
CoInitialize(NULL);初始化COM库
CoInitialize是Windows提供的API函数,用来告诉Windows以单线程的方式创建com对象。
应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。
返回值S_OK:
该线程中COM库初始化成功S_FALSE该线程中COM库已经被初始化CoInitialize()标明以单线程方式创建。
使用CoInitialize创建可以使对象直接与线程连接,得到最高的性能。
CoInitialize并不装载COM库,它只用来初始化当前线程使用什么样的套间。
使用这个函数后,线程就和一个套间建立了对应关系。
线程的套间模式决定了该线程如何调用COM对象,是否需要列集等。
CoInitialize()并不会干扰客户和服务器之间的通信,它所做的事情是让线程注册一个套间,而线程运行过程中必然在此套间。
CoInitialize和CoUninitialize必须成对使用
查找OPC服务
CLSIDFromProgID(L"OPC服务的名称",&clsid);
通过ProgID,查找注册表中的相关CLSID
参数:
1.服务的名称
2.CLSID型变量,用来接收注册表中查找到的CLSID
创建OPC服务器对象
CoCreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IOPCServer,(void**)&m_IOPCServer);
创建OPC服务器对象,并查询对象的IID_IOPCServer接口
参数:
1.CLSID型变量,使用CLSIDFromProgID函数查找到的CLSID
2.
3.
函数功能描述:
用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象。
当在本机中只创建一个对象时,可以调用CoCreateInstance;在远程系统中创建一个对象时,可以调用CoCreateInstance
Ex;创建多个同一CLSID的对象时,可以参考CoGetClassObject函数。
函数原形:
STDAPICoCreateInstance(
REFCLSIDrclsid,//创建的Com对象的类标识符(CLSID)
LPUNKNOWNpUnkOuter,//指向接口IUnknown的指针
DWORDdwClsContext,//运行可执行代码的上下文
REFIIDriid,//创建的Com对象的接口标识符
LPVOID*ppv//用来接收指向Com对象接口地址的指针变量
);
参数:
rclsid
[in]用来唯一标识一个对象的CLSID(128位),需要用它来创建指定对象。
pUnkOuter
[in]如果为NULL,表明此对象不是聚合式对象一部分。
如果不是NULL,则指针指向一个聚合式对象的IUnknown接口。
dwClsContext
[in]组件类别.可使用CLSCTX枚举器中预定义的值.
riid
[in]引用接口标识符,用来与对象通信。
ppv
[out]用来接收指向接口地址的指针变量。
如果函数调用成功,*ppv包括请求的接口指针。
返回值:
S_OK
指定的Com对象实例被成功创建。
REGDB_E_CLASSNOTREG
指定的类没有在注册表中注册.也可能是指定的dwClsContext没有注册或注册表中的服务器类型损坏
CLASS_E_NOAGGREGATION
这个类不能创建为聚合型。
E_NOINTERFACE
指定的类没有实现请求的接口,或者是IUnknown接口没有暴露请求的接口.
注释:
CoCreateInstance帮助者函数通过使用对象的CLSID,提供了一种便洁的方式与类对象连接,创建未初始化的实例,以及释放类对象。
它封装了以下的功能:
CoGetClassObject(rclsid,dwClsContext,NULL,IID_IClassFactory,&pCF);
hresult=pCF->CreateInstance(pUnkOuter,riid,ppvObj);
pCF->Release();
当在本机中只创建一个对象时,调用CoCreateInstance是最方便的;如果要在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时,可以参考CoGetClassObject函数;如果创建多个对象实例,可以获得类对象的IClassFactory接口指针,并使用需要的方法,可以使用CoGetClassObject函数。
在CLSCTX枚举器中,你可以指定用来管理对象的服务器类型.这些常量可以是
CLSCTX_INPROC_SERVER,CLSCTX_INPROC_HANDLER,CLSCTX_LOCAL_SERVER
或是它们的任何组合.常量CLSCTX_ALL被定义为这三个值的组合.想获得更多的有关这些
常量的用法,请参考CLSCTX.
添加组到OPC服务器
m_IOPCServer->AddGroup(L"grp1",//[in]组名
TRUE,//[in]活动状态
500,//[in]向服务器发送请求的刷新率
1,//[in]客户端的操作句柄
&TimeBias,//[in]与标准时间的校正值
&PercentDeadband,//[in]要舍弃的数据
LOCALE_ID,//[in]服务器使用的语言
&m_GrpSrvHandle,//[out]添加组以后服务器返回的组句柄
&RevisedUpdateRate,//[out]服务器的数据刷新率
IID_IOPCItemMgt,//[in]添加组的接口类型
(LPUNKNOWN*)&m_IOPCItemMgt);//[out]服务器返回的接口对象指针
AddGroup函数的说明
HRESULTAddGroup(
[in,string]LPCWSTRszName,
[in]BOOLbActive,
[in]DWORDdwRequestedUpdateRate,
[in]OPCHANDLEhClientGroup,
[unique,in]LONG*pTimeBias,
[in]FLOAT*pPercentDeadband,
[in]DWORDdwLCID,
[out]OPCHANDLE*phServerGroup,
[out]DWORD*pRevisedUpdateRate,
[in]REFIIDriid,
[out,iid_is(riid)]LPUNKNOWN*ppUnk
);
ParametersDescription
szNameNameofthegroup.Thenamemustbeuniqueamongthe
othergroupscreatedbythisclient.Ifnonameisprovided
(szNameispointertoaNULstring)theserverwill
generateauniquename.Theservergeneratednamewill
alsobeuniquerelativetoanyexistingpublicgroups.
bActiveFALSEiftheGroupistobecreatedasinactive.
TRUEiftheGroupistobecreatedasactive.
dwRequestedUpdateRateClientSpecifiesthefastestrateatwhichdatachanges
maybesenttoOnDataChangeforitemsinthisgroup.
ThisalsoindicatesthedesiredaccuracyofCachedData.
Thisisintendedonlytocontrolthebehaviorofthe
interface.Howtheserverdealswiththeupdaterateand
howoftenitactuallypollsthehardwareinternallyisan
implementationdetail.Passing0indicatestheserver
shouldusethefastestpracticalrate.Therateisspecified
inmilliseconds.
hClientGroupClientprovidedhandleforthisgroup.[refertodescription
ofdatatypes,parameters,andstructuresformore
informationaboutthisparameter]
pTimeBiasPointertoLongcontainingtheinitialTimeBias(in
minutes)fortheGroup.PassaNULLPointerifyou
wishthegrouptous
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OPC client 在VC环境下编程 VC 环境 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)