ximc_instrument

Libximc/pyximc Instrument interface/implementation. May be subclassed, but can be used directly for most libximc-compliant motor controllers or translation stages.

This module contains the XimcInstrument class, and associated Enums and Exceptions.

Classes

XimcInstrument(*args, **kwargs)

Implementation of the Instrument Class that wraps libximc to control Standa and similar motor controllers.

Exceptions

XimcCalibrationError

Issue reading or processing calibration procedure for XimcInstrument.

XimcError

Generic libXIMC/XimcInstrument error class.

XimcReadbackError

Readback inconsistency after sending XimcInstrument command.

XimcResultError(resultcode[, msg])

Error returned from libXIMC as pyximc.Result.

XimcInstrument

class icicle.ximc_instrument.XimcInstrument(*args, **kwargs)

Bases: Instrument

Implementation of the Instrument Class that wraps libximc to control Standa and similar motor controllers.

__init__(resource='', calibration=None, microstep_mode=None, user_units='mm')
Parameters:
  • resource – libximc controller name. See libximc docs for examples.

  • calibration – user unit multiplier value to overrride value read from controller. (Not recommended)

  • microstep_mode – custom microstep mode to override value read from controller. (Not recommended)

  • user_units – user_units to use for this device.

class MicrostepMode(*values)

Bases: IntEnum

Libximc engine microstep modes.

MICROSTEP_MODE_FRAC_128 = 8
MICROSTEP_MODE_FRAC_16 = 5
MICROSTEP_MODE_FRAC_2 = 2
MICROSTEP_MODE_FRAC_256 = 9
MICROSTEP_MODE_FRAC_32 = 6
MICROSTEP_MODE_FRAC_4 = 3
MICROSTEP_MODE_FRAC_64 = 7
MICROSTEP_MODE_FRAC_8 = 4
MICROSTEP_MODE_FULL = 1
NO_SIMULATION = True
STAGE_CALIBRATIONS = {'STANDA': {'8MT175-150': {'cm': 0.00025, 'mm': 0.0025, 'um': 2.5}}}

Currently Unused - initial implementation of stage calibrations. Now read from stage/engine setting stored on device on __enter__()

USER_UNITS = {'NM': 5.39957e-07, 'cm': 10.0, 'inch': 0.0393701, 'm': 1000.0, 'mm': 1.0, 'um': 0.001}

Conversion factors for different choices of user units.

Assume base unit in calibration is mm.

classmethod devices()

Enumerate ximc devices.

Returns:

list of ximc devices; each device is a dict with fields idx, resource, name.

get_movement_settings(raw_object=False)

Get current movement settings for controller.

Parameters:

raw_object – Whether to return a raw pyximc.move_settings_t object instead of a python dict.

Returns:

movement settings as dict with fields speed, microspeed, acceleration, deceleration, antiplay_speed, antiplay_microspeed, movement_flags. See https://libximc.xisupport.com/doc-en/structmove__settings__t.html

get_position()

Read current position of device in steps and microsteps.

Returns:

Position as dict with fields steps, microsteps.

get_position_user()

Read current position of device and encoder (if applicable) in user units.

Returns:

Position as dict with fields position, encoder_position.

property has_calibration
Returns:

Whether an active calibration has been loaded from the controller memory or set during instantiation.

identify()

Return identification information about controller that this device corresponds to.

Returns:

Information as dict with fields manufacturer, manufacturer_id, description, major, `minor, release.

classmethod library_version()

Get libximc version.

Returns:

libximc version

move(steps, microsteps, wait_and_readback=True)

Move device to provided position in steps and microsteps (location = steps * calibration + microsteps * calibration / microsteps_per_step).

Parameters:
  • steps – location to move to in steps.

  • microsteps – sub-location to move to in microsteps.

  • wait_and_readback – whether to wait for move to complete and readback/check new position.

Returns:

Position as dict with fields steps, microsteps if wait_and_readback is True, else None.

move_user(user_units, wait_and_readback=True)

Move device to provided position in user units (location = steps * calibration + microsteps * calibration / microsteps_per_step).

Parameters:
  • user_units – location to move to in currently set user units (default: mm; see __init__()).

  • wait_and_readback – whether to wait for move to complete and readback/check new position.

Returns:

Position as dict with fields position, encoder_position if wait_and_readback is True, else None.

read_calibration()

Read screw pitch, engine steps per revolution, and microstep mode from connected controller, and generate calibration info.

Returns:

Calibration as dict with fields multiplier, microstep_mode.

set_microstep_mode(microstep_mode, skip_calibration_update=False, readback=True)

Set engine microstep mode.

Parameters:
  • microstep_mode – microstep mode to set.

  • skip_calibration_update – if set to True, does not trigger an update of the user units calibration.

  • readback – whether to readback/check new value.

Returns:

Readback microstep mode if readback is True, else None.

set_movement_settings()
wait()

Wait for device to complete current action.

write_profile(profile=None, profile_vendor=None, profile_device=None, skip_calibration_update=False)

Load and/or write profile from deps/custom_profiles/<vendor>/<device> or deps/pyximc_profiles/<vendor>/<device> to connected controller.

Parameters:
  • profile – pyximc profile function (callable) to execute.

  • profile_vendor – vendor of device to fetch profile from deps/(custom|pyximc)_profiles/<vendor>/<device>

  • profile_device – vendor of device to fetch profile from deps/(custom|pyximc)_profiles/<vendor>/<device>

  • skip_calibration_update – if set to True, does not trigger an update of the user units calibration.

property ximc_calibration
Returns:

pyximc.calibration_t object corresponding to current calibration to be used in libximc command_*_calb() methods. Returns None if not has_calibration.

XimcCalibrationError

icicle.ximc_instrument.XimcCalibrationError()

Issue reading or processing calibration procedure for XimcInstrument.

XimcError

icicle.ximc_instrument.XimcError()

Generic libXIMC/XimcInstrument error class.

XimcReadbackError

icicle.ximc_instrument.XimcReadbackError()

Readback inconsistency after sending XimcInstrument command.

XimcResultError

icicle.ximc_instrument.XimcResultError(resultcode, msg=None)

Error returned from libXIMC as pyximc.Result.