Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r6e76184a70ff190dc7c574ee533a74116dc68c20 -r66c487de9c457f622b3572cfe824b4b9e5654793 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 6e76184a70ff190dc7c574ee533a74116dc68c20) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 66c487de9c457f622b3572cfe824b4b9e5654793) @@ -148,7 +148,6 @@ static U32 fillCPoConductivitySampleCnt; ///< Number of samples in sum of CPo and Rej. Ratio conductivity readings for fill. static U32 pumpSpeedIndex; ///< Index used to access the desired pump speed in roPumpFlushBubblesSpeed table. -static BOOL havePauseActuatorsBeenSet; ///< Flag to indicate the actuators have been set to pause for the first time. static FILL_ACID_BICARB_TYPES_T chemicalsTypes; ///< Chemicals Types (acid and bicarb). static DG_CHEMICALS_FILL_COND_CAL_RECORD_T chemicalsCond; ///< Chemicals fill conductivity records. static F32 acidMixRatio; ///< Acid conductivity mix ratio. @@ -215,7 +214,6 @@ didFMPCheckStart = FALSE; fillCPoConductivitySampleCnt = 0; fillState = DG_FILL_MODE_STATE_TEST_INLET_WATER; - havePauseActuatorsBeenSet = FALSE; integratedVolumeML.data = 0.0F; pctDiffInConductivity = 0.0F; pumpSpeedIndex = 0; @@ -300,8 +298,11 @@ case DG_FILL_MODE_STATE_PAUSED: targetFlowLPM = TARGET_RO_FLOW_RATE_IN_PAUSE_L; - havePauseActuatorsBeenSet = FALSE; dialysatePauseStartTimeMS = getMSTimerCount(); + // clear max fill time tracking + dialysatePauseElapsedTimeMS = 0; + dialysatePauseStartTimeMS = 0; + didFillRecoverFromPause = TRUE; break; } } @@ -334,11 +335,14 @@ checkDialysateTemperatureSensors(); setHeaterTargetTemperature( DG_PRIMARY_HEATER, getPrimaryHeaterTargetTemperature() ); - if ( ( TRUE == areInletWaterConditionsAlarmsActive() ) || ( TRUE == areConductivityAlarmsActive() ) ) + if ( fillState != DG_FILL_MODE_STATE_PAUSED ) { - fillState = DG_FILL_MODE_STATE_PAUSED; + if ( ( TRUE == areInletWaterConditionsAlarmsActive() ) || ( TRUE == areConductivityAlarmsActive() ) ) + { + fillState = DG_FILL_MODE_STATE_PAUSED; + setModeFillStateTransition( fillState ); + } } - // Execute current Fill state switch ( fillState ) { @@ -604,7 +608,6 @@ { result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; } - setModeFillStateTransition( result ); return result; @@ -876,7 +879,6 @@ didFMPCheckStart = TRUE; reservoirBaseWeight = getReservoirWeight( getInactiveReservoir() ); } - integratedVolumeML.data += getMeasuredROFlowRateWithConcPumpsLPM() * ML_PER_LITER * FLOW_INTEGRATOR; } @@ -965,11 +967,6 @@ fillStatus.fillTemperatureRunningSum = 0.0F; fillStatus.fillSampleCounter = 0; fillStatus.fillLastTemperature = inletTemperature; - // clear max fill time tracking - dialysateFillStartTimeMS = 0; - dialysatePauseElapsedTimeMS = 0; - dialysatePauseStartTimeMS = 0; - didFillRecoverFromPause = FALSE; calculateHeaterEstimationGain( DG_PRIMARY_HEATER ); requestNewOperationMode( DG_MODE_GENE ); @@ -982,21 +979,18 @@ * @brief * The handlePausedState function executes the paused state of the fill * mode state machine. - * @details Inputs: havePauseActuatorsBeenSet - * @details Outputs: havePauseActuatorsBeenSet, didFillRecoverFromPause + * @details Inputs: Inlet water conditions and conductivity + * @details Outputs: didFillRecoverFromPause * @return the next state *************************************************************************/ static DG_FILL_MODE_STATE_T handlePausedState( void ) { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_PAUSED; - setModeFillStateTransition( result ); - if ( ( FALSE == areInletWaterConditionsAlarmsActive() ) && ( FALSE == areConductivityAlarmsActive() ) ) { didFillRecoverFromPause = TRUE; - havePauseActuatorsBeenSet = FALSE; - result = DG_FILL_MODE_STATE_TEST_INLET_WATER; + result = DG_FILL_MODE_STATE_TEST_INLET_WATER; // setModeFillStateTransition() not required, no setup needed } return result; @@ -1006,40 +1000,24 @@ * @brief * The setModeFillStateTransition function sets the actuators and variables * for the state transition in mode fill. - * @details Inputs: pumpSpeedIndex, havePauseActuatorsBeenSet, + * @details Inputs: pumpSpeedIndex, dialysatePauseStartTimeMS * didFillRecoverFromPause * @details Outputs: concPumpPrimeStartTimeMS, fillStatus, pumpSpeedIndex, * concentratePrimingStartTime, totalBicarbConductivity, averageBicarbConductivity, * bicarbConductivitySampleCount, concentrateTestStartTime, fillStatus, - * havePauseActuatorsBeenSet, flushBubblesStartTime, didFillRecoverFromPause + * flushBubblesStartTime, didFillRecoverFromPause * dialysatePauseElapsedTimeMS, dialysatePauseStartTimeMS * @param state mode fill state enum * @return none *************************************************************************/ static void setModeFillStateTransition( DG_FILL_MODE_STATE_T state ) { - // Execute state cleanup on exit + // Execute cleanup on exiting pause if ( state != fillState ) { - switch( fillState ) - { - // Do nothing - case DG_FILL_MODE_STATE_TEST_INLET_WATER: - case DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES: - case DG_FILL_MODE_STATE_FLUSH_BUBBLES: - case DG_FILL_MODE_STATE_TEST_BICARB_CONDUCTIVITY: - case DG_FILL_MODE_STATE_TEST_ACID_CONDUCTIVITY: - case DG_FILL_MODE_STATE_PRODUCE_DIALYSATE: - case DG_FILL_MODE_STATE_DELIVER_DIALYSATE: - break; - - case DG_FILL_MODE_STATE_PAUSED: - dialysatePauseElapsedTimeMS += calcTimeSince(dialysatePauseStartTimeMS); - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_FILL_MODE_INVALID_EXEC_STATE, state ) - break; + if (DG_FILL_MODE_STATE_PAUSED == fillState) + { // accumulate pause + dialysatePauseElapsedTimeMS += calcTimeSince(dialysatePauseStartTimeMS); } } // Execute on running state @@ -1120,15 +1098,11 @@ break; case DG_FILL_MODE_STATE_PAUSED: - if ( FALSE == havePauseActuatorsBeenSet ) - { - dialysatePauseStartTimeMS = getMSTimerCount(); - setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); - setROPumpTargetFlowRateLPM( TARGET_RO_FLOW_RATE_IN_PAUSE_L, TARGET_RO_PRESSURE_PSI ); - requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID, NO_PARK_CONC_PUMPS ); - requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB, NO_PARK_CONC_PUMPS ); - havePauseActuatorsBeenSet = TRUE; - } + dialysatePauseStartTimeMS = getMSTimerCount(); + setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setROPumpTargetFlowRateLPM( TARGET_RO_FLOW_RATE_IN_PAUSE_L, TARGET_RO_PRESSURE_PSI ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP1_ACID, NO_PARK_CONC_PUMPS ); + requestConcentratePumpOff( CONCENTRATEPUMPS_CP2_BICARB, NO_PARK_CONC_PUMPS ); break; default: