def parse(self, device_url): device = DeviceProxy(device_url) result = Documentation() result.name = device.info().dev_class result.description = device.description() # FIXME: perhaps need to query the database about the propertiess propertyNames = device.get_property_list('*') for propertyName in propertyNames: result.addproperty(propertyName, 'TODO description', 'TODO type name', 'TODO default') attributeInfos = device.attribute_list_query() for attributeInfo in attributeInfos: result.addattribute(attributeInfo.name, attributeInfo.description, self.translate(attributeInfo.data_type, attributeInfo.data_format)) commandInfos = device.command_list_query() for commandInfo in commandInfos: result.addcommand( commandInfo.cmd_name, 'TODO command description', self.translate_command_argument(commandInfo.in_type), commandInfo.in_type_desc, self.translate_command_argument(commandInfo.out_type), commandInfo.out_type_desc) return [result]
class _DeviceHelper(object): __CMD_FILTER = set(("init", "state", "status")) __ATTR_FILTER = set(("state", "status")) def __init__(self, dev_name, *args, **kwargs): self.dev_name = dev_name self.device = Device(dev_name, *args, **kwargs) self.slots = weakref.WeakKeyDictionary() def connect(self, signal, slot, event_type=PyTango.EventType.CHANGE_EVENT): i = self.device.subscribe_event(signal, event_type, slot) self.slots[slot] = i return i def disconnect(self, signal, slot): i = self.slots.pop(slot) self.device.unsubscribe_event(i) def get_attr_cache(self, refresh=False): try: cache = self.__attr_cache if not cache: refresh = True except AttributeError: refresh = True if refresh: cache = {} dev = self.device try: for attr_info in dev.attribute_list_query_ex(): attr_name = attr_info.name if attr_name.lower() in self.__ATTR_FILTER: continue cache[attr_name] = attr_info except PyTango.DevFailed: pass self.__attr_cache = cache return cache def get_attr_info(self, name): cache = self.get_attr_cache() result = cache.get(name) if result: return result else: cache = self.get_attr_cache(refresh=True) return cache.get(name) def get_cmd_cache(self, refresh=False): try: cache = self.__cmd_cache if not cache: refresh = True except AttributeError: refresh = True if refresh: cache = {} dev = self.device try: for cmd_info in dev.command_list_query(): cmd_name = cmd_info.cmd_name if cmd_name.lower() in self.__CMD_FILTER: continue cmd_func = functools.partial(_command, dev, cmd_info) cmd_func.__name__ = cmd_name cmd_func.__doc__ = cmd_info.in_type_desc cmd_info.func = cmd_func cache[cmd_name] = cmd_info except PyTango.DevFailed: pass self.__cmd_cache = cache return cache def get_cmd_info(self, name): cache = self.get_cmd_cache() result = cache.get(name) if result: return result else: cache = self.get_cmd_cache(refresh=True) return cache.get(name) def is_cmd(self, name): return name.lower() in self.get_cmd_cache() def members(self): result = self.get_attr_cache().keys() result.extend(self.get_cmd_cache().keys()) return result def get(self, name): dev = self.device result = self.get_attr_info(name) if result: result = dev.read_attribute(name) value = result.value if result.type == PyTango.DevEncoded: result = loads(*value) else: result = value return result result = self.get_cmd_info(name) if result is None: raise KeyError("Unknown %s" % name) return result def set(self, name, value): result = self.get_attr_info(name) if result is None: raise KeyError("Unknown attribute %s" % name) if result.data_type == PyTango.DevEncoded: self.device.write_attribute(name, dumps(value)) else: self.device.write_attribute(name, value) def get_info(self): try: return self.__info except AttributeError: pass try: info = self.device.info() self.__dict__["__info"] = info return info except PyTango.DevFailed: return None def __str__(self): return self.dstr() def __repr__(self): return str(self) def dstr(self): info = self.get_info() klass = "Device" if info: klass = info.dev_class return "{0}({1})".format(klass, self.dev_name)
def __init__(self, connector=None, uri=None, updateInterval = 0.02): Motor.__init__(self) self.uri = uri self.type = "Simulation" attributes = {} attributes["AerotechEnsemble"] = [ \ {"attr": "Position", "delta": 0.1}, {"attr": "Velocity"}, {"attr": "Acceleration"}, {"attr": "SoftLimitCcw", "name": "soft_limit_min"}, {"attr": "SoftLimitCw", "name": "soft_limit_max"}, {"attr": "CcwSoftLimitFault", "name": "soft_limit_min_fault"}, {"attr": "CwSoftLimitFault", "name": "soft_limit_max_fault"}, {"attr": "CcwLimitFault", "name": "hard_limit_min_fault"}, {"attr": "CwLimitFault", "name": "hard_limit_max_fault"}, {"attr": "AbortMove", "name": "stop", "mode": "execute"}, {"attr": "Calibrate", "mode": "execute"}, ] attributes["GalilDMCMotor"] = [ \ {"attr": "Position", "delta": 0.1}, {"attr": "Velocity"}, {"attr": "Acceleration"}, {"attr": "SoftCcwLimit", "name": "soft_limit_min"}, {"attr": "SoftCwLimit", "name": "soft_limit_max"}, {"attr": "SoftCcwLimitFault", "name": "soft_limit_min_fault"}, {"attr": "SoftCwLimitFault", "name": "soft_limit_max_fault"}, {"attr": "Stop", "name": "stop", "mode": "execute"}, {"attr": "Calibrate", "mode": "execute"}, ] attributes["OmsMaxV"] = [ \ {"attr": "Position", "delta": 0.1}, {"attr": "VelocityUnits", "name": "velocity"}, {"attr": "AccelerationUnits"}, {"attr": "SoftLimitMinUnits", "name": "soft_limit_min"}, {"attr": "SoftLimitMaxUnits", "name": "soft_limit_max"}, {"attr": "FlagCcwLimit", "name": "hard_limit_min_fault"}, {"attr": "FlagCwLimit", "name": "hard_limit_max_fault"}, {"attr": "AbortMove", "name": "stop", "mode": "execute"}, {"attr": "Calibrate", "mode": "execute"}, {"attr": "PIDactive", "name": "pid_active"}, ] attributes["OmsVme58"] = [ \ {"attr": "Position"}, {"attr": "SlewRate", "name": "velocity"}, {"attr": "Acceleration"}, {"attr": "UnitLimitMin", "name": "soft_limit_min"}, {"attr": "UnitLimitMax", "name": "soft_limit_max"}, {"attr": "CcwLimit", "name": "hard_limit_min_fault"}, {"attr": "CwLimit", "name": "hard_limit_max_fault"}, {"attr": "StopMove", "name": "stop", "mode": "execute"}, {"attr": "Calibrate", "mode": "execute"}, {"attr": "Conversion"}, ] attributes["PowerPMAC_Motor"] = [ \ {"attr": "Position", "delta": 0.1}, {"attr": "Velocity"}, {"attr": "Acceleration"}, {"attr": "SoftCcwLimit", "name": "soft_limit_min"}, {"attr": "SoftCwLimit", "name": "soft_limit_max"}, {"attr": "SoftCcwLimitFault", "name": "soft_limit_min_fault"}, {"attr": "SoftCwLimitFault", "name": "soft_limit_max_fault"}, {"attr": "CcwLimitFault", "name": "hard_limit_min_fault"}, {"attr": "CwLimitFault", "name": "hard_limit_max_fault"}, {"attr": "Stop", "name": "stop", "mode": "execute"}, {"attr": "Calibrate", "mode": "execute"}, ] attributes["Simulation"] = [ \ {"attr": "Position"}, {"attr": "Velocity"}, {"attr": "Acceleration"}, {"attr": "Soft_Limit_Min"}, {"attr": "Soft_Limit_Max"}, {"attr": "Stop", "mode": "execute"}, {"attr": "Calibrate", "mode": "execute"}, ] self.connector = None if connector == "tango": try: proxy = DeviceProxy(uri) type = proxy.info().dev_class self.type = type if self.type == "GalilDMCMotor" and "CwLimitFault" in \ proxy.get_attribute_list(): attributes["GalilDMCMotor"].append( {"attr": "CcwLimitFault", "name": "hard_limit_min_fault"}, {"attr": "CwLimitFault", "name": "hard_limit_max_fault"}, ) except Exception as e: self.janus.utils["logger"].error( "TangoMotor({}).__init__() connection failed".format(self.uri)) self.janus.utils["logger"].debug("", exc_info=True) if self.type in attributes: self.connector = TangoConnector(uri, attributes[self.type], interval=updateInterval) if connector == "simulation" or self.connector is None: self.connector = SimulationConnector(uri, attributes["Simulation"]) self.connector.write("state", State.ON) if connector != "simulation": self.connector.write("state", State.UNKNOWN) self.connector.write("position", 0) self.connector.write("velocity", 1000) self.connector.write("acceleration", 1000) self.connector.write("soft_limit_min", 0) self.connector.write("soft_limit_max", 0) self.last_soft_limit_min_fault = \ self.soft_limit_min_fault(refresh=True) self.last_soft_limit_max_fault = \ self.soft_limit_max_fault(refresh=True) self.last_state = self.connector.read("state", refresh=True) if self.type in ["OmsMaxV", "OmsVme58", "Simulation"]: self.connector.value_changed.connect(self.on_value_changed) else: self.connector.value_changed.connect(self.value_changed.emit)
class _DeviceHelper(object): __CMD_FILTER = set(("init", "state", "status")) __ATTR_FILTER = set(("state", "status")) def __init__(self, dev_name, *args, **kwargs): self.dev_name = dev_name self.device = Device(dev_name, *args, **kwargs) self.slots = weakref.WeakKeyDictionary() def connect(self, signal, slot, event_type=PyTango.EventType.CHANGE_EVENT): i = self.device.subscribe_event(signal, event_type, slot) self.slots[slot] = i return i def disconnect(self, signal, slot): i = self.slots.pop(slot) self.device.unsubscribe_event(i) def get_attr_cache(self, refresh=False): try: cache = self.__attr_cache if not cache: refresh = True except AttributeError: refresh = True if refresh: cache = {} dev = self.device try: for attr_info in dev.attribute_list_query_ex(): attr_name = attr_info.name if attr_name.lower() in self.__ATTR_FILTER: continue cache[attr_name] = attr_info except PyTango.DevFailed: pass self.__attr_cache = cache return cache def get_attr_info(self, name): cache = self.get_attr_cache() result = cache.get(name) if result: return result else: cache = self.get_attr_cache(refresh=True) return cache.get(name) def get_cmd_cache(self, refresh=False): try: cache = self.__cmd_cache if not cache: refresh = True except AttributeError: refresh = True if refresh: cache = {} dev = self.device try: for cmd_info in dev.command_list_query(): cmd_name = cmd_info.cmd_name if cmd_name.lower() in self.__CMD_FILTER: continue cmd_func = functools.partial(_command, dev, cmd_info) cmd_func.__name__ = cmd_name cmd_func.__doc__ = cmd_info.in_type_desc cmd_info.func = cmd_func cache[cmd_name] = cmd_info except PyTango.DevFailed: pass self.__cmd_cache = cache return cache def get_cmd_info(self, name): cache = self.get_cmd_cache() result = cache.get(name) if result: return result else: cache = self.get_cmd_cache(refresh=True) return cache.get(name) def is_cmd(self, name): return name.lower() in self.get_cmd_cache() def members(self): result = self.get_attr_cache().keys() result.extend(self.get_cmd_cache().keys()) return result def get(self, name): dev = self.device result = self.get_attr_info(name) if result: result = dev.read_attribute(name) value = result.value if result.type == PyTango.DevEncoded: result = loads(*value) else: result = value return result result = self.get_cmd_info(name) if result is None: raise KeyError("Unknown %s" % name) return result def set(self, name, value): result = self.get_attr_info(name) if result is None: raise KeyError("Unknown attribute %s" % name) if result.data_type == PyTango.DevEncoded: self.device.write_attribute(name, dumps(value)) else: self.device.write_attribute(name, value) def get_info(self): try: return self.__info except AttributeError: pass try: info = self.device.info() self.__dict__["__info"] = info return info except PyTango.DevFailed: return None def __str__(self): return self.dstr() def __repr__(self): return str(self) def dstr(self): info = self.get_info() klass = "Device" if info: klass = info.dev_class return "{0}({1})".format(klass, self.dev_name)