Source code for pyipcmini.functions.ion_pump_read_functions

##########################################################################################
#
# Class for read functions of Agilent IPCMini ion pump controller.
#
##########################################################################################
"""Class for read functions of Agilent IPCMini controller."""

from __future__ import annotations

import logging
from typing import TYPE_CHECKING

from .ion_pump_base_functions import PumpBaseFunctions
from .ion_pump_dic import IonPumpDic

if TYPE_CHECKING:
    import serial

##########################################################################################
# All read serial functions
##########################################################################################


[docs]class PumpReadSerialFunctions(PumpBaseFunctions): """Class for serial read functions of Agilent IPCMini controller.""" def __init__(self, serial_connection: serial.Serial) -> None: """Initialize PumpReadSerialFunctions. Parameters ---------- serial_connection : serial.Serial The USB serial connection for the IPCMini. """ self.logger = logging.getLogger("PUMP read serial") self.logger.debug("__init__") super().__init__(serial_connection)
[docs] def read_baud_rate(self) -> int: """Read serial baud rate. Returns ------- int Baud rate [1=1200 ; 2=2400 ; 3=4800 ; 4=9600]. """ self.logger.debug("read_baud_rate") answer = self.send_read_request("Baud rate") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) result = IonPumpDic.dic_baud_rate[result] return result
[docs] def read_rs485_address(self) -> int: """Read RS485 serial address. Returns ------- int Address [0-31]. """ self.logger.debug("read_rs485_address") answer = self.send_read_request("RS485 address") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) return result
[docs] def read_serial_type(self) -> str: """Read serial type select. Returns ------- str Serial type [RS232 ; RS485]. """ self.logger.debug("read_serial_type") answer = self.send_read_request("Serial type") result = "" if answer is not None: result = bool(int(answer[6:-3].decode("ascii"))) result = IonPumpDic.dic_serial_type[result] return result
########################################################################################## # All read ID functions ##########################################################################################
[docs]class PumpReadIdFunctions(PumpBaseFunctions): """Class for ID read functions of Agilent IPCMini controller.""" def __init__(self, serial_connection: serial.Serial) -> None: """Initialize PumpReadIdFunctions. Parameters ---------- serial_connection : serial.Serial The USB serial connection for the IPCMini. """ self.logger = logging.getLogger("PUMP read ID") self.logger.debug("__init__") super().__init__(serial_connection)
[docs] def read_serial_number(self) -> str: """Read device serial number. Returns ------- str Device serial number. """ self.logger.debug("read_serial_number") answer = self.send_read_request("Serial number") result = "" if answer is not None: result = answer[6:-3].decode("ascii") return result
[docs] def read_device_number(self) -> str: """Read device number. Returns ------- str Device number giving the pump type, see parent_pump.dic_device_number. """ self.logger.debug("read_device_number") answer = self.send_read_request("Device number") result = "" if answer is not None: result = int(answer[6:-3].decode("ascii")) result = IonPumpDic.dic_device_number[result] return result
[docs] def read_label(self) -> str: """Read device label. Returns ------- str Device label. """ self.logger.debug("read_label") answer = self.send_read_request("Label") result = None if answer is not None: result = answer[6:-3].decode("ascii") return result
########################################################################################## # All read functions ##########################################################################################
[docs]class PumpReadFunctions(PumpReadSerialFunctions, PumpReadIdFunctions): """Class for read functions of Agilent IPCMini controller.""" def __init__(self, serial_connection: serial.Serial) -> None: """Initialize PumpReadFunctions. Parameters ---------- serial_connection : serial.Serial The USB serial connection for the IPCMini. """ self.logger = logging.getLogger("PUMP read") self.logger.debug("__init__") super().__init__(serial_connection) self.dic_read_functions = { "Mode": self.read_mode, "HV ON/OFF": self.read_hv_on_off, "Baud rate": self.read_baud_rate, "Status": self.read_status, "Error code": self.read_error_code, "Model": self.read_controller_model, "Serial number": self.read_serial_number, "RS485 address": self.read_rs485_address, "Serial type": self.read_serial_type, "Unit pressure": self.read_unit_pressure, "Autostart": self.read_autostart, "Protect": self.read_protect, "Fixed/step": self.read_fixed_step, "Device number": self.read_device_number, "Max power": self.read_max_power, "V target": self.read_voltage_target, "I protect": self.read_current_protect, "Set point": self.read_setpoint, "Temperature power section": self.read_temperature_power_section, "Temperature internal controller": self.read_temperature_internal_controller, "Status set point": self.read_status_setpoint, "V measured": self.read_voltage_measured, "I measured": self.read_current_measured, "Pressure": self.read_pressure, "Label": self.read_label, }
[docs] def read_mode(self) -> str: """Read the communication mode. Returns ------- str Mode, see parent_pump.dic_mode. """ self.logger.debug("read_mode") answer = self.send_read_request("Mode") result = "" if answer is not None: result = int(answer[6:-3].decode("ascii")) result = IonPumpDic.dic_mode[result] return result
[docs] def read_hv_on_off(self) -> bool: """Read HV status. Returns ------- bool HV status [0=OFF ; 1=ON]. """ self.logger.debug("read_hv_on_off") answer = self.send_read_request("HV ON/OFF") result = None if answer is not None: result = bool(int(answer[6:-3].decode("ascii"))) return result
[docs] def read_status(self) -> int: """Read status. Returns ------- int Status [0=OK ; 5=HV ON ; 6=Fail]. """ self.logger.debug("read_status") answer = self.send_read_request("Status") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) return result
[docs] def read_error_code(self) -> int: """Read error code. Returns ------- int Error code [0=No error ; 4=Over Temperature ; 32=Interlock cable ; 64=ShortCircuit ; 128=Protect]. """ self.logger.debug("read_error_code") answer = self.send_read_request("Error code") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) return result
[docs] def read_controller_model(self) -> str: """Read controller model. Returns ------- str Controller model. """ self.logger.debug("read_controller_model") answer = self.send_read_request("Model") result = "" if answer is not None: result = answer[6:-3].decode("ascii") return result
[docs] def read_unit_pressure(self) -> str: """Read unit pressure. Returns ------- str Unit pressure, see parent_pump.dic_pressure_unit. """ self.logger.debug("read_unit_pressure") answer = self.send_read_request("Unit pressure") result = "" if answer is not None: result = int(answer[6:-3].decode("ascii")) result = IonPumpDic.dic_pressure_unit[result] return result
[docs] def read_autostart(self) -> bool: """Read autostart status. Returns ------- bool Autostart status [0=disabled ; 1=enabled]. """ self.logger.debug("read_autostart") answer = self.send_read_request("Autostart") result = None if answer is not None: result = bool(int(answer[6:-3].decode("ascii"))) return result
[docs] def read_protect(self) -> bool: """Read protect status. Returns ------- bool Protect status [0=disabled ; 1=enabled]. """ self.logger.debug("read_protect") answer = self.send_read_request("Protect") result = None if answer is not None: result = bool(int(answer[6:-3].decode("ascii"))) return result
[docs] def read_fixed_step(self) -> bool: """Read fixed/step status. Returns ------- bool Fixed/step status [0=disabled ; 1=enabled]. """ self.logger.debug("read_fixed_step") answer = self.send_read_request("Fixed/step") result = None if answer is not None: result = bool(int(answer[6:-3].decode("ascii"))) return result
[docs] def read_max_power(self) -> int: """Read max power. Returns ------- int Power (in W). """ self.logger.debug("read_max_power") answer = self.send_read_request("Max power") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) return result
[docs] def read_voltage_target(self) -> int: """Read target voltage. Returns ------- int Voltage (in V). """ self.logger.debug("read_voltage_target") answer = self.send_read_request("V target") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) return result
[docs] def read_current_protect(self) -> int: """Read protect current. Returns ------- int Current (in microA). """ self.logger.debug("read_current_protect") answer = self.send_read_request("I protect") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) return result
[docs] def read_setpoint(self) -> float: """Read set point current. Returns ------- float Set point (in A). """ self.logger.debug("read_setpoint") answer = self.send_read_request("Set point") result = None if answer is not None: result = float(answer[6:-3].decode("ascii")) return result
[docs] def read_temperature_power_section(self) -> float: """Read temperature of power section. Returns ------- float Temperature (in degC). """ self.logger.debug("read_temperature_power_section") answer = self.send_read_request("Temperature power section") result = None if answer is not None: result = float(answer[6:-3].decode("ascii")) result = result / 10.0 return result
[docs] def read_temperature_internal_controller(self) -> float: """Read temperature of internal controller. Returns ------- float Temperature (in degC). """ self.logger.debug("read_temperature_internal_controller") answer = self.send_read_request("Temperature internal controller") result = None if answer is not None: result = float(answer[6:-3].decode("ascii")) result = result / 10.0 return result
[docs] def read_status_setpoint(self) -> bool: """Read set point status. Returns ------- bool Set point status [0=OFF ; 1=ON]. """ self.logger.debug("read_status_setpoint") answer = self.send_read_request("Status set point") result = None if answer is not None: result = bool(int(answer[6:-3].decode("ascii"))) return result
[docs] def read_voltage_measured(self) -> int: """Read measured voltage. Returns ------- int Voltage (in V). """ self.logger.debug("read_voltage_measured") answer = self.send_read_request("V measured") result = None if answer is not None: result = int(answer[6:-3].decode("ascii")) return result
[docs] def read_current_measured(self) -> float: """Read measured current. Returns ------- float Current (in A). """ self.logger.debug("read_current_measured") answer = self.send_read_request("I measured") result = None if answer is not None: result = float(answer[6:-3].decode("ascii")) return result
[docs] def read_pressure(self) -> float: """Read measured pressure. Returns ------- float Pressure (in pressure unit). """ self.logger.debug("read_pressure") answer = self.send_read_request("Pressure") result = None if answer is not None: result = float(answer[6:-3].decode("ascii")) return result