英文:
How to get QOpcUaNode type attribute for writing in a client
问题
I would like to do this but am finding this does not work against our server.
我想这样做,但发现这在我们的服务器上不起作用。
opcUaNode->writeValueAttribute(variant);
I have found this to work but some of my variables are UInt16 and others are UInt32 and I'd like to get the node variable type from the node instance but am not sure how.
我发现这可以工作,但我的一些变量是UInt16,而其他变量是UInt32,我想从节点实例中获取节点变量类型,但不确定如何实现。
opcUaNode->writeValueAttribute(variant, QOpcUa::Types::UInt16);
I have found this is not the way to get the node data type.
我发现这不是获取节点数据类型的方法。
QVariant dataType = opcUaNode->attribute(QOpcUa::NodeAttribute::DataType);
I believe the QOpcUaNode object should know what data type it is so I should not need to track it separately.
我认为QOpcUaNode对象应该知道它的数据类型,因此我不需要单独跟踪它。
Our runtime is Qt 5.15.2 / 5.15.3
我们的运行时环境是Qt 5.15.2 / 5.15.3
英文:
How do I read the QOpcUaNode data type attribute correctly?
I would like to do this but am finding this does not work against our server.
opcUaNode->writeValueAttribute(variant);
I have found this to work but some of my variables are UInt16 and others are UInt32 and I'd like to get the node variable type from the node instance but am not sure how.
opcUaNode->writeValueAttribute(variant, QOpcUa::Types::UInt16);
I have found this is not the way to get the node data type.
QVariant dataType = opcUaNode->attribute(QOpcUa::NodeAttribute::DataType);
I believe the QOpcUaNode object should know what data type it is so I should not need to track it separately.
Our runtime is Qt 5.15.2 / 5.15.3
答案1
得分: 1
这在我看来是一个权宜之计,但现在可以使用。很想听听更清晰的方法。
// 使用属性值类型来解析数据类型
QVariant::Type aValueType = opcUaNode->attribute(QOpcUa::NodeAttribute::Value).type();
QOpcUa::Types dataType;
switch (aValueType)
{
case QVariant::ULongLong:
dataType = QOpcUa::Types::UInt64;
break;
case QVariant::UInt:
dataType = QOpcUa::Types::UInt32;
break;
default:
// 在支持 QVariant::UShort 之前
dataType = QOpcUa::Types::UInt16;
break;
}
QVariant valueVariant(value);
opcUaNode->writeValueAttribute(valueVariant, dataType);
派生自:
https://stackoverflow.com/questions/57694122/reading-datatype-from-node-attribute
英文:
This is a workaround IMO but usable for now. Would love to hear of a cleaner approach.
// use attribute value type to resolve the datatype
QVariant::Type aValueType = opcUaNode->attribute(QOpcUa::NodeAttribute::Value).type();
QOpcUa::Types dataType;
switch (aValueType)
{
case QVariant::ULongLong:
dataType = QOpcUa::Types::UInt64;
break;
case QVariant::UInt:
dataType = QOpcUa::Types::UInt32;
break;
default:
// until support for QVariant::UShort is available
dataType = QOpcUa::Types::UInt16;
break;
}
QVariant valueVariant(value);
opcUaNode->writeValueAttribute(valueVariant, dataType);
Derived from:
https://stackoverflow.com/questions/57694122/reading-datatype-from-node-attribute
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论