最近工作遇到需要利用C++开发一个OPC客户端读写OPC服务端数据,笔者自然而然,开始百度,CSDN博客上有许多了解OPC开发的博客,在此,仅仅记录一下自己在开发中遇到的问题及自己的一个OPCclient源代码。
1、OPC客户端开发流程
- 笔者安装的OPC服务端是KEPServerEX 6 ,安装后会提供关于OPC客户端访问的接口文件,这个就不说了,主要的头文件包含
//头文件中添加
#include "opcerror.h"
#include "opccomn.h"
#include "OpcEnum.h"
#include "Opcda.h"
//实现文件中添加
#include "opccomn_i.c"
#include "Opcda_i.c"
#include "OpcEnum_i.c"
- 代码流程
- 组件初始化(C++不需要配置DCOM直接访问)
m_hResult = CoInitializeEx(0, COINIT_MULTITHREADED);
if (m_hResult != S_OK)
{
CoUninitialize();
throw QException("Error CoInitialize():COM Library already initialized");
}
- 获取KEPServerEX 6的CLSID
m_hResult = CLSIDFromProgID("服务器名称", &m_clsid);
if (m_hResult != S_OK)
{
CoUninitialize();
throw QException("Error CLSIDFromProgID():Retrival of CLSID failed");
}
- 创建一个实例
m_hResult = CoCreateInstance(m_clsid, NULL, CLSCTX_LOCAL_SERVER