Index: leahi_dialin/dd/modules/concentrate_pump.py =================================================================== diff -u -r8359a016f75bc716effb3d37d770680b01b38790 -re7d16bd6881619e5fc2a0bc1a7fd578a9978498e --- leahi_dialin/dd/modules/concentrate_pump.py (.../concentrate_pump.py) (revision 8359a016f75bc716effb3d37d770680b01b38790) +++ leahi_dialin/dd/modules/concentrate_pump.py (.../concentrate_pump.py) (revision e7d16bd6881619e5fc2a0bc1a7fd578a9978498e) @@ -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 ConcentratePumpsEnum, DDConcentratePumpsStates, DDConcentratePumpAttributesEnum 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 ConcentratePumpsEnum(DialinEnum): - D11_CP1_ACID = 0 - D10_CP2_BICARB = 1 - D76_UF = 2 - -@unique -class DDConcentratePumpsStates(DialinEnum): - CONCENTRATE_PUMP_OFF_STATE = 0 - CONCENTRATE_PUMP_RAMP_TO_TARGET_SPEED_STATE = 1 - CONCENTRATE_PUMP_CONTROL_TARGET_SPEED_STATE = 2 - - class DDConcentratePumps(AbstractSubSystem): """ Dialin API sub-class for concentrate pumps related commands. @@ -59,49 +47,43 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_concentrate_pumps_sync) + self.dd_concentrate_pumps = { + ConcentratePumpsEnum.D10_CP2_BICARB.name: { + DDConcentratePumpAttributesEnum.CURRENT_STATE.name: 0, + DDConcentratePumpAttributesEnum.CURRENT_SET_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.MEASURED_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.TARGET_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.PULSE_US.name: 0.0, + DDConcentratePumpAttributesEnum.TARGET_REV_COUNT.name: 0, + DDConcentratePumpAttributesEnum.MEASURED_REV_COUNT.name: 0, + DDConcentratePumpAttributesEnum.PARKED.name: False, + DDConcentratePumpAttributesEnum.PARK_FAULT.name: False + }, + ConcentratePumpsEnum.D11_CP1_ACID.name: { + DDConcentratePumpAttributesEnum.CURRENT_STATE.name: 0, + DDConcentratePumpAttributesEnum.CURRENT_SET_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.MEASURED_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.TARGET_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.PULSE_US.name: 0.0, + DDConcentratePumpAttributesEnum.TARGET_REV_COUNT.name: 0, + DDConcentratePumpAttributesEnum.MEASURED_REV_COUNT.name: 0, + DDConcentratePumpAttributesEnum.PARKED.name: False, + DDConcentratePumpAttributesEnum.PARK_FAULT.name: False + }, + ConcentratePumpsEnum.D76_UF.name: { + DDConcentratePumpAttributesEnum.CURRENT_STATE.name: 0, + DDConcentratePumpAttributesEnum.CURRENT_SET_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.MEASURED_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.TARGET_SPEED.name: 0.0, + DDConcentratePumpAttributesEnum.PULSE_US.name: 0.0, + DDConcentratePumpAttributesEnum.TARGET_REV_COUNT.name: 0, + DDConcentratePumpAttributesEnum.MEASURED_REV_COUNT.name: 0 + } + } - self.d10_current_state = 0 - self.d10_current_set_speed = 0.0 - self.d10_measured_speed = 0.0 - self.d10_target_speed = 0.0 - self.d10_pulse_us = 0.0 - self.d10_target_rev_count = 0 - self.d10_measured_rev_count = 0 - self.d10_parked = False - self.d10_park_fault = False - - self.d11_current_state = 0 - self.d11_current_set_speed = 0.0 - self.d11_measured_speed = 0.0 - self.d11_target_speed = 0.0 - self.d11_pulse_us = 0.0 - self.d11_target_rev_count = 0 - self.d11_measured_rev_count = 0 - self.d11_parked = False - self.d11_park_fault = False - - self.d76_current_state = 0 - self.d76_current_set_speed = 0.0 - self.d76_measured_speed = 0.0 - self.d76_target_speed = 0.0 - self.d76_pulse_us = 0.0 - self.d76_target_rev_count = 0 - self.d76_measured_rev_count = 0 - self.dd_concentrate_pump_timestamp = 0.0 - @publish(["dd_concentrate_pump_timestamp", - "d11_cp1_current_set_speed", "d11_cp1_measured_speed", "d11_cp1_target_speed", - "d10_cp2_current_set_speed", "d10_cp2_measured_speed", "d10_cp2_target_speed", - "d11_cp1_current_state", "d10_cp2_current_state", - "d11_cp1_target_rev_count", "d10_cp2_target_rev_count", - "d11_cp1_measured_rev_count", "d10_cp2_measured_rev_count", - "d11_cp1_parked", "d10_cp2_parked", - "d11_cp1_park_fault", "d10_cp2_park_fault", - "d76_current_state","d76_current_set_speed", - "d76_measured_speed","d76_target_speed", - "d76_pulse_us","d76_target_rev_count", - "d76_measured_rev_count"]) + @publish(["dd_concentrate_pump_timestamp", "dd_concentrate_pumps"]) def _handler_concentrate_pumps_sync(self, message, timestamp=0.0): """ Handles published concentrate pumps' data messages. Concentrate pumps' speed data are captured @@ -111,56 +93,56 @@ @return: None """ - self.d11_current_set_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.d11_measured_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.d10_current_set_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.d10_cp2_measured_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.d11_target_rev_count = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.d11_measured_rev_count = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.d10_target_rev_count = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.d10_measured_rev_count = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.d11_current_state = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] - self.d10_current_state = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] - self.d11_pulse_us = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] - self.d10_pulse_us = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] - self.d11_target_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - self.d10_target_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] - self.d11_parked = True if struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] == 1 else False - self.d10_parked = True if struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] == 1 else False - self.d11_park_fault = True if struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] == 1 else False - self.d10_park_fault = True if struct.unpack('I', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] == 1 else False - self.d76_target_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] - self.d76_current_set_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] - self.d76_measured_speed = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_21:MsgFieldPositions.END_POS_FIELD_21]))[0] - self.d76_target_rev_count = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_22:MsgFieldPositions.END_POS_FIELD_22]))[0] - self.d76_measured_rev_count = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_23:MsgFieldPositions.END_POS_FIELD_23]))[0] - self.d76_current_state = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_24:MsgFieldPositions.END_POS_FIELD_24]))[0] - self.d76_pulse_us = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_25:MsgFieldPositions.END_POS_FIELD_25]))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.CURRENT_SET_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.MEASURED_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.CURRENT_SET_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.MEASURED_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.TARGET_REV_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.MEASURED_REV_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.TARGET_REV_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.MEASURED_REV_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.CURRENT_STATE.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.CURRENT_STATE.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.PULSE_US.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.PULSE_US.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.TARGET_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.TARGET_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.PARKED.name] = \ + True if struct.unpack('I', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] == 1 else False + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.PARKED.name] = \ + True if struct.unpack('I', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] == 1 else False + self.dd_concentrate_pumps[ConcentratePumpsEnum.D11_CP1_ACID.name][DDConcentratePumpAttributesEnum.PARK_FAULT.name] = \ + True if struct.unpack('I', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] == 1 else False + self.dd_concentrate_pumps[ConcentratePumpsEnum.D10_CP2_BICARB.name][DDConcentratePumpAttributesEnum.PARK_FAULT.name] = \ + True if struct.unpack('I', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] == 1 else False + self.dd_concentrate_pumps[ConcentratePumpsEnum.D76_UF.name][DDConcentratePumpAttributesEnum.TARGET_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D76_UF.name][DDConcentratePumpAttributesEnum.CURRENT_SET_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D76_UF.name][DDConcentratePumpAttributesEnum.MEASURED_SPEED.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_21:MsgFieldPositions.END_POS_FIELD_21])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D76_UF.name][DDConcentratePumpAttributesEnum.TARGET_REV_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_22:MsgFieldPositions.END_POS_FIELD_22])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D76_UF.name][DDConcentratePumpAttributesEnum.MEASURED_REV_COUNT.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_23:MsgFieldPositions.END_POS_FIELD_23])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D76_UF.name][DDConcentratePumpAttributesEnum.CURRENT_STATE.name] = ( + struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_24:MsgFieldPositions.END_POS_FIELD_24])))[0] + self.dd_concentrate_pumps[ConcentratePumpsEnum.D76_UF.name][DDConcentratePumpAttributesEnum.PULSE_US.name] = ( + struct.unpack('f', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_25:MsgFieldPositions.END_POS_FIELD_25])))[0] self.dd_concentrate_pump_timestamp = timestamp