The following code can be a template for controlling the setpoint of a temperature controller.
#!/usr/bin/env python import PyTango class VM: # # init_device # def __init__( self): self.ResultSim = None self.PositionSim = None self.UnitLimitMin = 0 self.UnitLimitMax = 500 self.proxies = [] self.proxies.append( PyTango.DeviceProxy( "hasXXX:10000/pXX/lks336heateroutput/lcx.01")) return # # dev_state # def dev_state( self): argout = PyTango.DevState.ON # # if one device is in FAULT the VM is in FAULT too # for proxy in self.proxies: if proxy.state() == PyTango.DevState.FAULT: argout = PyTango.DevState.FAULT break if argout == PyTango.DevState.ON: # # if one device is MOVING the VM is MOVING too # for proxy in self.proxies: if proxy.state() == PyTango.DevState.MOVING: argout = PyTango.DevState.MOVING break return argout # # Position # def read_Position( self): return self.proxies[0].SetPoint def write_Position( self, argin): if( argin < self.proxies[0].UnitLimitMin or argin > self.proxies[0].UnitLimitMax): PyTango.Except.throw_exception( "vm1", "requested position outside limits %g %g " % (self.proxies[0].UnitLimitMin, self.proxies[0].UnitLimitMax), "VmExecutor") self.proxies[0].SetPoint = argin return 1 # # UnitLimitMax # def read_UnitLimitMax( self): return self.proxies[0].UnitLimitMax def write_UnitLimitMax( self, argin): self.UnitLimitMax = argin # # UnitLimitMin # def read_UnitLimitMin( self): return self.proxies[0].UnitLimitMin def write_UnitLimitMin( self, argin): self.UnitLimitMin = argin # # CwLimit, CcwLimit # def read_CwLimit( self): return 0 def read_CcwLimit( self): return 0 # # PositionSim # def read_PositionSim( self): return 0 def write_PositionSim( self, argin): pass def read_ResultSim( self): return "" def StopMove( self): return True
THe corresponding entry in online.xml is:
<device> <name>exp_vm01</name> <tags>expert,user</tags> <type>type_tango</type> <module>motor_tango</module> <device>p99/vmexecutor/exp.01</device> <control>tango</control> <hostname>haso107klx:10000</hostname> </device>