Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -r7d4711edd7b40cd3e29f43e766f79a8a09586fe9 -r9512e64a5eaf8206fae80473b1c98d6892010cde --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 7d4711edd7b40cd3e29f43e766f79a8a09586fe9) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 9512e64a5eaf8206fae80473b1c98d6892010cde) @@ -47,6 +47,7 @@ #define TARGET_RO_PRESSURE_PSI 130 ///< Target pressure for RO pump. #define TARGET_RO_FLOW_RATE_L 0.8F ///< Target flow rate for RO pump. +#define MAX_IDLE_RSVR_WEIGHT_GAIN 200.0F ///< Maximum mL gain of inactive reservoir in Gen Idle mode #define HD_LOST_COMM_TIMEOUT_MS (5 * SEC_PER_MIN * MS_PER_SECOND ) ///< The time of HD lost comm before DG transition back to standby. #define BAD_FILL_SUBSTATES_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the bad fill sub-states is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 61 ///< Data publish counter start count. @@ -66,6 +67,7 @@ static OVERRIDE_U32_T genIdleDataPublicationInterval = { BAD_FILL_SUBSTATES_PUB_INTERVAL, BAD_FILL_SUBSTATES_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish bad fill sub-states to CAN bus. +static F32 initialReservoirWeight; ///< Initial weight of incative reservoir in Gen Idle mode. // ********** private function prototypes ********** @@ -140,6 +142,8 @@ setCPLDCleanLEDColor( CPLD_CLEAN_LED_OFF ); + initialReservoirWeight = getReservoirWeight( getInactiveReservoir() ); + return genIdleState; } @@ -296,6 +300,7 @@ static DG_GEN_IDLE_MODE_STATE_T handleFlushWaterState( void ) { DG_GEN_IDLE_MODE_STATE_T result = DG_GEN_IDLE_MODE_STATE_FLUSH_WATER; + F32 reservoirWeight = getReservoirWeight( getInactiveReservoir() ); if ( ( TRUE == isAlarmActive( ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME ) ) || ( TRUE == isAlarmActive( ALARM_ID_DG_BICARB_BOTTLE_LOW_VOLUME ) ) ) { @@ -311,6 +316,12 @@ startFillCmd( getTargetFillVolumeML(), getTargetFillFlowRateLPM() ); } + // Check for unwanted filling + if ( reservoirWeight > ( initialReservoirWeight + MAX_IDLE_RSVR_WEIGHT_GAIN ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_INACTIVE_RESERVOIR_WEIGHT_OUT_OF_RANGE, reservoirWeight ); + } + return result; }