diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-24 16:51:06 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-24 16:51:06 +0100 |
| commit | 0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52 (patch) | |
| tree | f3b6ab7101e0540d5b94be0c491db99c4bc35509 | |
| parent | 4ac860baa81f30e3e1fc9aaa42a3f0bb0537543a (diff) | |
| download | BobinkQtOpcUa-0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52.tar.gz BobinkQtOpcUa-0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52.zip | |
Fix writeValueAtRange sending scalar for single-element range writes
OPC UA requires an array value when using an index range, even for a
single element. Strict servers reject a scalar with BadIndexRangeNoData.
Wrap the coerced value in a QVariantList when it isn't one already.
| -rw-r--r-- | src/OpcUaMonitoredNode.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/OpcUaMonitoredNode.cpp b/src/OpcUaMonitoredNode.cpp index 922ad43..c5f1dc0 100644 --- a/src/OpcUaMonitoredNode.cpp +++ b/src/OpcUaMonitoredNode.cpp @@ -568,6 +568,12 @@ OpcUaMonitoredNode::writeValueAtRange (const QVariant &value, return; } + // OPC UA requires an array value for index-range writes, even for a + // single element. Wrap scalars in a one-element list so strict + // servers don't reject with BadIndexRangeNoData. + if (coerced.metaType ().id () != QMetaType::QVariantList) + coerced = QVariant::fromValue (QVariantList{ coerced }); + m_pendingRangeWrite = true; if (!m_node->writeAttributeRange (QOpcUa::NodeAttribute::Value, coerced, |
