《OPCclient在VC环境下编程》由会员分享,可在线阅读,更多相关《OPCclient在VC环境下编程(13页珍藏版)》请在金锄头文库上搜索。
1、OPC client 在 VC 环境下编程一连接使用到变量的说明类型 说明HRESULT 函数返回值,用来检测函数返回值(如:初始化 COM 库,查找 CLSID,创建 OPC 服务等) ,提供函数执行情况CLSID 全球唯一标示符,用来确定 OPC 服务的标识,从注册表查找获得LPWSTR LPSTR 和 LPWSTR 是 Win32 和 VC+所使用的一种字符串数据类型。LPSTR 被定义成是一个指向以 NULL(0)结尾的 8 位 ANSI 字符数组指针,而 LPWSTR 是一个指向以 NULL 结尾的 16 位双字节字符数组指针OPC 接口说明IOPCServer *m_IOPCSer
2、ver;IOPCServer 接口及成员函数主要用于对组对象进行创建,删除,枚 举和获取当前状态等操作.是 OPC 服务器对象的主要接口. 接口及成员IOPCItemMgt *m_IOPCItemMgt;IOPCItemMgt 接口及成员函数用于OPC 客户程序添加、删除和组对象中组员等控制操作。IOPCSyncIO *m_IOPCSyncIO;IOPCSyncIO 用于同步数据访问。OPCITEMDEF m_Items1;OPCITEMDEF 数组,包含着项的存取路径, 定义和被请求的数据类OPCITEMRESULT *m_ItemResult;OPCITEMRESULT 数组,服务器用来告
3、诉客户关于项的附加的信息(项句柄和规范的数据类型)OPCHANDLE m_GrpSrvHandle;OPC 服务的句柄,在多个函数中都会用到使用到的函数说明CoInitialize(NULL); 初始化 COM 库CoInitialize 是 Windows 提 供 的 API 函 数 , 用 来 告 诉 Windows 以 单 线 程 的 方 式 创 建 com 对 象 。 应 用 程 序 调用 com 库 函 数 ( 除 CoGetMalloc 和 内 存 分 配 函 数 ) 之 前 必 须 初 始 化 com 库 。返 回 值 S_OK : 该 线 程 中 COM 库 初 始 化 成 功
4、 S_FALSE 该 线 程 中 COM 库 已 经 被 初 始 化 CoInitialize () 标 明 以 单 线 程 方 式 创 建 。使 用 CoInitialize 创 建 可 以 使 对 象 直 接 与 线 程 连 接 , 得 到 最 高 的 性 能 。 CoInitialize 并 不 装 载 COM 库 , 它 只 用 来 初 始 化 当 前 线 程 使 用 什 么 样 的 套 间 。 使 用 这 个 函 数 后 , 线 程 就 和一 个 套 间 建 立 了 对 应 关 系 。 线 程 的 套 间 模 式 决 定 了 该 线 程 如 何 调 用 COM 对 象 , 是 否 需
5、 要 列 集 等 。CoInitialize ()并 不 会 干 扰 客 户 和 服 务 器 之 间 的 通 信 , 它 所 做 的 事 情 是 让 线 程 注 册 一 个 套 间 , 而 线 程 运 行 过程 中 必 然 在 此 套 间 。CoInitialize 和 CoUninitialize 必 须 成 对 使 用查找 OPC 服务CLSIDFromProgID(LOPC 服务的名称, &clsid);通过 ProgID,查找注册表中的相关 CLSID参数:1. 服务的名称2. CLSID 型变量,用来接收注册表中查找到的 CLSID创建 OPC 服务器对象CoCreateInstan
6、ce (clsid, NULL, CLSCTX_LOCAL_SERVER ,IID_IOPCServer, (void*)&m_IOPCServer);创建 OPC 服务器对象,并查询对象的 IID_IOPCServer 接口参数:1. CLSID 型变量,使用 CLSIDFromProgID 函数查找到的 CLSID2.3.函 数 功 能 描 述 :用 指 定 的 类 标 识 符 创 建 一 个 Com 对 象 ,用 指 定 的 类 标 识 符 创 建 一 个 未 初 始 化 的 对 象 。 当 在 本 机 中只 创 建 一 个 对 象 时 , 可 以 调 用 CoCreateInstanc
7、e;在 远 程 系 统 中 创 建 一 个 对 象 时 , 可 以 调 用 CoCreateInstanceEx;创 建 多 个 同 一 CLSID 的 对 象 时 , 可 以 参 考 CoGetClassObject 函 数 。函 数 原 形 :STDAPI CoCreateInstance(REFCLSID rclsid, /创 建 的 Com 对 象 的 类 标 识 符 (CLSID)LPUNKNOWN pUnkOuter, /指 向 接 口 IUnknown 的 指 针DWORD dwClsContext, /运 行 可 执 行 代 码 的 上 下 文REFIID riid, /创 建
8、 的 Com 对 象 的 接 口 标 识 符LPVOID * ppv /用 来 接 收 指 向 Com 对 象 接 口 地 址 的 指 针 变 量);参 数 :rclsid in 用 来 唯 一 标 识 一 个 对 象 的 CLSID(128 位 ),需 要 用 它 来 创 建 指 定 对 象 。pUnkOuter in 如 果 为 NULL, 表 明 此 对 象 不 是 聚 合 式 对 象 一 部 分 。 如 果 不 是 NULL, 则 指 针 指 向 一 个 聚 合 式 对 象 的 IUnknown 接 口 。dwClsContext in 组 件 类 别 . 可 使 用 CLSCTX 枚
9、 举 器 中 预 定 义 的 值 . riid in 引 用 接 口 标 识 符 ,用 来 与 对 象 通 信 。ppv out 用 来 接 收 指 向 接 口 地 址 的 指 针 变 量 。 如 果 函 数 调 用 成 功 ,*ppv 包 括 请 求 的 接 口 指 针 。返 回 值 :S_OK 指 定 的 Com 对 象 实 例 被 成 功 创 建 。REGDB_E_CLASSNOTREG 指 定 的 类 没 有 在 注 册 表 中 注 册 . 也 可 能 是 指 定 的 dwClsContext 没 有 注 册 或 注 册 表 中 的 服 务 器 类 型 损 坏 CLASS_E_NOAG
10、GREGATION 这 个 类 不 能 创 建 为 聚 合 型 。E_NOINTERFACE 指 定 的 类 没 有 实 现 请 求 的 接 口 , 或 者 是 IUnknown 接 口 没 有 暴 露 请 求 的 接 口 .注 释 :CoCreateInstance 帮 助 者 函 数 通 过 使 用 对 象 的 CLSID,提 供 了 一 种 便 洁 的 方 式 与 类 对 象 连 接 ,创 建 未 初 始化 的 实 例 ,以 及 释 放 类 对 象 。 它 封 装 了 以 下 的 功 能 :CoGetClassObject(rclsid, dwClsContext, NULL, IID_
11、IClassFactory, &pCF); hresult = pCF-CreateInstance(pUnkOuter, riid, ppvObj); pCF-Release(); 当 在 本 机 中 只 创 建 一 个 对 象 时 , 调 用 CoCreateInstance 是 最 方 便 的 ;如 果 要 在 远 程 系 统 中 创 建 一 个 对 象 时, 可 以 调 用 CoCreateInstanceEx;创 建 多 个 同 一 CLSID 的 对 象 时 , 可 以 参 考 CoGetClassObject 函 数 ;如 果 创建 多 个 对 象 实 例 ,可 以 获 得 类
12、对 象 的 IClassFactory 接 口 指 针 , 并 使 用 需 要 的 方 法 ,可 以 使 用 CoGetClassObject 函 数 。在 CLSCTX 枚 举 器 中 , 你 可 以 指 定 用 来 管 理 对 象 的 服 务 器 类 型 . 这 些 常 量 可 以 是CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER或 是 它 们 的 任 何 组 合 . 常 量 CLSCTX_ALL 被 定 义 为 这 三 个 值 的 组 合 . 想 获 得 更 多 的 有 关 这 些常 量 的 用 法 ,请
13、参 考 CLSCTX.添加组到 OPC 服务器m_IOPCServer-AddGroup(Lgrp1, / in 组名TRUE, / in 活动状态500, / in 向服务器发送请求的刷新率1, / in 客户端的操作句柄&TimeBias, / in 与标准时间的校正值&PercentDeadband, / in 要舍弃的数据LOCALE_ID, / in 服务器使用的语言&m_GrpSrvHandle, / out 添加组以后服务器返回的组句柄&RevisedUpdateRate, / out 服务器的数据刷新率IID_IOPCItemMgt, / in 添加组的接口类型(LPUNKNO
14、WN*)&m_IOPCItemMgt); / out 服务器返回的接口对象指针AddGroup 函数的说明HRESULT AddGroup(in, string LPCWSTR szName, in BOOL bActive,in DWORD dwRequestedUpdateRate,in OPCHANDLE hClientGroup,unique, in LONG *pTimeBias,in FLOAT * pPercentDeadband,in DWORD dwLCID,out OPCHANDLE * phServerGroup,out DWORD *pRevisedUpdateRate
15、,in REFIID riid,out, iid_is(riid) LPUNKNOWN * ppUnk);Parameters DescriptionszName Name of the group. The name must be unique among the other groups created by this client. If no name is provided (szName is pointer to a NUL string) the server will generate a unique name. The server generated name wil
16、l also be unique relative to any existing public groups.bActive FALSE if the Group is to be created as inactive.TRUE if the Group is to be created as active. dwRequestedUpdateRate Client Specifies the fastest rate at which data changes may be sent to OnDataChange for items in this group. This also indicates the desired accuracy of Cached Data. This is intended only to control th