Index: dialin/dg/heaters.py =================================================================== diff -u -r19d246d9c099e1a15570767f82ca79502aff2776 -reb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff --- dialin/dg/heaters.py (.../heaters.py) (revision 19d246d9c099e1a15570767f82ca79502aff2776) +++ dialin/dg/heaters.py (.../heaters.py) (revision eb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff) @@ -67,6 +67,7 @@ self.primary_efficiency = 0.0 self.primary_calc_target_temperature = 0.0 self.trimmer_calc_target_temperature = 0.0 + self.trimmer_use_last_duty_cycle = 0 if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -115,7 +116,8 @@ @publish(["main_primary_heater_duty_cycle", "small_primary_heater_duty_cycle", "trimmer_heater_duty_cycle", "trimmer_heater_state", "primary_heaters_target_temperature", "trimmer_heater_target_temperature", - "primary_efficiency"]) + "primary_efficiency", "primary_calc_target_temperature", "trimmer_calc_target_temperature", + "trimmer_use_last_duty_cycle"]) def _handler_heaters_sync(self, message): """ Handles published heaters message @@ -143,6 +145,9 @@ message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] self.trimmer_calc_target_temperature = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] + # TODO Yes Behrouz, I know. + self.trimmer_use_last_duty_cycle = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] def cmd_start_stop_primary_heater(self, state: int = HeatersStartStop.STOP.value) -> None: """ Index: dialin/dg/reservoirs.py =================================================================== diff -u -r5eb006b08eb1d7b641b22fff20072ab7b685cfec -reb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff --- dialin/dg/reservoirs.py (.../reservoirs.py) (revision 5eb006b08eb1d7b641b22fff20072ab7b685cfec) +++ dialin/dg/reservoirs.py (.../reservoirs.py) (revision eb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff) @@ -90,23 +90,27 @@ """ return self.drain_to_vol_ml - def cmd_switch_reservoirs(self, reservoir: int) -> bool: + def cmd_switch_reservoirs(self, reservoir: int, use_last_trimmer_dc: int = 0) -> bool: """ Sends a command to the DG to switch reservoirs @param reservoir: (int) the new reservoir number + @param use_last_trimmer_dc: (int) use last trimmer heater duty cycle (1) or not (0) @return: True if command sent, False if invalid reservoir provided """ if reservoir not in [0, 1]: return False - payload = integer_to_bytearray(reservoir) + r = integer_to_bytearray(reservoir) + dc = integer_to_bytearray(use_last_trimmer_dc) + payload = r + dc message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, message_id=MsgIds.MSG_ID_DG_SWITCH_RESERVOIR_CMD.value, payload=payload) - self.logger.debug("Sending command to switch DG reservoir to {0}".format(reservoir)) + self.logger.debug("Sending command to switch DG reservoir to {0} and use last trimmer heater" + "duty cycle to {1}".format(reservoir, use_last_trimmer_dc)) self.can_interface.send(message, 0) Index: dialin/dg/sw_configs.py =================================================================== diff -u -r5eb006b08eb1d7b641b22fff20072ab7b685cfec -reb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff --- dialin/dg/sw_configs.py (.../sw_configs.py) (revision 5eb006b08eb1d7b641b22fff20072ab7b685cfec) +++ dialin/dg/sw_configs.py (.../sw_configs.py) (revision eb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff) @@ -55,7 +55,6 @@ SW_CONFIG_DISABLE_CONC_PUMPS_SPEED_ALARM = 20 SW_CONFIG_DISABLE_MIXING_IN_FILL = 21 SW_CONFIG_DISABLE_TEMPERATURE_SENSORS_ALARM = 22 - SW_CONFIG_ENABLE_V3_SYSTEM = 23 class DGSoftwareConfigs(AbstractSubSystem): Index: dialin/hd/sw_configs.py =================================================================== diff -u -rbff28676dd855ea33707bbb26a624abc94aebdf0 -reb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff --- dialin/hd/sw_configs.py (.../sw_configs.py) (revision bff28676dd855ea33707bbb26a624abc94aebdf0) +++ dialin/hd/sw_configs.py (.../sw_configs.py) (revision eb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff) @@ -74,8 +74,7 @@ SW_CONFIG_ENABLE_DIALYSATE_INLET_PUMP_OPEN_LOOP = 39 SW_CONFIG_DISABLE_SWITCHES_MONITOR = 40 SW_CONFIG_ENABLE_VBA_SPECIAL_POSITION_C = 41 - SW_CONFIG_ENABLE_V3_SYSTEM = 42 - SW_CONFIG_DISABLE_SERVICE_AND_DISINFECT_CHECK = 43 + SW_CONFIG_DISABLE_SERVICE_AND_DISINFECT_CHECK = 42 class HDSoftwareConfigs(AbstractSubSystem): Index: tests/dg_tests.py =================================================================== diff -u -raf831f536411facc3ad088d94a79643429288d16 -reb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff --- tests/dg_tests.py (.../dg_tests.py) (revision af831f536411facc3ad088d94a79643429288d16) +++ tests/dg_tests.py (.../dg_tests.py) (revision eb5e1db6feb04feb5eb5ac5cf3251b6e4f8e94ff) @@ -141,7 +141,7 @@ def get_dg_valves_states(): info = ('VPi, {}, VSP, {}, VPd, {}, VBf, {}, VPo, {}, VDr, {}, VRc, {}, VRo, {}, VRd, {}, VRi, {}, VRf, {}, ' - 'VRD1, {}, VRD2, {}, All, {}, ' + 'VRD1, {}, VRD2, {}, ' .format(dg.valves.valve_states_enum[dg.valves.VALVE_PRESSURE_INLET], dg.valves.valve_states_enum[dg.valves.VALVE_SAMPLING_PORT], dg.valves.valve_states_enum[dg.valves.VALVE_PRODUCTION_DRAIN], @@ -154,8 +154,7 @@ dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_INLET], dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_FILL], dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_1], - dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_2], - dg.valves.valves_sensed_states)) + dg.valves.valve_states_enum[dg.valves.VALVE_RESERVOIR_DRAIN_2])) return info @@ -201,8 +200,7 @@ 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}, ' + '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, @@ -211,7 +209,8 @@ 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.voltages.monitored_voltages[DGMonitoredVoltages.MONITORED_LINE_24V_GND_TRIM_HTR_V.value], + dg.heaters.trimmer_use_last_duty_cycle)) return info @@ -436,9 +435,10 @@ fill_info = get_dg_fill_info() idle_bad_fill = get_dg_idle_bad_fill_info() uv = get_uv_reactors_info() + hd_fans = get_hd_fans_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 + '\r' + temp + heaters + conc_pumps + dg_fans + valves + blood_leak + hd_pumps + fill_info + uv + hd_fans + '\r' if hd.alarms.get_alarm_state(97) and start is False: dg.conductivity_sensors.cmd_conductivity_sensor_override(ConductivitySensorsEnum.CD2.value, 13700.00) @@ -698,12 +698,12 @@ # cmd_set_disinfect_ui_screen() - #collect_treatment_data() + collect_treatment_data() #collect_hd_treatment() #while True: - # print(get_temperature_sensors_info(), get_dg_fans_info()) + # print(get_hd_fans_info(), get_dg_fans_info()) # sleep(1) #while True: @@ -731,10 +731,10 @@ #sleep(1) #dg.heaters.cmd_start_stop_trimmer_heater(0) - dg.valves.cmd_valve_sensed_state_override(4, 1, reset=0) + #dg.valves.cmd_valve_sensed_state_override(4, 1, reset=0) - while True: - print(get_dg_valves_states()) - sleep(1) + #while True: + # print(get_dg_valves_states()) + # sleep(1)