TECAN Cavro XLP6000

PyLabware driver for the TECAN Cavro XLP 6000 syringe pump with integrated valve.

class PyLabware.devices.tecan_cavro_xlp6000.XLP6000SyringePump(device_name, connection_mode, address, port, switch_address, syringe_size=None, valve_type='3PORT_DISTR_IO')[source]

Bases: AbstractSyringePump, AbstractDistributionValve

This provides a Python class for the TECAN XLP6000 syringe pump based on the the original operation manual 8694-12 E

Default constructor.

Parameters:
  • device_name (str) –

  • connection_mode (str) –

  • address (str | None) –

  • port (str | int) –

  • switch_address (int | str) –

  • syringe_size (float | None) –

  • valve_type (str) –

BUS_DEVICES = {}
property autorun

Property showing if the commands should be executed immediately, or queued instead.

calibrate_volume()[source]

Runs interactive volume calibration to set steps_per_ml coefficient correctly.

check_errors()[source]

Checks error bits in the status byte of the pump reply.

clear_errors()[source]

Happens automatically upon errors read-out, except those requiring pump re-initialization.

connect()[source]

Checks whether the connection has been already opened, if not - opens it.

disconnect()[source]

Checks whether we are the last device using this port. If yes - closes the connection. If not - decreases the reference count.

dispense(volume_ml, set_busy=True)[source]

Makes relative dispense.

Parameters:
  • volume_ml (float) –

  • set_busy (bool) –

get_plunger_position()[source]

Returns absolute plunger position.

Return type:

int

get_pump_configuration()[source]

Reads pump EEPROM configuration.

get_speed()[source]

Gets the dispensing speed.

get_status()[source]

Not supported on this device.

get_valve_position()[source]

Reads current position of the valve.

Return type:

str

initialize_device(valve_enumeration_direction='CW', input_port=None, output_port=None)[source]

Runs pump initialization.

is_connected()[source]

Checks whether the device is connected by checking it’s firmware version.

Return type:

bool

is_idle()[source]

Checks if pump is in idle state.

Return type:

bool

is_initialized()[source]

Check if pump has been initialized properly after power-up.

Return type:

bool

move_home()[source]

Moves the plunger to home position.

move_plunger_absolute(position, set_busy=True)[source]

Makes absolute plunger move.

Parameters:
  • position (int) –

  • set_busy (bool) –

move_plunger_relative(position, set_busy=True)[source]

Makes relative plunger move. This is a wrapper for dispense()/withdraw().

Parameters:
  • position (int) –

  • set_busy (bool) –

parse_reply(cmd, reply)[source]

Overloaded method from base class. We need to do some more complex processing here for the status byte manipulations.

Parameters:
  • cmd (Dict) –

  • reply (Any) –

Return type:

str

prime_pump(port, cycles=2, increments=2000)[source]

Primes the tubing and syringe to displace air

Parameters:
  • port (str) –

  • cycles (int) –

  • increments (int) –

Return type:

None

set_predefined_speed(velocity_code)[source]

Sets maximum velocity (top of the ramp) for the syringe motor.

Parameters:

velocity_code (int) –

set_ramp_slope(ramp_code)[source]

Sets slope of acceleration/deceleration ramp for the syringe motor.

Parameters:

ramp_code (str) –

set_resolution_mode(resolution_mode)[source]

Sets plunger resolution mode.

Parameters:

resolution_mode (str) –

set_speed(speed)[source]

Sets maximum velocity (top of the ramp) for the syringe motor.

Parameters:

speed (int) –

set_start_velocity(start_velocity)[source]

Sets starting velocity for the syringe motor.

Parameters:

start_velocity (int) –

set_stop_velocity(stop_velocity)[source]

Sets stopping velocity for the syringe motor.

Parameters:

stop_velocity (int) –

set_valve_position(requested_position)[source]

Sets the distribution valve position.

Parameters:

requested_position (str) –

set_valve_type(valve_type, confirm=False)[source]

Sets valve type. This command requires power-cycle to activate new settings!

Parameters:
  • valve_type (str) –

  • confirm (bool) –

start()[source]

Starts program execution.

property steps_per_ml
stop()[source]

Stops executing current program/action immediately.

property syringe_size
transfer(port_from, port_to, volume_ml)[source]

Transfers the required amount in mL from <port_from> to <port_to>.

Parameters:
  • port_from (str) –

  • port_to (str) –

withdraw(volume_ml, set_busy=True)[source]

Makes relative aspiration.

Parameters:
  • volume_ml (float) –

  • set_busy (bool) –

class PyLabware.devices.tecan_cavro_xlp6000.XLP6000SyringePumpCommands(*args, **kwargs)[source]

Bases: LabDeviceCommands

Collection of command definitions for XLP6000 pump, DT protocol.

This class shouldn’t be instantiated

DEFAULT_STATUS = '`'
ERROR_CODES = {0: 'No error.', 1: 'Initialization failure!', 2: 'Invalid command!', 3: 'Invalid operand!', 6: 'EEPROM failure!', 7: 'Device not initialized!', 8: 'Internal failure!', 9: 'Plunger overload!', 10: 'Valve overload', 11: 'Plunger move not allowed! Check valve position.', 12: 'Internal failure!', 14: 'ADC failure!', 15: 'Command overflow!'}
GET_BACK_INC = {'name': '?12', 'reply': {'type': <class 'str'>}}
GET_EEPROM_DATA = {'name': '?76', 'reply': {'type': <class 'str'>}}
GET_FW_VER = {'name': '?23', 'reply': {'type': <class 'str'>}}
GET_MAX_VEL = {'name': '?2', 'reply': {'type': <class 'str'>}}
GET_RES_MODE = {'name': '?28', 'reply': {'type': <class 'str'>}}
GET_START_VEL = {'name': '?1', 'reply': {'type': <class 'str'>}}
GET_STATUS = {'name': 'Q', 'reply': {'type': <class 'str'>}}
GET_STEP_RAMP = {'name': '?25', 'reply': {'type': <class 'str'>}}
GET_STOP_VEL = {'name': '?3', 'reply': {'type': <class 'str'>}}
GET_SYR_POS = {'name': '?', 'reply': {'type': <class 'int'>}}
GET_VALVE_POS = {'name': '?6', 'reply': {'parser': <method 'upper' of 'str' objects>, 'type': <class 'str'>}}
GET_VOLT = {'name': '*', 'reply': {'type': <class 'int'>}}
INIT_ALL_CCW = {'name': 'Y', 'reply': {'type': <class 'str'>}}
INIT_ALL_CW = {'name': 'Z', 'reply': {'type': <class 'str'>}}
INIT_SYRINGE = {'name': 'W', 'reply': {'type': <class 'str'>}}
INIT_VALVE = {'name': 'w', 'reply': {'type': <class 'str'>}}
PRG_DELAY_EXEC = {'name': 'M'}
PRG_EEPROM_EXEC = {'name': 'e', 'reply': {'type': <class 'str'>}}
PRG_EEPROM_ST = {'name': 's', 'reply': {'type': <class 'str'>}}
PRG_HALT = {'name': 'H', 'reply': {'type': <class 'str'>}}
PRG_MARK_LOOP_END = {'name': 'G'}
PRG_MARK_LOOP_START = {'name': 'g'}
PRG_RPT_LAST = {'name': 'X', 'reply': {'type': <class 'str'>}}
PRG_RUN = {'name': 'R', 'reply': {'type': <class 'str'>}}
PRG_TERM = {'name': 'T', 'reply': {'type': <class 'str'>}}
RAMP_SLOPE_MODES = {'1': [2500, 20000], '10': [25000, 200000], '11': [27500, 220000], '12': [30000, 240000], '13': [32500, 260000], '14': [35000, 280000], '15': [37500, 300000], '16': [40000, 320000], '17': [42500, 340000], '18': [45000, 360000], '19': [47500, 380000], '2': [5000, 40000], '20': [50000, 400000], '3': [7500, 60000], '4': [10000, 80000], '5': [12500, 100000], '6': [15000, 120000], '7': [17500, 140000], '8': [20000, 160000], '9': [22500, 180000]}
RESOLUTION_MODES = {0: 3000, 1: 48000, 2: 48000}
SET_DEAD_VOL = {'name': 'k', 'reply': {'type': <class 'str'>}}
SET_EEPROM = {'name': 'U', 'reply': {'type': <class 'str'>}}
SET_EXT_OUT = {'name': 'J', 'reply': {'type': <class 'str'>}}
SET_MAX_VEL = {'check': {'max': 48000, 'min': 1}, 'name': 'V', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SET_MAX_VEL_CODE = {'check': {'values': dict_keys(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40'])}, 'name': 'S', 'reply': {'type': <class 'str'>}, 'type': <class 'str'>}
SET_RAMP_SLOPE = {'check': {'values': dict_keys(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20'])}, 'name': 'L', 'type': <class 'str'>}
SET_RES_MODE = {'check': {'values': dict_keys([0, 1, 2])}, 'name': 'N', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SET_START_VEL = {'check': {'max': 8000, 'min': 1}, 'name': 'v', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SET_STOP_VEL = {'check': {'max': 21600, 'min': 1}, 'name': 'c', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SPEED_MODES = {'0': [6000, 48000], '1': [5600, 44800], '10': [1600, 12800], '11': [1400, 11200], '12': [1200, 9600], '13': [1000, 8000], '14': [800, 6400], '15': [600, 4800], '16': [400, 3200], '17': [200, 1600], '18': [190, 1520], '19': [180, 1440], '2': [5000, 40000], '20': [170, 1360], '21': [160, 1280], '22': [150, 1200], '23': [140, 1120], '24': [130, 1040], '25': [120, 960], '26': [110, 880], '27': [100, 800], '28': [90, 720], '29': [80, 640], '3': [4400, 35200], '30': [70, 560], '31': [60, 480], '32': [50, 400], '33': [40, 320], '34': [30, 240], '35': [20, 160], '36': [18, 144], '37': [16, 128], '38': [14, 112], '39': [12, 96], '4': [3800, 30400], '40': [10, 80], '5': [3200, 25600], '6': [2600, 20800], '7': [2200, 17600], '8': [2000, 16000], '9': [1800, 14400]}
SWITCH_ADDRESSES = {'0': '1', '1': '2', '2': '3', '3': '4', '4': '5', '5': '6', '6': '7', '7': '8', '8': '9', '9': ':', 'A': ';', 'B': '<', 'C': '=', 'D': '>', 'E': '?', 'all': '-'}
SYR_MOVE_ABS = {'name': 'A', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SYR_MOVE_ABS_NOBUSY = {'name': 'a', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SYR_SPIT_REL = {'name': 'D', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SYR_SPIT_REL_NOBUSY = {'name': 'd', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SYR_SUCK_REL = {'name': 'P', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SYR_SUCK_REL_NOBUSY = {'name': 'p', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
VALVE_MOVE_B = {'name': 'B', 'reply': {'type': <class 'str'>}}
VALVE_MOVE_E = {'name': 'E', 'reply': {'type': <class 'str'>}}
VALVE_MOVE_I = {'check': {'values': ('', '1', '2', '3', '4', '5', '6', '7', '8', '9')}, 'name': 'I', 'reply': {'type': <class 'str'>}}
VALVE_MOVE_O = {'check': {'values': ('', '1', '2', '3', '4', '5', '6', '7', '8', '9')}, 'name': 'O', 'reply': {'type': <class 'str'>}}
VALVE_POSITIONS = ('', '1', '2', '3', '4', '5', '6', '7', '8', '9')
VALVE_TYPES = {'3PORT_DISTR_IO': '11', '3PORT_T': '5', '3PORT_Y': '1', '4PORT_90DEG': '2', '4PORT_LOOP': '9', '4PORT_T': '5', '6PORT_DISTR': '7', '9PORT_DISTR': '8'}