The following examples demonstrates how a Lom motor position is read from a PLC. IndexGroup and IndexOffset select the process variable.
#!/usr/bin/python from PyTango import * import sys import time # # get the current position # def get_current( sps, chan): return sps.command_inout( "ReadDouble", [ 0xf030, 512]) # # move a motor # def move_to( sps, chan, newPos): minPos = sps.command_inout( "ReadDouble", [ 0xf020, 512]) maxPos = sps.command_inout( "ReadDouble", [ 0xf020, 540]) print " min ", minPos, ", max ", maxPos if (newPos > maxPos or newPos < minPos): print "\n Position", newPos, "outside limits", minPos, maxPos return 0 sps.command_inout( "WriteDouble", [ 0xf020, 512, newPos]) sps.command_inout( "WriteChar", [ 0xf020, 0, 1]) # StartAll time.sleep( 0.03) sps.command_inout( "WriteChar", [ 0xf020, 0, 0]) status = 1 while status & 1: status = sps.command_inout( "ReadLong", [ 0xf030, 520]) errMaster = sps.command_inout( "ReadChar", [ 0xf030, 1]) print " status", status, ",", get_current( sps, chan), ", err ", errMaster time.sleep( 0.2) return 1 # # main # try : chan = 1 sps = DeviceProxy( "hires/exp/sps1") if( len( sys.argv) == 1): print " Current position ", get_current( sps, chan) else: move_to( sps, chan, float(sys.argv[1])) 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