Tricontinent C3000

PyLabware driver for Tricontinent С3000 syringe pump with integrated valve.

class PyLabware.devices.tricontinent_c3000.C3000SyringePump(device_name, connection_mode, address, port, switch_address=None, valve_type='3PORT_DISTR_IOBE')[source]

Bases: AbstractSyringePump, AbstractDistributionValve

This provides a Python class for the Tricontinent C3000 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 (str | int | None) –

  • valve_type (str) –

property autorun

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

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.

dispense(increments, set_busy=True)[source]

Makes relative dispense.

Parameters:
  • increments (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

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.

stop()[source]

Stops executing current program/action immediately.

withdraw(increments, set_busy=True)[source]

Makes relative aspiration.

Parameters:
  • increments (float) –

  • set_busy (bool) –

class PyLabware.devices.tricontinent_c3000.C3000SyringePumpCommands(*args, **kwargs)[source]

Bases: LabDeviceCommands

Collection of command definitions for C3000 pump, DT protocol.

This class shouldn’t be instantiated

DEFAULT_STATUS = '/0`1'
ERROR_CODES = {0: 'No error.', 1: 'Initialization failure!', 2: 'Invalid command!', 3: 'Invalid operand!', 4: 'Invalid checksum!', 6: 'EEPROM failure!', 7: 'Device not initialized!', 8: 'CAN bus failure!', 9: 'Plunger overload!', 10: 'Valve overload!', 11: 'Plunger move not allowed! Check valve position.', 15: 'Command overflow!'}
GET_BACK_INC = {'name': '?12', 'reply': {'type': <class 'str'>}}
GET_EEPROM_DATA = {'name': '?27', 'reply': {'args': [5], 'parser': <function slicer>}}
GET_FW_VER = {'name': '?23', 'reply': {'type': <class 'str'>}}
GET_INIT_STATUS = {'name': '?19', 'reply': {'type': <class 'bool'>}}
GET_MAX_VEL = {'name': '?2', 'reply': {'type': <class 'str'>}}
GET_MOT_HOLD = {'name': '?25', 'reply': {'type': <class 'str'>}}
GET_MOT_RUN = {'name': '?26', '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': '?7', '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'>}}
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_PLOPE_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 = {'N0': 3000, 'N1': 24000, 'N2': 24000}
SET_BACK_INC = {'name': 'K', 'reply': {'type': <class 'str'>}}
SET_CALIB_CONF = {'name': 'u'}
SET_EXT_OUT = {'name': 'J', 'reply': {'type': <class 'str'>}}
SET_EXT_OUT_COND = {'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_MOT_HOLD = {'name': 'h', 'reply': {'type': <class 'str'>}}
SET_MOT_RUN = {'name': 'm', 'reply': {'type': <class 'str'>}}
SET_POS_CTR = {'name': 'z', 'reply': {'type': <class 'str'>}}
SET_PUMP_CONF = {'name': 'U'}
SET_RAMP_PLOPE = {'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(['N0', 'N1', 'N2'])}, 'name': 'N', 'reply': {'type': <class 'str'>}, 'type': <class 'str'>}
SET_START_VEL = {'check': {'max': 8000, 'min': 1}, 'name': 'v', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SET_STOP_STEPS = {'name': 'C', 'reply': {'type': <class 'str'>}}
SET_STOP_VEL = {'check': {'max': 21600, 'min': 1}, 'name': 'c', 'reply': {'type': <class 'str'>}, 'type': <class 'int'>}
SET_SYR_GAP = {'name': 'R', 'reply': {'type': <class 'str'>}}
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'>}}
SYR_MOVE_ABS_NOBUSY = {'name': 'a', 'reply': {'type': <class 'str'>}}
SYR_SPIT_REL = {'name': 'D', 'reply': {'type': <class 'str'>}}
SYR_SPIT_REL_NOBUSY = {'name': 'd', 'reply': {'type': <class 'str'>}}
SYR_SUCK_REL = {'name': 'P', 'reply': {'type': <class 'str'>}}
SYR_SUCK_REL_NOBUSY = {'name': 'p', 'reply': {'type': <class 'str'>}}
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')}, 'name': 'I', 'reply': {'type': <class 'str'>}}
VALVE_MOVE_O = {'check': {'values': ('', '1', '2', '3', '4', '5', '6')}, 'name': 'O', 'reply': {'type': <class 'str'>}}
VALVE_POSITIONS = ('', '1', '2', '3', '4', '5', '6')
VALVE_TYPES = {'3PORT_DISTR_IO': '11', '3PORT_DISTR_IOBE': '4', '3PORT_T': '5', '3PORT_Y': '1', '4PORT_90DEG': '2', '4PORT_LOOP': '9', '4PORT_T': '5', '6PORT_DISTR': '7'}