aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demo/NodePage.qml2
-rw-r--r--src/OpcUaMonitoredNode.cpp41
-rw-r--r--src/OpcUaMonitoredNode.h4
3 files changed, 47 insertions, 0 deletions
diff --git a/demo/NodePage.qml b/demo/NodePage.qml
index 9b23502..e089f0e 100644
--- a/demo/NodePage.qml
+++ b/demo/NodePage.qml
@@ -307,6 +307,8 @@ Page {
+ "\nDescription: " + (node.info.description || "—")
+ "\nNode Class: " + (node.info.nodeClass || "—")
+ "\nData Type: " + (node.info.dataType || "—")
+ + "\nValue Rank: " + (node.info.valueRank || "—")
+ + "\nArray Dimensions: " + (node.info.arrayDimensions || "—")
+ "\nAccess Level: " + node.info.accessLevel
+ "\nStatus: " + (node.info.status || "—")
+ "\nSource Time: " + (node.info.sourceTimestamp.toLocaleString() || "—")
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 ();
diff --git a/src/OpcUaMonitoredNode.h b/src/OpcUaMonitoredNode.h
index 2ecffb7..3314874 100644
--- a/src/OpcUaMonitoredNode.h
+++ b/src/OpcUaMonitoredNode.h
@@ -30,6 +30,8 @@ struct OpcUaNodeInfo
Q_PROPERTY (QString description MEMBER description)
Q_PROPERTY (QString nodeClass MEMBER nodeClass)
Q_PROPERTY (QString dataType MEMBER dataType)
+ Q_PROPERTY (QString valueRank MEMBER valueRank)
+ Q_PROPERTY (QString arrayDimensions MEMBER arrayDimensions)
Q_PROPERTY (QString accessLevel MEMBER accessLevel)
Q_PROPERTY (QString status MEMBER status)
Q_PROPERTY (QDateTime sourceTimestamp MEMBER sourceTimestamp)
@@ -40,6 +42,8 @@ public:
QString description;
QString nodeClass;
QString dataType;
+ QString valueRank;
+ QString arrayDimensions;
QString accessLevel;
QString status;
QDateTime sourceTimestamp;