欢迎光临
我们一直在努力

Qt6 编译安装OPC UA库详细教程

这里写目录标题

  • 一、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、基本开发流程

  • 创建客户端: 使用 QOpcUaProvider 创建 QOpcUaClient。
  • 配置连接: 设置服务器端点 URL (setEndpoint)、安全策略 (setSecurityPolicy)、安全模式 (setMessageSecurityMode)、用户凭据 (setUserIdentity) 等。
  • 连接服务器: 调用 connectToEndpoint。
  • 处理连接状态: 连接 connected 信号,断开 disconnected 信号,错误 errorOccurred 信号。
  • 浏览地址空间: 连接成功后,使用 browse 或已知 NodeId 获取节点 (node)。
  • 与节点交互:
    • 读取节点值: readNodeAttributes 或等待节点 attributeUpdated 信号。
    • 写入节点值: writeAttribute。
    • 订阅值变化: 创建 QOpcUaMonitoringParameters 并调用节点的 enableMonitoring。
  • 断开与清理: 使用 disconnectFromEndpoint 断开连接,清理 QOpcUaNode 和 QOpcUaMonitoredItem 对象。
  • 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
    qtcmake G "MinGW Makefiles" DCMAKE_INSTALL_PREFIX="E:\\Qt\\6.9.0\\mingw_64" ..
    mingw32make

    然后就开始编译了 在这里插入图片描述 编译完成后输入如下命令安装:

    mingw32make install

    在这里插入图片描述 等待安装完成,

    5、测试是否 正常

    加入opcua库,编译运行正常 在这里插入图片描述

    四、测试

    找到qtopcua的examples文件夹,打开如下示例 在这里插入图片描述 选择安装的qt版本构建工具 在这里插入图片描述 编译运行 在这里插入图片描述

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » Qt6 编译安装OPC UA库详细教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址