def get_args(self): nodeid, bname = self.get_nodeid_and_bname() dtype = self.dataTypeButton.get_node() vtype = data_type_to_variant_type(dtype) if vtype == ua.VariantType.ExtensionObject: # we currently cannot construct a complex object from a string var = ua.Variant() else: var = string_to_variant(self.valLineEdit.text(), vtype) return nodeid, bname, var, vtype, dtype.nodeid
def test_base_data_type(self): nint32 = self.opc.get_node(ua.ObjectIds.Int32) dtype = nint32.add_data_type(0, "MyCustomDataType") dtype2 = dtype.add_data_type(0, "MyCustomDataType2") self.assertEqual(ua_utils.get_base_data_type(dtype), nint32) self.assertEqual(ua_utils.get_base_data_type(dtype2), nint32) ext = self.opc.nodes.objects.add_variable(0, "MyExtensionObject", ua.Argument()) d = ext.get_data_type() d = self.opc.get_node(d) self.assertEqual(ua_utils.get_base_data_type(d), self.opc.get_node(ua.ObjectIds.Structure)) self.assertEqual(ua_utils.data_type_to_variant_type(d), ua.VariantType.ExtensionObject)
def _call(self): parent = self.node.get_parent() args = [] for inp in self.inputs: val = string_to_variant(inp.text(), data_type_to_variant_type(inp.data_type)) args.append(val) result = call_method_full(parent, self.node, *args) self.result_label.setText(str(result.StatusCode)) for idx, res in enumerate(result.OutputArguments): self.outputs[idx].setText(val_to_string(res))
def _call(self): parent = self.node.get_parent() args = [] for inp in self.inputs: val = string_to_variant(inp.text(), data_type_to_variant_type(inp.data_type)) args.append(val) result = call_method_full(parent, self.node, *args) self.result_label.setText(str(result.StatusCode)) for idx, res in enumerate(result.OutputArguments): self.outputs[idx].setText(val_to_string(res))
def _add_design_node(self, base_struct, idx, el): try: struct_node = base_struct.get_child(f"{idx}:{el.name}") except ua.UaError: logger.warning("Could not find struct %s under %s", el.name, base_struct) return for field in el.fields: if hasattr(ua.ObjectIds, field.uatype): dtype = self.server_mgr.get_node(getattr(ua.ObjectIds, field.uatype)) else: dtype = self._get_datatype_from_string(idx, field.uatype) if not dtype: logger.warning("Could not find datatype of name %s %s", field.uatype, type(field.uatype)) return vtype = data_type_to_variant_type(dtype) struct_node.add_variable(idx, field.name, field.value, varianttype=vtype, datatype=dtype.nodeid)
def _add_design_node(self, base_struct, idx, el): try: struct_node = base_struct.get_child(f"{idx}:{el.name}") except ua.UaError: logger.warning("Could not find struct %s under %s", el.name, base_struct) return for field in el.fields: if hasattr(ua.ObjectIds, field.uatype): dtype = self.server_mgr.get_node(getattr(ua.ObjectIds, field.uatype)) else: dtype = self._get_datatype_from_string(idx, field.uatype) if not dtype: logger.warning("Could not find datatype of name %s %s", field.uatype, type(field.uatype)) return vtype = data_type_to_variant_type(dtype) struct_node.add_variable(idx, field.name, field.value, varianttype=vtype, datatype=dtype.nodeid)
def test_data_type_to_variant_type(self): test_data = { ua.ObjectIds.Boolean: ua.VariantType.Boolean, ua.ObjectIds.Byte: ua.VariantType.Byte, ua.ObjectIds.String: ua.VariantType.String, ua.ObjectIds.Int32: ua.VariantType.Int32, ua.ObjectIds.UInt32: ua.VariantType.UInt32, ua.ObjectIds.NodeId: ua.VariantType.NodeId, ua.ObjectIds.LocalizedText: ua.VariantType.LocalizedText, ua.ObjectIds.Structure: ua.VariantType.ExtensionObject, ua.ObjectIds.EnumValueType: ua.VariantType.ExtensionObject, ua.ObjectIds.Enumeration: ua.VariantType.Int32, # enumeration ua.ObjectIds.AttributeWriteMask: ua.VariantType.UInt32, ua.ObjectIds.AxisScaleEnumeration: ua.VariantType.Int32 # enumeration } for dt, vdt in test_data.items(): self.assertEqual(ua_utils.data_type_to_variant_type(self.opc.get_node(ua.NodeId(dt))), vdt)