aboutsummaryrefslogtreecommitdiffstats
path: root/src/OpcUaMonitoredNode.cpp
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-02-24 16:51:15 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-02-24 16:51:15 +0100
commit75d77c39924629eaebf6b721a541407e19ced762 (patch)
tree27cd8050e0296bf61dc3a007e12c49452cc6cf2b /src/OpcUaMonitoredNode.cpp
parent0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52 (diff)
downloadBobinkQtOpcUa-75d77c39924629eaebf6b721a541407e19ced762.tar.gz
BobinkQtOpcUa-75d77c39924629eaebf6b721a541407e19ced762.zip
Add ValueRank and ArrayDimensions to OpcUaNodeInfo
Read both attributes at node setup alongside the existing metadata. ValueRank is mapped to human-readable names (Scalar, OneDimension, etc.) and ArrayDimensions is formatted as a comma-separated size list. Both are shown in the demo tooltip.
Diffstat (limited to 'src/OpcUaMonitoredNode.cpp')
-rw-r--r--src/OpcUaMonitoredNode.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/OpcUaMonitoredNode.cpp b/src/OpcUaMonitoredNode.cpp
index c5f1dc0..9155838 100644
--- a/src/OpcUaMonitoredNode.cpp
+++ b/src/OpcUaMonitoredNode.cpp
@@ -155,6 +155,8 @@ OpcUaMonitoredNode::setupNode ()
m_node->readAttributes (
QOpcUa::NodeAttribute::DisplayName | QOpcUa::NodeAttribute::Description
| QOpcUa::NodeAttribute::NodeClass | QOpcUa::NodeAttribute::DataType
+ | QOpcUa::NodeAttribute::ValueRank
+ | QOpcUa::NodeAttribute::ArrayDimensions
| QOpcUa::NodeAttribute::AccessLevel);
if (m_monitored)
@@ -238,6 +240,45 @@ OpcUaMonitoredNode::handleAttributeUpdated (QOpcUa::NodeAttribute attr,
m_info.dataType = rawId;
}
break;
+ case QOpcUa::NodeAttribute::ValueRank:
+ {
+ qint32 vr = value.toInt ();
+ switch (vr)
+ {
+ case -3:
+ m_info.valueRank = QStringLiteral ("ScalarOrOneDimension");
+ break;
+ case -2:
+ m_info.valueRank = QStringLiteral ("Any");
+ break;
+ case -1:
+ m_info.valueRank = QStringLiteral ("Scalar");
+ break;
+ case 0:
+ m_info.valueRank = QStringLiteral ("OneOrMoreDimensions");
+ break;
+ case 1:
+ m_info.valueRank = QStringLiteral ("OneDimension");
+ break;
+ case 2:
+ m_info.valueRank = QStringLiteral ("TwoDimensions");
+ break;
+ default:
+ m_info.valueRank = QString::number (vr)
+ + QStringLiteral ("Dimensions");
+ break;
+ }
+ }
+ break;
+ case QOpcUa::NodeAttribute::ArrayDimensions:
+ {
+ QStringList dims;
+ const QVariantList list = value.toList ();
+ for (const QVariant &dim : list)
+ dims << QString::number (dim.toUInt ());
+ m_info.arrayDimensions = dims.join (QStringLiteral (", "));
+ }
+ break;
case QOpcUa::NodeAttribute::AccessLevel:
{
quint32 bits = value.toUInt ();