moveLowAcc.py, low acceleration moves

The following script demonstrates how to control moves which are executed with a very low acceleration. The problem is that the de-acceleration lasts longer than 3s the Tango time-out. The problem is solved by monitoring the hardware register contents. The call to GetStepRegister() invokes a check-motor-registers(). Yes, this script is a horrible hack. Once the Oms server has been fixed in this respect, this example will be removed from the document.

#!/usr/bin/env python
#
# this script
#  - executes a move with a motor 
#  - interrupts the movement
#  - wait for the motion to be finished by looking at
#    the state() and the controller register
#
import time
import string
import sys
from PyTango import *

motorName = "someNode:10000:p19/motor/exp.65";

def execMove( proxy, pos):
    proxy.Position = pos
    stepsOld = None
    count = 0
    while 1:
        print( "state %s Ctrl %d Int %d" % (proxy.state(), 
               proxy.StepPositionController, proxy.StepPositionInternal))
        if proxy.state() == DevState.ON:
            if (not proxy.StepPositionController == proxy.StepPositionInternal) and \
                   (proxy.StepPositionController == stepsOld):
                print( "moveLowAcc: invoking check-motor-registers")
                proxy.GetStepPosition()
                return 1
            stepsOld = proxy.StepPositionController
        count += 1
        if count == 10:
            print9 "Calling stop move")
            proxy.StopMove()
        time.sleep(0.5)
    
proxy = DeviceProxy( motorName)
if len( sys.argv) == 1:
    print( " Position %g " % proxy.Position)
    sys.exit()
    
if len( sys.argv) != 2:
    print( "\n usage: ./moveLowAcc.py [pos]")
    sys.exit()

pos = sys.argv[1]
execMove( proxy, float(pos))

print( "motor position %g " % proxy.Position)