"""
Library containning function for handling the ZMX
"""
from PyTango import *
import sys
import time
def nb_devices(nb_zmx):
"""The nb_devices function is used to printout the number of ZMX devices found for the given root name."""
print "Number of found ZMX devices: " + str(nb_zmx)
def general_info(nb_zmx, zmx_axus, zmx_device_name, zmx_proxy):
"""The general_info function is used to printout the general info (name/voltage/temperature/error) for all ZMX devices."""
for j in range(0,int(nb_zmx)):
print str(zmx_axis[j]) + " " + zmx_proxy[j].AxisName + " (" + zmx_device_name[j] + ") " + str(zmx_proxy[j].IntermediateVoltage) + " " + str(zmx_proxy[j].Temperature) + " " + str(zmx_proxy[j].Error)
def axis_info(nb_zmx, zmx_proxy, axis_nb):
"""The axis_info function is used to printout the info of the axis corresponding to the given index."""
if axis_nb < nb_zmx:
print "ZMX axis: " + str(axis_nb)
print "Axis name: " + str(zmx_proxy[axis_nb].AxisName)
print "Version: " + str(zmx_proxy[axis_nb].VersionPS)
print "Activation: " + str(zmx_proxy[axis_nb].DeactivationStr)
print "Step resolution: " + str(zmx_proxy[axis_nb].StepWidthStr)
print "Run current: " + str(zmx_proxy[axis_nb].RunCurrent) + " A"
print "Stop current: " + str(zmx_proxy[axis_nb].StopCurrent) + " A"
print "Motor direction: " + str(zmx_proxy[axis_nb].PreferentialDirectionStr)
print "Operation mode: " + str(zmx_proxy[axis_nb].OperationModeStr)
print "Delay time: " + str(zmx_proxy[axis_nb].DelayTime) + " mS"
print "Voltage: " + str(zmx_proxy[axis_nb].IntermediateVoltage) + " V"
print "Temperature: " + str(zmx_proxy[axis_nb].Temperature) + " C"
print "Power stage status: " + str(zmx_proxy[axis_nb].PowerStageStatus)
print "Error: " + str(zmx_proxy[axis_nb].Error)
print "Path output files: " + str(zmx_proxy[axis_nb].PathOutputFiles)
print "Save automatically to EPROM: " + str(zmx_proxy[axis_nb].FlagSaveAutomatically)
print "Changes not saved: " + str(zmx_proxy[axis_nb].FlagChangeNotSaved)
print "Error in connection: " + str(zmx_proxy[axis_nb].ErrorZMXConnection)
else:
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
def set_activation(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The set_activation function is used to set the activation value of the given axis ( 0 activate, 1 deactivate ) ."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
if tmp_value != 0 and tmp_value != 1:
print "Not allowed to set this value. 0 -> activate, 1 -> deactivate"
else:
zmx_proxy[axis_nb].write_attribute("Deactivation",tmp_value)
def set_stepresolution(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The set_stepresolution function is used to set the step resolution of the given axis."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
if tmp_value < 0 or tmp_value > 13:
print "Not allowed to set this value. Allowed values from 0 to 13"
else:
zmx_proxy[axis_nb].write_attribute("StepWidth",tmp_value)
def set_preferentialdirection(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The set_activation function is used to set the preferential direction of the given axis ( 0 negative, 1 positive ) ."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
if tmp_value != 0 and tmp_value != 1:
print "Not allowed to set this value. 0 -> negative, 1 -> positive"
else:
zmx_proxy[axis_nb].write_attribute("PreferentialDirection",tmp_value)
def set_delaytime(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The set_delaytime function is used to set the delay time of the given axis."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
if tmp_value < 0 or tmp_value > 15:
print "Not allowed to set this value. Allowed values from 0 to 15"
else:
zmx_proxy[axis_nb].write_attribute("DelayTime",tmp_value)
def set_pathoutputfiles(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The set_pathoutputfiles function is used to set the path for the output files of the given axis."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].write_attribute("PathOutputFiles",tmp_value)
def set_autosavetoeprom(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The set_autosavetoeprom function is used to set/unset the automatic write to eprom of the given axis."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
if tmp_value != 0 and tmp_value != 1:
print "Not allowed to set this value. 0 -> not auto save, 1 -> auto save"
else:
zmx_proxy[axis_nb].write_attribute("FlagSaveAutomatically",tmp_value)
def loadfromoutputfile(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The loadfromoutputfile function is used to load parameters from an external file."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].LoadFromOutputFile(tmp_value)
def savetooutputfile(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The savetooutputfile function is used to save parameters to en external file."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].SaveToOutputFile(tmp_value)
def readfilecontent(nb_zmx, zmx_proxy, axis_nb, tmp_value):
"""The readfilecontent function is used to read the parameters stored in an ouput file."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
contents = zmx_proxy[axis_nb].ReadFileContent(tmp_value)
for element in contents:
print element
def readfilesinoutputpath(nb_zmx, zmx_proxy, axis_nb):
"""The readfilesinoutputpath function is used to read the files in the ouput path."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
files = zmx_proxy[axis_nb].ReadFilesInOutputPath()
for element in files:
print element
def deleteeprom(nb_zmx, zmx_proxy, axis_nb):
"""The deleteeprom function is used to delete the EPROM contents."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].DeleteEPROM()
def writeeprom(nb_zmx, zmx_proxy, axis_nb):
"""The writeeprom function is used to write current settings to the EPROM."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].WriteEPROM()
def reset(nb_zmx, zmx_proxy, axis_nb):
"""The reset function is used to reset the power stage."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].Reset()
def revminus(nb_zmx, zmx_proxy, axis_nb):
"""The revminus function is used to perform a motor test: one motor rotation with preset run current (negative direction)."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].RevMinus()
def revplus(nb_zmx, zmx_proxy, axis_nb):
"""The revplus function is used to perform a motor test: one motor rotation with preset run current (positive direction)."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].RevPlus()
def reseterrorzmxconnection(nb_zmx, zmx_proxy, axis_nb):
"""The reseterrorzmxconnection function is used to reset the flag indicating error in ZMX connection."""
if axis_nb > (nb_zmx - 1):
print "Not axis existing for that index. Maximum index value: " + str(nb_zmx - 1)
else:
zmx_proxy[axis_nb].ResetErrorZMXConnection()
#
# main
#
try :
root_name = "petra3/zmxps/"
db = PyTango.Database()
name_dev_ask = root_name + "*"
devices = db.get_device_exported(name_dev_ask)
zmx_proxy = []
zmx_device_name = []
zmx_axis = []
nb_zmx = len(devices)
j = 0
for name in devices:
zmx_device_name.append(name)
zmx_proxy.append(DeviceProxy(name))
zmx_axis.append(j)
j = j + 1
if( len( sys.argv) == 1):
nb_devices(nb_zmx)
general_info(nb_zmx,zmx_axis,zmx_device_name,zmx_proxy)
print " "
print "Run 'python zmx.py help' to see program options"
print " "
else:
if(sys.argv[1] == "help"):
print "Usage:"
print "-> to read axis info"
print "python zmx.py axis_info axis_number"
print "-> to change activation value"
print "python zmx.py set_activation axis_number value_to_set"
print "with value_to_set from 0 to 1: 0 = active, 1 = deactive"
print "-> to change step resolution"
print "python zmx.py set_stepresolution axis_number value_to_set"
print "with value_to_set from 0 to 13: 0 = 1/1, 1 = 1/2, 2 = 1/2.5, 3 = 1/4, 4 = 1/8, 5 = 1/8, 6 = 1/10, 7 = 1/16, 8 = 1/20, 9 = 1/32, 10 = 1/64, 11 = 1/128, 12 = 1/256, 13 = 1/512"
print "-> to change preferential direction"
print "python zmx.py set_preferentialdirection axis_number value_to_set"
print "with value_to_set from 0 to 1: 0 = negative, 1 = positive"
print "-> to change delay time"
print "python zmx.py set_delaytime axis_number value_to_set"
print "with value_to_set from 0 to 15: 0=1, 1=2,2=4,3=6,4=8,5=10,6=12,7=14,8=16,9=20,10=40, 11=60,12=100, 13=200, 14=500, 15=1000 (mS)"
print "-> to set path for output files"
print "python zmx.py set_pathoutputfiles axis_number new_path"
print "-> to change flag for auto save to EPROM"
print "python zmx.py set_autosavetoeprom axis_number value_to_set"
print "with value_to_set from 0 to 1: 0 -> not auto save, 1 -> auto save"
print "-> to load settings from output file"
print "python zmx.py loadfromoutputfile axis_number file_to_load"
print "with file_to_load the name of the file to be load, it has to be in the pathoutputfiles directory"
print "-> to save settings to output file"
print "python zmx.py savetooutputfile axis_number file_name"
print "with file_name the name of the file, it will be in the pathoutputfiles directory"
print "-> to read file content"
print "python zmx.py readfilecontent axis_number file_name"
print "with file_name the name of the file, that has to be in the pathoutputfiles directory"
print "-> to read file names in pathoutputfiles directory"
print "python zmx.py readfilesinoutputpath axis_number"
print "-> to delete EPROM"
print "python zmx.py deleteeprom axis_number"
print "-> to write to EPROM"
print "python zmx.py writeeprom axis_number"
print "-> to reset power stage"
print "python zmx.py reset axis_number"
print "-> to perform motor test (negative direction)"
print "python zmx.py revminus axis_number"
print "-> to perform motor test (positive direction)"
print "python zmx.py revplus axis_number"
print "-> to reset the error in ZMX connection"
print "python zmx.py reseterrorzmxconnection axis_number"
elif(sys.argv[1] == "axis_info"):
axis_info(nb_zmx, zmx_proxy, int(sys.argv[2]))
elif(sys.argv[1] == "set_activation"):
print "Setting activation value to " + str(sys.argv[3])
set_activation(nb_zmx, zmx_proxy, int(sys.argv[2]),int(sys.argv[3]) )
elif(sys.argv[1] == "set_stepresolution"):
print "Setting step resolution to " + str(sys.argv[3])
set_stepresolution(nb_zmx, zmx_proxy, int(sys.argv[2]),int(sys.argv[3]))
elif(sys.argv[1] == "set_preferentialdirection"):
print "Setting preferential direction to " + str(sys.argv[3])
set_preferentialdirection(nb_zmx, zmx_proxy, int(sys.argv[2]),int(sys.argv[3]))
elif(sys.argv[1] == "set_delaytime"):
print "Setting delay time to " + str(sys.argv[3])
set_delaytime(nb_zmx, zmx_proxy, int(sys.argv[2]),int(sys.argv[3]))
elif(sys.argv[1] == "set_pathoutputfiles"):
print "Setting path for output files to " + str(sys.argv[3])
set_pathoutputfiles(nb_zmx, zmx_proxy, int(sys.argv[2]),str(sys.argv[3]))
elif(sys.argv[1] == "set_autosavetoeprom"):
print "Changing auto save flag to " + str(sys.argv[3])
set_autosavetoeprom(nb_zmx, zmx_proxy, int(sys.argv[2]),int(sys.argv[3]))
elif(sys.argv[1] == "loadfromoutputfile"):
print "Loading settings from file " + str(sys.argv[3])
loadfromoutputfile(nb_zmx, zmx_proxy, int(sys.argv[2]),str(sys.argv[3]))
elif(sys.argv[1] == "savetooutputfile"):
print "Save settings to file " + str(sys.argv[3])
savetooutputfile(nb_zmx, zmx_proxy, int(sys.argv[2]),str(sys.argv[3]))
elif(sys.argv[1] == "readfilecontent"):
print "Reading contents of file " + str(sys.argv[3])
readfilecontent(nb_zmx, zmx_proxy, int(sys.argv[2]),str(sys.argv[3]))
elif(sys.argv[1] == "readfilesinoutputpath"):
print "Reading files in pathoutputfiles directory"
readfilesinoutputpath(nb_zmx, zmx_proxy, int(sys.argv[2]))
elif(sys.argv[1] == "deleteeprom"):
print "Deleting EPROM"
deleteeprom(nb_zmx, zmx_proxy, int(sys.argv[2]))
elif(sys.argv[1] == "writeeprom"):
print "Writting EPROM"
writeeprom(nb_zmx, zmx_proxy, int(sys.argv[2]))
elif(sys.argv[1] == "reset"):
print "Reset power stage"
reset(nb_zmx, zmx_proxy, int(sys.argv[2]))
elif(sys.argv[1] == "revminus"):
print "Perform motor test (negative direction)"
revminus(nb_zmx, zmx_proxy, int(sys.argv[2]))
elif(sys.argv[1] == "revplus"):
print "Perform motor test (positive direction)"
revplus(nb_zmx, zmx_proxy, int(sys.argv[2]))
elif(sys.argv[1] == "reseterrorzmxconnection"):
print "Setting error ZMX connection to false"
reseterrorzmxconnection(nb_zmx, zmx_proxy, int(sys.argv[2]))
else:
print "Run 'python zmx.py help' to see program options"
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