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>