diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-20 14:50:39 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-20 14:50:39 +0100 |
| commit | 6c142a234673e442561b2c050b727aa4400177d8 (patch) | |
| tree | bc44b564b67f7644dde37dd2147b63080a1611cf /src/OpcUaMonitoredNode.cpp | |
| parent | 47227acd25c59a1d4b2961c0e1b1eb879e68adec (diff) | |
| download | BobinkQtOpcUa-6c142a234673e442561b2c050b727aa4400177d8.tar.gz BobinkQtOpcUa-6c142a234673e442561b2c050b727aa4400177d8.zip | |
Wire monitored property to OPC UA monitored items
The monitored bool now calls enableMonitoring/disableMonitoring on
the Value attribute. Adds publishingInterval property (default 100ms).
Value is no longer read at init — delivered by the monitored item.
Empty 4th demo page to verify monitoring stops when navigating away.
Diffstat (limited to 'src/OpcUaMonitoredNode.cpp')
| -rw-r--r-- | src/OpcUaMonitoredNode.cpp | 76 |
1 files changed, 73 insertions, 3 deletions
diff --git a/src/OpcUaMonitoredNode.cpp b/src/OpcUaMonitoredNode.cpp index 518ddd5..1a2da86 100644 --- a/src/OpcUaMonitoredNode.cpp +++ b/src/OpcUaMonitoredNode.cpp @@ -7,6 +7,7 @@ #include <QMetaEnum> #include <QOpcUaLocalizedText> +#include <QOpcUaMonitoringParameters> #include <QStringList> OpcUaMonitoredNode::OpcUaMonitoredNode (QObject *parent) : QObject (parent) {} @@ -51,6 +52,29 @@ OpcUaMonitoredNode::setMonitored (bool monitored) return; m_monitored = monitored; emit monitoredChanged (); + + if (!m_componentComplete || !m_node) + return; + + if (m_monitored) + startMonitoring (); + else + stopMonitoring (); +} + +double +OpcUaMonitoredNode::publishingInterval () const +{ + return m_publishingInterval; +} + +void +OpcUaMonitoredNode::setPublishingInterval (double interval) +{ + if (qFuzzyCompare (m_publishingInterval, interval)) + return; + m_publishingInterval = interval; + emit publishingIntervalChanged (); } QVariant @@ -122,11 +146,18 @@ OpcUaMonitoredNode::setupNode () &OpcUaMonitoredNode::handleValueUpdated); connect (m_node, &QOpcUaNode::attributeWritten, this, &OpcUaMonitoredNode::handleAttributeWritten); + connect (m_node, &QOpcUaNode::enableMonitoringFinished, this, + &OpcUaMonitoredNode::handleEnableMonitoringFinished); + connect (m_node, &QOpcUaNode::disableMonitoringFinished, this, + &OpcUaMonitoredNode::handleDisableMonitoringFinished); m_node->readAttributes ( - QOpcUa::NodeAttribute::Value | QOpcUa::NodeAttribute::DisplayName - | QOpcUa::NodeAttribute::Description | QOpcUa::NodeAttribute::NodeClass - | QOpcUa::NodeAttribute::DataType | QOpcUa::NodeAttribute::AccessLevel); + QOpcUa::NodeAttribute::DisplayName | QOpcUa::NodeAttribute::Description + | QOpcUa::NodeAttribute::NodeClass | QOpcUa::NodeAttribute::DataType + | QOpcUa::NodeAttribute::AccessLevel); + + if (m_monitored) + startMonitoring (); } void @@ -153,6 +184,23 @@ OpcUaMonitoredNode::teardownNode () } } +void +OpcUaMonitoredNode::startMonitoring () +{ + if (!m_node || !m_monitored) + return; + QOpcUaMonitoringParameters params (m_publishingInterval); + m_node->enableMonitoring (QOpcUa::NodeAttribute::Value, params); +} + +void +OpcUaMonitoredNode::stopMonitoring () +{ + if (!m_node) + return; + m_node->disableMonitoring (QOpcUa::NodeAttribute::Value); +} + /* ====================================== * Signal handlers * ====================================== */ @@ -262,6 +310,28 @@ OpcUaMonitoredNode::handleAttributeWritten (QOpcUa::NodeAttribute attr, : QOpcUa::statusToString (statusCode)); } +void +OpcUaMonitoredNode::handleEnableMonitoringFinished ( + QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode) +{ + if (attr != QOpcUa::NodeAttribute::Value) + return; + if (statusCode != QOpcUa::Good) + qWarning () << "OpcUaMonitoredNode: enableMonitoring failed for" + << m_nodeId << ":" << QOpcUa::statusToString (statusCode); +} + +void +OpcUaMonitoredNode::handleDisableMonitoringFinished ( + QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode) +{ + if (attr != QOpcUa::NodeAttribute::Value) + return; + if (statusCode != QOpcUa::Good) + qWarning () << "OpcUaMonitoredNode: disableMonitoring failed for" + << m_nodeId << ":" << QOpcUa::statusToString (statusCode); +} + /* ====================================== * Write support * ====================================== */ |
