QOpcUaNode

        QOpcUaNode允许与OPC UA节点进行交互。

1.详细描述:

        节点是OPC UA地址空间的基本构建块。它具有浏览名称、值、关联属性等属性,并且可以引用地址空间中的其他节点。节点被组织在名称空间中,并且具有ID,例如可以是数字、字符串、名称空间特定格式(不透明)或全局唯一标识符。节点由名称空间ID和节点ID标识。该标识符通常以字符串的形式给出:例如,位于名称空间0中并具有数字标识符42的节点的标识符,则字符串为ns=0;i=42。具有字符串标识符的节点可以通过“ns=0;s=myStringIdentifier”寻址。

        此类型的对象归用户所有,在不再需要时必须删除。只要创建它们的QOpcUaClient存在,它们就有效。

2.读写属性

        当调用readAttributes()或readAttributeRange()时,将从服务器读取节点属性。结果缓存在本地,并且可以在接收到attributeRead信号后使用attribute()进行检索。

        如果用户具有必要的权限,则可以使用writeAttribute()、writeAttributes()和writeAttributeRange()写入属性。使用attributeWritten信号报告写入操作成功。

        attributeError()包含与属性上的最后一次读取或写入操作相关联的状态代码。这是OPC UA服务返回的低级别状态代码。通过使用QOpcUa::ErrorCategory()将此状态代码转换为QOpcUa::ErrorCategory,可以简化此状态代码.

3.订阅和监视项目

        订阅是OPC UA中的一个概念,它允许接收数据更改的通知或在发生事件的情况下接收通知,而不是连续轮询节点以获取更改。监视的项定义了如何监视节点的属性以进行更改。它们被添加到订阅中,并且它们生成的任何通知都会通过订阅转发给用户。用户可以配置更新的间隔以及监视项目和订阅的许多其他选项。

        QOpcUaNode提供了一个抽象,用于与订阅和监视项目交互。enableMonitoring()为一个或多个属性启用数据更改通知。dataChangeOccurred信号包含新值,并且本地缓存会更新。disableMonitoring()将禁用数据更改通知。monitoringStatusChanged信号通知监视状态的更改,例如在手动启用和禁用或服务器上的状态更改之后。

        事件监视使用相同的API进行设置和生命周期管理。EventNotifier属性必须使用EventFilter进行监控,该EventFilter选择所需的事件字段并根据用户定义的标准筛选报告的事件。事件在eventOccurred()信号中报告为QVariantList,其中包含所选事件字段的值。

        订阅和监视项的设置可以在运行时使用modifyMonitoring()进行修改。

4.浏览地址空间

        OPC UA地址空间由通过引用连接的节点组成。browseChildren在前向上遵循这些引用,并在browseFinished信号中返回连接到QOpcUaNode实例后面节点的所有节点的属性。browse()类似于browseChildren(),但提供了更多选项来配置浏览调用。

5.方法调用

        OPC UA指定了用户可以调用的服务器上的方法。QOpcUaNode通过callMethod支持这一点,该方法获取参数并在methodCallFinished信号中返回调用结果。

6.解析浏览路径

        为了支持根据类型描述进行编程,OPC UA支持解析从某个节点开始的浏览名称路径,以获得目标节点的节点id。resolveBrowsePath()方法遵循从调用它的节点开始的路径,并在resolveBrowserPathFinished()信号中返回结果。

7.实例

        有关将客户端连接到服务器并获取QOpcUaNode对象的信息,请参阅QOpcUaClient。

        成功创建节点后,将从服务器中读取根节点的BrowseName:

QOpcUaNode *rootNode; // Created before, see QOpcUaClient documentation.
// Connect to the attributeRead signal. Compatible slots of QObjects can be used instead of a lambda.
QObject::connect(rootNode, &QOpcUaNode::attributeRead, [rootNode, client](QOpcUa::NodeAttributes attr) {
    qDebug() << "Signal for attributes:" << attr;
    if (rootNode->attributeError(QOpcUa::NodeAttribute::BrowseName) != QOpcUa::UaStatusCode::Good) {
        qDebug() << "Failed to read attribute:" << rootNode->attributeError(QOpcUa::NodeAttribute::BrowseName);
        client->disconnectFromEndpoint();
    }
    qDebug() << "Browse name:" << rootNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUaQualifiedName>().name();
});
rootNode->readAttributes(QOpcUa::NodeAttribute::BrowseName); // Start a read operation for the node's BrowseName attribute.

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值