Index: leahi_dialin/td/modules/syringe_pump.py =================================================================== diff -u -r60a4cdf7272161c64bb60aac93b26acf50465494 -r3f4937e339925dde0b95f08e49969f8983c5cba4 --- leahi_dialin/td/modules/syringe_pump.py (.../syringe_pump.py) (revision 60a4cdf7272161c64bb60aac93b26acf50465494) +++ leahi_dialin/td/modules/syringe_pump.py (.../syringe_pump.py) (revision 3f4937e339925dde0b95f08e49969f8983c5cba4) @@ -13,13 +13,15 @@ # @date (original) 12-Mar-2021 # ############################################################################ -import struct + +# Module imports from logging import Logger +# Project imports from leahi_dialin.common.constants import RESET, NO_RESET from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.td_defs import TDTreaHeparinStates, TDTreaSyringePumpStates, SyringePumpOperations -from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.msg_ids import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import CanMessenger, CanChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -47,23 +49,195 @@ message_id = MsgIds.MSG_ID_TD_SYRINGE_PUMP_DATA.value, function = self._handler_syringe_pump_data) - self.syringe_pump_state = TDTreaSyringePumpStates.SYRINGE_PUMP_INIT_STATE.value #: current syringe pump state - self.heparin_state = TDTreaHeparinStates.HEPARIN_STATE_OFF.value #: current heparin state - self.syringe_pump_set_rate_ml_hr = 0.0 #: current set syringe pump rate. - self.syringe_pump_meas_rate_ml_hr = 0.0 #: current measured syringe pump rate. - self.syringe_pump_position = 0 #: current syringe pump position. - self.syringe_pump_volume_ml = 0.0 #: current syringe pump volume delivered in ml. - self.syringe_pump_safety_volume_ml = 0.0 #: current syringe pump safety volume reading - self.syringe_pump_home_v = 0.0 #: current syringe pump home voltage reading - self.syringe_pump_switch_v = 0.0 #: current syringe pump switch voltage reading - self.syringe_pump_force_v = 0.0 #: current syringe pump force voltage reading - self.syringe_pump_status = 0 #: current syringe pump status - self.syringe_pump_encoder_status = 0 #: current syringe pump encoder status - self.syringe_pump_adc_dac_status = 0 #: current syringe pump ADC & DAC status - self.syringe_pump_adc_read_counter = 0 #: current syringe pump ADC read counter + self.syringe_pump_state = TDTreaSyringePumpStates.SYRINGE_PUMP_INIT_STATE.value + self.heparin_state = TDTreaHeparinStates.HEPARIN_STATE_OFF.value + self.syringe_pump_set_rate_ml_hr = 0.0 + self.syringe_pump_meas_rate_ml_hr = 0.0 + self.syringe_pump_position = 0 + self.syringe_pump_volume_ml = 0.0 + self.syringe_pump_safety_volume_ml = 0.0 + self.syringe_pump_home_v = 0.0 + self.syringe_pump_switch_v = 0.0 + self.syringe_pump_force_v = 0.0 + self.syringe_pump_status = 0 + self.syringe_pump_encoder_status = 0 + self.syringe_pump_adc_dac_status = 0 + self.syringe_pump_adc_read_counter = 0 self.td_syringe_pump_timestamp = 0.0 #: The timestamp of the syringe pump message + +# ============================================================ Properties ============================================================ + @property + def syringe_pump_state(self) -> int: + """ + The current Srynge Pump State + """ + return self._syringe_pump_state + + @syringe_pump_state.setter + def syringe_pump_state(self, value): + self._syringe_pump_state = value + + + @property + def heparin_state(self) -> int: + """ + The current Heparin State + """ + return self._heparin_state + + @heparin_state.setter + def heparin_state(self, value): + self._heparin_state = value + + + @property + def syringe_pump_set_rate_ml_hr(self) -> float: + """ + The current Set Syringe Pump rate + """ + return self._syringe_pump_set_rate_ml_hr + + @syringe_pump_set_rate_ml_hr.setter + def syringe_pump_set_rate_ml_hr(self, value): + self._syringe_pump_set_rate_ml_hr = value + + + @property + def syringe_pump_meas_rate_ml_hr(self) -> float: + """ + The current Measured Syringe Pump rate + """ + return self._syringe_pump_meas_rate_ml_hr + + @syringe_pump_meas_rate_ml_hr.setter + def syringe_pump_meas_rate_ml_hr(self, value): + self._syringe_pump_meas_rate_ml_hr = value + + + @property + def syringe_pump_position(self) -> int: + """ + The current Syringe Pump position + """ + return self._syringe_pump_position + + @syringe_pump_position.setter + def syringe_pump_position(self, value): + self._syringe_pump_position = value + + + @property + def syringe_pump_volume_ml(self) -> float: + """ + The current Syringe Pump volume delivered in ml + """ + return self._syringe_pump_volume_ml + + @syringe_pump_volume_ml.setter + def syringe_pump_volume_ml(self, value): + self._syringe_pump_volume_ml = value + + + @property + def syringe_pump_safety_volume_ml(self) -> float: + """ + The current Syringe Pump safety volume reading + """ + return self._syringe_pump_safety_volume_ml + + @syringe_pump_safety_volume_ml.setter + def syringe_pump_safety_volume_ml(self, value): + self._syringe_pump_safety_volume_ml = value + + + @property + def syringe_pump_home_v(self) -> float: + """ + The current Syringe Pump home voltage reading + """ + return self._syringe_pump_home_v + + @syringe_pump_home_v.setter + def syringe_pump_home_v(self, value): + self._syringe_pump_home_v = value + + + @property + def syringe_pump_switch_v(self) -> float: + """ + The current Syringe Pump switch voltage reading + """ + return self._syringe_pump_switch_v + + @syringe_pump_switch_v.setter + def syringe_pump_switch_v(self, value): + self._syringe_pump_switch_v = value + + + @property + def syringe_pump_force_v(self) -> float: + """ + The current Syringe Pump force voltage reading + """ + return self._syringe_pump_force_v + + @syringe_pump_force_v.setter + def syringe_pump_force_v(self, value): + self._syringe_pump_force_v = value + + + @property + def syringe_pump_status(self) -> int: + """ + The current Syringe Pump status + """ + return self._syringe_pump_status + + @syringe_pump_status.setter + def syringe_pump_status(self, value): + self._syringe_pump_status = value + + + @property + def syringe_pump_encoder_status(self) -> int: + """ + The current Syringe Pump encoder status + """ + return self._syringe_pump_encoder_status + + @syringe_pump_encoder_status.setter + def syringe_pump_encoder_status(self, value): + self._syringe_pump_encoder_status = value + + + @property + def syringe_pump_adc_dac_status(self) -> int: + """ + The current Syringe Pump ADC & DAC status + """ + return self._syringe_pump_adc_dac_status + + @syringe_pump_adc_dac_status.setter + def syringe_pump_adc_dac_status(self, value): + self._syringe_pump_adc_dac_status = value + + + @property + def syringe_pump_adc_read_counter(self) -> int: + """ + The current Syringe Pump ADC read counter + """ + return self._syringe_pump_adc_read_counter + + @syringe_pump_adc_read_counter.setter + def syringe_pump_adc_read_counter(self, value): + self._syringe_pump_adc_read_counter = value + + + +# ============================================================ Handlers ============================================================ @publish(["td_syringe_pump_timestamp", "syringe_pump_state", "syringe_pump_set_rate_ml_hr", "syringe_pump_meas_rate_ml_hr", "syringe_pump_position", @@ -81,27 +255,27 @@ @return: None """ msg_list = [] - msg_list.append(('self.syringe_pump_state', DataTypes.U32)) - msg_list.append(('self.heparin_state', DataTypes.U32)) - msg_list.append(('self.syringe_pump_set_rate_ml_hr', DataTypes.F32)) - msg_list.append(('self.syringe_pump_meas_rate_ml_hr', DataTypes.F32)) - msg_list.append(('self.syringe_pump_position', DataTypes.U32)) - msg_list.append(('self.syringe_pump_volume_ml', DataTypes.F32)) - msg_list.append(('self.syringe_pump_home_v', DataTypes.F32)) - msg_list.append(('self.syringe_pump_switch_v', DataTypes.F32)) - msg_list.append(('self.syringe_pump_force_v', DataTypes.F32)) - msg_list.append(('self.syringe_pump_safety_volume_ml', DataTypes.F32)) - msg_list.append(('self.syringe_pump_status', DataTypes.U08)) - msg_list.append(('self.syringe_pump_encoder_status', DataTypes.U08)) - msg_list.append(('self.syringe_pump_adc_dac_status', DataTypes.U08)) - msg_list.append(('self.syringe_pump_adc_read_counter', DataTypes.U08)) + msg_list.append((type(self).syringe_pump_state, DataTypes.U32)) + msg_list.append((type(self).heparin_state, DataTypes.U32)) + msg_list.append((type(self).syringe_pump_set_rate_ml_hr, DataTypes.F32)) + msg_list.append((type(self).syringe_pump_meas_rate_ml_hr, DataTypes.F32)) + msg_list.append((type(self).syringe_pump_position, DataTypes.U32)) + msg_list.append((type(self).syringe_pump_volume_ml, DataTypes.F32)) + msg_list.append((type(self).syringe_pump_home_v, DataTypes.F32)) + msg_list.append((type(self).syringe_pump_switch_v, DataTypes.F32)) + msg_list.append((type(self).syringe_pump_force_v, DataTypes.F32)) + msg_list.append((type(self).syringe_pump_safety_volume_ml, DataTypes.F32)) + msg_list.append((type(self).syringe_pump_status, DataTypes.U08)) + msg_list.append((type(self).syringe_pump_encoder_status, DataTypes.U08)) + msg_list.append((type(self).syringe_pump_adc_dac_status, DataTypes.U08)) + msg_list.append((type(self).syringe_pump_adc_read_counter, DataTypes.U08)) - self.process_into_vars(decoder_list = msg_list, - message = message) - + self.process_into_vars(decoder_list = msg_list, message = message) self.td_syringe_pump_timestamp = timestamp + +# ============================================================ Overrides and Requests ============================================================ def cmd_syringe_pump_operation(self, operation: int = SyringePumpOperations.SYRINGE_PUMP_OP_STOP.value, rate: float = 0.0, volume: float = 0.0) -> int: