Skip to content

IcePAP

Configuring an IcePAP motor controller

This chapter explains how to configure an IcePAP motor controller.

Supported features

Encoder Shutter Trajectories Linked axes
YES YES YES YES

Specific IcePAP controller parameters

  • host: controller hostname or IP address

Specific IcePAP axis parameters

  • address: int, motor input channel
  • autopower: bool, automatically switch on/off power on axis

YAML configuration file example

controller:
  class: icepap
  host: iceid2322
  axes:
      - name: mbv4mot
        address: 1
        steps_per_unit: 817
        velocity: 0.3
        acceleration: 3
      - name: camx
        address: 34
        ...

Note

Each controller: line can be prepended with - to configure multiple controllers in the same YAML file.

Note

Beacon needs the emotion configuration plugin for motor controller YAML files interpretation.

It is common to add an init.yml file with: plugin: emotion in the top directory of motors configuration YAML files. Another possibility is to add plugin: emotion directly in each motor controller YAML configuration file.

Encoder configuration

Encoders directly plugged in the IcePAP controller can be configured directly in the YAML configuration file.

Note

An encoder can be defined on its own (Encoder object), or can be associated to an axis to add some extra checks when motion is done: for example, an exception can be raised if final position does not correspond to encoder position.

Specific IcePAP encoder parameters

  • type: to set which encoder to read.
    • ENCIN: rear incremental encoder
    • ABSENC: rear SSI interface
    • INPOS: front panel encoder
    • MOTOR: electrical phase of the motor
    • AXIS: nominal axis position
    • SYNC: backplance SYNC input register
  • address: encoder input channel

Note

See icepap documentation for more info. http://wikiserv.esrf.fr/bliss/index.php/ICEPAP#Documentation

Encoder YAML configuration example

controller:
  class: icepap
  host: iceid42
  axes:
      ...
  encoders:
      - name: mbv1enc
        address: 25
        type: ENCIN
        steps_per_unit: 1e5

More information about Encoder objects here

IcePAP Shutter configuration

The IcePAP controller can be put in shutter control mode (using IcePAP LIST MODE), to operate opening and closing of a shutter. This is done by moving back and forth a stepper motor between two pre-defined positions. The change is trigger by an external signal.

For details, see: Shutter configuration

Linked axis configuration

IcePAP controller can link several axes together, creating a new virtual axis managed directly by the controller itself. A linked axis applies motions to underlying linked motors. Linked motors are considered as real (as opposed to the virtual axis).

Note

icepapcms has to be used to create a linked axis in the controller

Specific IcePAP linked axis configuration

  • class for axis has to be LinkedAxis
  • address is the name of the linked axis, has defined with icepapcms

Linked axis YAML configuration example

controller:
    class: icepap
    host: icebcu21
    axes:
      ...
      - name: linked_axis1
        address: linked_axis_name
        class: LinkedAxis
        steps_per_unit: 200
        velocity: 10
        acceleration: 20

Linked axis info strings gives status on real axis as follow:

ICEPAP LINKED AXIS:
    linked name: motlink
    real axis: ADDR: 1 POWER: ON    CLOOP: ON    WARNING: NONE    ALARM: NO
    real axis: ADDR: 2 POWER: ON    CLOOP: ON    WARNING: NONE    ALARM: NO

To get more details, like real motor positions/encoders, use:

BLISS [7]: motlink.real_axes_status()
VIRTUAL LINKED AXIS:
Virtual axis name     : motlink
POWER                 : ON
Indexer steps         : 10
Indexer in user unit  : 0.05

REAL AXIS CONTROLLED BY LINKED AXIS:
Real axis address     : 1
Real axis name        : motor1
Home switch           : YES
Homing                : NOTFOUND
Control encoder       : YES
Indexer steps         : 10
Encoder steps         : 10
Homepos steps         : unavailable
Indexer user unit     : 0.05
Encoder user unit     : 0.05
Closed loop           : ON

REAL AXIS CONTROLLED BY LINKED AXIS:
Real axis address     : 2
Real axis name        : motor2
Home switch           : YES
Homing                : NOTFOUND
Control encoder       : YES
Indexer steps         : 10
Encoder steps         : 10
Homepos steps         : unavailable
Indexer user unit     : 0.05
Encoder user unit     : 0.05
Closed loop           : ON

Methods specific to linked axis:

  • sync(user_position): Synchronizes all real linked axes members to the given position. No motion will take place. The position is given in user units of the virtual axis.
  • disprotected_move(real_axis, user_target_pos): Move one of the real axis to the given position. Real axis are accessible through real_axes. Example: motlink.disprotected_move(motlink.real_axes.motor1, 0.1)
  • open_closed_loop(): open closed loop on all real axes
  • reset_closed_loop(): reset closed loop on all real axes (ie. sync axis position with encoder one)
  • reset(): reset closed loop on all real axis. Then move each real to the mean position and finally set linked axis position to that position. This command implies that all axis can be moved independently. It is typically used to sync positions after brake release when real axis are in closed loop.