QOpcUaNode 类
QOpcUaNode 允许与 OPC UA 节点进行交互。 更多...
头文件 | #include <QOpcUaNode> |
CMake | find_package(Qt6 REQUIRED COMPONENTS OpcUa) target_link_libraries(mytarget PRIVATE Qt6::OpcUa) |
qmake | QT += opcua |
继承 | QObject |
公共类型
公共函数
QVariant | attribute(QOpcUa::NodeAttribute attribute) const |
QOpcUa::UaStatusCode | attributeError(QOpcUa::NodeAttribute attribute) const |
bool | browse(const QOpcUaBrowseRequest &request) |
bool | browseChildren(QOpcUa::ReferenceTypeId referenceType = QOpcUa::ReferenceTypeId::HierarchicalReferences, QOpcUa::NodeClasses nodeClassMask = QOpcUa::NodeClass::Undefined) |
bool | callMethod(const QString &methodNodeId, const QList<QOpcUa::TypedVariant> &args = QList<QOpcUa::TypedVariant>()) |
QOpcUaClient * | client() const |
bool | disableMonitoring(QOpcUa::NodeAttributes attr) |
bool | enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings) |
bool | modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter) |
bool | modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter) |
bool | modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value) |
QOpcUaMonitoringParameters | monitoringStatus(QOpcUa::NodeAttribute attr) |
QString | nodeId() const |
bool | readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange) |
bool | readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes()) |
(since 6.7) QOpcUaHistoryReadResponse * | readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0) |
(since 6.3) QOpcUaHistoryReadResponse * | readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds) |
(since 6.7) QOpcUaHistoryReadResponse * | readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds, QOpcUa::TimestampsToReturn timestampsToReturn) |
bool | readValueAttribute() |
bool | resolveBrowsePath(const QList |
QDateTime | serverTimestamp(QOpcUa::NodeAttribute attribute) const |
QDateTime | sourceTimestamp(QOpcUa::NodeAttribute attribute) const |
QVariant | valueAttribute() const |
QOpcUa::UaStatusCode | valueAttributeError() const |
bool | writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant&value, QOpcUa::Types type = QOpcUa::Types::Undefined) |
bool | writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant&value, const QString&indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined) |
bool | writeAttributes(const QOpcUaNode::AttributeMap&toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined) |
bool | writeValueAttribute(const QVariant&value, QOpcUa::Types type = QOpcUa::Types::Undefined) |
信号
void | attributeRead(QOpcUa::NodeAttributes attributes) |
void | attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value) |
void | attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode) |
void | browseFinished(QList |
void | dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value) |
void | disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode) |
void | enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode) |
void | eventOccurred(QVariantList eventFields) |
void | methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode) |
void | monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode) |
void | resolveBrowsePathFinished(QList |
(自 6.7) void | valueAttributeUpdated(const QVariant&value) |
静态公共成员
QOpcUa::NodeAttributes | allBaseAttributes() |
QOpcUa::NodeAttributes | mandatoryBaseAttributes() |
详细说明
节点是 OPC UA 地址空间的基本构建块。它具有浏览名称、值、关联属性等属性,可以引用地址空间中的其他节点。节点组织在命名空间中,具有例如可以是数字的 ID、字符串、命名空间特定的格式(不透明)或全局唯一标识符的 ID。节点通过命名空间 ID 和节点 ID 进行识别。此标识符通常以字符串形式给出:居留在命名空间 0 且具有数字标识符 42 的节点的标识符为字符串 ns=0;i=42
。具有字符串标识符的节点可以通过 ns=0;s=myStringIdentifier
进行寻址。
此类型的对象归用户所有,当不再需要时必须删除。只要创建它们的 QOpcUaClient 存在,它们就是有效的。
属性的读写
在调用 readAttributes() 或 readAttributeRange() 时,节点属性从服务器读取。结果会缓存在本地,并在收到 attributeRead 信号后,使用 attribute() 进行检索。
如果用户拥有必要的权限,可以使用 writeAttribute()、writeAttributes() 和 writeAttributeRange() 来写入属性。写操作的执行结果将通过 attributeWritten 信号进行报告。
attributeError() 包含与最后读取或写入操作相关的状态码。这是 OPC UA 服务返回的底层状态码。可以使用 QOpcUa::errorCategory() 将其转换为 QOpcUa::ErrorCategory 以简化。
订阅和监控项
订阅是 OPC UA 中的一个概念,它允许接收数据更改或事件的通知,而不是持续轮询节点以获取更改。监控项定义了如何监控节点的属性更改。它们被添加到订阅中,并通过订阅将生成的任何通知转发给用户。用户可以配置监控项和订阅的更新间隔以及许多其他选项。
QOpcUaNode 为与订阅和监控项交互提供了一个抽象层。调用 enableMonitoring() 可以为一个或多个属性启用数据更改通知。当收到 dataChangeOccurred 信号时,dataChangeOccurred 信号包含新值,并且本地缓存被更新。调用 disableMonitoring() 可以上传数据更改通知。当服务器手动启用或禁用或在服务器上发生状态更改时,monitoringStatusChanged 信号会通知监控状态的变化。
事件监控使用相同的 API 来设置和生命周期管理。必须使用 EventFilter 监控 EventNotifier 属性,该过滤器选择所需的字段并按用户定义的准则过滤报告的事件。事件作为 QVariantList 报告在 eventOccurred() 信号中,其中包含所选事件字段的值。
可以使用 modifyMonitoring() 在运行时修改订阅和监控项的设置。
浏览地址空间
OPC UA 地址空间由通过引用相互连接的节点组成。在 browseFinished 信号中,通过 browseChildren 遵循这些引用的方向,并返回与 QOpcUaNode 实例相连的节点的属性。使用 browse(),类似于 browseChildren(),但提供了更多配置浏览调用的选项。
方法调用
OPC UA 规定了服务器上的方法,用户可以调用这些方法。通过 QOpcUaNode 的 callMethod 方法支持此功能,该方法接受参数,并在 methodCallFinished 信号中返回调用结果。
解析浏览路径
为了支持对类型描述的编程,OPC UA 支持从某个节点开始解析一个以浏览名称开始的路径,以获取目标节点的节点 ID。`resolveBrowsePath` 方法(resolveBrowsePath)沿着从它被调用的节点开始的路径进行,并通过 `resolveBrowsePathFinished` 信号返回结果。
示例
关于将客户端连接到服务器并获取 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.
成员类型文档
QOpcUaNode::AttributeMap
此类型由 `writeAttributes`(writeAttributes) 使用以一次写入多个属性。《QVariant》值必须分配给要写入的属性。
成员函数文档
[静态常量]
QOpcUa::NodeAttributes QOpcUaNode::allBaseAttributes()
包含 OPC UA 基节点类的所有属性。
QVariant QOpcUaNode::attribute(QOpcUa::NodeAttribute attribute) const
返回 attribute 给出的属性的值。
该值仅在发出 attributeRead 信号之后有效。如果没有缓存的属性值,则返回空 QVariant。
QOpcUa::UaStatusCode QOpcUaNode::attributeError(QOpcUa::NodeAttribute attribute) const
返回 attribute 给出的属性的错误代码。
错误代码仅在发出 attributeRead 或 attributeWritten 信号之后有效。
如果在属性缓存中没有条目,则返回 BadNoEntryExists。
[信号]
void QOpcUaNode::attributeRead(QOpcUa::NodeAttributes attributes)
此信号在执行完 readAttributes 或 readAttributeRange 操作后发出。接收者必须检查在 attributes 中包含的属性的代码。
[信号]
void QOpcUaNode::attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)
此信号在服务器从这个节点的数据更改通知、读取或写入操作更新属性缓存后的值时发出。 value 包含节点属性 attr 的新值。
另请参阅 `attribute`(attribute)、`attributeError`(attributeError)、`serverTimestamp`(serverTimestamp)、`sourceTimestamp`(sourceTimestamp) 和 `valueAttributeUpdated`。
[信号]
void QOpcUaNode::attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode)
在执行写属性(writeAttribute),写属性列表(writeAttributes)或写属性范围(writeAttributeRange)操作后,会发出此信号。
在发出此信号之前,如果写操作成功,则更新属性缓存。在执行写属性列表时,为写调用中的每个属性都会发出信号。statusCode包含了在attribute上的写操作的成功信息。
bool QOpcUaNode::browse(const QOpcUaBrowseRequest &request)
从此节点开始执行浏览调用。
如果异步调用已成功发送,则返回true
。
在browseFinished信号中返回所有符合request中指定条件的引用。
例如,可以使用反向浏览调用来查找属性节点的父节点
QOpcUaBrowseRequest request; request.setBrowseDirection(QOpcUaBrowseRequest::BrowseDirection::Inverse); request.setReferenceTypeId(QOpcUa::ReferenceTypeId::HasProperty); propertyNode->browse(request);
bool QOpcUaNode::browseChildren(QOpcUa::ReferenceTypeId referenceType = QOpcUa::ReferenceTypeId::HierarchicalReferences, QOpcUa::NodeClasses nodeClassMask = QOpcUa::NodeClass::Undefined)
从调用的此方法所在的节点开始执行正向浏览调用。浏览操作会收集与节点连接的子节点信息,并通过browseFinished信号传递结果。
如果异步调用已成功发送,则返回true
。
为了只请求由某种特定类型的引用连接到节点的子节点,必须在referenceType中设置该引用类型。例如,可以通过在referenceType中传递HasProperty来使用此方法获取节点的所有属性。可以通过在nodeClassMask中设置它们来过滤结果,只包含具有特定节点类的节点。
[信号]
void QOpcUaNode::browseFinished(QList<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode)
在执行browseChildren或browse操作后,发出此信号。
children包含了所有符合browseChildren中条件的节点信息。statusCode包含了浏览操作的服务结果。如果statusCode不是Good,那么传递的children向量将是空的。
另请参阅QOpcUaReferenceDescription.
bool QOpcUaNode::callMethod(const QString &methodNodeId, const QList<QOpcUa::TypedVariant> &args = QList<QOpcUa::TypedVariant>())
通过参数args调用OPC UA方法methodNodeId。结果会在methodCallFinished信号中返回。
如果异步调用已成功发送,则返回true
。
QOpcUaClient *QOpcUaNode::client() const
返回创建此节点的客户端的指针。
[信号]
void QOpcUaNode::dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value)
在接收到数据变更通知后发出此信号。 value 包含 attr 节点属性的新的值。
另请参阅attribute(),serverTimestamp() 和 sourceTimestamp。
bool QOpcUaNode::disableMonitoring(QOpcUa::NodeAttributes attr)
此方法禁用 attr 中给出的属性的监控。
如果异步调用已成功发送,则返回true
。
调用完成后,发出 disableMonitoringFinished 信号,且 monitoringStatus 返回一个默认构造的值,其中状态码为 BadMonitoredItemIdIinvalid attr。
[信号]
void QOpcUaNode::disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
在异步调用 disableMonitoring() 完成后发出此信号。 statusCode 包含操作生成的状态码。在此信号发出后,monitoringStatus 返回一个默认构造的值,其中状态码为 BadMonitoredItemIdIinvalid attr。
bool QOpcUaNode::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
此方法为 attr 中给出的每个属性创建一个监控项。 settings 中的设置用于创建监控项和订阅。
如果异步调用已成功发送,则返回true
。
调用完成后,发出 enableMonitoringFinished 信号。存在多个错误情况,将生成错误状态码:在 settings 中指定的订阅标识不存在,服务器上不存在该节点,节点没有所需的属性,或服务器达到监控项的最大数量。
该方法同样用于启用事件监控。事件是 OPC UA 地址空间中的特殊对象,其中包含有关已发生事件的信息。如果在服务器上触发事件,则事件监控项收集事件对象及其子节点的节点属性的选定值。每个具有事件源的节点都可以进行事件监控。要监控节点的事件,必须通过 EventFilter (它包含用户需要的字段,并且可选地包含一个用于按标准过滤事件的 where 子句)监控 EventNotifier 属性(详细信息请参阅 QOpcUaMonitoringParameters::EventFilter)。
[信号]
void QOpcUaNode::enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
在异步调用 enableMonitoring() 完成后发出此信号。在此信号发出后,monitoringStatus() 为 attr 返回有效信息。statusCode 包含操作的状态代码。
[信号]
void QOpcUaNode::eventOccurred(QVariantList eventFields)
在新事件被接收后发出此信号。
eventFields 包含事件过滤器的 select
子句中指定顺序的事件字段值。
[静态常量]
QOpcUa::NodeAttributes QOpcUaNode::mandatoryBaseAttributes()
包含 OPC UA 基节点类的所有必需属性。
[信号]
void QOpcUaNode::methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)
在服务器上完成对 methodNodeId 的方法调用后发出此信号。statusCode 包含方法调用的状态代码,result 包含方法的输出参数。result 是空的,如果没有输出参数或 statusCode 不是 Good。如果只有一个输出参数,则 result 变量是一个单一值,或者如果调用函数返回多个输出参数,则它包含一系列变体。
if (result.canConvert<QVariantList>()) { // handle list type } else { // handle value type }
bool QOpcUaNode::modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter)
将现有的数据更改监控修改为使用 filter 作为数据更改过滤器。
如果已成功将过滤器的修改请求传递到后端,则返回 true
。
在操作完成后,对 attr 的 monitoringStatusChanged 发出。
bool QOpcUaNode::modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter)
将现有的事件监控修改为使用 eventFilter 作为事件过滤器。
如果已成功将过滤器的修改请求传递到后端,则返回 true
。
在操作完成后,对 EventNotifier 的 monitoringStatusChanged 发出。
bool QOpcUaNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUa::NodeAttribute item, const QVariant &value)
此方法修改被监控项或订阅的设置。尝试将关联到 attr 的被监控项或订阅的参数 item 设置为 value。
如果异步调用已成功发送,则返回true
。
调用完成后,会发出 monitoringStatusChanged 信号。该信号包含修改后的参数和状态码。如果没有与请求的属性关联的监控项,修改请求参数未实现,或如果服务器拒绝了请求值,则会生成一个错误状态码。
QOpcUaMonitoringParameters QOpcUaNode::monitoringStatus(QOpcUa::NodeAttribute attr)
返回与属性 attr 关联的监控参数。这可以用来检查 enableMonitoring() 的成功情况或参数是否已被修改。返回值只在发出针对 attr 的 enableMonitoringFinished 或 monitoringStatusChanged 信号之后有效。如果发出信号之前查询状态, QOpcUaMonitoringParameters::statusCode() 返回 BadNoEntryExists。
[信号]
void QOpcUaNode::monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode)
此信号在异步调用 modifyMonitoring() 完成后发出。在 attr 中返回请求操作的节点属性。 items 包含已修改的参数。 statusCode 包含服务器上修改操作的结果。
QString QOpcUaNode::nodeId() const
返回 OPC UA 节点的 ID。
bool QOpcUaNode::readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange)
开始对节点属性 attribute 执行异步读取操作。 indexRange 是一个字符串,可以用来选择数组的部分。它在 OPC UA 1.05 第 4 部分,7.27 中定义。数组中的第一个元素是 0,“1”返回第二个元素,“0:9”返回前 10 个元素,“0,1”返回二维数组第一行的第二个元素。
如果异步调用已成功发送,则返回true
。
在发出 attributeRead 信号之后,属性值才包含有效信息。
bool QOpcUaNode::readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes())
开始对 attributes 中的节点属性执行异步读取操作。
如果异步调用已成功发送,则返回true
。
在发出 attributeRead 信号之后,属性值才包含有效信息。
[自6.7版本起]
QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0)
使用参数 startTime、endTime、filter 和 numValues 启动对该节点的读取事件历史记录请求。服务器使用 filter 来确定哪些事件及其哪些字段的集合应返回。
返回一个包含异步请求状态的 QOpcUaHistoryReadResponse,结果通过 QOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList
以下示例检索过去两天的历史事件。每次最多返回10个事件。当有更多符合过滤标准和提供的时间范围的事件时,hasMoreData()
将为真,可以通过 readMoreData() 获取更多事件。
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=EventHistorian")); QVERIFY(node != nullptr); QOpcUaMonitoringParameters::EventFilter filter; filter << QOpcUaSimpleAttributeOperand("Message"); filter << QOpcUaSimpleAttributeOperand("Time"); const auto response = node->readHistoryEvents(QDateTime::currentDateTime().addDays(-2), QDateTime::currentDateTime(), filter, 10); QObject::connect(response, &QOpcUaHistoryReadResponse::readHistoryEventsFinished, this, [response](const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) { if (serviceResult != QOpcUa::UaStatusCode::Good) { qDebug() << "Service call failed with" << serviceResult; return; } // Print what we got so far for (const auto &result : response->events()) { qDebug() << "Results for" << result.nodeId() << result.statusCode(); for (const auto &event : result.events()) qDebug() << " Event:" << event; } if (response->hasMoreData()) response->readMoreData(); });
此功能自 Qt 6.7 版本开始引入。
[自6.3版本起]
QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds)
启动对此节点的读取历史记录请求。这是 Qt OPC UA 对读取 OPC UA 1.05 第4部分 5.10.3 中定义的原始历史数据的 OPC UA ReadHistory 服务的表示。它根据参数 startTime、endTime、numValues 和 returnBounds 读取历史数据。
返回一个包含异步请求状态的 QOpcUaHistoryReadResponse,结果通过 QOpcUaHistoryReadResponse::readHistoryDataFinished(const QList
以下示例请求并打印节点过去两天的历史数据。结果限制为每个节点每次返回十个值。
QOpcUaHistoryReadResponse *response = node->readHistoryRaw(QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(-2), 10, true); if (response) { QObject::connect(response123, &QOpcUaHistoryReadResponse::readHistoryDataFinished, [] (QList<QOpcUaHistoryData> results, QOpcUa::UaStatusCode serviceResult) { if (serviceResult != QOpcUa::UaStatusCode::Good) { qWarning() << "Fetching historical data failed with:" << serviceResult; } else { for (const auto& result : results) { qInfo() << "NodeId:" << result.nodeId(); for (const auto &dataValue : result.result()) qInfo() << "Value:" << dataValue.value(); } } }); }
此功能自 Qt 6.3 版本开始引入。
[自6.7版本起]
QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds, QOpcUa::TimestampsToReturn timestampsToReturn)
启动对此节点的读取历史记录请求。额外的 timestampsToReturn 参数确定每个值返回哪些时间戳。
此功能自 Qt 6.7 版本开始引入。
bool QOpcUaNode::readValueAttribute()
启动对节点 Value 属性的异步读取操作。
如果异步调用已成功发送,则返回true
。
另请参阅 readAttributes。
bool QOpcUaNode::resolveBrowsePath(const QList<QOpcUaRelativePathElement> &path)
使用 OPC UA 1.05 第 4 部分、5.8.4 中指定的 TranslateBrowsePathsToNodeIds 服务将浏览路径 path 解析为一个或多个起始于此节点的节点标识符。
如果异步调用已成功发送,则返回true
。
TranslateBrowsePathsToNodeIds 主要用于针对类型定义进行编程,而不是针对 OPC UA 地址空间中具体的一组节点。例如,一个机器模型的类型定义可以包含一个以“Machine”为浏览名称的起始节点,该节点具有一个名为“Fan”的组件。风扇有一个名为“RPM”的组件,它是变量节点,包含风扇的当前转速值。有多个此类机器,每个这种机器作为机器类型的对象映射到 OPC UA 地址空间中。对于这些机器对象中的每一个,从机器节点到“RPM”节点的路径是相同的。如果客户端想读取当前的 RPM 值,它需要使用机器节点作为起始节点和从机器到“RPM”节点的浏览路径来调用 resolveBrowsePath()。
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=1;s=machine1")); QList<QOpcUaRelativePathElement> path; path.append(QOpcUaRelativePathElement(QOpcUaQualifiedName(1, "Fan"), QOpcUa::ReferenceTypeId::HasComponent)); path.append(QOpcUaRelativePathElement(QOpcUaQualifiedName(1, "RPM"), QOpcUa::ReferenceTypeId::HasComponent)); node->resolveBrowsePath(path);
resolveBrowsePathFinished() 返回的结果包含“RPM”节点的节点标识符,可用来访问该节点的属性。
if (!results.size()) { qWarning() << "Browse path resolution failed"; return; } if (results.at(0).isFullyResolved()) { QOpcUaNode *rpmNode = client->node(results.at(0).targetId()); if (!rpmNode) { qWarning() << "Failed to create node"; return; } // Connect slots, call methods } else { qWarning() << "Browse path could not be fully resolved, the target node is on another server"; return; }
[信号]
void QOpcUaNode::resolveBrowsePathFinished(QList<QOpcUa BrowsePathTarget> targets, QList<QOpcUaRelativePathElement> path, QOpcUa::UaStatusCode statusCode)
在 resolveBrowsePath() 调用完成后发出此信号。
QOpcUaBrowsePathTarget targets 包含匹配项,statusCode 是操作的状态代码。如果 statusCode 不是 Good,则 targets 将为空。浏览路径 path 是请求的浏览路径。它可用于将结果与请求关联。
QDateTime QOpcUaNode::serverTimestamp(QOpcUa::NodeAttribute attribute) const
返回最后一次读取或更改 attribute 时服务器的时间戳。在发出至少一个 attributeRead 或 data ChangeOccurred 信号之前,返回一个 null datetime。
QDateTime QOpcUaNode::sourceTimestamp(QOpcUa::NodeAttribute attribute) const
返回最后一次读取或更改 attribute 时源的时间戳。在至少发出一个 attributeRead 或 data ChangeOccurred 信号之前,返回一个 null datetime。
QVariant QOpcUaNode::valueAttribute() const
返回节点的 Value 属性的值。
返回值只有在其Value属性成功读或写后,或属性缓存因监测数据的更改而更新后才是有效的。这由一个状态码为attributeRead() 或 attributeWritten() 信号(表示数据读取)或状态码为 Good 的 dataChangeOccurred() 信号(表示数据更改)来指示。
如果属性缓存中没有值,则返回无效的 QVariant。
另请参阅 readValueAttribute(),writeValueAttribute() 和 valueAttributeError()。
QOpcUa::UaStatusCode QOpcUaNode::valueAttributeError() const
返回节点Value属性的错误代码。状态码 Good 表示 valueAttribute 的有效返回值。如果没有属性缓存中的条目,则返回 BadNoEntryExists。
[信号,自6.7以来]
void QOpcUaNode::valueAttributeUpdated(const QVariant &value)
在属性缓存中的值属性通过服务器从数据更改通知、读取或写入操作更新后发出此信号。value 包含值属性的新值。
此功能自 Qt 6.7 版本开始引入。
另请参阅 attribute(),attributeError(),serverTimestamp(),sourceTimestamp() 和 attributeUpdated()。
bool QOpcUaNode::writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
使用来自 type 的类型信息将 value 写入由 attribute 指定的属性。如果异步调用已成功分发,则返回 true
。
如果省略 type 参数,后端会尝试查找正确的类型。以下假设以下默认类型:
Qt MetaType | OPC UA 类型 |
---|---|
Bool | 布尔值 |
UChar | 字节 |
字符 | SByte |
无符号短整型 | unsigned short int |
short int | int16 |
int | int32 |
uint | uint32 |
无符号长整型 | unsigned long long |
长整型 | int64 |
double | double |
单精度浮点型 | 单精度浮点型 |
QString | 字符串 |
QDateTime | 日期时间 |
QByteArray | 字节字符串 |
QUuid | Guid |
bool QOpcUaNode::writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value, const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined)
使用来自 type 的类型信息将 value 写入由 attribute 给定的属性。对于 indexRange,请参阅 readAttributeRange。
如果异步调用已成功发送,则返回true
。
bool QOpcUaNode::writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined)
执行在 toWrite 中指定的属性和值指定的写操作。
如果异步调用已成功发送,则返回true
。
valueAttributeType 参数可用于为值属性提供类型信息。所有其他属性都有已知类型。
另请参阅 writeAttribute。
bool QOpcUaNode::writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
使用 type 中的类型信息将 value 写入节点的 Value 属性。
如果异步调用已成功发送,则返回true
。
另请参阅 writeAttribute。
© 2024 The Qt Company Ltd. 本文档中的文档贡献权归其各自所有者所有。提供的文档受 GNU 自由文档许可协议版本 1.3 的条款约束,由自由软件基金会发布。Qt 以及相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。