A very trivial example, includes a demo for accessing a device property

In the following example, the virtual motor is a dummy device. The piece of code can be used as a template. The class name VM and the function names are fixed.

In addition it is demonstrated how a device property is accessed.

#!/bin/env python

import PyTango, HasyUtils
import inspect
import HasyUtils

class VM:
    #
    # init_device
    #
    def __init__( self):
        self.ResultSim = None
        self.PositionSim = None
        self.Position = 0
        self.UnitLimitMin = -100
        self.UnitLimitMax = 100
        #
        # demo for accessing the VmCode property
        #
        self.parent = inspect.currentframe().f_back.f_locals['self']
        self.parentProxy = PyTango.DeviceProxy( self.parent.get_name())
        VmCode = HasyUtils.getDeviceProperty( self.parent.get_name(), "VmCode")[0]
        #print "VmCode", VmCode
        return
    #
    # dev_state
    #
    def dev_state( self):
        argout = PyTango.DevState.ON
        return argout
    #
    # Position
    #
    def read_Position( self):
        return self.Position

    def write_Position( self, argin):
        if( argin < self.UnitLimitMin or
            argin > self.UnitLimitMax):
            PyTango.Except.throw_exception(
                "vm_dummy",
                "requested position outside limits %g %g " % (self.UnitLimitMin, self.UnitLimitMax),
                "VmExecutor")
            
        self.Position = argin
        return 1
    #
    # UnitLimitMax
    #
    def read_UnitLimitMax( self):
        return self.UnitLimitMax

    def write_UnitLimitMax( self, argin):
        self.UnitLimitMax = argin
    #
    # UnitLimitMin
    #
    def read_UnitLimitMin( self):
        return self.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):
        if self.PositionSim is None:
            PyTango.Except.throw_exception( "vm_dummy", "PositionSim is undefined", "VmExecutor")
        return self.PositionSim

    def write_PositionSim( self, argin):
        self.PositionSim = argin
        self.ResultSim = []
        self.ResultSim.append( "x: %g " % argin)

    def read_ResultSim( self):
        if self.ResultSim is None:
            PyTango.Except.throw_exception( "vm_dummy", "ResultSim is undefined", "VmExecutor")
        return self.ResultSim
        
    def StopMove( self):
        return 1

    def Calibrate(self, argin):
        return 1