Index: dialin/common/alarm_defs.py =================================================================== diff -u -r19d246d9c099e1a15570767f82ca79502aff2776 -r15f32cc3ef0d7629c1ace716ccdab0cf6975b42f --- dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 19d246d9c099e1a15570767f82ca79502aff2776) +++ dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 15f32cc3ef0d7629c1ace716ccdab0cf6975b42f) @@ -267,7 +267,7 @@ ALARM_ID_DG_TEMP_SENSORS_DIFF_OUT_OF_RANGE = 244 ALARM_ID_DG_HEAT_DISINFECT_TARGET_TEMP_TIMEOUT = 245 ALARM_ID_DG_HEAT_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT = 246 - ALARM_ID_DG_HEAT_DISINFECT_INLET_COND_AND_TEMP_OUT = 247 + ALARM_ID_DG_HEAT_DISINFECT_ACTIVE_COOL_TIME_OUT = 247 ALARM_ID_DG_CHEM_DISINFECT_TARGET_TEMP_TIMEOUT = 248 ALARM_ID_DG_CHEM_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT = 249 ALARM_ID_DG_CHEM_DISINFECT_INLET_COND_AND_TEMP_OUT = 250 @@ -328,4 +328,14 @@ ALARM_ID_HD_CPU_RAM_ERROR = 305 ALARM_ID_HD_AIR_TRAP_OVERFILL = 306 ALARM_ID_HD_AC_POWER_LOST_IN_TREATMENT = 307 + ALARM_ID_DG_CPI_COND_SENSOR_INVALID_CHAR = 308 + ALARM_ID_DG_CPO_COND_SENSOR_INVALID_CHAR = 309 + ALARM_ID_DG_CD1_COND_SENSOR_INVALID_CHAR = 310 + ALARM_ID_DG_CD2_COND_SENSOR_INVALID_CHAR = 311 + ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE = 312 + ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_LOW = 313 + ALARM_ID_DG_CLEANING_MODE_INLET_WATER_PRESSURE_TOO_HIGH = 314 + ALARM_ID_DG_CLEANING_MODE_INLET_WATER_PRESSURE_TOO_LOW = 315 + ALARM_ID_DG_ACID_CONCENTRATE_PUMP_PARK_FAULT = 316 + ALARM_ID_DG_BICARB_CONCENTRATE_PUMP_PARK_FAULT = 317 Index: dialin/common/dg_defs.py =================================================================== diff -u -r906ab4d9a99a2783af65b6b25929082370ddedf3 -r15f32cc3ef0d7629c1ace716ccdab0cf6975b42f --- dialin/common/dg_defs.py (.../dg_defs.py) (revision 906ab4d9a99a2783af65b6b25929082370ddedf3) +++ dialin/common/dg_defs.py (.../dg_defs.py) (revision 15f32cc3ef0d7629c1ace716ccdab0cf6975b42f) @@ -31,8 +31,9 @@ DG_MODE_HEAT = 9 # Heat Disinfect mode DG_MODE_CHEM = 10 # Chemical Disinfect mode DG_MODE_CHFL = 11 # Chemical Disinfect Flush mode - DG_MODE_NLEG = 12 # Not legal - an illegal mode transition occurred - NUM_OF_DG_MODES = 13 # Number of DG operation modes + DG_MODE_HCOL = 12 # Heat Disinfect Active Cool mode + DG_MODE_NLEG = 13 # Not legal - an illegal mode transition occurred + NUM_OF_DG_MODES = 14 # Number of DG operation modes @unique @@ -174,16 +175,12 @@ DG_HEAT_DISINFECT_STATE_FILL_R2_WITH_HOT_WATER = 11 # Heat disinfect, fill R2 with hot water state DG_HEAT_DISINFECT_STATE_DISINFECT_R2_TO_R1 = 12 # Heat disinfect, disinfect R2 to R1 state DG_HEAT_DISINFECT_STATE_COOL_DOWN_HEATERS = 13 # Heat disinfect, cool down heaters state - DG_HEAT_DISINFECT_STATE_COOL_DOWN_RO_FILTER = 14 # Heat disinfect, cool down RO filter state - DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1 = 15 # Heat disinfect, mix drain R1 state - DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R2 = 16 # Heat disinfect, mix drain R2 state - DG_HEAT_DISINFECT_STATE_RINSE_R1_TO_R2 = 17 # Heat disinfect, rinse R1 to R2 state - DG_HEAT_DISINFECT_STATE_RINSE_R2_TO_R1_AND_DRAIN_R1 = 18 # Heat disinfect, rinse R2 to R1 and drain R1 state - DG_HEAT_DISINFECT_STATE_RINSE_CIRCULATION = 19 # Heat disinfect, rinse circulation state - DG_HEAT_DISINFECT_STATE_CANCEL_BASIC_PATH = 20 # Heat disinfect, cancel mode basic path state - DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH = 21 # Heat disinfect, cancel mode water path state - DG_HEAT_DISINFECT_STATE_COMPLETE = 22 # Heat disinfect, complete state - NUM_OF_DG_HEAT_DISINFECT_STATES = 23 # Number of heat disinfect mode states + DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1 = 14 # Heat disinfect, mix drain R1 state + DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R2 = 15 # Heat disinfect, mix drain R2 state + DG_HEAT_DISINFECT_STATE_CANCEL_BASIC_PATH = 16 # Heat disinfect, cancel mode basic path state + DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH = 17 # Heat disinfect, cancel mode water path state + DG_HEAT_DISINFECT_STATE_COMPLETE = 18 # Heat disinfect, complete state + NUM_OF_DG_HEAT_DISINFECT_STATES = 19 # Number of heat disinfect mode states @unique @@ -201,6 +198,15 @@ NUM_OF_HEAT_DISINFECT_UI_STATES = 10 @unique +class DGHeatDisinfectActiveCoolStates(DialinEnum): + DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_START = 0 + DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_COOL_DOWN_RO_FILTER = 1 + DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_CANCEL_BASIC_PATH = 2 + DG_HEAT_DISINFECT_ACTIVE_COOL_STATE_COMPLETE = 3 + NUM_OF_DG_HEAT_DISINFECT_ACTIVE_COOL_STATES = 4 + + +@unique class DGChemicalDisinfectStates(DialinEnum): DG_CHEM_DISINFECT_STATE_START = 0 DG_CHEM_DISINFECT_STATE_DRAIN_R1 = 1 Index: dialin/common/msg_ids.py =================================================================== diff -u -rfcd67bdc9dd3b06cba8446114766fa4ffa0f7caa -r15f32cc3ef0d7629c1ace716ccdab0cf6975b42f --- dialin/common/msg_ids.py (.../msg_ids.py) (revision fcd67bdc9dd3b06cba8446114766fa4ffa0f7caa) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 15f32cc3ef0d7629c1ace716ccdab0cf6975b42f) @@ -8,7 +8,7 @@ # @file msg_ids.py # # @author (last) Dara Navaei -# @date (last) 08-Nov-2022 +# @date (last) 08-Dec-2022 # @author (original) Peter Lucia # @date (original) 06-Apr-2021 # @@ -212,8 +212,13 @@ MSG_ID_DG_CPLD_STATUS = 0xBD MSG_ID_HD_BATTERY_MANAGEMENT_DATA = 0xBE MSG_ID_HD_BATTERY_STATUS_DATA = 0xBF - MSG_ID_DG_HEAT_DISINFECT_ACTIVE_COOL_DATA = 0xC0 - MSG_ID_DG_START_STOP_HEAT_DISINFECT_ACTIVE_COOL = 0xC1 + MSG_ID_DG_CHEM_DISINFECT_FLUSH_DATA = 0xC0 + MSG_ID_DG_CHEM_DISINFECT_FLUSH_TIME_DATA = 0xC1 + MSG_ID_DG_START_STOP_CHEM_DISINFECT_FLUSH = 0xC2 + MSG_ID_UI_CHEM_DISINFECT_FLUSH_CONFIRM = 0xC3 + MSG_ID_HD_CHEM_DISINFECT_FLUSH_CONFIRM_RESPONSE = 0xC4 + MSG_ID_DG_HEAT_DISINFECT_ACTIVE_COOL_DATA = 0xC5 + MSG_ID_DG_START_STOP_HEAT_DISINFECT_ACTIVE_COOL = 0xC6 MSG_ID_CAN_ERROR_COUNT = 0x999 @@ -316,7 +321,7 @@ MSG_ID_HD_AIR_PUMP_PUBLISH_INTERVAL_OVERRIDE = 0x8061 MSG_ID_HD_SWITCHES_STATUS_OVERRIDE = 0x8062 MSG_ID_HD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE = 0x8063 - MSG_ID_HD_BATTERY_REMAINING_PERCENT_OVERRIDE = 0x8064 + MSG_ID_HD_BATTERY_REMAINING_CAP_MWH_OVERRIDE = 0x8064 MSG_ID_HD_TEMPERATURES_VALUE_OVERRIDE = 0x8065 MSG_ID_HD_TEMPERATURES_PUBLISH_INTERVAL_OVERRIDE = 0x8066 MSG_ID_HD_FANS_PUBLISH_INTERVAL_OVERRIDE = 0x8067 Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -rca3dffa6d804bbaeff6eb1009edf88835107dc44 -r15f32cc3ef0d7629c1ace716ccdab0cf6975b42f --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision ca3dffa6d804bbaeff6eb1009edf88835107dc44) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 15f32cc3ef0d7629c1ace716ccdab0cf6975b42f) @@ -20,6 +20,7 @@ from .alarms import DGAlarms from .calibration_record import DGCalibrationNVRecord from .chemical_disinfect import ChemicalDisinfect +from .chemical_disinfect_flush import ChemicalDisinfectFlushMode from .concentrate_pumps import ConcentratePumps from .conductivity_sensors import ConductivitySensors from .constants import RESET, NO_RESET @@ -163,6 +164,7 @@ self.alarms = DGAlarms(self.can_interface, self.logger) self.calibration_record = DGCalibrationNVRecord(self.can_interface, self.logger) self.chemical_disinfect = ChemicalDisinfect(self.can_interface, self.logger) + self.chemical_disinfect_flush = ChemicalDisinfectFlushMode(self.can_interface, self.logger) self.concentrate_pumps = ConcentratePumps(self.can_interface, self.logger) self.conductivity_sensors = ConductivitySensors(self.can_interface, self.logger) self.dialysate_fill = DialysateFill(self.can_interface, self.logger) @@ -363,18 +365,7 @@ Must be logged into DG. Transition from current to requested op mode must be legal. - @param new_mode: ID of operation mode to transition to - DG_MODE_FAUL = 0 - DG_MODE_SERV = 1 - DG_MODE_INIT = 2 - DG_MODE_STAN = 3 - DG_MODE_SOLO = 4 - DG_MODE_GENE = 5 - DG_MODE_FILL = 6 - DG_MODE_DRAI = 7 - DG_MODE_FLUS = 8 - DG_MODE_HEAT = 9 - DG_MODE_CHEM = 10 + @param new_mode: ID of operation mode to transition to (see DGOpModes enum for options) @return: 1 if successful, zero otherwise Index: dialin/dg/hd_proxy.py =================================================================== diff -u -rc179a1b072005028cb495911f463b2bfcd9aa1d2 -r15f32cc3ef0d7629c1ace716ccdab0cf6975b42f --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision c179a1b072005028cb495911f463b2bfcd9aa1d2) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 15f32cc3ef0d7629c1ace716ccdab0cf6975b42f) @@ -273,6 +273,37 @@ self.logger.debug("Timeout!!!!") return False + def cmd_start_stop_dg_heat_disinfect_active_cool(self, start: bool = True) -> int: + """ + Constructs and sends the start/stop DG heat disinfect active cool command + + @param start: (bool) True = start heat disinfect active cool, False = stop heat disinfect active cool. + @return: non-zero integer if successful, False otherwise + """ + # 1 is to start + if start: + cmd = 1 + cmd_str = "Starting" + else: + cmd = 0 + cmd_str = "Stopping" + payload = integer_to_bytearray(cmd) + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_START_STOP_HEAT_DISINFECT_ACTIVE_COOL.value, + payload=payload) + + self.logger.debug(cmd_str + " DG heat disinfect active cool") + + 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.debug("Timeout!!!!") + return False + def cmd_start_stop_dg_flush(self, start: bool = True) -> int: """ Constructs and sends the start/stop DG flush command Index: dialin/hd/alarms.py =================================================================== diff -u -rc179a1b072005028cb495911f463b2bfcd9aa1d2 -r15f32cc3ef0d7629c1ace716ccdab0cf6975b42f --- dialin/hd/alarms.py (.../alarms.py) (revision c179a1b072005028cb495911f463b2bfcd9aa1d2) +++ dialin/hd/alarms.py (.../alarms.py) (revision 15f32cc3ef0d7629c1ace716ccdab0cf6975b42f) @@ -15,6 +15,8 @@ ############################################################################ import struct from logging import Logger +from enum import unique +from ..utils.base import DialinEnum from .constants import RESET, NO_RESET from ..common.msg_defs import MsgIds, MsgFieldPositions @@ -44,6 +46,14 @@ HD_ALARM_STATE_MEDIUM = 2 HD_ALARM_STATE_HIGH = 3 + # Alarm response buttons + @unique + class AlarmResponseButtons(DialinEnum): + HD_ALARM_RESPONSE_BUTTON_RESUME = 0 + HD_ALARM_RESPONSE_BUTTON_RINSEBACK = 1 + HD_ALARM_RESPONSE_BUTTON_END_TREATMENT = 2 + NUM_OF_HD_ALARM_RESPONSE_BUTTONS = 3 + # Alarm status message field positions START_POS_ALARM_STATE = DenaliMessage.PAYLOAD_START_INDEX END_POS_ALARM_STATE = START_POS_ALARM_STATE + 4 @@ -109,6 +119,8 @@ self.alarm_audio_curr_lg = 0.0 self.alarm_backup_audio_curr = 0.0 self.safety_shutdown_active = False + self.alarm_table_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_HD_ALARM_RESPONSE_BUTTONS.value + self.alarm_state_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_HD_ALARM_RESPONSE_BUTTONS.value def get_current_alarms_state(self): """ @@ -126,6 +138,22 @@ """ return self.alarm_states + def get_alarm_response_button_table_blocker_states(self): + """ + Gets the states (T/F) of the alarm response buttons blocked by alarm table properties. + + @return: List of booleans of size 3 (for resume, rinseback and end treatment buttons) + """ + return self.alarm_table_button_blockers + + def get_alarm_response_button_state_blocker_states(self): + """ + Gets the states (T/F) of the alarm response buttons blocked by state properties. + + @return: List of booleans of size 3 (for resume, rinseback and end treatment buttons) + """ + return self.alarm_state_button_blockers + def get_alarm_conditions(self): """ Gets all alarm condition states for all alarms @@ -433,7 +461,7 @@ self.alarm_conditions[alarm_id[0]] = False @publish(["alarm_volume", "alarm_audio_curr_hg", "alarm_audio_curr_lg", "alarm_backup_audio_curr", - "safety_shutdown_active"]) + "safety_shutdown_active", "alarm_table_button_blockers", "alarm_state_button_blockers"]) def _handler_alarm_information_sync(self, message): """ Handles published HD alarm information broadcast messages. @@ -452,11 +480,30 @@ message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) saf = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + trs = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5+1])) + trb = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+1:MsgFieldPositions.END_POS_FIELD_5+2])) + tet = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+2:MsgFieldPositions.END_POS_FIELD_5+3])) + srs = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+3:MsgFieldPositions.END_POS_FIELD_5+4])) + srb = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+4:MsgFieldPositions.END_POS_FIELD_5+5])) + set = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+5:MsgFieldPositions.END_POS_FIELD_5+6])) + self.alarm_volume = vol[0] self.alarm_audio_curr_hg = ach[0] self.alarm_audio_curr_lg = acl[0] self.alarm_backup_audio_curr = bac[0] self.safety_shutdown_active = True if saf[0] == 1 else False + self.alarm_table_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RESUME.value] = True if trs[0] == 1 else False + self.alarm_table_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RINSEBACK.value] = True if trb[0] else False + self.alarm_table_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_END_TREATMENT.value] = True if tet[0] else False + self.alarm_state_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RESUME.value] = True if srs[0] else False + self.alarm_state_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RINSEBACK.value] = True if srb[0] else False + self.alarm_state_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_END_TREATMENT.value] = True if set[0] else False def cmd_clear_all_alarms(self) -> int: """ Index: tests/dg_tests.py =================================================================== diff -u -r9b1a55ac19c91f2c7eea6018eac9b7e3d86f227b -r15f32cc3ef0d7629c1ace716ccdab0cf6975b42f --- tests/dg_tests.py (.../dg_tests.py) (revision 9b1a55ac19c91f2c7eea6018eac9b7e3d86f227b) +++ tests/dg_tests.py (.../dg_tests.py) (revision 15f32cc3ef0d7629c1ace716ccdab0cf6975b42f) @@ -30,7 +30,8 @@ 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, HDStandbyStates, PreTreatmentWetSelfTestStates, PostTreatmentStates +from dialin.common.hd_defs import HDOpModes, HDStandbyStates, PreTreatmentWetSelfTestStates, PostTreatmentStates, \ + PreTreatmentDrySelfTestsStates from dialin.hd.post_treatment import HDPostTreatmentDrainStates from dialin.common.dg_defs import DGEventList from dialin.common.hd_defs import HDEventList @@ -46,7 +47,7 @@ from dialin.hd.valves import HDValves from dialin.hd.voltages import HDMonitoredVoltages from dialin.hd.pretreatment import PreTreatmentRsrvrState -from dialin.common.dg_defs import DGFlushStates +from dialin.common.dg_defs import DGFlushStates, DGHeatDisinfectActiveCoolStates from time import sleep from datetime import datetime import sys @@ -79,10 +80,21 @@ return info def get_heat_disinfect_mode_info(): + state = 0 + state_elapsed_time = 0 + overall_elapsed_time = 0 + if dg.dg_operation_mode == 9: + state = DGHeatDisinfectStates(dg.heat_disinfect.heat_disinfect_state).name + overall_elapsed_time = dg.heat_disinfect.overall_elapsed_time + state_elapsed_time = dg.heat_disinfect.state_elapsed_time + elif dg.dg_operation_mode == 12: + state = DGHeatDisinfectActiveCoolStates(dg.heat_disinfect_active_cool.heat_disinfect_active_cool_state).name + overall_elapsed_time = dg.heat_disinfect_active_cool.overall_elapsed_time + state_elapsed_time = dg.heat_disinfect_active_cool.state_elapsed_time + info = ('State, {}, Overall_elapsed_time, {}, State_elapsed_time, {}, Disinfect_elapsed_time, {}, ' 'R1_level, {:5.3f}, R2_level, {:5.3f}, Top_alarm, {}, UI_state, {}, ' - .format(DGHeatDisinfectStates(dg.heat_disinfect.heat_disinfect_state).name, - dg.heat_disinfect.overall_elapsed_time, dg.heat_disinfect.state_elapsed_time, + .format(state, overall_elapsed_time, state_elapsed_time, dg.heat_disinfect.heat_disinfect_count_down_time, dg.heat_disinfect.r1_level, dg.heat_disinfect.r2_level, hd.alarms.alarm_top, DGHeatDisinfectUIStates(dg.heat_disinfect.heat_disinfect_ui_state).name)) @@ -98,19 +110,21 @@ def get_hd_run_info(): info = ('HD_op_mode, {}, HD_sub_mode, {}, Top_alarm, {}, Target_UF_ml, {:5.3f}, Meas_UF_ml, {:5.3f}, ' 'Wet_test_state, {}, Post_tx_state, {}, Post_tx_drain_state, {}, Prime_state, {}, Pre_Tx_rsrvr_state, {}, ' + 'Pre_Tx_dry_state, {}, ' .format(HDOpModes(hd.hd_operation_mode).name, hd.hd_operation_sub_mode, hd.alarms.alarm_top, hd.dialysate_outlet_flow.reference_dialysate_outlet_uf_volume, hd.dialysate_outlet_flow.measured_dialysate_outlet_uf_volume, PreTreatmentWetSelfTestStates(hd.pretreatment.pre_treatment_wet_self_test_state).name, PostTreatmentStates(hd.post_treatment.post_treatment_sub_mode).name, HDPostTreatmentDrainStates(hd.post_treatment.post_treatment_drain_state).name, hd.pretreatment.pre_treatment_prime_state, - PreTreatmentRsrvrState(hd.pretreatment.pre_treatment_reservoir_state).name)) + PreTreatmentRsrvrState(hd.pretreatment.pre_treatment_reservoir_state).name, + PreTreatmentDrySelfTestsStates(hd.pretreatment.pre_treatment_dry_self_test_state).name)) return info def get_hd_occlusion_pressures_info(): - info = ('Art_pres, {:5.3f}, Venous_pres, {:5.3f}, Blood_pump_pres, {}, DialIn_pres, {}, DialOut_pres, {}, ' + info = ('Art_pres, {:5.3f}, Venous_pres, {:5.3f}, Blood_pump_pres, {:5.3f}, DialIn_pres, {}, DialOut_pres, {}, ' .format(hd.pressure_occlusion.arterial_pressure, hd.pressure_occlusion.venous_pressure, hd.pressure_occlusion.blood_pump_occlusion, hd.pressure_occlusion.dialysate_inlet_pump_occlusion, hd.pressure_occlusion.dialysate_outlet_pump_occlusion)) @@ -178,9 +192,9 @@ def get_load_cells_info(): - info = ('A1, {:5.3f}, A2, {:5.3f}, B1, {:5.3f}, B2, {:5.3f}, '. - format(dg.load_cells.load_cell_A1, dg.load_cells.load_cell_A2, dg.load_cells.load_cell_B1, - dg.load_cells.load_cell_B2)) + info = ('A1, {:5.3f}, A2, {:5.3f}, B1, {:5.3f}, B2, {:5.3f}, ' + .format(dg.load_cells.load_cell_A1, dg.load_cells.load_cell_A2, dg.load_cells.load_cell_B1, + dg.load_cells.load_cell_B2)) return info @@ -277,7 +291,7 @@ info = ('Bicarb_curr_speed, {:5.3f}, Bicarb_speed, {:5.3f}, Acid_curr_speed, {:5.3f}, Acid_speed, {: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}, Acid_tgt_speed, {:5.3f}, ' - 'Bicarb_tgt_speed, {:5.3f}, ' + 'Bicarb_tgt_speed, {:5.3f}, CP1_parked, {}, CP1_park_fault, {}, CP2_parked, {}, CP2_park_fault, {}, ' .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, @@ -291,7 +305,11 @@ dg.conductivity_sensors.cd1_sensor_status, dg.conductivity_sensors.cd2_sensor_status, dg.concentrate_pumps.cp1_temp_pulse, dg.concentrate_pumps.cp2_temp_pulse, dg.concentrate_pumps.concentrate_pump_cp1_target_speed, - dg.concentrate_pumps.concentrate_pump_cp2_target_speed)) + dg.concentrate_pumps.concentrate_pump_cp2_target_speed, + dg.concentrate_pumps.concentrate_pump_cp1_parked, + dg.concentrate_pumps.concentrate_pump_cp1_park_fault, + dg.concentrate_pumps.concentrate_pump_cp2_parked, + dg.concentrate_pumps.concentrate_pump_cp2_park_fault)) return info @@ -322,8 +340,11 @@ return info -def get_hd_valves_info(): - info = ('Air_trap' ) +def get_hd_air_trap_info(): + info = ('Air_trap_high_level, {}, Air_trap_low_level, {}, Air_trap_valve, {}, Air_bubble_status, {}, ' + .format(hd.air_trap.upper_level, hd.air_trap.lower_level, hd.valves.hd_air_trap_status, + hd.air_bubbles.air_bubbles_status)) + return info def get_dg_idle_bad_fill_info(): @@ -445,31 +466,13 @@ idle_bad_fill = get_dg_idle_bad_fill_info() uv = get_uv_reactors_info() hd_fans = get_hd_fans_info() + hd_pressures = get_hd_occlusion_pressures_info() + air_trap = get_hd_air_trap_info() var = str(datetime.now()) + ', ' + hd_run + dg_run + hd_rsrvrs + dg_rsrvrs + load_cell + drain + ro + \ - temp + heaters + conc_pumps + dg_fans + valves + blood_leak + hd_pumps + fill_info + uv + hd_fans + '\r' + temp + heaters + conc_pumps + dg_fans + valves + blood_leak + hd_pumps + fill_info + uv + hd_fans + \ + hd_pressures + air_trap + '\r' - if hd.alarms.get_alarm_state(97) and start is False: - dg.conductivity_sensors.cmd_conductivity_sensor_override(ConductivitySensorsEnum.CD2.value, 13700.00) - sleep(0.2) - dg.conductivity_sensors.cmd_conductivity_sensor_override(ConductivitySensorsEnum.CD1.value, 11600.00) - start = True - - """ - var = str(datetime.now()) + ', ' + hd_run + dg_run + load_cell + drain + ro + conc_pumps + valves + \ - idle_bad_fill + fill_info + '\r' - - if dg.dg_operation_mode == 6 and dg.dg_operation_sub_mode == 4 and start is False: - #dg.conductivity_sensors.cmd_conductivity_sensor_override(ConductivitySensorsEnum.CD2.value, 12000.00) - dg.pressures.cmd_pressure_override(dg.pressures.PRESSURE_SENSOR_RO_PUMP_INLET, 14) - start = True - - if start is True: - counter += 1 - - if 10 < counter < 14: - dg.pressures.cmd_pressure_override(dg.pressures.PRESSURE_SENSOR_RO_PUMP_INLET, 14, reset=1) - """ print(var) f.write(var) sleep(sleep_time) @@ -478,36 +481,13 @@ f.close() -def collect_hd_treatment(): - f = open("/home/fw/projects/dialin/tests/treatment_run_hd.log", "w") - - #hd.cmd_hd_software_reset_request() - - hd.dialysate_inlet_flow.cmd_dialysate_inlet_flow_broadcast_interval_override(50) - sleep(1) - hd.dialysate_outlet_flow.cmd_dialysate_outlet_flow_broadcast_interval_override(50) - sleep(1) - hd.voltages.cmd_monitored_voltages_broadcast_interval_override(50) - - try: - while True: - hd_run = get_hd_run_info() - pumps_info = get_hd_pumps_info() - voltages = get_voltages_info() - var = hd_run + pumps_info + voltages + '\r' - print(var) - f.write(var) - sleep(0.05) - except KeyboardInterrupt: - f.close() - - def run_heat_disinfect(): complete_counter = 1 f = open("/home/fw/projects/dialin/tests/Heat_disinfect.log", "w") #dg.heaters.cmd_heaters_broadcast_interval_override(50) #sleep(1) dg.hd_proxy.cmd_start_stop_dg_heat_disinfect() + #dg.hd_proxy.cmd_start_stop_dg_heat_disinfect_active_cool() try: while True: @@ -546,6 +526,8 @@ except KeyboardInterrupt: dg.hd_proxy.cmd_start_stop_dg_heat_disinfect(start=False) + sleep(0.2) + dg.hd_proxy.cmd_start_stop_dg_heat_disinfect_active_cool(start=False) f.close() @@ -696,25 +678,6 @@ dg.drain_pump.cmd_drain_pump_set_rpm(0) -def test_conc_pumps(): - dg.concentrate_pumps.cmd_concentrate_pump_state_change_request(0, True) - sleep(1) - #dg.concentrate_pumps.cmd_concentrate_pump_state_change_request(1, True) - # sleep(1) - dg.concentrate_pumps.cmd_concentrate_pump_target_speed_override(0, 35) - #sleep(1) - #dg.concentrate_pumps.cmd_concentrate_pump_target_speed_override(1, 20) - - try: - while True: - print(get_concentrate_pumps_info()) - sleep(1) - except KeyboardInterrupt: - dg.concentrate_pumps.cmd_concentrate_pump_state_change_request(0, False) - sleep(0.5) - dg.concentrate_pumps.cmd_concentrate_pump_state_change_request(1, False) - - def test_hd_valves(): while True: @@ -751,7 +714,7 @@ # cmd_set_disinfect_ui_screen() - #collect_treatment_data() + collect_treatment_data() #collect_hd_treatment() @@ -775,20 +738,6 @@ #test_hd_valves() - #while True: - # print(get_heaters_info()) - # sleep(1) + #hd.ui.cmd_ui_set_dg_service_time() - #dg.flow_sensors.cmd_measured_flow_sensor_value_lpm_override(1, 0.8, reset=1) - #dg.heaters.cmd_set_primary_and_trimmer_heaters_target_temperature(primary_target_temp=40, trimmer_target_temp=52) - #sleep(1) - #dg.heaters.cmd_start_stop_trimmer_heater(0) - - #dg.valves.cmd_valve_sensed_state_override(4, 1, reset=0) - - #while True: - # print(get_dg_valves_states()) - # sleep(1) - -