PySide6.QtOpcUa.QOpcUaGenericStructHandler¶
- class QOpcUaGenericStructHandler¶
读取服务器的数据类型,并从/向扩展对象解码/编码通用结构。更多…
在版本6.7中添加。
概要¶
方法¶
def
__init__()
def
initialize()
def
initialized()
信号¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
OPC UA中使用的二进制数据编码设计时考虑了较小的消息大小,并且不包含任何关于数据结构的信息。这意味着解码器必须预先知道编码数据的结构,才能解码数据缓冲区。
自OPC UA 1.04版本以来,DataType节点类的节点可能具有DataTypeDefinition属性,该属性包含有关结构化类型字段的信息以及枚举值到名称的映射。结合如何解码内置类型的知识,这使得客户端能够解码通用的自定义结构化类型,而无需依赖外部知识。
QOpcUaGenericStructHandler
通过从BaseDataType开始跟随HasSubtype引用遍历服务器的类型层次结构,并读取节点的DataTypeDefinition属性。对于在DataTypeDefinition属性中存在
QOpcUaStructureDefinition
值的结构化类型,可以自动解码包含它们的扩展对象。具有内置类型或存在C++数据类的类型的字段被反序列化为相应的Qt OPC UA类型,其他通用结构被序列化为嵌套的QOpcUaGenericStructValue
。所有嵌套的通用结构值必须在服务器中具有QOpcUaStructureDefinition
,否则解码将失败。相同的条件适用于编码自定义结构体。
解码自定义结构的示例:
QOpcUaGenericStructHandler handler(opcuaClient); handler.initialize(); QObject::connect(&handler, &QOpcUaGenericStructHandler::initializedChanged, [opcuaClient, &handler](bool initialized) { if (!initialized) return; auto node = opcuaClient->node("ns=4;i=3003"); // A custom struct test node in the open62541-testserver node->readValueAttribute(); QObject::connect(node, &QOpcUaNode::attributeRead, [node, &handler](QOpcUa::NodeAttributes attr) { if (!attr.testFlag(QOpcUa::NodeAttribute::Value) || node->valueAttributeError() != QOpcUa::UaStatusCode::Good) return; auto extObj = node->valueAttribute().value<QOpcUaExtensionObject>(); qDebug() << "Got object of type" << handler.typeNameForBinaryEncodingId(extObj.encodingTypeId()); const auto result = handler.decode(extObj); if (!result) return; qDebug() << *result; }); });
编码自定义结构的示例:
QOpcUaGenericStructHandler handler(opcuaClient); handler.initialize(); QObject::connect(&handler, &QOpcUaGenericStructHandler::initializedChanged, [opcuaClient, &handler](bool initialized) { if (!initialized) return; QOpcUaGenericStructValue value = handler.createGenericStructValueForTypeId("ns=4;i=3006"); value.fieldsRef()["MandatoryMember"] = 23.0; value.fieldsRef()["OptionalMember"] = 42.0; const auto ext = handler.encode(value); if (!ext) return; // Use the extension object to write a node's value attribute, in a method parameter, etc... });
- class DataTypeKind¶
此枚举类型指定数据类型节点的数据类型种类。
常量
描述
QOpcUaGenericStructHandler.DataTypeKind.Unknown
类型节点ID未知。
QOpcUaGenericStructHandler.DataTypeKind.Struct
类型节点ID属于结构化类型。
QOpcUaGenericStructHandler.DataTypeKind.Enum
类型节点ID属于枚举类型。
QOpcUaGenericStructHandler.DataTypeKind.Other
类型节点ID属于一个不是结构体或枚举的类型(其他内置类型或其子类型)
- __init__(client[, parent=None])¶
- Parameters:
客户端 –
QOpcUaClient
parent –
QObject
为
client
构建一个通用的结构处理程序。- addCustomEnumDefinition(definition, typeId, name[, isAbstract=QOpcUa.IsAbstract.NotAbstract])¶
- Parameters:
定义 –
QOpcUaEnumDefinition
typeId – str
name – str
isAbstract –
IsAbstract
- Return type:
布尔
将自定义枚举定义
definition
添加到已知类型中。这可以用于支持服务器未公开 StructureDefinition 的自定义结构。参数definition
、typeId
和name
是正确解码和编码所必需的。如果设置了isAbstract
,则该类型无法进行编码和解码。如果枚举定义成功添加,则返回
true
。- addCustomStructureDefinition(definition, typeId, name[, isAbstract=QOpcUa.IsAbstract.NotAbstract])¶
- Parameters:
typeId – str
name – str
isAbstract –
IsAbstract
- Return type:
布尔
将自定义结构定义
definition
添加到已知类型中。这可以用于支持服务器未公开 StructureDefinition 的自定义结构。参数definition
、typeId
和name
是正确解码和编码所必需的。如果设置了isAbstract
,则该类型无法进行编码和解码。如果结构定义成功添加,则返回
true
。- createGenericStructValueForTypeId(typeId)¶
- Parameters:
typeId – str
- Return type:
返回一个预填充了结构体定义、类型ID和类型名称的通用结构体值,对应于
typeId
。对于所有必填字段,将插入一个无效的占位符QVariant。- dataTypeKindForTypeId(id)¶
- Parameters:
id – str
- Return type:
返回类型节点ID
id
的数据类型种类。- enumDefinitionForTypeId(id)¶
- Parameters:
id – str
- Return type:
返回类型节点ID
id
的QOpcUaEnumDefinition
。如果节点ID未知或不属于枚举类型,则返回默认构造的值。- initialize()¶
- Return type:
布尔
开始数据类型层次结构的遍历。成功或失败将在
initializedChanged
信号中报告。如果操作无法启动,则返回
false
。- initialized()¶
- Return type:
布尔
如果通用结构处理程序已初始化,则返回
true
。- initializedChanged(initialized)¶
- Parameters:
initialized – 布尔值
当初始化过程完成时,会发出此信号。
initialized
表示初始化是否成功。- isAbstractTypeId(id)¶
- Parameters:
id – str
- Return type:
布尔
如果由
id
描述的数据类型是抽象的,则返回true。- structureDefinitionForBinaryEncodingId(id)¶
- Parameters:
id – str
- Return type:
返回二进制编码节点ID
id
的QOpcUaStructureDefinition
。如果节点ID未知或不属于结构类型,则返回默认构造的值。- structureDefinitionForTypeId(id)¶
- Parameters:
id – str
- Return type:
返回类型节点ID
id
的QOpcUaStructureDefinition
。如果节点ID未知或不属于结构类型,则返回默认构造的值。- typeIdForBinaryEncodingId(id)¶
- Parameters:
id – str
- Return type:
字符串
返回与二进制编码ID
id
关联的类型节点ID。- typeNameForBinaryEncodingId(id)¶
- Parameters:
id – str
- Return type:
字符串
返回属于二进制编码节点ID
id
的类型名称。如果节点ID未知或不属于结构类型,则返回空字符串。- typeNameForTypeId(id)¶
- Parameters:
id – str
- Return type:
字符串
返回由类型节点ID
id
标识的数据类型节点的类型名称。如果节点ID未知,则返回空字符串。