Index: dialin/dg/concentrate_pumps.py =================================================================== diff -u -r3a70bfb451b74106348c064c34f19934aadd9119 -r7fda529ba6cd2ca3c64028735979c0b65b32b306 --- dialin/dg/concentrate_pumps.py (.../concentrate_pumps.py) (revision 3a70bfb451b74106348c064c34f19934aadd9119) +++ dialin/dg/concentrate_pumps.py (.../concentrate_pumps.py) (revision 7fda529ba6cd2ca3c64028735979c0b65b32b306) @@ -14,6 +14,7 @@ # ############################################################################ import struct +from enum import unique from logging import Logger from .constants import RESET, NO_RESET @@ -24,11 +25,19 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray +@unique class ConcentratePumpsEnum(DialinEnum): CP1 = 0 CP2 = 1 +@unique +class DGConcentratePumpsStates(DialinEnum): + CONCENTRATE_PUMP_OFF_STATE = 0 + CONCENTRATE_PUMP_RAMP_TO_TARGET_SPEED_STATE = 1 + CONCENTRATE_PUMP_CONTROL_TARGET_SPEED_STATE = 2 + + class ConcentratePumps(AbstractSubSystem): """ ConcentratePumps @@ -56,7 +65,12 @@ self.concentrate_pump_cp1_measured_speed = 0.0 self.concentrate_pump_cp2_current_set_speed = 0.0 self.concentrate_pump_cp2_measured_speed = 0.0 + self.concentrate_pump_cp1_current_state = 0.0 + self.concentrate_pump_cp2_current_state = 0.0 + self.cp1_temp_pulse = 0.0 + self.cp2_temp_pulse = 0.0 + def get_concentrate_pumps(self): """ Gets the current concentrate pump data value @@ -69,7 +83,8 @@ self.concentrate_pump_cp2_current_set_speed, self.concentrate_pump_cp2_measured_speed] @publish(["concentrate_pump_cp1_current_set_speed", "concentrate_pump_cp1_measured_speed", - "concentrate_pump_cp2_current_set_speed", "concentrate_pump_cp2_measured_speed"]) + "concentrate_pump_cp2_current_set_speed", "concentrate_pump_cp2_measured_speed", + "concentrate_pump_cp1_current_state", "concentrate_pump_cp2_current_state"]) def _handler_concentrate_pumps_sync(self, message): """ Handles published concentrate pumps' data messages. Concentrate pumps' speed data are captured @@ -87,7 +102,16 @@ message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] self.concentrate_pump_cp2_measured_speed = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] + self.concentrate_pump_cp1_current_state = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + self.concentrate_pump_cp2_current_state = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] + self.cp1_temp_pulse = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] + self.cp2_temp_pulse = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] + def cmd_concentrate_pump_state_change_request(self, pump_id: int, on: bool = False) -> int: """ Constructs and sends the concentrate pump state change request command Index: dialin/dg/conductivity_sensors.py =================================================================== diff -u -r3a70bfb451b74106348c064c34f19934aadd9119 -r7fda529ba6cd2ca3c64028735979c0b65b32b306 --- dialin/dg/conductivity_sensors.py (.../conductivity_sensors.py) (revision 3a70bfb451b74106348c064c34f19934aadd9119) +++ dialin/dg/conductivity_sensors.py (.../conductivity_sensors.py) (revision 7fda529ba6cd2ca3c64028735979c0b65b32b306) @@ -65,6 +65,11 @@ 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 + def get_conductivity_sensors(self): """ Gets the current conductivity value @@ -87,7 +92,8 @@ @publish(["ro_rejection_ratio", "conductivity_sensor_cpi", "conductivity_sensor_cpo", "conductivity_sensor_cd1", "conductivity_sensor_cd2", "raw_conductivity_sensor_cpi", "raw_conductivity_sensor_cpo", - "raw_conductivity_sensor_cd1", "raw_conductivity_sensor_cd2"]) + "raw_conductivity_sensor_cd1", "raw_conductivity_sensor_cd2", "cpi_sensor_status", "cpo_sensor_status", + "cd1_sensor_status", "cd2_sensor_status"]) def _handler_conductivity_sensors_sync(self, message): """ Handles published conductivity sensor data messages. Conductivity sensor data are captured @@ -97,37 +103,35 @@ @return: None """ - ro_rejection_ratio = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - cpi = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - cpo = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) - cd1 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) - cd2 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + self.ro_rejection_ratio = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.conductivity_sensor_cpi = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.conductivity_sensor_cpo = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] + self.conductivity_sensor_cd1 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] + self.conductivity_sensor_cd2 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - raw_cpi = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) - raw_cpo = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) - raw_cd1 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8])) - raw_cd2 = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) + self.raw_conductivity_sensor_cpi = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] + self.raw_conductivity_sensor_cpo = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] + self.raw_conductivity_sensor_cd1 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] + self.raw_conductivity_sensor_cd2 = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] - self.ro_rejection_ratio = ro_rejection_ratio[0] - self.conductivity_sensor_cpi = cpi[0] - self.conductivity_sensor_cpo = cpo[0] - self.conductivity_sensor_cd1 = cd1[0] - self.conductivity_sensor_cd2 = cd2[0] + self.cpi_sensor_status = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] + self.cpo_sensor_status = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] + self.cd1_sensor_status = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] + self.cd2_sensor_status = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] - self.raw_conductivity_sensor_cpi = raw_cpi[0] - self.raw_conductivity_sensor_cpo = raw_cpo[0] - self.raw_conductivity_sensor_cd1 = raw_cd1[0] - self.raw_conductivity_sensor_cd2 = raw_cd2[0] - def cmd_conductivity_sensor_override(self, sensor: int, conductivity: float, reset: int = NO_RESET) -> int: """ Constructs and sends the conductivity value override command Index: tests/dg_tests.py =================================================================== diff -u -rc3fa0bd1ad54dddd9f7faee36d806961959f362c -r7fda529ba6cd2ca3c64028735979c0b65b32b306 --- tests/dg_tests.py (.../dg_tests.py) (revision c3fa0bd1ad54dddd9f7faee36d806961959f362c) +++ tests/dg_tests.py (.../dg_tests.py) (revision 7fda529ba6cd2ca3c64028735979c0b65b32b306) @@ -26,6 +26,7 @@ from dialin.dg.temperatures import DGTemperaturesNames from dialin.dg.dialysate_generator import DGOperationModes from dialin.hd.temperatures import HDTemperaturesNames +from dialin.dg.concentrate_pumps import DGConcentratePumpsStates from dialin.dg.uv_reactors import ReactorsNames from dialin.common.hd_defs import HDOpModes, HDOpSubModes, PreTreatmentWetSelfTesStates from dialin.common.dg_defs import DGEventList @@ -237,13 +238,19 @@ def get_concentrate_pumps_info(): info = ('Bicarb_tgt_speed, {:5.3f}, Bicarb_speed, {:5.3f}, Acid_tgt_speed, {:5.3f}, Acid_speed, {:5.3f}, ' - 'CPo, {:5.3f}, CD1, {:5.3f}, CD2, {:5.3f}, ' + 'CPo, {:5.3f}, CD1, {:5.3f}, CD2, {:5.3f}, CP1_state, {}, CP2_state, {}, CPi_status, {}, CPo_status, {}, ' + 'CD1_status, {}, CD2_status, {}, CP1_pulse, {:5.3f}, CP2_pulse, {:5.3f}, ' .format(dg.concentrate_pumps.concentrate_pump_cp2_current_set_speed, dg.concentrate_pumps.concentrate_pump_cp2_measured_speed, dg.concentrate_pumps.concentrate_pump_cp1_current_set_speed, dg.concentrate_pumps.concentrate_pump_cp1_measured_speed, dg.conductivity_sensors.conductivity_sensor_cpo, dg.conductivity_sensors.conductivity_sensor_cd1, - dg.conductivity_sensors.conductivity_sensor_cd2)) + dg.conductivity_sensors.conductivity_sensor_cd2, + DGConcentratePumpsStates(dg.concentrate_pumps.concentrate_pump_cp1_current_state).name, + DGConcentratePumpsStates(dg.concentrate_pumps.concentrate_pump_cp2_current_state).name, + dg.conductivity_sensors.cpi_sensor_status, dg.conductivity_sensors.cpo_sensor_status, + dg.conductivity_sensors.cd1_sensor_status, dg.conductivity_sensors.cd2_sensor_status, + dg.concentrate_pumps.cp1_temp_pulse, dg.concentrate_pumps.cp2_temp_pulse)) return info @@ -557,16 +564,25 @@ # run_heat_disinfect() - run_chemical_disinfect() + # run_chemical_disinfect() # run_dg() # cmd_set_disinfect_ui_screen() - # collect_treatment_data() + #collect_treatment_data() # collect_hd_treatment() - # test_hd_fans_alarms() + #dg.switches.cmd_dg_switch_status_override(0, 0) + #sleep(1) + #dg.switches.cmd_dg_switch_status_override(1, 0) + while True: + #print(dg.switches.get_switches_status()) + print(get_hd_fans_info()) + sleep(1) + + test_hd_fans_alarms() + # test_dg_fans_alarms() Index: tests/hd_nvm_scripts.py =================================================================== diff -u -rc3fa0bd1ad54dddd9f7faee36d806961959f362c -r7fda529ba6cd2ca3c64028735979c0b65b32b306 --- tests/hd_nvm_scripts.py (.../hd_nvm_scripts.py) (revision c3fa0bd1ad54dddd9f7faee36d806961959f362c) +++ tests/hd_nvm_scripts.py (.../hd_nvm_scripts.py) (revision 7fda529ba6cd2ca3c64028735979c0b65b32b306) @@ -27,12 +27,12 @@ # It creates a folder called HD_NV_Records in the destination that is called # If no address is provided, the default location is one folder above the dialin folder wherever it is installed # in your computer. - hd.sw_configs.cmd_get_hd_sw_config_record() + #hd.sw_configs.cmd_get_hd_sw_config_record() # Use cmd_update_hd_sw_config_record() set the changes back to firmware # This function requires an address for the excel report. Use the absolute address of your excel report like the # example below - #hd.sw_configs.cmd_update_hd_sw_config_record('/home/fw/projects/HD_NV_Records/2022-03-09-HD-SW-CONFIGS-Record_EP_File.xlsx') + hd.sw_configs.cmd_update_hd_sw_config_record('/home/fw/projects/HD_NV_Records/2022-03-16-HD-SW-CONFIGS-Record.xlsx') # Use this function to reset the configuration records to all be 0 # hd.sw_configs.cmd_reset_hd_sw_config_record()