Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -ra0c144ed9f72066d7a7b1d047b01fb76ca56d667 -r43161808ceba270f92822369359aa299c647c9fe --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision a0c144ed9f72066d7a7b1d047b01fb76ca56d667) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 43161808ceba270f92822369359aa299c647c9fe) @@ -39,8 +39,8 @@ #define RO_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO Pump data is published on the CAN bus. #define ROP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the RO pump is controlled. -#define ROP_FLOW_CONTROL_P_COEFFICIENT 0.1F ///< P term for RO pump flow control. -#define ROP_FLOW_CONTROL_I_COEFFICIENT 0.8F ///< I term for RO pump flow control. +#define ROP_FLOW_CONTROL_P_COEFFICIENT 0.000065F ///< P term for RO pump flow control. +#define ROP_FLOW_CONTROL_I_COEFFICIENT 0.00022F ///< I term for RO pump flow control. #define ROP_MIN_FLOW_TO_CONTROL_PCT 0.75F #define ROP_PRESSURE_CONTROL_P_COEFFICIENT 0.15F ///< P term for RO pump pressure control. #define ROP_PRESSURE_CONTROL_I_COEFFICIENT 0.65F ///< I term for RO pump pressure control. @@ -123,9 +123,9 @@ targetROPumpPressure.ovData = 0.0F; targetROPumpPressure.ovInitData = 0.0F; targetROPumpPressure.override = OVERRIDE_RESET; - roPumpOpenLoopTargetDutyCycle.data = 0; - roPumpOpenLoopTargetDutyCycle.ovData = 0; - roPumpOpenLoopTargetDutyCycle.ovInitData = 0; + roPumpOpenLoopTargetDutyCycle.data = 0.0; + roPumpOpenLoopTargetDutyCycle.ovData = 0.0; + roPumpOpenLoopTargetDutyCycle.ovInitData = 0.0; roPumpOpenLoopTargetDutyCycle.override = OVERRIDE_RESET; stopROPump(); @@ -296,11 +296,10 @@ // P16 flow seems to lag in current Leahi HW. We will wait till we hit a % of target flow before we start changing control. if( ( TRUE == roPumpStartControl ) || ( getFilteredFlow( P16_FLOW ) >= ( (F32)getTargetROPumpFlowRateMLPM() * ROP_MIN_FLOW_TO_CONTROL_PCT ) ) ) { - //roPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, (F32)getTargetROPumpFlowRateMLPM(), getFilteredFlow( P16_FLOW ) ); - //setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpDutyCyclePctSet ); - nexttgtflow = runPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, (F32)getTargetROPumpFlowRateMLPM(), getFilteredFlow( P16_FLOW ) ); - nexttgtflow = (U16)MIN( ROP_FLOW_TO_PWM( nexttgtflow ), ( MAX_FLUID_PUMP_PWM_DUTY_CYCLE * MAX_FLUID_PUMP_DUTY_CYCLE_PCT ) ); - setFluidPumpPWMDutyCycle( P12_PUMP, nexttgtflow ); + roPumpDutyCyclePctSet = runPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, (F32)getTargetROPumpFlowRateMLPM(), getFilteredFlow( P16_FLOW ) ); + roPumpDutyCyclePctSet = MIN( roPumpDutyCyclePctSet, ( MAX_FLUID_PUMP_PWM_DUTY_CYCLE * MAX_FLUID_PUMP_DUTY_CYCLE_PCT ) ); + setFluidPumpPctToPWMDutyCycle( P12_PUMP, roPumpDutyCyclePctSet ); + if ( FALSE == roPumpStartControl ) { roPumpStartControl = TRUE; Index: firmware/App/Drivers/FluidPump.c =================================================================== diff -u -r228773fa681489a62db5c47807a4794e5761d4f5 -r43161808ceba270f92822369359aa299c647c9fe --- firmware/App/Drivers/FluidPump.c (.../FluidPump.c) (revision 228773fa681489a62db5c47807a4794e5761d4f5) +++ firmware/App/Drivers/FluidPump.c (.../FluidPump.c) (revision 43161808ceba270f92822369359aa299c647c9fe) @@ -313,7 +313,7 @@ *************************************************************************/ F32 convertDutyCycleCntToPct( U32 dutyCycleCnt ) { - F32 pwmCnt = (F32)MAX( ( dutyCycleCnt / MAX_FLUID_PUMP_PWM_DUTY_CYCLE ) , MIN_FLUID_PUMP_PWM_DUTY_CYCLE ); + F32 pwmCnt = MAX( ( (F32)dutyCycleCnt / (F32)MAX_FLUID_PUMP_PWM_DUTY_CYCLE ) , (F32)MIN_FLUID_PUMP_PWM_DUTY_CYCLE ); return pwmCnt; } Index: firmware/App/Modes/FPModes/FlushConcentrate.c =================================================================== diff -u -r3094850a313096e5e41497c250089ce1ea9b07d9 -r43161808ceba270f92822369359aa299c647c9fe --- firmware/App/Modes/FPModes/FlushConcentrate.c (.../FlushConcentrate.c) (revision 3094850a313096e5e41497c250089ce1ea9b07d9) +++ firmware/App/Modes/FPModes/FlushConcentrate.c (.../FlushConcentrate.c) (revision 43161808ceba270f92822369359aa299c647c9fe) @@ -149,12 +149,24 @@ static FP_CONC_FLUSH_STATE_T handleConcentrateFlushProgressState( void ) { FP_CONC_FLUSH_STATE_T state = CONC_FLUSH_IN_PROGRESS; + LEVEL_STATE_T level = getLevelStatus( P25_LEVL ); // if ( TRUE == 1 ) )// TODO Alarm and Stop State Rework // { // state = CONC_FLUSH_PAUSED; // } + // Manual control of Permeate tank while in Permeate Flush + // to prevent overfill. + if ( LEVEL_STATE_HIGH == level ) + { + setValveState( M4_VALV,VALVE_STATE_CLOSED ); + } + else if ( LEVEL_STATE_LOW == level ) + { + setValveState( M4_VALV,VALVE_STATE_OPEN ); + } + if ( TRUE == didTimeout( concentrateFlushTimer, getConcentrateFlushTimeout() ) ) { isFlushComplete = TRUE; @@ -235,7 +247,6 @@ setValveState( P34_VALV, VALVE_STATE_CLOSED ); setValveState( P37_VALV, VALVE_STATE_OPEN ); setValveState( P39_VALV, VALVE_STATE_OPEN ); - startPermeateTankControl(); if ( TRUE == isBoostPumpInstalled() ) { setBoostPumpTargetPressure( CONCENTRATE_FLUSH_BOOST_PUMP_TGT_PSI ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r67731d57db9a620418b3b848d8f75ff204902c36 -r43161808ceba270f92822369359aa299c647c9fe --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 67731d57db9a620418b3b848d8f75ff204902c36) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 43161808ceba270f92822369359aa299c647c9fe) @@ -25,6 +25,7 @@ #include "Messaging.h" //#include "NVDataMgmt.h" #include "OperationModes.h" +#include "PermeateTank.h" #include "Pressure.h" #include "SystemCommDD.h" #include "TaskGeneral.h" @@ -90,6 +91,8 @@ deenergizeActuators( PARK_CONC_PUMPS ); + resetPermeateTank(); + // // Upon transition to mode standby set CD1 and CD2 calibration records to be picked to the normal // // table. If the chemical disinfect fails, the mode transitions back to mode standby. // setCondcutivitySensorCalTable( D17_COND, CAL_DATA_CD1_COND_SENSOR );