这里写目录标题
- 一、OPC UA库
-
- 1、核心概念与类
- 2、基本开发流程
- 3、重要注意事项
- 二、问题发现
- 三、库的编译安装
-
- 1、打开Qt集成工具中的命令行
- 2、新建文件夹
- 3、跳转进入文件夹
- 4、执行如下命令
- 5、测试是否 正常
- 四、测试

一、OPC UA库
- OPC UA (OPC Unified Architecture): 这是一个面向工业自动化的开放通信标准协议。它旨在实现不同制造商设备和系统之间的安全、可靠、跨平台的数据交换。相较于传统的 OPC(基于 COM/DCOM),OPC UA 不依赖于特定操作系统(如 Windows),支持更复杂的数据模型(信息模型),并内置了强大的安全机制。
- Qt OPC UA: 这是 Qt 框架提供的一个模块,用于开发 OPC UA 客户端应用程序。它封装了 OPC UA 协议的复杂性,为开发者提供了面向对象的 C++ API 和 QML API,简化了与 OPC UA 服务器进行连接、浏览地址空间、读取/写入数据、订阅数据变化等操作。它基于 Qt 的信号与槽机制,易于集成到 Qt 应用程序中。
1、核心概念与类
QOpcUaClient:
- 这是 OPC UA 客户端的核心类,代表一个到 OPC UA 服务器的连接会话。
- 负责建立连接、断开连接、管理会话状态。
- 提供浏览服务器地址空间、读取/写入节点值、添加/移除监控项(订阅)等功能。
- 状态通过信号(如 stateChanged, connected, disconnected, errorOccurred)通知。
QOpcUaProvider:
- 用于创建 QOpcUaClient 实例的工厂类。
- 可以列出可用的后端(插件),不同的后端可能支持不同的特性或底层实现(例如,开源 open62541 库)。
QOpcUaProvider provider;
QStringList backends = provider.availableBackends(); // 获取可用后端
QOpcUaClient *client = provider.createClient(backends.first()); // 使用第一个后端创建客户端
QOpcUaNode:
- 代表 OPC UA 地址空间中的一个节点。
- 每个节点由 NodeId 唯一标识。
- 节点可以包含属性(如值、数据类型、描述等),并与其他节点有关联(引用)。
- 通过 QOpcUaClient 获取节点实例。
QOpcUaNode *node = client->node("ns=2;s=MyDevice.Temperature"); // 通过 NodeId 字符串获取节点
节点属性与操作:
- 读取 (readNodeAttributes): 读取节点的多个属性(值、数据类型、时间戳等)。
- 写入 (writeAttribute): 向节点的特定属性(通常是 Value 属性)写入数据。
- 调用方法 (callMethod): 调用服务器上节点代表的方法(如果支持)。
- 操作是异步的,结果通过信号(如 attributeRead, attributeWritten, methodCallFinished)返回。
QOpcUaMonitoringParameters 与 QOpcUaMonitoredItem:
- 用于订阅节点的值变化。
- QOpcUaMonitoringParameters: 定义订阅的参数,如采样间隔、队列大小、是否报告时间戳等。
- QOpcUaMonitoredItem: 代表一个具体的监控项。当节点的值发生变化时,会通过 dataChanged 信号发出新值。
QOpcUaMonitoringParameters settings(100); // 采样间隔 100ms
QOpcUaMonitoredItem *item = node->enableMonitoring(QOpcUa::NodeAttribute::Value, settings);
connect(item, &QOpcUaMonitoredItem::dataChanged, this, [](QOpcUa::NodeAttribute attr, const QVariant &value) {
qDebug() << "Value changed:" << value;
});
QOpcUaBrowseResult 与浏览:
- 使用 QOpcUaClient 的 browse 或 node 的 browseChildren 函数浏览地址空间。
- 结果包含子节点的引用信息(QOpcUaReferenceDescription),可以用于进一步浏览或获取节点。
安全:
- OPC UA 支持多种安全策略(SecurityPolicy)和消息签名/加密模式(MessageSecurityMode)。
- 客户端连接时可能需要提供用户名/密码或证书。
- Qt OPC UA 提供了设置安全相关参数的接口(在 QOpcUaClient 连接时指定)。
2、基本开发流程
- 读取节点值: readNodeAttributes 或等待节点 attributeUpdated 信号。
- 写入节点值: writeAttribute。
- 订阅值变化: 创建 QOpcUaMonitoringParameters 并调用节点的 enableMonitoring。
3、重要注意事项
- 异步操作: 大多数 OPC UA 操作(连接、读取、写入、浏览)都是异步的。必须通过信号和槽来处理结果和错误,不能假设操作会立即完成。
- 线程: QOpcUaClient 及其创建的节点和监控项对象应在同一个线程中使用。通常在主线程(GUI 线程)或专门的 QThread 中使用。
- 后端: 确保选择了合适的后端插件。检查 availableBackends() 并了解不同后端的特性和限制。
- 错误处理: 必须妥善处理 errorOccurred 信号和其他操作失败的情况(如写入失败、监控项创建失败)。
- 资源管理: 及时释放不再需要的节点 (deleteLater) 和监控项 (deleteLater),尤其是在断开连接后。
- 数据类型: OPC UA 支持丰富的数据类型。Qt 使用 QVariant 来传递数据。注意服务器返回的数据类型可能与预期不符,需要进行转换或检查。
- 地址空间模型: 理解 OPC UA 的节点、引用、对象、变量、方法等基本概念对有效使用库非常重要。
二、问题发现
尝试在Qt中使用OpcUa相关,查找官方文档得知,在相应的pro文件中添加如下代码即可:
QT += opcua
但是在实际编译时发现报错,提示opcua模块不存在。
Project ERROR: Unknown module(s) in QT: opcua
原因是Qt中集成了Open62541, version 0.3版本,但是需要手动编译相关代码,才能在Qt项目配置中直接使用。
三、库的编译安装
1、打开Qt集成工具中的命令行
根据自己版本选择,我的是QT6.9.0 
2、新建文件夹
新建一个文件夹 
3、跳转进入文件夹

4、执行如下命令
依次执行如下命令,等待执行完成在执行下一个:
git clone https://code.qt.io/qt/qtopcua.git
cd qtopcua
git checkout 6.9.0
mkdir build
cd build
qt–cmake –G "MinGW Makefiles" –DCMAKE_INSTALL_PREFIX="E:\\Qt\\6.9.0\\mingw_64" ..
mingw32–make
然后就开始编译了
编译完成后输入如下命令安装:
mingw32–make install
等待安装完成,
5、测试是否 正常
加入opcua库,编译运行正常 
四、测试
找到qtopcua的examples文件夹,打开如下示例
选择安装的qt版本构建工具
编译运行 




