Python OPCUA - запись в узел настраиваемого / определяемого пользователем типа данных с использованием объекта расширения
Я пытаюсь записать переменный узел, имеющий Custom Data Type
содержащий другой набор переменных, как показано в модели UA.
Ценность UAVariable
имеет ExtensionObject
тип.
Когда я просматриваю ту же модель с помощью UAExpert, она показываетWorkOrderVariable
относится к типу WorkOrderType
содержащий четыре различных переменных, где, StatusComments
это снова массив WorkOrderStatusType
как показано на рисунке ниже.
Мой код:
class WorkOrderVariableType(ExtensionObject):
def __init__(self):
ExtensionObject.__init__(self)
if __name__ == "__main__":
endpointUrl = "opc.tcp://localhost:48020"
variableNodeId = "ns=4;s=Demo.WorkOrder.WorkOrderVariable"
opcUaClient = Client(endpointUrl)
opcUaClient.connect()
WorkOrderVariableNode = opcUaClient.get_node("ns=4;s=Demo.WorkOrder.WorkOrderVariable")
workOrderVariable = WorkOrderVariableType()
workOrderVariable.TypeId = NodeId(5013, 4)
workOrderVariable.Encoding = 1
workOrderVariable.Body = b'{"AssetID":"A-1234"}'
dataValue = DataValue(ua.Variant(workOrderVariable, VariantType.ExtensionObject))
workOrderVariableNode.set_attribute(AttributeIds.Value, dataValue)
Выход:
Я также попытался создать объект Python, содержащий те же поля, которые упомянуты в модели, и передал его как ExtensionObject
но не добился успеха. Я также прошел через спецификации OPC Unified Architecture - Part-6-mappings, но не понял, как я могу кодировать / декодировать этот объект расширения, чтобы сделать егоByteString
.
Может ли кто-нибудь помочь в понимании, как я могу создать ExtensionObject
вышеупомянутого настраиваемого типа данных и сделать его доступным для записи на узел ns=4;s=Demo.WorkOrder.WorkOrderVariable
? Также было бы полезно, если бы вы могли понять, как я могу кодировать / декодировать это вByteString
?