コード例 #1
0
 async def _create_custom_type(self, idx, name, basetype, properties,
                               variables, methods):
     base_t = _get_node(self.iserver.isession, basetype)
     custom_t = await base_t.add_object_type(idx, name)
     for prop in properties:
         datatype = None
         if len(prop) > 2:
             datatype = prop[2]
         await custom_t.add_property(idx,
                                     prop[0],
                                     ua.get_default_value(prop[1]),
                                     varianttype=prop[1],
                                     datatype=datatype)
     for variable in variables:
         datatype = None
         if len(variable) > 2:
             datatype = variable[2]
         await custom_t.add_variable(idx,
                                     variable[0],
                                     ua.get_default_value(variable[1]),
                                     varianttype=variable[1],
                                     datatype=datatype)
     for method in methods:
         await custom_t.add_method(idx, method[0], method[1], method[2],
                                   method[3])
     return custom_t
コード例 #2
0
 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)
         val = ua.get_default_value(vtype)
         node = struct_node.add_variable(idx,
                                         field.name,
                                         val,
                                         varianttype=vtype,
                                         datatype=dtype.nodeid)
         if field.array:
             node.write_value_rank(ua.ValueRank.OneDimension)
             node.set_array_dimensions([1])
コード例 #3
0
def get_default_value(uatype):
    if isinstance(uatype, ua.VariantType):
        return ua.get_default_values(uatype)
    elif hasattr(ua.VariantType, uatype):
        return ua.get_default_value(getattr(ua.VariantType, uatype))
    else:
        return getattr(ua, uatype)()
コード例 #4
0
    async def create_custom_data_type(self, idx, name, basetype=ua.ObjectIds.BaseDataType, properties=None, description=None) -> Coroutine:
        if properties is None:
            properties = []
        base_t = _get_node(self.iserver.isession, basetype)

        custom_t = await base_t.add_data_type(idx, name, description)
        for prop in properties:
            datatype = None
            if len(prop) > 2:
                datatype = prop[2]
            await custom_t.add_property(idx, prop[0], ua.get_default_value(prop[1]), varianttype=prop[1], datatype=datatype)
        return custom_t