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?

0 ответов

Другие вопросы по тегам