Index: leahi_dialin/dd/modules/dialysate_pump.py =================================================================== diff -u -r2692cff9c528ec1517638b54b8e6291b0e201c6b -rcf2068872f9d6c000e67ede2dca3e207aa1d041e --- leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision 2692cff9c528ec1517638b54b8e6291b0e201c6b) +++ leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision cf2068872f9d6c000e67ede2dca3e207aa1d041e) @@ -19,25 +19,13 @@ from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.dd_defs import DialysatePumpsEnum, DialysatePumpAttributesEnum, DDDialysatePumpsStates from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum from leahi_dialin.utils.checks import check_broadcast_interval_override_ms from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray -@unique -class DialysatePumpsEnum(DialinEnum): - D12_PUMP = 0 - D48_PUMP = 1 - - -@unique -class DDDialysatePumpsStates(DialinEnum): - DIALYSATE_PUMP_OFF_STATE = 0 - DIALYSATE_PUMP_RAMP_UP_STATE = 1 - DIALYSATE_PUMP_CONTROL_TO_TARGET_STATE = 2 - - class DDDialysatePumps(AbstractSubSystem): """ DialysatePumps @@ -61,41 +49,35 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_dialysate_pumps_sync) - self.d12_pump_target_rpm_fresh = 0.0 - self.d48_pump_target_rpm_spent = 0.0 - self.d12_pump_measured_spd_fresh = 0.0 - self.d48_pump_measured_spd_spent = 0.0 - self.d12_pump_current_spd_fresh = 0.0 - self.d48_pump_current_spd_spent = 0.0 - self.d12_pump_state_fresh = 0 - self.d48_pump_state_spent = 0 - self.d12_pump_tgt_pressure_fresh = 0.0 - self.d48_pump_tgt_pressure_spent = 0.0 - self.d12_pump_measured_pressure_fresh = 0.0 - self.d48_pump_measured_pressure_spent = 0.0 - self.d12_pump_measured_current_fresh = 0.0 - self.d48_pump_measured_current_spent = 0.0 - self.d12_pump_control_fresh = 0 - self.d48_pump_control_spent = 0 - self.d12_pump_dir_err_cnt_fresh = 0 - self.d48_pump_dir_err_cnt_spent = 0 - self.d12_pump_measured_dir_fresh = 0 - self.d48_pump_measured_dir_spent = 0 - self.dd_dialysate_pump_timestamp = 0 + self.dd_dialysate_pumps = { + DialysatePumpsEnum.D12_PUMP.name: { + DialysatePumpAttributesEnum.TARGET_RPM.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_SPEED.name: 0.0, + DialysatePumpAttributesEnum.CURRENT_SPEED.name: 0.0, + DialysatePumpAttributesEnum.STATE.name: 0.0, + DialysatePumpAttributesEnum.TARGET_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_CURRENT.name: 0.0, + DialysatePumpAttributesEnum.CONTROL.name: 0.0, + DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_DIRECTION.name: 0.0 + }, + DialysatePumpsEnum.D48_PUMP.name: { + DialysatePumpAttributesEnum.TARGET_RPM.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_SPEED.name: 0.0, + DialysatePumpAttributesEnum.CURRENT_SPEED.name: 0.0, + DialysatePumpAttributesEnum.STATE.name: 0.0, + DialysatePumpAttributesEnum.TARGET_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_PRESSURE.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_CURRENT.name: 0.0, + DialysatePumpAttributesEnum.CONTROL.name: 0.0, + DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name: 0.0, + DialysatePumpAttributesEnum.MEASURED_DIRECTION.name: 0.0 + } + } - @publish(["dd_dialysate_pump_timestamp", - "d12_pump_target_rpm_fresh","d48_pump_target_rpm_spent", - "d12_pump_measured_spd_fresh","d48_pump_measured_spd_spent", - "d12_pump_current_spd_fresh","d48_pump_current_spd_spent", - "d12_pump_state_fresh","d48_pump_state_spent", - "d12_pump_tgt_pressure_fresh","d48_pump_tgt_pressure_spent", - "d12_pump_measured_pressure_fresh","d48_pump_measured_pressure_spent", - "d12_pump_measured_current_fresh","d48_pump_measured_current_spent", - "d12_pump_control_fresh","d48_pump_control_spent", - "d12_pump_dir_err_cnt_fresh","d48_pump_dir_err_cnt_spent", - "d12_pump_measured_dir_fresh","d48_pump_measured_dir_spent", - ]) + @publish(["dd_dialysate_pump_timestamp", "dd_dialysate_pumps"]) def _handler_dialysate_pumps_sync(self, message, timestamp=0.0): """ Handles published dialysate pumps' data messages. Dialysate pumps' speed data are captured @@ -105,47 +87,56 @@ @return: None """ - self.d12_pump_target_rpm_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.d48_pump_target_rpm_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.d12_pump_measured_spd_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.d48_pump_measured_spd_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.d12_pump_current_spd_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.d48_pump_current_spd_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.d12_pump_state_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.d48_pump_state_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.d12_pump_tgt_pressure_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] - self.d48_pump_tgt_pressure_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] - self.d12_pump_measured_pressure_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] - self.d48_pump_measured_pressure_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] - self.d12_pump_measured_current_fresh = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - self.d48_pump_measured_current_spent = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] - self.d12_pump_control_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] - self.d48_pump_control_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] - self.d12_pump_dir_err_cnt_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] - self.d48_pump_dir_err_cnt_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] - self.d12_pump_measured_dir_fresh = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] - self.d48_pump_measured_dir_spent = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.TARGET_RPM.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.TARGET_RPM.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.CURRENT_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.CURRENT_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.STATE.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.STATE.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.TARGET_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.TARGET_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_PRESSURE.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_CURRENT.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_CURRENT.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.CONTROL.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.CONTROL.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.DIRECTION_ERROR_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18])))[0] + + self.dd_dialysate_pumps[DialysatePumpsEnum.D12_PUMP.name][DialysatePumpAttributesEnum.MEASURED_DIRECTION.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19])))[0] + self.dd_dialysate_pumps[DialysatePumpsEnum.D48_PUMP.name][DialysatePumpAttributesEnum.MEASURED_DIRECTION.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20])))[0] + self.dd_dialysate_pump_timestamp = timestamp def cmd_dialysate_pump_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: