opc客户端读取数据品质是bad_OPC client 在VC环境下编程.doc

本文档详细介绍了在VC环境下使用OPC客户端进行编程的过程,包括连接OPC服务器,初始化COM库,查找CLSID,创建并操作OPC服务对象。主要涉及IOPCServer、IOPCItemMgt和IOPCSyncIO接口以及OPCITEMDEF和OPCITEMRESULT数据结构。此外,还解释了如何读取数据品质并处理可能的BAD数据问题。
摘要由CSDN通过智能技术生成

OPC client 在VC环境下编程

连接

使用到变量的说明

类型说明

HRESULT函数返回值,用来检测函数返回值(如:初始化COM库,查找CLSID,创建OPC服务等),提供函数执行情况

CLSID全球唯一标示符LPWSTRLPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针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必须成对使用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;在远程系统中创建一个对象时,可以调用CoCreateInstanceEx;创建多个同一CLSID的对象时, 可以参考 CoGetClassObject 函数。

函数原形:

STDAPI CoCreateInstance(

REFCLSID rclsid, //创建的Com对象的类标识符(CLSID)

LPUNKNOWN pUnkOuter, //指向接口IUnknown的指针

DWORD dwClsContext, //运行可执行代码的上下文

REFIID riid, //创建的Com对象的接口标识符

LPVOID * ppv //用来接收指向Com对象接口地址的指针变量

);

参数:

rclsid

[in] 用来唯一标识一个对象的CLSID(128位),需要用它来创建指定对象。

pUnkOuter

[in] 如果为NULL, 表明此对象不是聚合式对象一部分。如果不是NULL, 则指针指向一个聚合式对象的IUnknown接口。

dwClsContext

[in] 组件类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值