demoVVCwithGraphic.py

#!/usr/bin/env python
”'
demo for variable velocity contouring feature
”'
import sys, argparse, time
import PyTango
import HasyUtils
import Spectra

MOTOR_NAME = "p99/motor/d1.65"

proxy = None

def pos( dest):
    ”'
    move to a unit position
    ”'
    print "--- pos to", dest, "slew", proxy.slewRate
    proxy.position = float(dest)
    while proxy.state() is PyTango.DevState.MOVING:
        print "pos", proxy.state(), proxy.position
        time.sleep(0.5)
        if HasyUtils.inkey() == 32:
            proxy.command_inout( "StopMove")
            return False
    print "pos", proxy.state(), proxy.position
    return True

def demo():
    ”'
    move through 3 regions with different speeds
    ”'
    #
    # start the test at 0
    #
    if not pos( 0): return

    Spectra.gra_command( "reset/nocon")
    posGQE = Spectra.SCAN( name = "Pos", start = 0, stop = 1, np = 500, at = "(1,1,1)", 
                            colour = 2, 
                            comment = "Position %s as function of time" % proxy.name(),
                            xlabel = 'time', ylabel='Pos', date = True)
    
    lst = [ "slew: 10000, position: 0.1",
            "slew: 20000, position: 0.5",
            "slew: 40000, position: 0.9"]
    proxy.command_inout( "movevvc", lst)

    i = 0
    startTime = time.time()
    while proxy.state() is PyTango.DevState.MOVING:
        print proxy.state(), proxy.position
        time.sleep(0.1)
        if HasyUtils.inkey() == 32:    # space bar interrupts move
            proxy.command_inout( "StopMove")
        posGQE.setX( i, time.time() - startTime)
        posGQE.setY( i, proxy.position)
        i += 1
        Spectra.gra_command( "autoscale")
        Spectra.gra_display()

    print "DONE", proxy.state(), proxy.position
    #
    # go back to 0
    #
    pos( 0)
    return

    
def main():
    global proxy
    
    parser = argparse.ArgumentParser( 
        formatter_class = argparse.RawDescriptionHelpFormatter,
        description="Variable Velocity Contouring Demo")

    parser.add_argument('-x', dest="tst", action="store_true", help='execute a test')
    args = parser.parse_args()

    try:
        proxy = PyTango.DeviceProxy( MOTOR_NAME)
    except PyTango.DevFailed, e:
        PyTango.Except.print_exception(e)
        sys.exit()

    proxy.FlagClosedLoop = 0
    
    if args.tst: 
        return demo()

    parser.print_help()
    
if __name__ == "__main__":
    main()