Client examples

The following client (plcUndulator_client.py) can be used to setup the Undulator position. See 6.76.6 for an example of the necessary steps.

#!/usr/bin/env python

from PyTango import *
import sys
import time

def usage():
    print "Usage:"
    print "   'plcUndulator.py' -> to get information and status"
    print "   'plcUndulator.py help' -> prints this help"
    print "   'plcUndulator.py status' -> Gets the undulator status"
    print "   'plcUndulator.py gap <gap>' -> Set the desired gap (um)"
    print "   'plcUndulator.py taper <taper>' -> Set the desired taper (um)"
    print "   'plcUndulator.py speed <speed>' -> Set the desired speed"
    print "   'plcUndulator.py start' -> Start moving to desired position"
    print "   'plcUndulator.py stop' -> Stop moving"
    print "   'plcUndulator.py reset' -> Undulator reset"

def get_gap(plcUnd):
    print "Current Gap: %s um" % plcUnd.read_attribute("CurrentGap").value
    print "Desired Gap: %s um" % plcUnd.read_attribute("DesiredGap").value

def set_gap(plcUnd, gap):
    plcUnd.write_attribute("DesiredGap", long(gap))
    plcUnd.StartMove()

def get_taper(plcUnd):
    print "Current Taper: %s um" % plcUnd.read_attribute("CurrentTaper").value
    print "Desired Taper: %s um" % plcUnd.read_attribute("DesiredTaper").value

def set_taper(plcUnd, gap):
    plcUnd.write_attribute("DesiredTaper", long(gap))
    plcUnd.StartMove()

def get_limit_gap(plcUnd):
    print "Min Gap: %s um" % plcUnd.read_attribute("MinGap").value
    print "Max Gap: %s um" % plcUnd.read_attribute("MaxGap").value

def get_speed(plcUnd):
    print "Speed: %s (100000 corresponds to 8.56 mm/s)" % plcUnd.read_attribute("CurrentSpeed").value

def set_speed(plcUnd, speed):
    plcUnd.write_attribute("DesiredSpeed", long(speed))

def start(plcUnd):
    plcUnd.StartMove()

def stop(plcUnd):
    plcUnd.StopMove()

def reset(plcUnd):
    plcUnd.ResetMotor()

def status(plcUnd):
    print "State: %s" % plcUnd.State()
    print "Status: %s" % plcUnd.Status()

#
# main
#
try :
    plcUnd = DeviceProxy( "//haspp0xtdot:10000/p00/plcundulator/001")

    if (len(sys.argv)==1):
        get_gap(plcUnd)
        get_limit_gap(plcUnd)
        get_speed(plcUnd)
        status(plcUnd)

        print ""
        print "Run 'plcUndulator.py help' to see program options"
        print ""
    else:
        if (sys.argv[1]=="help"):
            usage()
        elif (sys.argv[1]=="gap"):
            if (len(sys.argv)>2):
                set_gap(plcUnd, sys.argv[2])
            else:
                get_gap(plcUnd)
        elif (sys.argv[1]=="taper"):
            if (len(sys.argv)>2):
                set_taper(plcUnd, sys.argv[2])
            else:
                get_taper(plcUnd)
        elif (sys.argv[1]=="speed"):
            if (len(sys.argv)>2):
                set_speed(plcUnd, sys.argv[2])
            else:
                get_speed(plcUnd)
        elif (sys.argv[1]=="start"):
            start(plcUnd)
        elif (sys.argv[1]=="stop"):
            stop(plcUnd)
        elif (sys.argv[1]=="reset"):
            reset(plcUnd)
        elif (sys.argv[1]=="status"):
            status(plcUnd)
        

except Exception, inst :
    print "Failed with exception !"
    print sys.exc_info()[0]
    print type(inst)     # the exception instance
    print inst.args      # arguments stored in .args