Julabo CF41

PyLabware driver for Julabo CF41 chiller.

class PyLabware.devices.julabo_cf41.CF41Chiller(device_name, connection_mode, address, port)[source]

Bases: AbstractTemperatureController

This provides a Python class for the Julabo CF41 chiller based on the the original operation manual 1.951.4871-V3 11/15 26.11.15

Default constructor

Parameters:
  • device_name (str) –

  • connection_mode (str) –

  • address (str | None) –

  • port (str | int) –

check_errors()[source]

Checks device for errors.

clear_errors()[source]

Not yet implemented. #TODO

get_active_setpoint()[source]

Gets currently active temperature setpoint.

Return type:

int

get_cooling_power()[source]

Returns the value of the chiller cooling power in %

Return type:

int

get_heating_power()[source]

Returns the current heating power in %.

Return type:

float

get_heating_power_setpoint()[source]

Returns the value of the heating power setpoint in %

Return type:

int

get_recirculation_pump_speed()[source]

Returns the recirculation pump speed: 1 (low flow rate) –> 4 (high flow rate)

Return type:

int

get_regulation_mode()[source]

Gets current temperature regulation mdoe.

Return type:

int

get_status()[source]

Gets chiller status.

Return type:

str

get_temperature(sensor=0)[source]

Retrieves the current temperature of the chiller. This can be the internal or external temperature, depending in what mode the chiller is currently operating.

Parameters:

sensor (int) – Specify which temperature probe the setpoint applies to.

Return type:

float

get_temperature_setpoint(sensor=0)[source]

Reads the current temperature setpoint.

Parameters:

sensor (int) – Specify which temperature probe the setpoint applies to. This device uses a shared setpoint for all temperature probes. Hence, this argument has no effect here.

Return type:

float

initialize_device()[source]

This chiller doesn’t have initialization method.

is_connected()[source]

Checks if teh chiller is connected.

Return type:

bool

is_idle()[source]

Returns true if the chiller is off: pump and temperature control

Return type:

bool

ramp_temperature(end_temperature, time)[source]

Ramps chiller temperature from the current temperature to the end_temperature over time.

Parameters:
  • end_temperature (float) –

  • time (float) –

set_cooling_power(cooling_power)[source]

Sets the value of the chiller cooling power in %

Parameters:

cooling_power (int) –

set_heating_power(heating_power=100)[source]

Sets the heating power of the chiller, in percent [10-100%].

Parameters:

heating_power (int) –

set_recirculation_pump_speed(speed)[source]

Sets the recirculation pump speed (4 different speeds allowed).

Parameters:

speed (int) –

set_regulation_mode(mode)[source]

Sets chiller temperature regulation mode.

Parameters:

mode (int) –

set_temperature(temperature, sensor=0)[source]

Sets the target temperature of the chiller.

Parameters:
  • temperature (float) – Temperature setpoint in °C.

  • sensor (int) – Specify which temperature probe the setpoint applies to. The Julabo CF41 chiller has one common setpoint temperature shared by the external and internal probe. Thus, the sensor variable has no effect here.

start_temperature_regulation()[source]

Starts the chiller

stop_temperature_regulation()[source]

Stops the chiller

class PyLabware.devices.julabo_cf41.CF41ChillerCommands(*args, **kwargs)[source]

Bases: LabDeviceCommands

Collection of command definitions for CF41 chiller.

This class shouldn’t be instantiated

CONTROL_DYNAMCIS_MODES = {0: 'APERIODIC', 1: 'STANDARD'}
DEFAULT_NAME = 'JULABO CRYOCOMPACT CF41'
ERRORS = {'-01': 'Coolant level critically low!', '-03': 'Coolant temperature too high!', '-04': 'Coolant temperature too low!', '-05': 'Working temperature sensor short-circuited or open!', '-06': 'Temperature difference between working and safety temperature is above 35°C!', '-07': 'Internal I2C bus error!', '-08': 'Invalid command!', '-09': 'Invalid command in current operating mode!', '-12': 'Internal ADC error!', '-13': 'Set temperature value exceeds safety limits!', '-14': 'Excess temperature protection alarm'}
EXTPROG_MODES = {0: 'EXT_VOLTAGE', 1: 'EXT_CURRENT'}
GET_BAND_LIM_HI = {'name': 'IN_PAR_15', 'reply': {'type': <class 'int'>}}
GET_BAND_LIM_LO = {'name': 'IN_PAR_16', 'reply': {'type': <class 'int'>}}
GET_BATH_BAND_LIMIT = {'name': 'IN_PAR_04', 'reply': {'type': <class 'float'>}}
GET_BATH_TE_EXT = {'name': 'IN_PAR_01', 'reply': {'type': <class 'float'>}}
GET_BATH_TE_INT = {'name': 'IN_PAR_03', 'reply': {'type': <class 'float'>}}
GET_CHILLER_STATE = {'name': 'IN_MODE_05', 'reply': {'type': <class 'int'>}}
GET_DYN_MODE = {'name': 'IN_MODE_08', 'reply': {'type': <class 'int'>}}
GET_EXTPROG_MODE = {'name': 'IN_MODE_03', 'reply': {'type': <class 'int'>}}
GET_EXT_FLOWRATE = {'name': 'IN_SP_08', 'reply': {'type': <class 'float'>}}
GET_HEAT_PWR = {'name': 'IN_PV_01', 'reply': {'type': <class 'float'>}}
GET_MAX_COOL_PWR = {'name': 'IN_HIL_00', 'reply': {'type': <class 'int'>}}
GET_MAX_HEAT_PWR = {'name': 'IN_HIL_01', 'reply': {'type': <class 'int'>}}
GET_NAME = {'name': 'VERSION', 'reply': {'args': [0, 23], 'parser': <function slicer>, 'type': <class 'str'>}}
GET_PKPH0 = {'name': 'IN_PAR_05', 'reply': {'type': <class 'float'>}}
GET_PROP_CAS = {'name': 'IN_PAR_10', 'reply': {'type': <class 'float'>}}
GET_PUMP_SPEED = {'name': 'IN_SP_07', 'reply': {'type': <class 'int'>}}
GET_SELFTUNE_MODE = {'name': 'IN_MODE_02', 'reply': {'type': <class 'int'>}}
GET_SI = {'name': 'IN_PAR_02', 'reply': {'type': <class 'float'>}}
GET_STATUS = {'name': 'STATUS', 'reply': {'args': [0, 2], 'parser': <function slicer>, 'type': <class 'str'>}}
GET_TEMP_CAS_MAX = {'name': 'IN_PAR_13', 'reply': {'type': <class 'float'>}}
GET_TEMP_CAS_MIN = {'name': 'IN_PAR_14', 'reply': {'type': <class 'float'>}}
GET_TEMP_DELTA = {'name': 'IN_PAR_00', 'reply': {'type': <class 'float'>}}
GET_TEMP_EXT = {'name': 'IN_PV_02', 'reply': {'type': <class 'float'>}}
GET_TEMP_EXTPROG = {'name': 'IN_SP_05', 'reply': {'type': <class 'float'>}}
GET_TEMP_INT = {'name': 'IN_PV_00', 'reply': {'type': <class 'float'>}}
GET_TEMP_LIM_HI = {'name': 'IN_SP_03', 'reply': {'type': <class 'float'>}}
GET_TEMP_LIM_LO = {'name': 'IN_SP_04', 'reply': {'type': <class 'float'>}}
GET_TEMP_REG_MODE = {'name': 'IN_MODE_04', 'reply': {'type': <class 'int'>}}
GET_TEMP_SAFE = {'name': 'IN_PV_03', 'reply': {'type': <class 'float'>}}
GET_TEMP_SAFE_SET = {'name': 'IN_PV_04', 'reply': {'type': <class 'float'>}}
GET_TEMP_SP = {'name': 'IN_MODE_01', 'reply': {'type': <class 'int'>}}
GET_TEMP_SP1 = {'name': 'IN_SP_00', 'reply': {'type': <class 'float'>}}
GET_TEMP_SP2 = {'name': 'IN_SP_01', 'reply': {'type': <class 'float'>}}
GET_TEMP_SP3 = {'name': 'IN_SP_02', 'reply': {'type': <class 'float'>}}
GET_TEMP_UNITS = {'name': 'IN_SP_06', 'reply': {'type': <class 'float'>}}
GET_TN_CAS = {'name': 'IN_PAR_11', 'reply': {'type': <class 'int'>}}
GET_TN_INT = {'name': 'IN_PAR_07', 'reply': {'type': <class 'int'>}}
GET_TV_CAS = {'name': 'IN_PAR_12', 'reply': {'type': <class 'int'>}}
GET_TV_INT = {'name': 'IN_PAR_08', 'reply': {'type': <class 'int'>}}
GET_VERSION = {'name': 'VERSION', 'reply': {'args': [-3], 'parser': <function slicer>, 'type': <class 'str'>}}
GET_XP_CAS = {'name': 'IN_PAR_09', 'reply': {'type': <class 'float'>}}
GET_XP_INT = {'name': 'IN_PAR_06', 'reply': {'type': <class 'float'>}}
PUMP_SPEED_MODES = [1, 2, 3, 4]
REGULATION_MODES = {0: 'INTERNAL', 1: 'EXTERNAL'}
SELFTUNE_MODES = {0: 'SELFTUNE_OFF', 1: 'SELFTUNE_ONCE', 2: 'SELFTUNE_ALWAYS'}
SETPOINT_MODES = {0: 'SP1', 1: 'SP2', 2: 'SP3'}
SET_BAND_LIM_HI = {'check': {'max': 200, 'min': 0}, 'name': 'OUT_PAR_15', 'type': <class 'int'>}
SET_BAND_LIM_LO = {'check': {'max': 200, 'min': 0}, 'name': 'OUT_PAR_16', 'type': <class 'int'>}
SET_CONTROL_MODE = {'check': {'values': {0: 'APERIODIC', 1: 'STANDARD'}}, 'name': 'OUT_MODE_08', 'type': <class 'int'>}
SET_COSPEED_EXT = {'check': {'max': 5, 'min': 0}, 'name': 'OUT_PAR_04', 'type': <class 'float'>}
SET_EXTPROG_MODE = {'check': {'values': {0: 'EXT_VOLTAGE', 1: 'EXT_CURRENT'}}, 'name': 'OUT_MODE_03', 'type': <class 'int'>}
SET_HEATER_VALUE = {'check': {'max': 100, 'min': -100}, 'name': 'OUT_SP_06', 'type': <class 'int'>}
SET_MAX_COOL_PWR = {'check': {'max': 0, 'min': -100}, 'name': 'OUT_HIL_00', 'type': <class 'int'>}
SET_MAX_HEAT_PWR = {'check': {'max': 100, 'min': 10}, 'name': 'OUT_HIL_01', 'type': <class 'int'>}
SET_PROP_CAS = {'check': {'max': 99.9, 'min': 1}, 'name': 'OUT_PAR_10', 'type': <class 'float'>}
SET_PUMP_SPEED = {'check': {'values': [1, 2, 3, 4]}, 'name': 'OUT_SP_07', 'type': <class 'int'>}
SET_SELFTUNE_MODE = {'check': {'values': {0: 'SELFTUNE_OFF', 1: 'SELFTUNE_ONCE', 2: 'SELFTUNE_ALWAYS'}}, 'name': 'OUT_MODE_02', 'type': <class 'int'>}
SET_TEMP_CAS_MAX = {'name': 'OUT_PAR_13', 'type': <class 'float'>}
SET_TEMP_CAS_MIN = {'name': 'OUT_PAR_14', 'type': <class 'float'>}
SET_TEMP_LIM_HI = {'check': {'max': 190, 'min': 20}, 'name': 'OUT_SP_03', 'type': <class 'float'>}
SET_TEMP_LIM_LO = {'check': {'max': 19, 'min': -40}, 'name': 'OUT_SP_04', 'type': <class 'float'>}
SET_TEMP_REG_MODE = {'check': {'values': {0: 'INTERNAL', 1: 'EXTERNAL'}}, 'name': 'OUT_MODE_04', 'type': <class 'int'>}
SET_TEMP_SP = {'check': {'values': {0: 'SP1', 1: 'SP2', 2: 'SP3'}}, 'name': 'OUT_MODE_01', 'type': <class 'int'>}
SET_TEMP_SP1 = {'check': {'max': 110, 'min': -40}, 'name': 'OUT_SP_00', 'type': <class 'float'>}
SET_TEMP_SP2 = {'check': {'max': 110, 'min': -40}, 'name': 'OUT_SP_01', 'type': <class 'float'>}
SET_TEMP_SP3 = {'check': {'max': 110, 'min': -40}, 'name': 'OUT_SP_02', 'type': <class 'float'>}
SET_TN_CAS = {'check': {'max': 9999, 'min': 3}, 'name': 'OUT_PAR_11', 'type': <class 'int'>}
SET_TN_INT = {'check': {'max': 9999, 'min': 3}, 'name': 'OUT_PAR_07', 'type': <class 'int'>}
SET_TV_CAS = {'check': {'max': 999, 'min': 0}, 'name': 'OUT_PAR_12', 'type': <class 'int'>}
SET_TV_INT = {'check': {'max': 999, 'min': 0}, 'name': 'OUT_PAR_08', 'type': <class 'int'>}
SET_XP_CAS = {'check': {'max': 99.9, 'min': 0.1}, 'name': 'OUT_PAR_09', 'type': <class 'float'>}
SET_XP_INT = {'check': {'max': 99.9, 'min': 0.1}, 'name': 'OUT_PAR_06', 'type': <class 'float'>}
START_CHILLER = {'name': 'OUT_MODE_05 1'}
STATUSES = {'00': 'STOPPED', '01': 'STARTED', '02': 'STOPPED', '03': 'STARTED'}
STOP_CHILLER = {'name': 'OUT_MODE_05 0'}
WARNINGS = {'-10': 'Entered value too small!', '-11': 'Entered value too large!', '-15': 'External control selected, but Pt100 sensor not connected.', '-20': 'Check air cooled condenser.', '-21': 'Compressor stage 1 does not work.', '-26': 'Stand-by plug is missing.', '-33': 'Safety temperature sensor short-circuited or open!', '-38': 'External Pt100 sensor error!', '-40': 'Coolant level low'}