A VmExecutor controlling the setPoint

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>