Index: leahi_dialin/dd/modules/balancing_chamber.py =================================================================== diff -u -ra01dcb7ce7e9f929e5e5f41414ace01ce69ad051 -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/balancing_chamber.py (.../balancing_chamber.py) (revision a01dcb7ce7e9f929e5e5f41414ace01ce69ad051) +++ leahi_dialin/dd/modules/balancing_chamber.py (.../balancing_chamber.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -54,14 +54,15 @@ self.bal_chamber_fill_in_progress = 0 self.current_bal_chamber_switching_counter = 0 self.is_pressure_stabilized_during_fill = 0 + self.bal_chamber_switch_only_state = 0 self.dd_bal_chamber_timestamp = 0 @publish(["dd_bal_chamber_timestamp", "execution_state", "switching_state", "switching_frequency", "switching_period", "bal_chamber_fill_in_progress", "current_bal_chamber_switching_counter", - "is_pressure_stabilized_during_fill"]) + "is_pressure_stabilized_during_fill", "bal_chamber_switch_only_state"]) def _handler_balancing_chamber_sync(self, message, timestamp=0.0): """ Handles published balancing chamber data messages. @@ -84,6 +85,8 @@ message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] self.is_pressure_stabilized_during_fill = struct.unpack('I', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] + self.bal_chamber_switch_only_state = struct.unpack('I', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] self.dd_bal_chamber_timestamp = timestamp @@ -126,6 +129,8 @@ def cmd_switch_frequency_override(self, frequency: float, reset: int = NO_RESET) -> int: """ Constructs and sends the balancing chamber switch frequency override command + Constraints: + Must be logged into DD. @param frequency: float - frequency value to override switch frequency with @param reset: integer - 1 to reset a previous override, 0 to override @@ -156,4 +161,35 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.error("Timeout!!!!") + return False + + def cmd_switch_only_start_stop_override(self, start_stop: int, flow: float) -> int: + """ + Constructs and sends the balancing chamber switch only start stop override command + Constraints: + Must be logged into DD. + + @param start_stop: int - value to start or stop switch ( start = 1, stop = 0 + @param flow: float - flow rate in ml/min + @return: 1 if successful, zero otherwise + + """ + + sts = integer_to_bytearray(start_stop) + freq = float_to_bytearray(flow) + payload = sts + freq + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, + message_id=MsgIds.MSG_ID_DD_BC_SWITCH_ONLY_START_STOP_OVERRIDE_REQUEST.value, + payload=payload) + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.error("Timeout!!!!") return False \ No newline at end of file Index: leahi_dialin/dd/modules/concentrate_pump.py =================================================================== diff -u -ra01dcb7ce7e9f929e5e5f41414ace01ce69ad051 -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/concentrate_pump.py (.../concentrate_pump.py) (revision a01dcb7ce7e9f929e5e5f41414ace01ce69ad051) +++ leahi_dialin/dd/modules/concentrate_pump.py (.../concentrate_pump.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -65,12 +65,12 @@ self.d10_cp2_current_set_speed = 0.0 self.d10_cp2_measured_speed = 0.0 self.d10_cp2_target_speed = 0.0 - self.d11_cp1_current_state = 0.0 - self.d10_cp2_current_state = 0.0 - self.d11_cp1_target_rev_count = 0.0 - self.d10_cp2_target_rev_count = 0.0 - self.d11_cp1_measured_rev_count = 0.0 - self.d10_cp2_measured_rev_count = 0.0 + self.d11_cp1_current_state = 0 + self.d10_cp2_current_state = 0 + self.d11_cp1_target_rev_count = 0 + self.d10_cp2_target_rev_count = 0 + self.d11_cp1_measured_rev_count = 0 + self.d10_cp2_measured_rev_count = 0 self.d11_cp1_parked = False self.d10_cp2_parked = False self.d11_cp1_park_fault = False @@ -81,7 +81,7 @@ @publish(["dd_concentrate_pump_timestamp", "d11_cp1_current_set_speed", "d11_cp1_measured_speed", "d11_cp1_target_speed", - "cp2_current_set_speed", "d10_cp2_measured_speed", "d10_cp2_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", @@ -152,6 +152,7 @@ @param ms: integer - interval (in ms) to override with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise + """ if not check_broadcast_interval_override_ms(ms): @@ -186,9 +187,6 @@ @param speed: float - target speed value to override concentrate pump with @return: 1 if successful, zero otherwise - Concentrate pump IDs: \n - 0 = D11_CP1_ACID \n - 1 = D10_CP2_BICARB \n """ reset_byte_array = integer_to_bytearray(reset) @@ -222,9 +220,6 @@ @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise - Concentrate pump IDs: \n - 0 = D11_CP1_ACID \n - 1 = D10_CP2_BICARB \n """ reset_byte_array = integer_to_bytearray(reset) @@ -261,9 +256,6 @@ @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise - Concentrate pump IDs: \n - 0 = D11_CP1_ACID \n - 1 = D10_CP2_BICARB \n """ reset_byte_array = integer_to_bytearray(reset) @@ -300,9 +292,6 @@ @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise - Concentrate pump IDs: \n - 0 = D11_CP1_ACID \n - 1 = D10_CP2_BICARB \n """ reset_byte_array = integer_to_bytearray(reset) @@ -337,9 +326,6 @@ @param pump_id: unsigned int - concentrate pump ID @return: 1 if successful, zero otherwise - Concentrate pump IDs: \n - 0 = D11_CP1_ACID \n - 1 = D10_CP2_BICARB \n """ payload = integer_to_bytearray(pump_id) Index: leahi_dialin/dd/modules/conductivity_sensors.py =================================================================== diff -u -recd89ae316cd2afa695dd4e93ac18b6004975efb -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision ecd89ae316cd2afa695dd4e93ac18b6004975efb) +++ leahi_dialin/dd/modules/conductivity_sensors.py (.../conductivity_sensors.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -27,17 +27,17 @@ @unique class ConductivitySensorsEnum(DialinEnum): - CD1 = 0 - CD2 = 1 - CD3 = 2 - CD4 = 3 + D17_COND = 0 + D27_COND = 1 + D29_COND = 2 + D43_COND = 3 NUM_OF_CONDUCTIVITY_SENSORS = 4 class DDConductivitySensors(AbstractSubSystem): """ ConductivitySensors - Dialysate Generator (DG) Dialin API sub-class for conductivity sensors related commands. + Dialysate Delivery (DD) API sub-class for conductivity sensors related commands. """ def __init__(self, can_interface, logger: Logger): @@ -56,64 +56,43 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_conductivity_sensors_sync) - self.ro_rejection_ratio = 0.0 - self.conductivity_sensor_cpi = 0.0 - self.conductivity_sensor_cpo = 0.0 - self.conductivity_sensor_cd1 = 0.0 - self.conductivity_sensor_cd2 = 0.0 + self.d17_cond = 0.0 + self.d27_cond = 0.0 + self.d29_cond = 0.0 + self.d43_cond = 0.0 + self.dd_conductivity_timestamp = 0.0 - self.raw_conductivity_sensor_cpi = 0.0 - self.raw_conductivity_sensor_cpo = 0.0 - self.raw_conductivity_sensor_cd1 = 0.0 - self.raw_conductivity_sensor_cd2 = 0.0 - - self.cpi_sensor_status = 0 - self.cpo_sensor_status = 0 - self.cd1_sensor_status = 0 - self.cd2_sensor_status = 0 - - self.dg_conductivity_timestamp = 0.0 - @publish(["dd_conductivity_timestamp", - "conductivity_sensor_cd1", "conductivity_sensor_cd2", - "conductivity_sensor_cd3", "conductivity_sensor_cd4", - "conductivity_sensor_td1", "conductivity_sensor_td2", - "conductivity_sensor_td3", "conductivity_sensor_td4",]) + "d17_cond", + "d27_cond", + "d29_cond", + "d43_cond"]) def _handler_conductivity_sensors_sync(self, message, timestamp=0.0): """ - Handles published conductivity sensor data messages. Conductivity sensor data are captured + Handles published DD conductivity sensor data messages. DD Conductivity sensor data are captured for reference. - @param message: published conductivity sensor data message + @param message: published DD conductivity sensor data message @return: None """ - self.conductivity_sensor_cd1 = struct.unpack('f', bytearray( + self.d17_cond = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.conductivity_sensor_cd2 = struct.unpack('f', bytearray( + self.d27_cond = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.conductivity_sensor_cd3 = struct.unpack('f', bytearray( + self.d29_cond = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.conductivity_sensor_cd4 = struct.unpack('f', bytearray( + self.d43_cond = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.conductivity_sensor_td1 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.conductivity_sensor_td2 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.conductivity_sensor_td3 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.conductivity_sensor_td4 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.dd_conductivity_timestamp = timestamp def cmd_conductivity_sensor_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity sensor data broadcast interval override command Constraints: - Must be logged into DG. - Given interval must be non-zero and a multiple of the DG general task interval (50 ms). + Must be logged into DD. + Given interval must be non-zero and a multiple of the DD general task interval (50 ms). @param ms: integer - interval (in ms) to override with @param reset: integer - 1 to reset a previous override, 0 to override @@ -159,11 +138,6 @@ @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise - Conductivity sensor IDs: \n - 0 = CPI \n - 1 = CPO \n - 2 = CD1 \n - 3 = CD2 \n """ reset_byte_array = integer_to_bytearray(reset) @@ -194,10 +168,10 @@ def cmd_conductivity_sensor_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: """ - Constructs and sends the conductivity value override command + Constructs and sends the conductivity temperature override command @param sensor: unsigned int - sensor ID - @param temperature: float - conductivity value to override sensor with + @param temperature: float - temperature value to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -209,14 +183,14 @@ payload = reset_byte_array + temp_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST.value, + message_id=MsgIds.MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, payload=payload) if reset == RESET: str_res = "reset back to normal" else: str_res = str(temperature) - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override temperature value for conductivity sensor " + str(sensor) + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -231,10 +205,10 @@ def cmd_conductivity_sensor_read_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: """ - Constructs and sends the conductivity value override command + Constructs and sends the conductivity read counter override command @param sensor: unsigned int - sensor ID - @param counter: float - conductivity value to override sensor with + @param counter: int - rad count value to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -268,10 +242,10 @@ def cmd_conductivity_sensor_error_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: """ - Constructs and sends the conductivity value override command + Constructs and sends the conductivity error count override command @param sensor: unsigned int - sensor ID - @param counter: float - conductivity value to override sensor with + @param counter: int - error count value to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise Index: leahi_dialin/dd/modules/dialysate_pump.py =================================================================== diff -u -reff35c7c93f5a6f24510f54bcaa7e32011ecd92e -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision eff35c7c93f5a6f24510f54bcaa7e32011ecd92e) +++ leahi_dialin/dd/modules/dialysate_pump.py (.../dialysate_pump.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -5,7 +5,7 @@ # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # -# @file concentrate_pumps.py +# @file dialysate_pump.py # # @author (last) Micahel Garthwaite # @date (last) 07-Mar-2023 @@ -27,8 +27,8 @@ @unique class DialysatePumpsEnum(DialinEnum): - FRESH_DIALYSATE_PUMP = 0 - SPENT_DIALYSATE_PUMP = 1 + D12_PUMP = 0 + D48_PUMP = 1 @unique @@ -59,49 +59,49 @@ channel_id = DenaliChannels.dd_sync_broadcast_ch_id msg_id = MsgIds.MSG_ID_DIALYSATE_PUMPS_DATA.value self.can_interface.register_receiving_publication_function(channel_id, msg_id, - self._handler_concentrate_pumps_sync) + self._handler_dialysate_pumps_sync) - self.dial_pump_target_rpm_fresh = 0.0 - self.dial_pump_target_rpm_spent = 0.0 - self.dial_pump_measured_spd_fresh = 0.0 - self.dial_pump_measured_spd_spent = 0.0 - self.dial_pump_current_spd_fresh = 0.0 - self.dial_pump_current_spd_spent = 0.0 - self.dial_pump_state_fresh = 0 - self.dial_pump_state_spent = 0 - self.dial_pump_tgt_pressure_fresh = 0.0 - self.dial_pump_tgt_pressure_spent = 0.0 - self.dial_pump_measured_pressure_fresh = 0.0 - self.dial_pump_measured_pressure_spent = 0.0 - self.dial_pump_measured_current_fresh = 0.0 - self.dial_pump_measured_current_spent = 0.0 - self.dial_pump_control_fresh = 0 - self.dial_pump_control_spent = 0 - self.dial_pump_dir_err_cnt_fresh = 0 - self.dial_pump_dir_err_cnt_spent = 0 - self.dial_pump_measured_dir_fresh = 0 - self.dial_pump_measured_dir_spent = 0 + 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 @publish(["dd_dialysate_pump_timestamp", - "dial_pump_target_rpm_fresh","dial_pump_target_rpm_spent", - "dial_pump_measured_spd_fresh","dial_pump_measured_spd_spent", - "dial_pump_current_spd_fresh","dial_pump_current_spd_spent", - "dial_pump_state_fresh","dial_pump_state_spent", - "dial_pump_tgt_pressure_fresh","dial_pump_tgt_pressure_spent", - "dial_pump_measured_pressure_fresh","dial_pump_measured_pressure_spent", - "dial_pump_measured_current_fresh","dial_pump_measured_current_spent", - "dial_pump_control_fresh","dial_pump_control_spent", - "dial_pump_dir_err_cnt_fresh","dial_pump_dir_err_cnt_spent", - "dial_pump_measured_dir_fresh","dial_pump_measured_dir_spent", + "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", ]) - def _handler_concentrate_pumps_sync(self, message, timestamp=0.0): + def _handler_dialysate_pumps_sync(self, message, timestamp=0.0): """ - Handles published concentrate pumps' data messages. Concentrate pumps' speed data are captured + Handles published dialysate pumps' data messages. Dialysate pumps' speed data are captured for reference. - @param message: published concentrate pumps' data message + @param message: published dialysate pumps' data message @return: None """ @@ -150,10 +150,10 @@ def cmd_dialysate_pump_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ - Constructs and sends the concentrate pump data broadcast interval override command + Constructs and sends the dialysate pump data broadcast interval override command Constraints: - Must be logged into DG. - Given interval must be non-zero and a multiple of the DG general task interval (50 ms). + Must be logged into DD. + Given interval must be non-zero and a multiple of the DD general task interval (50 ms). @param ms: integer - interval (in ms) to override with @param reset: integer - 1 to reset a previous override, 0 to override Index: leahi_dialin/dd/modules/gen_dialysate.py =================================================================== diff -u -ra01dcb7ce7e9f929e5e5f41414ace01ce69ad051 -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/gen_dialysate.py (.../gen_dialysate.py) (revision a01dcb7ce7e9f929e5e5f41414ace01ce69ad051) +++ leahi_dialin/dd/modules/gen_dialysate.py (.../gen_dialysate.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -43,51 +43,51 @@ if self.can_interface is not None: channel_id = DenaliChannels.dd_sync_broadcast_ch_id - msg_id = MsgIds.MSG_ID_DD_BAL_CHAMBER_DATA.value + msg_id = MsgIds.MSG_ID_DD_GEN_DIALYSATE_MODE_DATA.value self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_balancing_chamber_sync) self.execution_state = 0 self.dialysate_delivery_in_progress = 0 - self.floater_level = 0 - self.bicarb_level = 0 - self.spent_chamber_level = 0 - self.hydraulics_negative_pressure = 0.0 - self.hydraulics_positive_pressure = 0.0 - self.spent_dialysate_pressure = 0.0 + self.d6_level = 0 + self.d63_level = 0 + self.d46_level = 0 + self.d9_pressure = 0.0 + self.d18_pressure = 0.0 + self.d51_pressure = 0.0 self.dialysate_good_to_deliver = 0 self.dd_gen_dialysate_timestamp = 0 @publish(["dd_gen_dialysate_timestamp", "execution_state", "dialysate_delivery_in_progress", - "floater_level", - "bicarb_level", "spent_chamber_level", - "hydraulics_negative_pressure", - "hydraulics_positive_pressure", "spent_dialysate_pressure", + "d6_level", + "d63_level", "d46_level", + "d9_pressure", + "d18_pressure", "d51_pressure", "dialysate_good_to_deliver"]) def _handler_balancing_chamber_sync(self, message, timestamp=0.0): """ - Handles published balancing chamber data messages. + Handles published gen dialysate data messages. - @param message: published balancing chamber data message + @param message: published gen dialysate data message @return: None """ self.execution_state = struct.unpack('I', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] self.dialysate_delivery_in_progress = struct.unpack('I', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.floater_level = struct.unpack('I', bytearray( + self.d6_level = struct.unpack('I', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.bicarb_level = struct.unpack('I', bytearray( + self.d63_level = struct.unpack('I', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.spent_chamber_level = struct.unpack('I', bytearray( + self.d46_level = struct.unpack('I', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.hydraulics_negative_pressure = struct.unpack('f', bytearray( + self.d9_pressure = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.hydraulics_positive_pressure = struct.unpack('f', bytearray( + self.d18_pressure = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.spent_dialysate_pressure = struct.unpack('f', bytearray( + self.d51_pressure = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] self.dialysate_good_to_deliver = struct.unpack('I', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] Index: leahi_dialin/dd/modules/heaters.py =================================================================== diff -u -rc911f3b6e212249136baf0e45b614a2f5be2b190 -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/heaters.py (.../heaters.py) (revision c911f3b6e212249136baf0e45b614a2f5be2b190) +++ leahi_dialin/dd/modules/heaters.py (.../heaters.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -35,18 +35,16 @@ @unique class HeatersState(DialinEnum): HEATER_EXEC_STATE_OFF = 0 - HEATER_EXEC_STATE_PRIMARY_RAMP_TO_TARGET = 1 - HEATER_EXEC_STATE_PRIMARY_CONTROL_TO_TARGET = 2 - HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGE = 3 - HEATER_EXEC_STATE_TRIMMER_RAMP_TO_TARGET = 4 - HEATER_EXEC_STATE_TRIMMER_CONTROL_TO_TARGET = 5 - NUM_OF_HEATERS_STATE = 6 + HEATER_EXEC_STATE_RAMP_TO_TARGET = 1 + HEATER_EXEC_STATE_CONTROL_TO_TARGET = 2 + HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET = 3 + NUM_OF_HEATERS_STATE = 4 @unique class HeatersNames(DialinEnum): - DD_PRIMARY_HEATER = 0 - DD_TRIMMER_HEATER = 1 + D5_HEAT = 0 + D45_HEAT = 1 NUM_OF_DD_HEATERS = 2 @@ -67,14 +65,14 @@ self.can_interface = can_interface self.logger = logger - self.main_primary_heater_duty_cycle = 0.0 - self.trimmer_heater_duty_cycle = 0.0 - self.primary_heaters_target_temperature = 0.0 - self.trimmer_heater_target_temperature = 0.0 - self.primary_heater_state = 0 - self.trimmer_heater_state = 0 - self.primary_control_counter = 0 - self.trimmer_control_counter = 0 + self.d5_heat_duty_cycle = 0.0 + self.d45_heat_duty_cycle = 0.0 + self.d5_heat_target_temperature = 0.0 + self.d45_heat_target_temperature = 0.0 + self.d5_heat_state = 0 + self.d45_heat_state = 0 + self.d5_heat_control_counter = 0 + self.d45_heat_control_counter = 0 self.dd_heaters_timestamp = 0.0 if self.can_interface is not None: @@ -83,32 +81,32 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_heaters_sync) @publish(["dd_heaters_timestamp", - "main_primary_heater_duty_cycle","trimmer_heater_duty_cycle", - "primary_heaters_target_temperature","trimmer_heater_target_temperature", - "primary_heater_state","trimmer_heater_state", - "primary_control_counter","trimmer_control_counter"]) + "d5_heat_duty_cycle","d45_heat_duty_cycle", + "d5_heat_target_temperature","d45_heat_target_temperature", + "d5_heat_state","d45_heat_state", + "d5_heat_control_counter","d45_heat_control_counter"]) def _handler_heaters_sync(self, message, timestamp=0.0): """ - Handles published heaters message + Handles published DD heaters message - @param message: published heaters data message + @param message: published DD heaters data message @returns none """ - self.main_primary_heater_duty_cycle = struct.unpack('f', bytearray( + self.d5_heat_duty_cycle = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.trimmer_heater_duty_cycle = struct.unpack('f', bytearray( + self.d45_heat_duty_cycle = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.primary_heaters_target_temperature = struct.unpack('f', bytearray( + self.d5_heat_target_temperature = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.trimmer_heater_target_temperature = struct.unpack('f', bytearray( + self.d45_heat_target_temperature = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.primary_heater_state = struct.unpack('i', bytearray( + self.d5_heat_state = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.trimmer_heater_state = struct.unpack('i', bytearray( + self.d45_heat_state = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.primary_control_counter = struct.unpack('i', bytearray( + self.d5_heat_control_counter = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.trimmer_control_counter = struct.unpack('i', bytearray( + self.d45_heat_control_counter = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] self.dg_heaters_timestamp = timestamp @@ -117,8 +115,8 @@ """ Constructs and sends broadcast time interval. Constraints: - Must be logged into DG. - Given interval must be non-zero and a multiple of the DG general task interval (50 ms). + Must be logged into DD. + Given interval must be non-zero and a multiple of the DD general task interval (50 ms). @param ms: (int) Publish time interval in ms @param reset: (int) 1 to reset a previous override, 0 to override @@ -150,10 +148,9 @@ def cmd_heater_duty_cycle_override(self, heater: int, duty_cycle: float, reset: int = NO_RESET) -> int: """ Constructs and sends heater duty cycle override command - Must be logged into DG - There must be a minimum flow available for the heaters (FMP for primary and FMD for trimmer) + Must be logged into DD - @param heater the heater to override its value (primary, trimmer) (0-1.0 order) + @param heater the heater to override its value @param duty_cycle the duty cycle value to override in percent @param reset: (int) 1 to reset a previous override, 0 to override @returns 1 if successful, zero otherwise @@ -183,7 +180,7 @@ Constructs and sends heater start stop override - @param heater the heater to override its value (primary, trimmer) (0-1.0 order) + @param heater the heater to override its value @param command the heater to start or stop @param temperature: float - temp to set to @returns 1 if successful, zero otherwise Index: leahi_dialin/dd/modules/levels.py =================================================================== diff -u -recd89ae316cd2afa695dd4e93ac18b6004975efb -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/levels.py (.../levels.py) (revision ecd89ae316cd2afa695dd4e93ac18b6004975efb) +++ leahi_dialin/dd/modules/levels.py (.../levels.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -5,7 +5,7 @@ # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # -# @file heaters.py +# @file levels.py # # @author (last) Michael Garthwaite # @date (last) 28-Oct-2024 @@ -25,6 +25,13 @@ 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 DDLevelSensorEnum(DialinEnum): + D6_LEVEL = 0 # floater switch low, medium and high status + D63_LEVEL = 1 # bicarb level low or high status + D46_LEVEL = 2 # Spent dialysate air separation chamber level low or high status + NUM_OF_LEVELS = 3 + class DDLevels(AbstractSubSystem): """ @@ -42,42 +49,43 @@ self.can_interface = can_interface self.logger = logger - self.floater1 = 0 - self.bicarb_level = 0 - self.spent_dialysate_level = 0 - self.dd_levels_timestamp = 0 - if self.can_interface is not None: channel_id = DenaliChannels.dd_sync_broadcast_ch_id msg_id = MsgIds.MSG_ID_DD_LEVEL_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_heaters_sync) + self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_levels_sync) + self.d6_level = 0 + self.d63_level = 0 + self.d46_level = 0 + self.dd_levels_timestamp = 0 + + @publish(["dd_levels_timestamp", - "floater1", - "bicarb_level", - "spent_dialysate_level"]) - def _handler_heaters_sync(self, message, timestamp=0.0): + "d6_level", + "d63_level", + "d46_level"]) + def _handler_levels_sync(self, message, timestamp=0.0): """ - Handles published heaters message + Handles published levels message - @param message: published heaters data message + @param message: published levels data message @returns none """ - self.floater1 = struct.unpack('i', bytearray( + self.d6_level = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.bicarb_level = struct.unpack('i', bytearray( + self.d63_level = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.spent_dialysate_level = struct.unpack('i', bytearray( + self.d46_level = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] self.dd_levels_timestamp = timestamp def cmd_levels_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ - Constructs and sends broadcast time interval. + Constructs and sends dd levels broadcast time interval override. Constraints: - Must be logged into DG. - Given interval must be non-zero and a multiple of the DG general task interval (50 ms). + Must be logged into DD. + Given interval must be non-zero and a multiple of the DD general task interval (50 ms). @param ms: (int) Publish time interval in ms @param reset: (int) 1 to reset a previous override, 0 to override @@ -94,7 +102,7 @@ message_id=MsgIds.MSG_ID_DD_LEVELS_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, payload=payload) - self.logger.debug("Sending {} ms publish interval to the Heaters module".format(ms)) + self.logger.debug("Sending {} ms publish interval to the Levels module".format(ms)) # Send message received_message = self.can_interface.send(message) @@ -108,11 +116,10 @@ def cmd_level_status_override(self, level_sensor: int, status: int, reset: int = NO_RESET) -> int: """ - Constructs and sends heater duty cycle override command - Must be logged into DG - There must be a minimum flow available for the heaters (FMP for primary and FMD for trimmer) + Constructs and sends level status cycle override command + Must be logged into DD. - @param level_sensor the level sensor to override its value (primary, trimmer) (0-1.0 order) + @param level_sensor the level sensor to override @param status the status value to override @param reset: (int) 1 to reset a previous override, 0 to override @returns 1 if successful, zero otherwise Index: leahi_dialin/dd/modules/piston_pump.py =================================================================== diff -u -rf9dd375900151a5daafe3b687187187645d5f1ab -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/piston_pump.py (.../piston_pump.py) (revision f9dd375900151a5daafe3b687187187645d5f1ab) +++ leahi_dialin/dd/modules/piston_pump.py (.../piston_pump.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -5,7 +5,7 @@ # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # -# @file piston_pumps.py +# @file piston_pump.py # # @author (last) Micahel Garthwaite # @date (last) 07-Mar-2023 @@ -20,13 +20,20 @@ from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels -from leahi_dialin.utils.base import AbstractSubSystem, publish +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 DDPistonPumpsEnum(DialinEnum): + ACID = 0 # Acid piston pump + BICARB = 1 # Bicarbonate piston pump + UF = 2 # Ultrafilteration piston pump + NUM_OF_PISTON_PUMPS = 3 # Number of piston pumps + class DDPistonPumps(AbstractSubSystem): """ - PistonPumps + DDPistonPumps Dialysate Delivery (DD) Dialin API sub-class for piston pumps related commands. """ @@ -126,14 +133,14 @@ self.logger.error("Timeout!!!!") return False - def cmd_piston_set_start_stop(self, pump_id: int, command: int, count: int, speed: float, volume: float ) -> int: + def cmd_piston_set_start_stop_override(self, pump_id: int, command: int, count: int, flow_rate: float, volume: float ) -> int: """ Constructs and sends the piston pump start stop command @param pump_id: unsigned int - concentrate pump ID @param command: int - value to command the concentrate pump @param count: int - vale to set the cycle count to - @param speed: float - ml/min to set the speed to + @param flow_rate: float - ml/min to set the speed to @param volume: float - the volume to set to @return: 1 if successful, zero otherwise @@ -142,7 +149,7 @@ pmp = integer_to_bytearray(pump_id) cmd = integer_to_bytearray(command) cyc = integer_to_bytearray(count) - spd = float_to_bytearray(speed) + spd = float_to_bytearray(flow_rate) vlm = float_to_bytearray(volume) payload = pmp + cmd + cyc + spd + vlm Index: leahi_dialin/dd/modules/pressure_sensors.py =================================================================== diff -u -rbe5dde1cc2e93cc22ebed1fc4dfd6b6082cae8a3 -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision be5dde1cc2e93cc22ebed1fc4dfd6b6082cae8a3) +++ leahi_dialin/dd/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -27,15 +27,14 @@ @unique class PressureNames(DialinEnum): # Pressure Sensor IDs - PRESSURE_SENSOR_WATER_INLET_INPUT = 0 - PRESSURE_SENSOR_WATER_INLET_OUTPUT = 1 - PRESSURE_SENSOR_HYDRAULICS_OUTLET = 2 - PRESSURE_SENSOR_BIBAG = 3 - PRESSURE_SENSOR_SPENT_DIALYSATE = 4 - PRESSURE_SENSOR_FRESH_DIALYSATE = 5 - PRESSURE_SENSOR_TRANSMEMBRANE = 6 - PRESSURE_SENSOR_BAROMETRIC = 7 - NUM_OF_PRESSURE_SENSORS = 8 + M1_PRI = 0 # Water Inlet pressure before regulator (PRi) + M3_PRO = 1 # Water Inlet pressure after regulator (PRo) + D9_PHO = 2 # Hydraulics outlet pressure (PHo/Pn) + D66_PDB = 3 # Dry Bicarb pressure (PDB/PCb) + D51_PDS = 4 # Spent Dialysate pressure (PDs) + D18_PDF = 5 # Fresh Dialysate pressure (PDf) + D41_PTM = 6 # Transmembrane pressure (Ptm) + NUM_OF_PRESSURE_SENSORS = 7 class DDPressureSensors(AbstractSubSystem): @@ -44,7 +43,6 @@ """ - def __init__(self, can_interface, logger: Logger): """ @@ -61,85 +59,85 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_pressures_sync) - self.filtered_water_inlet_input_pressure = 0.0 - self.filtered_water_inlet_output_pressure = 0.0 - self.filtered_hydraulics_output_pressure = 0.0 - self.filtered_bibag_presssure = 0.0 - self.filtered_spent_dialysate_pressure = 0.0 - self.filtered_fresh_dialysate_pressure = 0.0 - self.filtered_transmembrane_pressure = 0.0 - self.filtered_water_inlet_input_temp = 0.0 - self.filtered_water_inlet_output_temp = 0.0 - self.filtered_hydraulics_output_temp = 0.0 - self.filtered_bibag_temp = 0.0 - self.filtered_spent_dialysate_temp = 0.0 - self.filtered_fresh_dialysate_temp = 0.0 - self.transmembrane_temp = 0.0 + self.m1_pri = 0.0 + self.m3_pro = 0.0 + self.d9_pho = 0.0 + self.d66_pdb = 0.0 + self.d51_pds = 0.0 + self.d18_pdf = 0.0 + self.d41_ptm = 0.0 + self.m1_pri_temp = 0.0 + self.m3_pro_temp = 0.0 + self.d9_pho_temp = 0.0 + self.d66_pdb_temp = 0.0 + self.d51_pds_temp = 0.0 + self.d18_pdf_temp = 0.0 + self.d41_ptm_temp = 0.0 self.dd_pressures_timestamp = 0 @publish([ "dd_pressures_timestamp", - "water_inlet_input_pressure", - "water_inlet_output_pressure", - "hydraulics_output_pressure", - "bibag_presssure", - "spent_dialysate_pressure", - "fresh_dialysate_pressure", - "transmembrane_pressure", - "water_inlet_input_temp", - "water_inlet_output_temp", - "hydraulics_output_temp", - "bibag_temp", - "spent_dialysate_temp", - "fresh_dialysate_temp", - "transmembrane_temp", + "m1_pri", + "m3_pro", + "d9_pho", + "d66_pdb", + "d51_pds", + "d18_pdf", + "d41_ptm", + "m1_pri_temp", + "m3_pro_temp", + "d9_pho_temp", + "d66_pdb_temp", + "d51_pds_temp", + "d18_pdf_temp", + "d41_ptm_temp", ]) def _handler_pressures_sync(self, message,timestamp=0.0): """ - Handles published pressure data messages. Pressure data are captured + Handles published DD pressure data messages. DD Pressure data are captured for reference. - @param message: published pressure data message + @param message: published DD pressure data message @return: none """ - self.filtered_water_inlet_input_pressure = struct.unpack('f', bytearray( + self.m1_pri = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - self.filtered_water_inlet_output_pressure = struct.unpack('f', bytearray( + self.m3_pro = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - self.filtered_hydraulics_output_pressure = struct.unpack('f', bytearray( + self.d9_pho = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - self.filtered_bibag_presssure = struct.unpack('f', bytearray( + self.d66_pdb = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.filtered_spent_dialysate_pressure = struct.unpack('f', bytearray( + self.d51_pds = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.filtered_fresh_dialysate_pressure = struct.unpack('f', bytearray( + self.d18_pdf = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - self.filtered_transmembrane_pressure = struct.unpack('f', bytearray( + self.d41_ptm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - self.filtered_water_inlet_input_temp = struct.unpack('f', bytearray( + self.m1_pri_temp = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.filtered_water_inlet_output_temp = struct.unpack('f', bytearray( + self.m3_pro_temp = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] - self.filtered_hydraulics_output_temp = struct.unpack('f', bytearray( + self.d9_pho_temp = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] - self.filtered_bibag_temp = struct.unpack('f', bytearray( + self.d66_pdb_temp = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] - self.filtered_spent_dialysate_temp = struct.unpack('f', bytearray( + self.d51_pds_temp = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] - self.filtered_fresh_dialysate_temp = struct.unpack('f', bytearray( + self.d18_pdf_temp = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - self.filtered_transmembrane_temp = struct.unpack('f', bytearray( + self.d41_ptm_temp = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] self.dd_pressures_timestamp = timestamp def cmd_pressure_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ - Constructs and sends the pressure override command. + Constructs and sends the pressure broadcast interval override command. Constraints: - Must be logged into DG. - Given interval must be non-zero and a multiple of the DG general task interval (50 ms). + Must be logged into DD. + Given interval must be non-zero and a multiple of the DD general task interval (50 ms). @param ms: unsigned int - broadcast interval (in ms) @param reset: integer - 1 to reset a previous override, 0 to override @@ -173,13 +171,12 @@ def cmd_pressure_readings_override(self, sensor: int, pressure: float, reset: int = NO_RESET) -> int: """ - Constructs and sends the pressure override command. + Constructs and sends the pressure readings override command. Constraints: - Must be logged into DG. - Given sensor must be one of the sensors listed below. + Must be logged into DD. @param sensor: unsigned int - sensor ID - @param pressure: unsigned int - pressure (in PSI) + @param pressure: float - pressure (in PSI) @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise """ @@ -208,13 +205,12 @@ def cmd_pressure_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: """ - Constructs and sends the pressure override command. + Constructs and sends the pressure temperature override command. Constraints: - Must be logged into DG. - Given sensor must be one of the sensors listed below. + Must be logged into DD. @param sensor: unsigned int - sensor ID - @param temperature: unsigned int - pressure (in PSI) + @param temperature: float - pressure (in PSI) @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise """ @@ -243,10 +239,12 @@ def cmd_pressure_sensor_read_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: """ - Constructs and sends the conductivity value override command + Constructs and sends the pressure sensor read counter override command + Constraints: + Must be logged into DD. @param sensor: unsigned int - sensor ID - @param counter: integer - conductivity value to override sensor with + @param counter: integer - read count to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -265,7 +263,7 @@ str_res = "reset back to normal" else: str_res = str(sensor) + " psi" - self.logger.debug("override pressure sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override read counter value for pressure sensor " + str(sensor) + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -280,10 +278,12 @@ def cmd_pressure_sensor_error_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: """ - Constructs and sends the conductivity value override command + Constructs and sends the pressure sensor error counter override command. + Constraints: + Must be logged into DD. @param sensor: unsigned int - sensor ID - @param counter: integer - conductivity value to override sensor with + @param counter: integer - error count to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -302,7 +302,7 @@ str_res = "reset back to normal" else: str_res = str(sensor) + " psi" - self.logger.debug("override pressure sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override error counter value for pressure sensor " + str(sensor) + ": " + str_res) # Send message received_message = self.can_interface.send(message) @@ -317,13 +317,12 @@ def cmd_pressure_filtered_readings_override(self, sensor: int, pressure: float, reset: int = NO_RESET) -> int: """ - Constructs and sends the pressure override command. + Constructs and sends the pressure filtered readings override command. Constraints: - Must be logged into DG. - Given sensor must be one of the sensors listed below. + Must be logged into DD. @param sensor: unsigned int - sensor ID - @param pressure: unsigned int - pressure (in PSI) + @param pressure: float - pressure (in PSI) @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise """ @@ -352,13 +351,12 @@ def cmd_pressure_filtered_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: """ - Constructs and sends the pressure override command. + Constructs and sends the filtered temperature override command. Constraints: - Must be logged into DG. - Given sensor must be one of the sensors listed below. + Must be logged into DD. @param sensor: unsigned int - sensor ID - @param temperature: unsigned int - pressure (in PSI) + @param temperature: float - temperature to override the sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise """ Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -rb5aa0da384c5cc177f83d59aa221ae28881cd26a -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision b5aa0da384c5cc177f83d59aa221ae28881cd26a) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -69,9 +69,9 @@ @publish(["dd_temperatures_timestamp", "dd_temperatures"]) def _handler_temperature_sensors_sync(self, message,timestamp=0.0): """ - Handles published temperature sensors message + Handles published DD temperature sensors message - @param message: published temperature sensors data message + @param message: published DD temperature sensors data message @returns none """ self.dd_temperatures[DDTemperaturesNames.D1_TEMP.name] = struct.unpack('f', bytearray( @@ -179,10 +179,10 @@ def cmd_temperature_sensor_read_counter_override(self, sensor: int, counter: int, reset: int = NO_RESET) -> int: """ - Constructs and sends the temperature value override command + Constructs and sends the temperature read counter override command @param sensor: unsigned int - sensor ID - @param counter: float - temperature value to override sensor with + @param counter: int - read counter to override sensor with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise @@ -201,7 +201,7 @@ str_res = "reset back to normal" else: str_res = str(counter) + " celsius" - self.logger.debug("override conductivity sensor value for sensor " + str(sensor) + ": " + str_res) + self.logger.debug("override read counter for temperature sensor " + str(sensor) + ": " + str_res) # Send message received_message = self.can_interface.send(message) Index: leahi_dialin/dd/modules/valves.py =================================================================== diff -u -rb5aa0da384c5cc177f83d59aa221ae28881cd26a -r9466b5c6b5867f392104a42608aa9542a7ff0358 --- leahi_dialin/dd/modules/valves.py (.../valves.py) (revision b5aa0da384c5cc177f83d59aa221ae28881cd26a) +++ leahi_dialin/dd/modules/valves.py (.../valves.py) (revision 9466b5c6b5867f392104a42608aa9542a7ff0358) @@ -39,34 +39,34 @@ @unique class DDValveNames(DialinEnum): - D14_VHO = 0 # Valve Hydraulics Outlet (D14) - D52_VTD = 1 # Valve Thermal Disinfect (D52) - D8_VHB = 2 # Valve Hydraulics Bypass (D8) - D54_VRP = 3 # Valve Rinse Port (D54) - D53_VDR = 4 # Valve Drain (D53) - D65_VDB2 = 5 # Valve DryBcarb Inlet (D65) - D64_VP1 = 6 # Valve Purge 1 (D64) - D31_VPT = 7 # Valve Pressure Test (D31) - D34_VDB1 = 8 # Valve Dialyzer Bypass (D34) - D35_VDI = 9 # Valve Dialyzer Inlet (D35) - D40_VDO = 10 # Valve Dialyzer Outlet (D40) - D47_VP2 = 11 # Valve Dialysate Out Purge 2 (D47) - D3_VHI = 12 # Valve Hydraulics Inlet (D3) - M4_VWI = 13 # Valve Water Inlet (M4) + D14_VALV = 0 # Valve Hydraulics Outlet (D14) + D52_VALV = 1 # Valve Thermal Disinfect (D52) + D8_VALV = 2 # Valve Hydraulics Bypass (D8) + D54_VALV = 3 # Valve Rinse Port (D54) + D53_VALV = 4 # Valve Drain (D53) + D65_VALV = 5 # Valve DryBcarb Inlet (D65) + D64_VALV = 6 # Valve Purge 1 (D64) + D31_VALV = 7 # Valve Pressure Test (D31) + D34_VALV = 8 # Valve Dialyzer Bypass (D34) + D35_VALV = 9 # Valve Dialyzer Inlet (D35) + D40_VALV = 10 # Valve Dialyzer Outlet (D40) + D47_VALV = 11 # Valve Dialysate Out Purge 2 (D47) + D3_VALV = 12 # Valve Hydraulics Inlet (D3) + M4_VALV = 13 # Valve Water Inlet (M4) RSRVD_SPACE1 = 14 # This space has been reserved RSRVD_SPACE2 = 15 # This space has been reserved - D23_BCV1 = 16 # Balancing chamber Valve 1 (D23) - D19_BCV2 = 17 # Balancing chamber Valve 2 (D19) - D25_BCV3 = 18 # Balancing chamber Valve 3 (D25) - D26_BCV7 = 19 # Balancing chamber Valve 7 (D26) - D24_BCV5 = 20 # Balancing chamber Valve 5 (D24) - D20_BCV6 = 21 # Balancing chamber Valve 6 (D20) - D21_BCV4 = 22 # Balancing chamber Valve 4 (D21) - D22_BCV8 = 23 # Balancing chamber Valve 8 (D22) - D69_UFI1 = 24 # Ultrafiltration Valve 1 Inlet (D69) - D71_UFI2 = 25 # Ultrafiltration Valve 2 Inlet (D71) - D70_UFO1 = 26 # Ultrafiltration Valve 1 Outlet (D70) - D72_UFO2 = 27 # Ultrafiltration Valve 2 Outlet (D72) + D23_VALV = 16 # Balancing chamber Valve 1 (D23) + D19_VALV = 17 # Balancing chamber Valve 2 (D19) + D25_VALV = 18 # Balancing chamber Valve 3 (D25) + D26_VALV = 19 # Balancing chamber Valve 7 (D26) + D24_VALV = 20 # Balancing chamber Valve 5 (D24) + D20_VALV = 21 # Balancing chamber Valve 6 (D20) + D21_VALV = 22 # Balancing chamber Valve 4 (D21) + D22_VALV = 23 # Balancing chamber Valve 8 (D22) + D69_VALV = 24 # Ultrafiltration Valve 1 Inlet (D69) + D71_VALV = 25 # Ultrafiltration Valve 2 Inlet (D71) + D70_VALV = 26 # Ultrafiltration Valve 1 Outlet (D70) + D72_VALV = 27 # Ultrafiltration Valve 2 Outlet (D72) class DDValves(AbstractSubSystem): """ @@ -101,39 +101,39 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_valves_sync) self.valve_states_all = 0x00000000 - self.d14_vho = {"id": DDValveNames.D14_VHO.value, "state": DEENERGIZED} - self.d52_vtd = {"id": DDValveNames.D52_VTD.value, "state": DEENERGIZED} - self.d8_vhb = {"id": DDValveNames.D8_VHB.value, "state": DEENERGIZED} - self.d54_vrp = {"id": DDValveNames.D54_VRP.value, "state": DEENERGIZED} - self.d53_vdr = {"id": DDValveNames.D53_VDR.value, "state": DEENERGIZED} - self.d65_vdb2 = {"id": DDValveNames.D65_VDB2.value, "state": DEENERGIZED} - self.d64_vp1 = {"id": DDValveNames.D64_VP1.value, "state": DEENERGIZED} - self.d31_vpt = {"id": DDValveNames.D31_VPT.value, "state": DEENERGIZED} - self.d34_vdb1 = {"id": DDValveNames.D34_VDB1.value, "state": DEENERGIZED} - self.d35_vdi = {"id": DDValveNames.D35_VDI.value, "state": DEENERGIZED} - self.d40_vdo = {"id": DDValveNames.D40_VDO.value, "state": DEENERGIZED} - self.d47_vp2 = {"id": DDValveNames.D47_VP2.value, "state": DEENERGIZED} - self.d3_vhi = {"id": DDValveNames.D3_VHI.value, "state": DEENERGIZED} - self.m4_vwi = {"id": DDValveNames.M4_VWI.value, "state": DEENERGIZED} + self.d14_valv = {"id": DDValveNames.D14_VALV.value, "state": DEENERGIZED} + self.d52_valv = {"id": DDValveNames.D52_VALV.value, "state": DEENERGIZED} + self.d8_valv = {"id": DDValveNames.D8_VALV.value, "state": DEENERGIZED} + self.d54_valv = {"id": DDValveNames.D54_VALV.value, "state": DEENERGIZED} + self.d53_valv = {"id": DDValveNames.D53_VALV.value, "state": DEENERGIZED} + self.d65_valv = {"id": DDValveNames.D65_VALV.value, "state": DEENERGIZED} + self.d64_valv = {"id": DDValveNames.D64_VALV.value, "state": DEENERGIZED} + self.d31_valv = {"id": DDValveNames.D31_VALV.value, "state": DEENERGIZED} + self.d34_valv = {"id": DDValveNames.D34_VALV.value, "state": DEENERGIZED} + self.d35_valv = {"id": DDValveNames.D35_VALV.value, "state": DEENERGIZED} + self.d40_valv = {"id": DDValveNames.D40_VALV.value, "state": DEENERGIZED} + self.d47_valv = {"id": DDValveNames.D47_VALV.value, "state": DEENERGIZED} + self.d3_valv = {"id": DDValveNames.D3_VALV.value, "state": DEENERGIZED} + self.m4_valv = {"id": DDValveNames.M4_VALV.value, "state": DEENERGIZED} self.rsvrd1 = {"id": DDValveNames.RSRVD_SPACE1.value, "state": DEENERGIZED} self.rsvrd2 = {"id": DDValveNames.RSRVD_SPACE2.value, "state": DEENERGIZED} - self.d23_bcv1 = {"id": DDValveNames.D23_BCV1.value, "state": DEENERGIZED} - self.d19_bcv2 = {"id": DDValveNames.D19_BCV2.value, "state": DEENERGIZED} - self.d25_bcv3 = {"id": DDValveNames.D25_BCV3.value, "state": DEENERGIZED} - self.d26_bcv7 = {"id": DDValveNames.D26_BCV7.value, "state": DEENERGIZED} - self.d24_bcv5 = {"id": DDValveNames.D24_BCV5.value, "state": DEENERGIZED} - self.d20_bcv6 = {"id": DDValveNames.D20_BCV6.value, "state": DEENERGIZED} - self.d21_bcv4 = {"id": DDValveNames.D21_BCV4.value, "state": DEENERGIZED} - self.d22_bcv8 = {"id": DDValveNames.D22_BCV8.value, "state": DEENERGIZED} + self.d23_valv = {"id": DDValveNames.D23_VALV.value, "state": DEENERGIZED} + self.d19_valv = {"id": DDValveNames.D19_VALV.value, "state": DEENERGIZED} + self.d25_valv = {"id": DDValveNames.D25_VALV.value, "state": DEENERGIZED} + self.d26_valv = {"id": DDValveNames.D26_VALV.value, "state": DEENERGIZED} + self.d24_valv = {"id": DDValveNames.D24_VALV.value, "state": DEENERGIZED} + self.d20_valv = {"id": DDValveNames.D20_VALV.value, "state": DEENERGIZED} + self.d21_valv = {"id": DDValveNames.D21_VALV.value, "state": DEENERGIZED} + self.d22_valv = {"id": DDValveNames.D22_VALV.value, "state": DEENERGIZED} - self.d69_ufi1 = {"id": DDValveNames.D69_UFI1.value, "state": DEENERGIZED} - self.d71_ufi2 = {"id": DDValveNames.D71_UFI2.value, "state": DEENERGIZED} - self.d70_ufo1 = {"id": DDValveNames.D70_UFO1.value, "state": DEENERGIZED} - self.d72_ufo2 = {"id": DDValveNames.D72_UFO2.value, "state": DEENERGIZED} + self.d69_valv = {"id": DDValveNames.D69_VALV.value, "state": DEENERGIZED} + self.d69_valv = {"id": DDValveNames.D71_VALV.value, "state": DEENERGIZED} + self.d70_valv = {"id": DDValveNames.D70_UFO1.value, "state": DEENERGIZED} + self.d72_valv = {"id": DDValveNames.D70_VALV.value, "state": DEENERGIZED} - # NOTE: The len function counts the enums with the same number only once. This is not the case in the DG valves + # NOTE: The len function counts the enums with the same number only once. This is not the case in the DD valves # class because each valve must have a unique ID. self.valve_states_enum = [0 for _ in range(len(DDValveNames))] @@ -147,34 +147,34 @@ @return: All valve states """ return [ - self.d14_vho.get("state", None), - self.d52_vtd.get("state", None), - self.d8_vhb.get("state", None), - self.d54_vrp.get("state", None), - self.d53_vdr.get("state", None), - self.d65_vdb2.get("state", None), - self.d64_vp1.get("state", None), - self.d31_vpt.get("state", None), - self.d34_vdb1.get("state", None), - self.d35_vdi.get("state", None), - self.d40_vdo.get("state", None), - self.d47_vp2.get("state", None), - self.d3_vhi.get("state", None), - self.m4_vwi.get("state", None), + self.d14_valv.get("state", None), + self.d52_valv.get("state", None), + self.d8_valv.get("state", None), + self.d54_valv.get("state", None), + self.d53_valv.get("state", None), + self.d65_valv.get("state", None), + self.d64_valv.get("state", None), + self.d31_valv.get("state", None), + self.d34_valv.get("state", None), + self.d35_valv.get("state", None), + self.d40_valv.get("state", None), + self.d47_valv.get("state", None), + self.d3_valv.get("state", None), + self.m4_valv.get("state", None), self.rsvrd1.get("state", None), self.rsvrd2.get("state", None), - self.d23_bcv1.get("state", None), - self.d19_bcv2.get("state", None), - self.d25_bcv3.get("state", None), - self.d26_bcv7.get("state", None), - self.d24_bcv5.get("state", None), - self.d20_bcv6.get("state", None), - self.d21_bcv4.get("state", None), - self.d22_bcv8.get("state", None), - self.d69_ufi1.get("state", None), - self.d71_ufi2.get("state", None), - self.d70_ufo1.get("state", None), - self.d72_ufo2.get("state", None) + self.d23_valv.get("state", None), + self.d19_valv.get("state", None), + self.d25_valv.get("state", None), + self.d26_valv.get("state", None), + self.d24_valv.get("state", None), + self.d20_valv.get("state", None), + self.d21_valv.get("state", None), + self.d22_valv.get("state", None), + self.d69_valv.get("state", None), + self.d71_valv.get("state", None), + self.d70_valv.get("state", None), + self.d72_valv.get("state", None) ] @staticmethod @@ -210,41 +210,41 @@ @publish([ "dd_valves_states_timestamp", "valve_states_all", - "d14_vho", - "d52_vtd", - "d8_vhb", - "d54_vrp", - "d53_vdr", - "d65_vdb2", - "d64_vp1", - "d31_vpt", - "d34_vdb1", - "d35_vdi", - "d40_vdo", - "d47_vp2", - "d3_vhi", - "m4_vwi", + "d14_valv", + "d52_valv", + "d8_valv", + "d54_valv", + "d53_valv", + "d65_valv", + "d64_valv", + "d31_valv", + "d34_valv", + "d35_valv", + "d40_valv", + "d47_valv", + "d3_valv", + "m4_valv", "rsvrd1", "rsvrd2", - "d23_bcv1", - "d19_bcv2", - "d25_bcv3", - "d26_bcv7", - "d24_bcv5", - "d20_bcv6", - "d21_bcv4", - "d22_bcv8", - "d69_ufi1", - "d71_ufi2", - "d70_ufo1", - "d72_ufo2", + "d23_valv", + "d19_valv", + "d25_valv", + "d26_valv", + "d24_valv", + "d20_valv", + "d21_valv", + "d22_valv", + "d69_valv", + "d71_valv", + "d70_valv", + "d72_valv", "valve_states_enum" ]) def _handler_valves_sync(self, message, timestamp=0.0): """ - Handles published valves states message. + Handles published DD valves states message. - @param message: published valves states message + @param message: published DD valves states message @return: none """ vsa = struct.unpack('I', bytearray(message['message'][self.START_POS_VALVES_STATES:self.END_POS_ALL_VALVES])) @@ -253,38 +253,38 @@ vst = struct.unpack('H', bytearray(message['message'][self.START_POS_VALVES_STATES:self.END_POS_VALVES_STATES])) # Extract each valve state from U16 valves states using bit-masking - self.d14_vho["state"] = self._binary_to_valve_state(vst[0] & 1) - self.d52_vtd["state"] = self._binary_to_valve_state(vst[0] & 2) - self.d8_vhb["state"] = self._binary_to_valve_state(vst[0] & 4) - self.d54_vrp["state"] = self._binary_to_valve_state(vst[0] & 8) - self.d53_vdr["state"] = self._binary_to_valve_state(vst[0] & 16) - self.d65_vdb2["state"] = self._binary_to_valve_state(vst[0] & 32) - self.d64_vp1["state"] = self._binary_to_valve_state(vst[0] & 64) - self.d31_vpt["state"] = self._binary_to_valve_state(vst[0] & 128) - self.d34_vdb1["state"] = self._binary_to_valve_state(vst[0] & 256) - self.d35_vdi["state"] = self._binary_to_valve_state(vst[0] & 512) - self.d40_vdo["state"] = self._binary_to_valve_state(vst[0] & 1024) - self.d47_vp2["state"] = self._binary_to_valve_state(vst[0] & 2048) - self.d3_vhi["state"] = self._binary_to_valve_state(vst[0] & 4096) - self.m4_vwi["state"] = self._binary_to_valve_state(vst[0] & 8192) + self.d14_valv["state"] = self._binary_to_valve_state(vst[0] & 1) + self.d52_valv["state"] = self._binary_to_valve_state(vst[0] & 2) + self.d8_valv["state"] = self._binary_to_valve_state(vst[0] & 4) + self.d54_valv["state"] = self._binary_to_valve_state(vst[0] & 8) + self.d53_valv["state"] = self._binary_to_valve_state(vst[0] & 16) + self.d65_valv["state"] = self._binary_to_valve_state(vst[0] & 32) + self.d64_valv["state"] = self._binary_to_valve_state(vst[0] & 64) + self.d31_valv["state"] = self._binary_to_valve_state(vst[0] & 128) + self.d34_valv["state"] = self._binary_to_valve_state(vst[0] & 256) + self.d35_valv["state"] = self._binary_to_valve_state(vst[0] & 512) + self.d40_valv["state"] = self._binary_to_valve_state(vst[0] & 1024) + self.d47_valv["state"] = self._binary_to_valve_state(vst[0] & 2048) + self.d3_valv["state"] = self._binary_to_valve_state(vst[0] & 4096) + self.m4_valv["state"] = self._binary_to_valve_state(vst[0] & 8192) self.rsvrd1["state"] = self._binary_to_valve_state(vst[0] & 16384) self.rsvrd2["state"] = self._binary_to_valve_state(vst[0] & 32768) bcv = struct.unpack('B', bytearray(message['message'][self.START_POS_BCV_VALVES_STATES:self.END_POS_BCV_VALVES_STATES])) - self.d23_bcv1["state"] = self._binary_to_valve_state(bcv[0] & 1) - self.d19_bcv2["state"] = self._binary_to_valve_state(bcv[0] & 2) - self.d25_bcv3["state"] = self._binary_to_valve_state(bcv[0] & 4) - self.d26_bcv7["state"] = self._binary_to_valve_state(bcv[0] & 8) - self.d24_bcv5["state"] = self._binary_to_valve_state(bcv[0] & 16) - self.d20_bcv6["state"] = self._binary_to_valve_state(bcv[0] & 32) - self.d21_bcv4["state"] = self._binary_to_valve_state(bcv[0] & 64) - self.d22_bcv8["state"] = self._binary_to_valve_state(bcv[0] & 128) + self.d23_valv["state"] = self._binary_to_valve_state(bcv[0] & 1) + self.d19_valv["state"] = self._binary_to_valve_state(bcv[0] & 2) + self.d25_valv["state"] = self._binary_to_valve_state(bcv[0] & 4) + self.d26_valv["state"] = self._binary_to_valve_state(bcv[0] & 8) + self.d24_valv["state"] = self._binary_to_valve_state(bcv[0] & 16) + self.d20_valv["state"] = self._binary_to_valve_state(bcv[0] & 32) + self.d21_valv["state"] = self._binary_to_valve_state(bcv[0] & 64) + self.d22_valv["state"] = self._binary_to_valve_state(bcv[0] & 128) ufi = struct.unpack('B', bytearray(message['message'][self.START_POS_UFI_VALVES_STATES:self.END_POS_UFI_VALVES_STATES])) - self.d69_ufi1["state"] = self._binary_to_valve_state(ufi[0] & 1) - self.d71_ufi2["state"] = self._binary_to_valve_state(ufi[0] & 2) - self.d70_ufo1["state"] = self._binary_to_valve_state(ufi[0] & 4) - self.d72_ufo2["state"] = self._binary_to_valve_state(ufi[0] & 8) + self.d69_valv["state"] = self._binary_to_valve_state(ufi[0] & 1) + self.d69_valv["state"] = self._binary_to_valve_state(ufi[0] & 2) + self.d70_valv["state"] = self._binary_to_valve_state(ufi[0] & 4) + self.d72_valv["state"] = self._binary_to_valve_state(ufi[0] & 8) start = self.END_POS_UFI_VALVES_STATES end = start + 1 @@ -373,14 +373,14 @@ Must be logged into DD. Given valve ID must be one of the valve IDs listed below. - @param bcv1: bool - valve state for BCV1 (true=open, false=closed) - @param bcv2: bool - valve state for BCV2 (true=open, false=closed) - @param bcv3: bool - valve state for BCV3 (true=open, false=closed) - @param bcv4: bool - valve state for BCV4 (true=open, false=closed) - @param bcv5: bool - valve state for BCV5 (true=open, false=closed) - @param bcv6: bool - valve state for BCV6 (true=open, false=closed) - @param bcv7: bool - valve state for BCV7 (true=open, false=closed) - @param bcv8: bool - valve state for BCV8 (true=open, false=closed) + @param bcv1: bool - valve state for D23_VALV (true=open, false=closed) + @param bcv2: bool - valve state for D19_VALV (true=open, false=closed) + @param bcv3: bool - valve state for D25_VALV (true=open, false=closed) + @param bcv4: bool - valve state for D26_VALV (true=open, false=closed) + @param bcv5: bool - valve state for D24_VALV (true=open, false=closed) + @param bcv6: bool - valve state for D20_VALV (true=open, false=closed) + @param bcv7: bool - valve state for D21_VALV (true=open, false=closed) + @param bcv8: bool - valve state for D22_VALV (true=open, false=closed) @return: 1 if successful, zero otherwise """ @@ -425,8 +425,8 @@ """ Constructs and sends the valve state override command. Constraints: - Must be logged into DG. - Given interval must be non-zero and a multiple of the DG general task interval (50 ms). + Must be logged into DD. + Given interval must be non-zero and a multiple of the DD general task interval (50 ms). @param ms: unsigned int - broadcast interval (in ms) @param reset: integer - 1 to reset a previous override, 0 to override @@ -462,10 +462,11 @@ def cmd_valve_set_open_close(self, valve: int, state: int) -> int: """ Constructs and sends the valve open close command + Constraints: + Must be logged into DD. - @param valve: unsigned int - dialysate pump ID - @param command: int - value to command the dialysate pump - @param speed: integer - rpm to set the speed to + @param valve: unsigned int - valve ID + @param state: int - value to command the valve @return: 1 if successful, zero otherwise """