Index: dialin/dg/hd_proxy.py =================================================================== diff -u -r3995adb7a16b5b7569582ba781685ca75f9af49f -r2cfc646e14640e82c5f6989a572737ce8256caa5 --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 3995adb7a16b5b7569582ba781685ca75f9af49f) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 2cfc646e14640e82c5f6989a572737ce8256caa5) @@ -33,6 +33,8 @@ MSG_ID_HD_START_STOP_DG_CMD = 0x0026 MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER = 0x002B + MSG_ID_DG_START_STOP_HEAT_DISINFECT = 0x2F + # Reservoir IDs RESERVOIR1 = 0 RESERVOIR2 = 1 @@ -211,3 +213,48 @@ print("Timeout!!!!") return False + def cmd_start_heat_disinfection(self): + """ + Constructs and sends start heat disinfect command + Constraints: + N/A + + @returns none + """ + # 1 is to start + payload = integer_to_bytearray(1) + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=self.MSG_ID_DG_START_STOP_HEAT_DISINFECT, + payload=payload) + print("Starting heat disinfection process") + received_message = self.can_interface.send(message) + + def cmd_stop_heat_disinfection(self): + """ + Constructs and sends stop heat disinfect command + Constraints: + N/A + + @returns none + """ + # 1 is to start + payload = integer_to_bytearray(0) + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=self.MSG_ID_DG_START_STOP_HEAT_DISINFECT, + payload=payload) + print("Stopping heat disinfection process") + received_message = self.can_interface.send(message) + + def cmd_stop_primary_heater(self): + """ + Constructs and sends stop heat disinfect command + + @returns none + """ + # 0 is to stop + payload = integer_to_bytearray(0) + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=self.MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER, + payload=payload) + print("Stopping heat disinfection process") + self.can_interface.send(message, 0) \ No newline at end of file Index: dialin/dg/ro_pump.py =================================================================== diff -u -r005a2a84730867c3a627d85a64a45fb7d6f403ed -r2cfc646e14640e82c5f6989a572737ce8256caa5 --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision 005a2a84730867c3a627d85a64a45fb7d6f403ed) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision 2cfc646e14640e82c5f6989a572737ce8256caa5) @@ -32,8 +32,9 @@ # RO pump message IDs MSG_ID_DG_RO_PUMP_PUBLISHED_DATA = 0x001F MSG_ID_DG_RO_PUMP_PRESSURE_SET_PT_OVERRIDE = 0xA008 - MSG_ID_DG_RO_FLOW_RATE_OVERRIDE = 0xA009 + #MSG_ID_DG_RO_FLOW_RATE_OVERRIDE = 0xA009 MSG_ID_DG_RO_PUMP_BROADCAST_INTERVAL_OVERRIDE = 0xA00A + MSG_ID_RO_PUMP_SET_PT_OVERRIDE = 0xA008 # RO pump broadcast message field positions START_POS_PRES_SET_PT = DenaliMessage.PAYLOAD_START_INDEX @@ -42,7 +43,13 @@ END_POS_MEAS_FLOW = START_POS_MEAS_FLOW + 4 START_POS_PWM = END_POS_MEAS_FLOW END_POS_PWM = START_POS_PWM + 4 + START_POS_STATE = END_POS_PWM + END_POS_STATE = START_POS_STATE + 4 + #Enums + RAMP_UP_STATE = 0 + + def __init__(self, can_interface=None): """ DGROPump constructor @@ -61,6 +68,7 @@ self.target_pressure_psi = 0 self.measured_flow_rate_lpm = 0.0 self.pwm_duty_cycle_pct = 0.0 + self.ro_pump_state = 0.0 def get_target_pressure(self): """ @@ -86,7 +94,8 @@ @_publish([ "target_pressure_psi", "measured_flow_rate_lpm", - "pwm_duty_cycle_pct" + "pwm_duty_cycle_pct", + "ro_pump_state" ]) def _handler_ro_pump_sync(self, message): """ @@ -97,17 +106,33 @@ @return: None """ - tgt = struct.unpack('i', bytearray( + tgt = struct.unpack('f', bytearray( message['message'][self.START_POS_PRES_SET_PT:self.END_POS_PRES_SET_PT])) flow = struct.unpack('f', bytearray( message['message'][self.START_POS_MEAS_FLOW:self.END_POS_MEAS_FLOW])) pwm = struct.unpack('f', bytearray( message['message'][self.START_POS_PWM:self.END_POS_PWM])) + ro_state = struct.unpack('i', bytearray( + message['message'][self.START_POS_STATE:self.END_POS_STATE])) self.target_pressure_psi = tgt[0] self.measured_flow_rate_lpm = flow[0] self.pwm_duty_cycle_pct = pwm[0] + raw_ro_pump_state = ro_state[0] + #self.ro_pump_state = self.ro_pump_states.get("RO_PUMP_OFF_STATE", -1) + + if raw_ro_pump_state == 0: + self.ro_pump_state = "RO_PUMP_OFF_STATE" + elif raw_ro_pump_state == 1: + self.ro_pump_state = "RO_PUMP_RAMP_UP_STATE" + elif raw_ro_pump_state == 2: + self.ro_pump_state = "RO_PUMP_VERIFY_FLOW_STATE" + elif raw_ro_pump_state == 3: + self.ro_pump_state = "RO_PUMP_CONTROL_TO_TARGET_STATE" + elif raw_ro_pump_state == 4: + self.ro_pump_state = "RO_PUMP_OPEN_LOOP_STATE" + def cmd_ro_pump_set_point_override(self, pressure, reset=NO_RESET): """ Constructs and sends the RO pump set point override command. @@ -124,7 +149,7 @@ payload = rst + prs message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_RO_PUMP_PRESSURE_SET_PT_OVERRIDE, + message_id=self.MSG_ID_RO_PUMP_SET_PT_OVERRIDE, payload=payload) print("override RO pump pressure set point") @@ -164,7 +189,7 @@ payload = rst + flo message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_RO_FLOW_RATE_OVERRIDE, + message_id=self.MSG_ID_RO_PUMP_SET_PT_OVERRIDE, payload=payload) print("override RO pump pressure set point") Index: tests/dg_heatdisinfect.py =================================================================== diff -u -r6187d1a877c75a0601e2ffda1ab1972622d1b66e -r2cfc646e14640e82c5f6989a572737ce8256caa5 --- tests/dg_heatdisinfect.py (.../dg_heatdisinfect.py) (revision 6187d1a877c75a0601e2ffda1ab1972622d1b66e) +++ tests/dg_heatdisinfect.py (.../dg_heatdisinfect.py) (revision 2cfc646e14640e82c5f6989a572737ce8256caa5) @@ -3,12 +3,34 @@ import sys sys.path.append("..") from dialin.dg.dialysate_generator import DG +from dialin.dg.hd_proxy import DGHDProxy from time import sleep if __name__ == "__main__": dg = DG() dg.cmd_log_in_to_dg() - dg.ro_pump.cmd_ro_flow_rate_override(0.6) - print(dg.ro_pump.measured_flow_rate_lpm) + #dg.drain_pump.cmd_drain_pump_speed_set_point_override(2800) + + #dg.valves.cmd_valve_override(0, dg.valves.VALVE_PRESSURE_OUTLET ) + sleep(1) + #dg.valves.cmd_valve_override(0, dg.valves.VALVE_RESERVOIR_OUTLET) + #dg.valves.cmd_valve_override(1, dg.valves.VALVE_RESERVOIR_INLET) + dg.hd_proxy.cmd_stop_heat_disinfection() + sleep(3) + + dg.hd_proxy.cmd_start_heat_disinfection() + + while True: + print('Flow, {:5.3f}, PWM, {:5.3f}, TgtPres, {:5.3f}, MeaPres, {:5.3f}, State, {}, Mode, {}, Sub, {} RPM, {}'.format(dg.ro_pump.measured_flow_rate_lpm, + dg.ro_pump.pwm_duty_cycle_pct, + dg.ro_pump.target_pressure_psi, + dg.pressures.ro_pump_outlet_pressure, + dg.ro_pump.ro_pump_state, + dg.dg_operation_mode, + dg.dg_operation_sub_mode, + dg.drain_pump.target_drain_pump_speed_RPM)) + sleep(0.25) + +