Index: tests/test_nelson_labs_disinfect.py =================================================================== diff -u -r51ccf9db3b88bc2ca473b511bf9b98f40d343bf1 -r717c73c0dc6a788c1e996a54f02c02898f329be8 --- tests/test_nelson_labs_disinfect.py (.../test_nelson_labs_disinfect.py) (revision 51ccf9db3b88bc2ca473b511bf9b98f40d343bf1) +++ tests/test_nelson_labs_disinfect.py (.../test_nelson_labs_disinfect.py) (revision 717c73c0dc6a788c1e996a54f02c02898f329be8) @@ -1,3 +1,4 @@ +import os from dialin.dg.dialysate_generator import DG from dialin.hd.hemodialysis_device import HD @@ -39,11 +40,283 @@ sys.path.append("..") +def get_chemical_disinfect_mode_info(): + state = DGChemicalDisinfectStates(dg.chemical_disinfect.chemical_disinfect_state).name + overall_elapsed_time = dg.chemical_disinfect.overall_elapsed_time + state_elapsed_time = dg.chemical_disinfect.state_elapsed_time + + info = ('State, {}, Overall_elapsed_time, {}, State_elapsed_time, {}, Disinfect_elapsed_time, {}, ' + 'Cancellation_mode, {}, R1_level, {:5.3f}, R2_level, {:5.3f}, Current_rinse_count, {}, ' + 'Total_rinse_count, {}, UI_state, {}, Top_alarm, {}, ' + .format(state, overall_elapsed_time, state_elapsed_time, + dg.chemical_disinfect.chemical_disinfect_elapsed_time, + ChemCancellationModes(dg.chemical_disinfect.cancellation_mode).name, dg.chemical_disinfect.r1_level, + dg.chemical_disinfect.r2_level, dg.chemical_disinfect_flush.rinse_count, 0, + DGChemDisinfectUIStates(dg.chemical_disinfect.chemical_disinfect_ui_state).name, + hd.alarms.alarm_top)) + return info + + +def get_heat_disinfect_mode_info(): + + 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 + + info = ('State, {}, Overall_elapsed_time, {}, State_elapsed_time, {}, Disinfect_RO_77, {}, Disinfect_RO_82, {}, ' + 'Disinfect_R_77, {}, Disinfect_R_82, {}, R1_level, {:5.3f}, R2_level, {:5.3f}, Top_alarm, {}, UI_state, {},' + ' ' + .format(state, overall_elapsed_time, state_elapsed_time, dg.heat_disinfect.disinfect_ro_77_time_s, + dg.heat_disinfect.disinfect_ro_82_time_s, dg.heat_disinfect.disinfect_r_77_time_s, + dg.heat_disinfect.disinfect_r_82_time_s, dg.heat_disinfect.r1_level, dg.heat_disinfect.r2_level, + hd.alarms.alarm_top, DGHeatDisinfectUIStates(dg.heat_disinfect.heat_disinfect_ui_state).name)) + return info + + +def get_dg_valves_states(): + info = ('VPi, {}, VSP, {}, VPd, {}, VBf, {}, VPo, {}, VDr, {}, VRc, {}, VRo, {}, VRi, {}, VRf, {}, ' + 'VRD1, {}, VRD2, {}, ' + .format(dg.valves.valve_states_enum[DGValveNames.VALVE_PRESSURE_INLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_SAMPLING_PORT.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_PRODUCTION_DRAIN.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_BYPASS_FILTER.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_PRESSURE_OUTLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_DRAIN.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RECIRCULATE.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_OUTLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_INLET.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_FILL.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_DRAIN_1.value], + dg.valves.valve_states_enum[DGValveNames.VALVE_RESERVOIR_DRAIN_2.value])) + return info + + +def get_drain_states_info(): + info = ('Drain, {}, DAC, {}, Tgt_RPM, {}, Curr_RPM, {}, PRd, {:5.3f}, PDr, {:5.3f}, Baro, {:5.3f}, ' + 'Drain_curr_A, {:5.3f}, Drain_dir, {}, Target_flow_lpm, {:5.3f}, ' + .format(DrainPumpStates(dg.drain_pump.drain_pump_state).name, dg.drain_pump.dac_value, + dg.drain_pump.target_drain_pump_rpm, dg.drain_pump.current_drain_pump_rpm, + dg.pressures.drain_pump_inlet_pressure, dg.pressures.drain_pump_outlet_pressure, + dg.pressures.barometric_pressure, dg.drain_pump.drain_pump_current_A, + dg.drain_pump.drain_pump_direction, dg.drain_pump.target_drain_pump_outlet_flow_lpm)) + return info + + +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)) + return info + + +def get_ro_info(): + info = ('RO, {}, PPi, {:5.3f}, PPo, {:5.3f}, PWM, {:5.3f}, Flow, {:5.3f}, Tgt_flow, {:5.3f}, ' + 'Feedback_PWM, {:5.3f}, Flow_with_conc_pumps, {:5.3f}, Dialysate_flow, {:5.3f}, ' + .format(dg.ro_pump.ro_pump_state, dg.pressures.ro_pump_inlet_pressure, + dg.pressures.ro_pump_outlet_pressure, dg.ro_pump.pwm_duty_cycle_pct, + dg.flow_sensors.measured_ro_flow_LPM, dg.ro_pump.target_flow_lpm, + dg.ro_pump.feedback_duty_cycle_pct, + dg.flow_sensors.measured_ro_flow_with_cp_LPM, dg.flow_sensors.measured_dialysate_flow_LPM)) + return info + + +def get_heaters_info(): + info = ('Pri_main_DC, {:5.3f}, Pri_state, {}, Trimmer_DC, {:5.3f}, Trimmer_state, {}, ' + 'Primary_target_temp, {:5.3f}, Trimmer_target_temp, {:5.3f}, Primary_eff, {:5.3f}, ' + 'Primary_calc_temp, {:5.3f}, Trimmer_calc_temp, {:5.3f}, Primary_power, {:5.3f}, ' + 'Primary_volt, {:5.3f}, Primary_sec_volt, {:5.3f}, Trimmer_volt, {:5.3f}, Trimmer_use_last_dc, {}, ' + .format(dg.heaters.main_primary_heater_duty_cycle, dg.heaters.primary_heater_state, + dg.heaters.trimmer_heater_duty_cycle, dg.heaters.trimmer_heater_state, + dg.heaters.primary_heaters_target_temperature, dg.heaters.trimmer_heater_target_temperature, + dg.heaters.primary_efficiency, dg.heaters.primary_calc_target_temperature, + dg.heaters.trimmer_calc_target_temperature, + dg.voltages.monitored_voltages[DGMonitoredVoltages.MONITORED_LINE_24V_POWER_PRIM_HTR_V.value], + dg.voltages.monitored_voltages[DGMonitoredVoltages.MONITORED_LINE_24V_GND_MAIN_PRIM_HTR_V.value], + dg.voltages.monitored_voltages[DGMonitoredVoltages.MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V.value], + dg.voltages.monitored_voltages[DGMonitoredVoltages.MONITORED_LINE_24V_GND_TRIM_HTR_V.value], + dg.heaters.trimmer_use_last_duty_cycle)) + return info + + +def get_temperature_sensors_info(): + info = ('TPi, {:5.3f}, THd, {:5.3f}, TPo, {:5.3f}, TD1, {:5.3f}, TD2, {:5.3f}, TRo, {:5.3f}, TDi, {:5.3f}, ' + 'Baro_temp, {:5.3f}, ' + .format(dg.temperatures.temperatures[DGTemperaturesNames.INLET_PRIMARY_HEATER.name], + dg.temperatures.temperatures[DGTemperaturesNames.HEAT_DISINFECT.name], + dg.temperatures.temperatures[DGTemperaturesNames.OUTLET_PRIMARY_HEATER.name], + dg.temperatures.temperatures[DGTemperaturesNames.CONDUCTIVITY_SENSOR_1.name], + dg.temperatures.temperatures[DGTemperaturesNames.CONDUCTIVITY_SENSOR_2.name], + dg.temperatures.temperatures[DGTemperaturesNames.OUTLET_DIALYSATE_REDUNDANT.name], + dg.temperatures.temperatures[DGTemperaturesNames.INLET_DIALYSATE.name], + dg.temperatures.temperatures[DGTemperaturesNames.BARO_TEMP_SENSOR.name])) + return info + + +def get_uv_reactors_info(): + info = ('Inlet_status, {}, Outlet_status, {}, Inlet_health, {}, Outlet_health, {}, ' + .format(dg.uv_reactors.inlet_uv_reactor_state, dg.uv_reactors.outlet_uv_reactor_state, + dg.uv_reactors.inlet_uv_reactor_health, dg.uv_reactors.outlet_uv_reactor_health)) + return info + + +def get_concentrate_pumps_info(): + 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}, 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, + 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, + 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, + dg.concentrate_pumps.concentrate_pump_cp1_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 + + +def get_dg_fans_info(): + info = ('Target_fans_DC, {:5.3f}, Inlet1_RPM, {:5.3f}, Inlet2_RPM, {:5.3f}, Inlet3_RPM, {:5.3f}, ' + 'Outlet1_RPM, {:5.3f}, Outlet2_RPM, {:5.3f}, Outlet3_RPM, {:5.3f}, Board_temp, {:5.3f}, ' + 'Power_supply_1, {:5.3f}, Power_supply_2, {:5.3f}, FPGA_temp, {:5.3f}, Load_cell_A1_B1, {:5.3f}, ' + 'Load_cell_A2_B2, {:5.3f}, timeOffset, {}, ' + .format(dg.fans.dg_fans_duty_cycle, dg.fans.inlet_1_rpm, dg.fans.inlet_2_rpm, dg.fans.inlet_3_rpm, + dg.fans.outlet_1_rpm, dg.fans.outlet_2_rpm, dg.fans.outlet_3_rpm, + dg.thermistors.thermistors[ThermistorsNames.THERMISTOR_ONBOARD_NTC.name], + dg.thermistors.thermistors[ThermistorsNames.THERMISTOR_POWER_SUPPLY_1.name], + dg.thermistors.thermistors[ThermistorsNames.THERMISTOR_POWER_SUPPLY_2.name], + dg.temperatures.temperatures[DGTemperaturesNames.FPGA_BOARD_SENSOR.name], + dg.temperatures.temperatures[DGTemperaturesNames.LOAD_CELL_A1_B1.name], + dg.temperatures.temperatures[DGTemperaturesNames.LOAD_CELL_A2_B2.name], + dg.fans.rpm_alarm_time)) + return info + + +def get_sensors_actuators_info(nelson_support, f): + + call_numer = 0 + try: + while True: + if nelson_support == NelsonSupportModes.NELSON_INOCULATE.name or \ + nelson_support == NelsonSupportModes.NELSON_HEAT_DISINFECT.name or \ + nelson_support == NelsonSupportModes.NELSON_DRAIN_SAMPLE.name or \ + nelson_support == NelsonSupportModes.NELSON_POS_CONTROL_HEAT_DISINFECT.name: + disinfect = get_heat_disinfect_mode_info() + else: + disinfect = get_chemical_disinfect_mode_info() + drain = get_drain_states_info() + load_cell = get_load_cells_info() + valves = get_dg_valves_states() + ro = get_ro_info() + temp = get_temperature_sensors_info() + heaters = get_heaters_info() + uv = get_uv_reactors_info() + dg_fans = get_dg_fans_info() + conc = get_concentrate_pumps_info() + + var = str(datetime.now()) + ', ' + disinfect + load_cell + drain + ro + temp + heaters + uv + dg_fans + \ + valves + conc + '\r' + + print(var) + f.write(var) + sleep(1) + + if call_numer > 3: + # Wait for a couple of seconds and them exit this loop if we are no longer in any of the disinfec modes + if dg.dg_operation_mode is not DGOperationModes.DG_OP_MODE_DISINFECT.value and \ + dg.dg_operation_mode is not DGOperationModes.DG_OP_MODE_CHEMICAL_DISINFECT.value: + f.close() + exit() + call_numer += 1 + + except KeyboardInterrupt: + dg.hd_proxy.cmd_start_stop_dg_heat_disinfect(start=False) + dg.hd_proxy.cmd_start_stop_dg_chemical_disinfect(start=False) + f.close() + + +def run_nelson_inoculate(): + + current_dir = os.getcwd() + mode = NelsonSupportModes.NELSON_INOCULATE.name + log_file = os.path.join(current_dir, mode.lower() + '.log') + f = open(log_file, "w") + dg.heat_disinfect.cmd_set_nelson_support_mode(NelsonSupportModes.NELSON_INOCULATE.value) + get_sensors_actuators_info(mode, f) + + +def run_nelson_drain_samples(): + current_dir = os.getcwd() + mode = NelsonSupportModes.NELSON_DRAIN_SAMPLE.name + log_file = os.path.join(current_dir, mode.lower() + '.log') + f = open(log_file, "w") + dg.heat_disinfect.cmd_set_nelson_support_mode(NelsonSupportModes.NELSON_DRAIN_SAMPLE.value) + get_sensors_actuators_info(mode, f) + + +def run_nelson_heat_positive_control(): + current_dir = os.getcwd() + mode = NelsonSupportModes.NELSON_POS_CONTROL_HEAT_DISINFECT.name + log_file = os.path.join(current_dir, mode.lower() + '.log') + f = open(log_file, "w") + dg.heat_disinfect.cmd_set_nelson_support_mode(NelsonSupportModes.NELSON_POS_CONTROL_HEAT_DISINFECT.value) + get_sensors_actuators_info(mode, f) + + +def run_nelson_chem_positive_control(): + current_dir = os.getcwd() + mode = NelsonSupportModes.NELSON_POS_CONTROL_CHEM_DISINFECT.name + log_file = os.path.join(current_dir, mode.lower() + '.log') + f = open(log_file, "w") + dg.heat_disinfect.cmd_set_nelson_support_mode(NelsonSupportModes.NELSON_POS_CONTROL_CHEM_DISINFECT.value) + get_sensors_actuators_info(mode, f) + + +def run_nelson_heat_disinfect(): + current_dir = os.getcwd() + mode = NelsonSupportModes.NELSON_HEAT_DISINFECT.name + log_file = os.path.join(current_dir, mode.lower() + '.log') + f = open(log_file, "w") + dg.heat_disinfect.cmd_set_nelson_support_mode(NelsonSupportModes.NELSON_HEAT_DISINFECT.value) + get_sensors_actuators_info(mode, f) + + +def run_nelson_chem_disinfect(): + current_dir = os.getcwd() + mode = NelsonSupportModes.NELSON_CHEM_DISINFECT.name + log_file = os.path.join(current_dir, mode.lower() + '.log') + f = open(log_file, "w") + dg.heat_disinfect.cmd_set_nelson_support_mode(NelsonSupportModes.NELSON_CHEM_DISINFECT.value) + get_sensors_actuators_info(mode, f) + + if __name__ == "__main__": dg = DG(log_level='DEBUG') dg.cmd_log_in_to_dg() sleep(1) hd = HD(log_level='DEBUG') hd.cmd_log_in_to_hd() - sleep(1) \ No newline at end of file + sleep(1) + + #run_nelson_inoculate() + + run_nelson_drain_samples() + + #run_nelson_heat_positive_control() + + #run_nelson_chem_positive_control() + + #run_nelson_heat_disinfect() + + #run_nelson_chem_disinfect() \ No newline at end of file