Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r3f8d037ec63961e553b5ec67553332db829c9dac -rb36ca0b49c410f690519c0622990825fd5dba500 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 3f8d037ec63961e553b5ec67553332db829c9dac) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision b36ca0b49c410f690519c0622990825fd5dba500) @@ -152,6 +152,7 @@ static OVERRIDE_F32_T measuredPumpSpeed[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Measured concentrate pump speed (mL/min). static OVERRIDE_U32_T parked[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Concentrate pump is currently parked (T/F). static OVERRIDE_U32_T parkFaulted[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Concentrate pump park command has faulted (T/F). +static BOOL isDosingCompleted[ NUM_OF_CONCENTRATE_PUMPS ]; ///< Flag indicating dosing completed status (T/F). //static DD_ACID_CONCENTRATES_RECORD_T acidConcentrateCalRecord; ///< Acid concentrate calibration record. //static DD_BICARB_CONCENTRATES_RECORD_T bicarbConcentrateCalRecord; ///< Bicarb concentrate calibration record. @@ -223,6 +224,7 @@ concentratePumps[ pumpId ].controlSet = CONCENTRATE_PUMP_CONTROL_FORWARD; concentratePumps[ pumpId ].isConcPumpParkInProgress = FALSE; stopConcentratePump( pumpId ); + isDosingCompleted[ pumpId ] = FALSE; } initPersistentAlarm( ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR, 0, CONCENTRATE_PUMP_SPEED_OUT_OF_RANGE_TIMEOUT_MS ); @@ -556,6 +558,8 @@ { setFPGAD76PumpRevolutionCount( getConcPumpTargetRevolutionCount( pumpId ) ); } + + isDosingCompleted [ pumpId ] = FALSE; } /* @@ -614,20 +618,24 @@ * for a given concentrate pump. * @details \b Inputs: concentratePumps * @details \b Outputs: none + * @details \b Alarms: ALARM_ID_DD_SOFTWARE_FAULT when invalid pump ID is seen. * @param pumpId concentrate pump id to get current dosing status * @return TRUE if dosing completed otherwise,FALSE. *************************************************************************/ BOOL isConcentratePumpDosingCompleted( CONCENTRATE_PUMPS_T pumpId ) { - BOOL state = FALSE; + BOOL status = FALSE; - //On dosing completion,state transition to off state - if ( CONCENTRATE_PUMP_OFF_STATE == concentratePumps[ pumpId ].execState ) + if ( pumpId < NUM_OF_CONCENTRATE_PUMPS ) { - state = TRUE; + status = isDosingCompleted[ pumpId ]; } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONCENTRATE_PUMP_INVALID_PUMP_ID, pumpId ); + } - return state; + return status; } /*********************************************************************//** @@ -835,6 +843,7 @@ concentratePumps[ pumpId ].currentPumpSpeed = 0.0F; // set target rate to zero pumpTargetSpeed[ pumpId ].data = 0.0F; pumpTargetRevCnt[ pumpId ].data = 0; + isDosingCompleted [ pumpId ] = TRUE; // Disable the motor when stopping, to take next revolution count // Send zero rate command to stop the pump