Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r43161808ceba270f92822369359aa299c647c9fe -r2869d16c34888bec55bded3b8aefd0203f56d3b0 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 43161808ceba270f92822369359aa299c647c9fe) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 2869d16c34888bec55bded3b8aefd0203f56d3b0) @@ -17,6 +17,7 @@ #include // for log() #include "Flow.h" +#include "FPOperationModes.h" //#include "NVDataMgmt.h" #include "Messaging.h" #include "MessageSupport.h" @@ -241,14 +242,22 @@ if ( getTargetROPumpFlowRateMLPM() > 0 ) { ///transition to closed loop - resetPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, getTargetROPumpDutyCyclePCT(), 0 ); + if ( getCurrentOperationMode() == FP_MODE_GENP ) + { + roPumpDutyCyclePctSet = getCurrentROPumpDutyCyclePCT(); + } + else + { + roPumpDutyCyclePctSet = roPumpFlowToPWM( getTargetROPumpFlowRateMLPM() ); + } + resetPIController( PI_CONTROLLER_ID_RO_PUMP_FLOW, roPumpDutyCyclePctSet, 0.0F); state = RO_PUMP_CONTROL_TO_TARGET_FLOW_STATE; } // If there is a target pressure set, transition to the PI controller and control to pressure. else if ( getTargetROPumpPressure() > 0.0F ) { //transition to closed loop - resetPIController( PI_CONTROLLER_ID_RO_PUMP_PRES, getTargetROPumpPressure(), 0 ); + resetPIController( PI_CONTROLLER_ID_RO_PUMP_PRES, getTargetROPumpPressure(), 0.0F ); state = RO_PUMP_CONTROL_TO_TARGET_PRESSURE_STATE; } else if ( (F32)getTargetROPumpDutyCyclePCT() == 0.0F ) Index: firmware/App/Modes/FPModes/ModeGenPermeate.c =================================================================== diff -u -r76ede35cf15c9310c2915151f1d47998f22b71de -r2869d16c34888bec55bded3b8aefd0203f56d3b0 --- firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 76ede35cf15c9310c2915151f1d47998f22b71de) +++ firmware/App/Modes/FPModes/ModeGenPermeate.c (.../ModeGenPermeate.c) (revision 2869d16c34888bec55bded3b8aefd0203f56d3b0) @@ -274,13 +274,13 @@ if ( state == FP_GENP_TANK_FILL_STATE ) { - fillDutySum = duty; - fillDutyCount; + fillDutySum += duty; + fillDutyCount++; } else if ( state == FP_GENP_TANK_FULL_STATE ) { - fullDutySum = duty; - fullDutyCount; + fullDutySum += duty; + fullDutyCount++; } } Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -r76ede35cf15c9310c2915151f1d47998f22b71de -r2869d16c34888bec55bded3b8aefd0203f56d3b0 --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 76ede35cf15c9310c2915151f1d47998f22b71de) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision 2869d16c34888bec55bded3b8aefd0203f56d3b0) @@ -104,6 +104,7 @@ ddConductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; fpConductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + roRRPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; roRejectionRatio = 0.0F; roRejectionRatioTankFill = 0.0F; roRRRunningSum = 0.0F; @@ -363,7 +364,7 @@ F32 roRR = getRORejectonRatio(); roRRSamples[ roRRSamplesNextIndex ] = roRR; - roRRRunningSum = roRR; + roRRRunningSum += roRR; roRRSamplesNextIndex = INC_WRAP( roRRSamplesNextIndex, 0, RO_RR_MOVING_AVG_NUM_OF_SAMPLES - 1 ); roRRCount = INC_CAP( roRRCount, RO_RR_MOVING_AVG_NUM_OF_SAMPLES ); roRRAvg.data = roRRRunningSum / (F32)roRRCount; @@ -468,7 +469,7 @@ } // publish ro rejection ratio data on interval - if ( roRRPublishTimerCounter >= getU32OverrideValue( &roRRDataPublishInterval ) ) + if ( ++roRRPublishTimerCounter >= getU32OverrideValue( &roRRDataPublishInterval ) ) { RO_REJECTION_RATIO_DATA_T data; Index: firmware/App/Monitors/Conductivity.h =================================================================== diff -u -r76ede35cf15c9310c2915151f1d47998f22b71de -r2869d16c34888bec55bded3b8aefd0203f56d3b0 --- firmware/App/Monitors/Conductivity.h (.../Conductivity.h) (revision 76ede35cf15c9310c2915151f1d47998f22b71de) +++ firmware/App/Monitors/Conductivity.h (.../Conductivity.h) (revision 2869d16c34888bec55bded3b8aefd0203f56d3b0) @@ -55,10 +55,10 @@ /// RO rejection ratio data struct. typedef struct { - F32 rawRORejectionRatio; ///< ro rejection ratio during tank full and fill state - F32 rawRORejectionRatioTankFill; ///< ro rejection ratio during tank fill state - F32 avgRORejectionRatio; ///< ro rejection ratio average during tank full and fill state - F32 avgRORejectionRatioTankFill; ///< ro rejection ratio average during tank fill state + F32 rawRORejectionRatio; ///< RO rejection ratio during tank full and fill state + F32 rawRORejectionRatioTankFill; ///< RO rejection ratio during tank fill state + F32 avgRORejectionRatio; ///< RO rejection ratio average during tank full and fill state + F32 avgRORejectionRatioTankFill; ///< RO rejection ratio average during tank fill state U32 genPermeateState; ///< permeate tank state } RO_REJECTION_RATIO_DATA_T;