Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r431de35ec5d48cbcd7f6fdf9b1586616d7ac3c05 -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 431de35ec5d48cbcd7f6fdf9b1586616d7ac3c05) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) @@ -162,8 +162,12 @@ *************************************************************************/ void execDrainPumpMonitor( void ) { - // TODO - check ??? + U16 drnPumpSpd = getFPGADrainPumpSpeed(); + // TODO - convert drain pump speed to RPM + + // TODO - check(s) ??? + // publish drain pump data on interval publishDrainPumpData(); } Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r77738b42add276957539f0efb3f9a4092852c5ce -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 77738b42add276957539f0efb3f9a4092852c5ce) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) @@ -14,12 +14,9 @@ * **************************************************************************/ -#include "AlarmMgmt.h" #include "FPGA.h" -#include "OperationModes.h" #include "SystemCommMessages.h" #include "TaskPriority.h" -#include "Timers.h" #include "Valves.h" /** Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -rcf09aeb3c5306f39131a92bbc002a102c6ed0ed8 -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision cf09aeb3c5306f39131a92bbc002a102c6ed0ed8) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) @@ -65,9 +65,9 @@ // re-initialize each time we transition to drain mode initDrainMode(); - // TODO - set initial actuator states - // VDr to drain + // set initial actuator states setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); + setDrainPumpTargetSpeed( TARGET_DRAIN_PUMP_RPM ); } /*********************************************************************//** @@ -84,7 +84,6 @@ switch ( drainState ) { case DG_DRAIN_STATE_START: - setDrainPumpTargetSpeed( TARGET_DRAIN_PUMP_RPM ); drainState = DG_DRAIN_STATE_DRAIN; break; @@ -122,8 +121,9 @@ } // if we've reached our target drain to volume (by weight), we're done draining - go back to re-circ mode - if ( getReservoirDrainVolumeTargetMl() > getLoadCellFilteredWeight( drainWeightLoadCell ) ) + if ( getReservoirDrainVolumeTargetMl() >= getLoadCellFilteredWeight( drainWeightLoadCell ) ) { + setDrainPumpTargetSpeed( 0 ); requestNewOperationMode( DG_MODE_CIRC ); } Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -rcf09aeb3c5306f39131a92bbc002a102c6ed0ed8 -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision cf09aeb3c5306f39131a92bbc002a102c6ed0ed8) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) @@ -15,7 +15,9 @@ **************************************************************************/ #include "FPGA.h" +#include "LoadCell.h" #include "OperationModes.h" +#include "Reservoirs.h" #include "Timers.h" #include "Valves.h" #include "ModeFill.h" @@ -66,9 +68,7 @@ // re-initialize fill mode each time we transition to fill mode initFillMode(); - // TODO - set initial actuator states - setFPGAValveStates(0x014F); - // VDr, VPo to drain + // set initial actuator states setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); // Conc. pumps on @@ -145,15 +145,28 @@ static DG_FILL_MODE_STATE_T handleDeliverDialysateState( void ) { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; + LOAD_CELL_ID_T fillWeightLoadCell = LOAD_CELL_A1; // TODO - transition back when temperature or mix out of range - if ( 0 ) { setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); result = DG_FILL_MODE_STATE_DIALYSATE_PRODUCTION; } + + // determine which load cell to use for fill volume - we want weight of inactive reservoir + if ( RESERVOIR_1 == getActiveReservoir() ) + { + fillWeightLoadCell = LOAD_CELL_B1; + } + + // if we've reached our target fill to volume (by weight), we're done filling - go back to re-circ mode + if ( getReservoirFillVolumeTargetMl() <= getLoadCellFilteredWeight( fillWeightLoadCell ) ) + { + requestNewOperationMode( DG_MODE_CIRC ); + } + return result; } Index: firmware/App/Modes/ModeRecirculate.c =================================================================== diff -u -ra52e41cc2219362d433149ca034908c8763d8378 -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b --- firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision a52e41cc2219362d433149ca034908c8763d8378) +++ firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) @@ -15,6 +15,7 @@ **************************************************************************/ #include "FPGA.h" +#include "Heaters.h" #include "OperationModes.h" #include "ROPump.h" #include "TaskGeneral.h" @@ -71,13 +72,16 @@ // re-initialize each time we transition to re-circulate mode initRecirculateMode(); - // TODO - set initial actuator states + // set initial actuator states setValveState( VPI, VALVE_STATE_OPEN ); setValveState( VRC, VALVE_STATE_RECIRC_C_TO_NC ); setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setROPumpTargetPressure( TARGET_RO_PRESSURE_PSI, PUMP_CONTROL_MODE_CLOSED_LOOP ); + signalDrainPumpHardStop(); + startPrimaryHeater(); // UV on - // Primary heater on + // conc. pumps off } /*********************************************************************//** @@ -94,7 +98,6 @@ switch ( recircState ) { case DG_RECIRCULATE_MODE_STATE_START: - setROPumpTargetPressure( TARGET_RO_PRESSURE_PSI, PUMP_CONTROL_MODE_CLOSED_LOOP ); recircState = DG_RECIRCULATE_MODE_STATE_FLUSH_LINES; break; @@ -134,6 +137,7 @@ F32 waterFlowRate = getMeasuredROFlowRate(); F32 waterVolume = ( ( waterFlowRate / SEC_PER_MIN ) / ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ); + // integrate volume of water moved through line flushLinesVolume += waterVolume; // when enough water volume has flowed to flush the lines, transition to re-circ state Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r3e7b064885d99793bb56d940bd613555b1cdbdfa -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 3e7b064885d99793bb56d940bd613555b1cdbdfa) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) @@ -15,7 +15,10 @@ **************************************************************************/ #include "CPLD.h" +#include "DrainPump.h" +#include "Heaters.h" #include "OperationModes.h" +#include "ROPump.h" #include "SystemComm.h" #include "Timers.h" #include "Valves.h" @@ -71,15 +74,17 @@ // re-initialize standby mode each time we transition to standby mode initStandbyMode(); - // TODO - set initial actuator states + // set initial actuator states setValveState( VPI, VALVE_STATE_CLOSED ); setValveState( VRC, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); - setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); - setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); - setValveState( VRD, VALVE_STATE_R1_C_TO_NC ); - setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); + signalROPumpHardStop(); + signalDrainPumpHardStop(); + stopPrimaryHeater(); + stopTrimmerHeater(); + // conc. pumps off + // UV off } /*********************************************************************//**