Smaract MCS2 motor controller¶
This page concerns only the MCS2 Smaract controller. For the old model MCS, please refer to the other BLISS controller smaract MCS
The SmarAct MCS2 is the follow-up of the MCS controller system. It has several new features and improvements.
The only supported protocol is TCP, and the default port is
55551. If the port
configuration is changed in the controller box, it must also be changed in the
YML file by adding the port number in the TCP url:
When the controller is powered on, the position of the axes are lost and the closed-loop are opened. The CLOOP will be closed once you move the axis.
It is recommended to perform a “home search” to reset the axis to a hardware-known position.
plugin: emotion class: SmarAct_MCS2 name: beutier_polariser tcp: url: smaractid016 axes: - name: pol_y channel: 0 # (1) unit: mm steps_per_unit: 1e9 # (2) velocity: 0.02 # (3) acceleration: 0 # (4) positioner_type: SL_S1SS # (5) hold_time: -1 # (6) power_mode: Enabled # (7) tolerance: 0.02 - name: pol_z channel: 1 steps_per_unit: 1000000000 #linear positioner step-size is 1 pico-meter(1e-12) unit: mm sensor_type: SL_S1SS velocity: 0.002 # 2 micro-meter/s acceleration: 0 tolerance: 0.02 - name: pol_r channel: 2 steps_per_unit: 1000000000 #rotary positioner step-size is 1 nano-degree (1e-9) unit: degree velocity: 0.001 # 1 mdegree/s acceleration: 0 tolerance: 0.02
channel: the channel number of the positioner, starts from 0.
steps_per_unit: For linear positioner the resolution is 1 pico-meter (1e-12). If set to 1e9 the position will be in millimeter. For rotary positioner the resolution is 1 nano-degree (1e-9). If set to 1e9 the position will be in degree.
velocity: setting to 0 disables velocity control and implicitly acceleration control and low vibration mode as well.
acceleration: setting to 0 disables acceleration control and low vibration mode as well.
positioner_type: PositionerType string (optional, default is to assume the controller was previously configured and use its value). Warning: do not change this parameter if you are not sure, it can damage the positioner.
hold_time: This property specifies how long (in ms) the position is actively held after reaching the target position. After the hold time elapsed the channel is stopped and the control-loop is disabled. A value of 0 deactivates this feature, a value of -1 sets the channel to infinite holding.
power: initialization mode of the positioner power supply (optional)
- Disabled : the positioner power supply is turned off continuously.
- Enabled : (default) the positioner is continuously supplied with power.
- PowerSave : the positioner power supply is pulsed to keep the heat generation low. (useful for in-vacuum motors)
Tested on ESRF-ID10: Ethernet controller with SL_S1SS (Linear) and SR_S1S5S (small rotary) positioners
This is a emotion controller, so you just need to get the axis and move/stop/scan … the motor.
BLISS : config.get('pol_y') WARNING 2021-02-08 14:36:42,665 global.controllers.beutier_polariser: pol_y physical position unknown (hint: do a homing to find reference mark) Out : AXIS: name (R): pol_y unit (R): mm offset (R): 0.00000 backlash (R): 0.00000 sign (R): 1 steps_per_unit (R): 1000000000.00 tolerance (R) (to check pos. before a move): 0.02 limits (RW): Low: -inf High: inf (config Low: -inf High: inf) dial (RW): -0.00000 position (RW): -0.00000 state (R): READY (Axis is READY) acceleration: None velocity (RW): 0.00200 (config: 0.00200) velocity_low_limit (RW): inf (config: inf) velocity_high_limit (RW): inf (config: inf) SmarAct MCS2 CONTROLLER: controller: 22.214.171.124 serial #: "MCS2-00003631" name: "MCS2-00003631" channel: 0 type: SL_S1SS status: POWER: Enabled CLOOP: False OVERLOAD: False ENCODER: None
The warning message above means that the controller has been powered-off/on and may need to be reseted by doing a home-search to fix the position.
SmarAct MCS2 specific commands¶
The axes are working as standard BLISS axes, nevertheless this controller provides some extra functions to perform low level access or to execute special functions like the sensor calibration or a power off.
All the specific commands are accessible by using the positioner attribute
of the bliss axis, e.g
Read hardware status¶
The Device State, Module State and Channel State properties are used to obtain the current state of the controller. While the Device State and Module State mainly give information about global hardware states and available modules, the most prominent state property, the Channel State, may be used to get feedback for the current movement of a channel.
Only channel status¶
BLISS : pol_y.channel.status Out : * ACTIVELY_MOVING = False * CLOSED_LOOP_ACTIVE = True * CALIBRATING = False * REFERENCING = False * MOVE_DELAYED = False * SENSOR_PRESENT = True * IS_CALIBRATED = True * IS_REFERENCED = False * END_STOP_REACHED = False * RANGE_LIMIT_REACHED = False * FOLLOWING_LIMIT_REAC = False * MOVEMENT_FAILED = False * IS_STREAMING = False * POSITIONER_OVERLOAD = False * OVER_TEMPERATURE = False * REFERENCE_MARK = False * IS_PHASED = False * POSITIONER_FAULT = False * AMPLIFIER_ENABLED = True * IN_POSITION = True
Channel, module and device status¶
BLISS : pol_y.channel.info_status Channel status: * ACTIVELY_MOVING = False * CLOSED_LOOP_ACTIVE = True * CALIBRATING = False * REFERENCING = False * MOVE_DELAYED = False * SENSOR_PRESENT = True * IS_CALIBRATED = True * IS_REFERENCED = False * END_STOP_REACHED = False * RANGE_LIMIT_REACHED = False * FOLLOWING_LIMIT_REAC = False * MOVEMENT_FAILED = False * IS_STREAMING = False * POSITIONER_OVERLOAD = False * OVER_TEMPERATURE = False * REFERENCE_MARK = False * IS_PHASED = False * POSITIONER_FAULT = False * AMPLIFIER_ENABLED = True * IN_POSITION = True Module status: * SM_PRESENT = True * BOOSTER_PRESENT = False * ADJUSTEMENT_PRESET = False * IOM_PRESET = False * INTERNAL_COMM_FAILUR = False * FAN_FAILURE = False * POWER_SUPPLY_FAILURE = False * POWER_SUPPLY_OVERLOA = False * OVER_TEMPERATURE = False Device status: * HM_PRESENT = False * MOVEMENT_LOCKED = False * AMPLIFIER_LOCKED = False * INTERNAL_COMM_FAILUR = False * IS_STREAMING = False
In order for a positioner to track its position, its sensor needs to be supplied
with power. However, since this generates heat (causing drift effects), it might
be desirable to disable the sensors in some situations (especially in
temperature critical environments). For this, there are three different modes
of operation for the sensor, which may be configured individually for each
channel with the Sensor Power Mode property. The following modes are available:
Disabled : the positioner power supply is turned off continuously.
Enabled : (default) the positioner is continuously supplied with power.
PowerSave : the positioner power supply is pulsed to keep the heat generation low. (useful for in vacuum setup).
BLISS : pol_y.channel.power_mode Out : <PowerMode.PowerSave: 2> BLISS : pol_y.channel.power_mode= 'Enabled'
This property specifies how long (in ms) the position is actively held after reaching the target position. After the hold time elapsed the channel is stopped and the control-loop is disabled.
BLISS : pol_y.channel.hold_time Out : -1
Even though every positioner is categorized by its type, each individual positioner may have slightly different characteristics that require the tuning of some internal parameters for correct operation and optimal results.
The calibration function is used to adapt to these characteristics and automatically de- tects parameters for an individual positioner. It must be called once for each channel if the me- chanical setup changes (different positioners connected to different channels). The calibration data will be saved to non-volatile memory. If the mechanical setup is unchanged, it is not nec- essary to run the calibration on each initialization, but newly connected positioners have to be calibrated in order to ensure proper operation.
As a safety precaution, make sure that the positioner has enough freedom to move without damaging other equipment.
BLISS : pol_y.channel.calibrate(wait=True, timeout=None)
Homing - Find reference mark¶
When doing a bliss-axis home search you can only set the direction, calling this function you can set set if you want to reset the position to zero:
BLISS : pol_y.channel.find_reference_mark(1, auto_zero=True)
Low level access¶
The MCS2 is “speaking”
SCPI protocol language. For the list of functions please
refer to the “MCS2 Programming Guide ” PDF documentation. You can set/get some
axis properties (velocity, position…) or send commands (stop, move, calibrate
Set or get properties¶
# Read the position With set/get_property() functions # just passed the property, channel is set automatically. BLISS : pol_y.channel.get_property(':POS') Out : '-479\r' # Set the acceleration to 1000 steps/s² BLISS : pol_y.channel.set_property(':ACC 1000')
Can only be used to send commands, for instance to stop/move/calibrate/reference commands. There is no return.
BLISS : pol_y.channel.command(':STOP0')