OPC数据读写之订阅方式(Subscription)与COM可连接对象的应用分析

 HRESULT hr;
 //建立连接过程
 IConnectionPointContainer * pIConnectPointContainer = NULL;
 IConnectionPoint * pIConnectPoint = NULL;
 //第一步:
 hr = pIItemMgt->QueryInterface(IID_IConnectionPointContainer,
  (void**)&pIConnectPointContainer);
 if( FAILED(hr) ) //如果调用不成功,则该对象不支持出接口
 {
  //interface IConnectionPointContainer non disponible
  TCHAR tchTemp[128] = "";
  wsprintf(tchTemp, "查找 IID_IConnectionPointContainer 接口失败,错误代码:0x%0x", hr);
  MessageBox(NULL, tchTemp, tchTemp, MB_OK); 
  return FALSE;
 }
 else if( SUCCEEDED(hr) )
 {
  TCHAR tchTemp[128] = "";
  wsprintf(tchTemp, "查找 IID_IConnectionPointContainer 可连接对象接口成功");
  MessageBox(NULL, tchTemp,
   "Error SOPCC_SetDataChangeNotify()",
   MB_OK|MB_ICONINFORMATION); 
 }
 
 //第二步:
 // demande d'un pointeur sur l'interface IConnectionPoint
 hr = pIConnectPointContainer->FindConnectionPoint(IID_IOPCDataCallback,
  &pIConnectPoint);
 if( FAILED(hr) ) //表明对象不支持出接口 IOPCDataCallback 
 {
  TCHAR tchTemp[128] = "";
  wsprintf(tchTemp,
   "查找服务器对象的连接点 IConnectionPoint 接口失败/n错误代码:0x%0xpIConnectPoint: 0x%0x",
   hr, pIConnectPoint);
  MessageBox(NULL, tchTemp, "Error SOPCC_SetDataChangeNotify()", MB_OK|MB_ICONERROR); 
 }
 else if( SUCCEEDED(hr) )
 {
  TCHAR tchTemp[128] = "";
  wsprintf(tchTemp, "查找服务器对象的连接点 IConnectionPoint 接口成功");
  MessageBox(NULL, tchTemp, "Error SOPCC_SetDataChangeNotify()", MB_OK|MB_ICONINFORMATION);
 }
 //不管调用是否成功,都执行下面的语句,我们以后不再使用它
 pIConnectPointContainer->Release();
 if( NULL == pIConnectPoint )
 {
  TCHAR tchTemp[128] = "";
  wsprintf(tchTemp, "服务器不支持 IOPCDataCallback 接口,错误代码:0x%0x", hr);
  MessageBox(NULL, tchTemp, "Error SOPCC_SetDataChangeNotify()", MB_OK|MB_ICONERROR); 
  return FALSE;
 }

 //第三步: 服务器连接点对象建立与接收器对象的连接
 /*客户需要保存Advise的第二个参数的返回值(该连接的标识),
 断开连接时会用到该值*/
 CCallback  * callback;
 hr = pIConnectPoint->Advise(callback, 0);
 if( FAILED(hr) )
 {
  TCHAR tchTemp[128] = "";
  wsprintf(tchTemp, "接收器与连接对象建立连接失败,错误代码:0x%0x", hr);
  MessageBox(NULL, tchTemp, "Error SOPCC_SetDataChangeNotify()", MB_OK|MB_ICONERROR);   
 }
 else if( SUCCEEDED(hr) )
 {
  TCHAR tchTemp[128] = "";
  wsprintf(tchTemp, "接收器与连接对象建立连接成功");
  MessageBox(NULL, tchTemp, "Error SOPCC_SetDataChangeNotify()", MB_OK|MB_ICONINFORMATION);  
 }

 

Notice:
IID_IOPCDataCallback is a callback interface for the OPCGroup object
IID_IOPCShutdown is a callback interface for the OPCServer object

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在VS2015中使用OPCUA Open62541通过Kepware读写PLC数据需要按照以下步骤进行操作: 1. 安装Kepware软件:首先,需要从Kepware官网下载并安装Kepware软件。安装完成后,启动Kepware。 2. 配置Kepware:在Kepware中,需要配置OPCUA服务器以与PLC进行通信。根据PLC的型号和网络设置,设置适当的连接和通信参数。 3. 下载Open62541库:从Open62541项目的GitHub页面下载Open62541库的源代码。 4. 设置VS2015:打开VS2015并创建一个新的C++项目。在项目属性中,设置正确的包含路径和库文件路径,以便能够引用Open62541库。 5. 编写代码:在VS2015中编写C++代码来实现通过OPCUA Open62541访问PLC数据的功能。代码需要包含Open62541库的头文件,并使用相应的函数来实现与OPCUA服务器连接、读取和写入PLC数据的操作。 6. 编译和运行:编译代码并运行程序。如果一切顺利,程序应该能够与Kepware建立连接,并能够读取和写入PLC数据。 需要注意的是,确保在编写代码时,按照Open62541库的文档和示例进行操作。此外,还需要了解PLC的数据结构和通信协议,并根据实际情况进行相应的配置和参数设置。 ### 回答2: 在VS2015中使用OPCUA open62541库通过Kepware读写PLC数据,需要按照以下步骤进行操作。 首先,确保已经安装了VS2015和Kepware软件,并成功配置了PLC设备。 1. 下载open62541库并解压缩,然后在VS2015中创建一个新的C++项目。 2. 将open62541库中的源文件添加到项目中,包括open62541.c和open62541.h。 3. 在项目设置中配置附加包含目录,确保可以找到open62541.h文件。 4. 创建一个新的源文件,命名为main.cpp,并在其中包含open62541.h头文件。 5. 在main.cpp中编写代码,首先要连接到Kepware服务器。可以使用opcua_client_create函数创建一个OPC UA客户端对象,并使用opcua_client_connect函数连接到Kepware服务器。 6. 连接成功后,可以使用opcua_client_create_subscription函数创建一个订阅对象,并使用opcua_subscription_add_monitored_item函数添加一个监视项。监视项允许读取和写入PLC数据。 7. 使用opcua_subscription_activate函数激活订阅。 8. 使用opcua_read_value和opcua_write_value函数读写PLC数据。这些函数需要提供节点的标识符,可以使用Kepware提供的OPC UA浏览器工具查找节点标识符。 9. 最后,使用opcua_client_disconnect函数断开与Kepware服务器连接。 总结起来,通过在VS2015中使用OPCUA open62541库,我们可以创建一个OPC UA客户端,连接到Kepware服务器,创建订阅并添加监视项来读写PLC数据。希望以上步骤能对你有所帮助。 ### 回答3: Visual Studio 2015是一种集成开发环境(IDE),用于开发应用程序。OPC-UA(OPC Unified Architecture)是一种开放式、跨平台、工业自动化通信协议,用于实现工业设备之间的互操作性。open62541是一个开源的OPC-UA库,用于在C和C++应用程序中实现OPC-UA通信。而Kepware是一种常用的OPC服务器软件,用于将PLC和其他设备连接OPC系统。 要在VS2015中使用open62541通过Kepware读写PLC数据,需要按照以下步骤进行操作: 1. 下载并安装open62541库:从open62541项目的官方网站(https://open62541.org/)下载最新版本的库,并按照指南进行安装。 2. 创建一个新的C或C++项目:在VS2015中创建一个新的空项目,并将open62541库添加到项目中。 3. 编写OPC-UA客户端代码:使用open62541库的API函数编写代码,配置连接到Kepware的OPC-UA客户端。这些代码将实现与PLC的通信,并读取和写入PLC数据。可以使用open62541库提供的函数来连接OPC服务器、读取和写入节点的数据等。 4. 编译和运行代码:在VS2015中编译和运行代码,确保代码能够成功连接到Kepware OPC服务器读写PLC数据。 总结来说,使用VS2015和open62541通过Kepware读写PLC数据,需要下载和安装open62541库,并在VS2015中创建一个新的项目。然后编写OPC-UA客户端代码,使用open62541库的API函数来实现与Kepware的连接数据读写。最后,编译和运行代码,确保代码能够成功连接OPC服务器并实现PLC数据读写
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值