The TINE Motor server offers a common interface and a common set of features to many different types of motors. Basically all motors will offer current motor positions, velocities, accelerations, etc. as well as the ability to move to a target or in incremental steps or to a home position, etc. In additions groups of motors which move 'together' can be defined either via pre-configuration as 'pseudo' motors or on-the-fly by passing a comma separated list of motors as the 'device' string in API Calls to the motor server. Various kinds of scanning functionality is also offered by the TINE motor server.
The differences between the individual hardware types is encapsulated within a so-called motor library 'plug'.
The 'generic' motor server will then offer as properties
Position is the current motor position. The units (usually mm) are given by the the property meta-information. This property is usually READ-ONLY. However if the motor library allows setting the current position reading then the property can also be READ-WRITE.
PositionMinimum is the current minimium allowed position (same units as "Position").
This property is usually READ-ONLY but can also be READ-WRITE.
PositionMaximum is the current maximium allowed position (same units as "Position").
This property is usually READ-ONLY but can also be READ-WRITE.
PositionScale (READ-WRITE) is a software scale factor which can be applied to all motor position readouts (default = 1).
PositionOffset (READ-WRITE) is a software offset which can be applied to all motor position readouts (default = 0).
Velocity (READ-WRITE) is the current motor velocity setting. The units (usually mm/sec) are give by the property meta-information.
VeloctityMinimum (READ-ONLY) is the minimum velocity setting (same units as "Velocity").
VeloctityMaximum (READ-ONLY) is the maximum velocity setting (same units as "Velocity").
Acceleration is the current motor acceleration setting. This property is usually READ-ONLY but can also be READ-WRITE. The units (usuallymm/sec^2) are give by the property meta-information.
AccelerationMaximum (READ-ONLY) is the maximum allowed acceleration setting (same units as "Acceleration").
Calibrate (WRITE-ONLY) is a command which, in the absence of input, moves the motor to its defined zero location (home) and resets the current postions read-out to 0.
In this case this property in nominally the same as "Reset". The command also accepts a target position as input. In this case the motor is driven 'home' and then moves to the desired target position.
Reset moves the motor to its defined zero location (home) and resets the current postions read-out to 0.
OnLine (READ-WRITE) is a boolean setting which either sets (WRITE) or returns (READ) the motor's 'on-line' status, which determines whether the motor participates in 'MOVE' commands.
Status (READ-ONLY) gives the current software status flag for the given motor, indicating the current motor state.
StatusBits (READ-ONLY) gives the current status bits definitions for the active bits in the motor's "Status" flag.
RotationMoveAllowed (READ-WRITE) is a boolean value which determines whether the motor is allowed to move as a 'rotational' motor which 'End Switch' control.
In addition to the above properties there are generally several 'Move' processes available. Process style properties will typically be 'decorated' command properties, with the decorations .START, .STOP, .PAUSE, .RESUME, .STATUS, and .PROGRESS appended to the 'Move' property string. For example a simple 'Move' process for a single motor would refer to the following set of decorated properties:
Move.START (WRITE-ONLY) initiates the 'Move' process for the targeted motor. The motor will then begin moving to the current 'Target Position'. The property can take an optional float value as input giving the desired target position. This allows a single property to initiate a 'Move' to a target in a single step. Note that if the motor is already moving (whether in its own 'Move' process or as part of a motor group) the property call will fail and return 'operation busy'
Move.STOP (WRITE-ONLY) stops any and all 'Move' operations involving the given motor. The motor's 'status' then reflects an 'idle' motor.
Move.PAUSE (WRITE-ONLY) pauses any and all 'Move' operations involving the given motor. A paused motor's status will still reflect a 'moving' motor and hence not permit any further 'Move' operations. From a 'Paused' state the motor will accept either a 'Move.RESUME' or a 'Move.STOP' command.
Move.RESUME (WRITE-ONLY) resumes a paused motor 'Move' operation involving the given motor. If the motor was not in a 'paused' state but has a target position different from its current position, then the motor will move to the target position.
Move.STATUS (READ-ONLY) returns the current motor process status. This property can be monitored during a 'Move' operation to ascertain the current 'Move' activity. If 'Move.Status' returns '0' then the motor is (again) in the 'idle' state.
Move.PROGRESS (READ-ONLY) returns the estimated time in seconds to move to the target.
Additional 'Move' process properties include
IncrementMove.START will move the motor from its current position by the incremental amount given in the input data. (units as given by the property "Position"). The decorations .STOP, .PAUSE, .RESUME, .STATUS, .PROGRESS are in analogy with those described above for the simple 'Move' action.
FreeMove.START will initiate a move operation for a rotational motor without End-Switch control. The decorations .STOP, .PAUSE, .RESUME, .STATUS, .PROGRESS are in analogy with those described above for the simple 'Move' action.
GroupMove.START will initiate a move operation for an 'on-the-fly' motor group. The device name input should consist of a comma separated list of those motors which should participate in the move operation (e.g. "Motor1,Motor2,Motor3"). The motors in the group will then be moved 'together' (but without any synchronization control). The decorations .STOP, .PAUSE, .RESUME, .STATUS, .PROGRESS are in analogy with those described above for the simple 'Move' action.
IncrementGroupMove.START will move the 'on-the-fly' defined motor group from its current position by the incremental amount given in the input data. The decorations .STOP, .PAUSE, .RESUME, .STATUS, .PROGRESS are in analogy with those described above for the simple 'Move' action.
ControlledGroupMove.START will initiate a 'controlled' move, if a controlling procedure is defined. This will move to motor to a defined target under the additional requirement that the control is valid. For instance a collimator motor can move collimators so long as beam loss rates do not exceed a certain value.
FastScanMonitor.START will start a 'fast' scan procedure where a motor is driven to a target while a dependent machine parameter is acquired. Following the scan procedure the x- and y- axis arrays for the the motor position and the indepedent machine parameter can be read back from the server and/or saved to a file.
The dependent machine scan parameter along with the motor target can be specified by a TEXT input according to the pattern:
\t -m=tgtName -p=pos -g=gr -s=siz -f=fmt -t=tmr
where -m gives the monitor target, -p gives the motor target position -g gives the motor gear ratio -s gives the size of the monitored data, -f gives the format of the monitored data, -t gives the timer interval in milliseconds (default = 1000)
for instance
\t -m=/TEST/SineServer/SineGen0[Amplitude] -p=200 -s=1 -f=float -t=500
If a simple floating point input is given, then this will be used as the desired motor target and the previously entered dependent machine parameter will be used.
The current scan parameter can be read out with property ScanMonitor.PARAMS.
ScanMonitor.START will start a 'step' scan procedure where a motor is driven to a target while a dependent machine parameter is acquired. Following the scan procedure the x- and y- axis arrays for the the motor position and the indepedent machine parameter can be read back from the server and/or saved to a file.
The dependent machine scan parameter along with the motor target can be specified by a TEXT input according to the pattern:
\t -m=tgtName -p=pos -g=gr -s=siz -f=fmt -d=dly -i=inc
where -m gives the monitor target, -p gives the motor target position -g gives the motor gear ratio -s gives the size of the monitored data, -f gives the format of the monitored data, -d gives the delay between steps in milliseconds (step scan only, default = 100), -i gives the step increment (step scan only; when no 'stepto' is provided; default = 1000 mu).
for instance
\t -m=/TEST/SineServer/SineGen0[Amplitude] -p=200 -s=1 -f=float -d=200 -i=500
If a simple floating point input is given, then this will be used as the desired motor target and the previously entered dependent machine parameter will be used.
The current scan parameter can be read out with property ScanMonitor.PARAMS.
ScanMonitor.X and ScanMonitor.Y return the independent and dependent variables as floating point arrays via these commands. These are the results of the most recent ScanMonitor sequence or FastScanMonitor sequence.
ScanMonitorSave causes the current independent and dependent variable arrays to be stored on disk with the file name given in the call.
ScanMonitor.PARAMS will return the current monitor scanning parameters.
ScanMove.START will start a 'fast' scan procedure where a motor is driven to a target according to a scan procedure defined in and registered by the motor plug in question. If the motor plug supports a scan procedure at the PLC level it can register the procedure with the motor server. Any depedent (y-axis) variables are measured in and returned by the motor plug.
ScanMove.X and ScanMove.Y return the independent and dependent variables as floating point arrays via these commands. These are the results of the most recent ScanMove sequence sequence and are returned from the motor plug.
ScanSave causes the current independent and dependent variable arrays resulting from a ScanMove call to be stored on disk with the file name given in the call. These are the results of the most recent ScanMove sequence sequence and are returned from the motor plug.
ScanFile.X and \ScanFile.Y will return the x- and y-axis scanned array values from the stored scan file provided.
ScanFile.List will return a list of stored scan files.
LastHardwareError will return the last hardware error as provided by the motor plug (either as a text string, a code, or both).