Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r0d0a65cc7b3daef294349a176d7f603a06634aa8 -r661aced10aeea7f7a87f27fec51e383b500106ef --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 0d0a65cc7b3daef294349a176d7f603a06634aa8) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 661aced10aeea7f7a87f27fec51e383b500106ef) @@ -203,6 +203,9 @@ NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK, ALARM_ID_DG_ACID_CONCENTRATE_INVALID_CAL_RECORD ); getNVRecord2Driver( GET_CAL_BICARB_CONCENTRATES, (U08*)&bicarbConcentrateCalRecord, sizeof( bicarbConcentrateCalRecord ), NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK, ALARM_ID_DG_BICARB_CONCENTRATE_INVALID_CAL_RECORD ); + // Get the calibration values for the acid and bicarb pump calibration + getNVRecord2Driver( GET_CAL_CONCENTRATE_PUMPS_RECORD, (U08*)&concentratePumpsCalRecord, sizeof( DG_CONC_PUMPS_CAL_RECORD_T ), + NUM_OF_CAL_DATA_DG_CONC_PUMPS, ALARM_ID_DG_CONCENTRATE_PUMPS_INVALID_CAL_RECORD ); } // Calculate pump speed for each defined pump @@ -351,7 +354,7 @@ NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK, ALARM_ID_DG_BICARB_CONCENTRATE_INVALID_CAL_RECORD ); calStatus |= getNVRecord2Driver( GET_CAL_CONCENTRATE_PUMPS_RECORD, (U08*)&concentratePumpsCalRecord, sizeof( DG_CONC_PUMPS_CAL_RECORD_T ), - NUM_OF_CAL_DATA_DG_CONC_PUMPS, ALARM_ID_NO_ALARM ); + NUM_OF_CAL_DATA_DG_CONC_PUMPS, ALARM_ID_DG_CONCENTRATE_PUMPS_INVALID_CAL_RECORD ); result = ( TRUE == calStatus ? SELF_TEST_STATUS_PASSED : SELF_TEST_STATUS_FAILED ); @@ -509,7 +512,13 @@ */ if ( ( CONCENTRATE_PUMP_MIN_SPEED <= targetSpeed_ml_min ) && ( targetSpeed_ml_min <= CONCENTRATE_PUMP_MAX_SPEED ) ) { - concentratePumps[ pumpId ].pumpTargetSpeed = targetSpeed_ml_min; + F32 targetWithCalMLPM = pow( targetSpeed_ml_min, 4 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].fourthOrderCoeff + + pow( targetSpeed_ml_min, 3 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].thirdOrderCoeff + + pow( targetSpeed_ml_min, 2 ) * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].secondOrderCoeff + + targetSpeed_ml_min * concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].gain + + concentratePumpsCalRecord.concentratePumps[ (CAL_DATA_DG_PUMPS_T)pumpId ].offset; + + concentratePumps[ pumpId ].pumpTargetSpeed = targetWithCalMLPM; } else if ( targetSpeed_ml_min < CONCENTRATE_PUMP_MIN_SPEED ) { @@ -960,9 +969,9 @@ if ( TRUE == isPumpPulseWidthOut ) { // Pulse width for this concentrate pump is out of range - isPulseWidthOut = TRUE; - pumpInAlarm = pumpId; - pumpInAlarmPulseWidthInMicroSeconds = pulseWidthInMicroSeconds; + isPulseWidthOut = TRUE; + pumpInAlarm = pumpId; + pumpInAlarmPulseWidthInMicroSeconds = pulseWidthInMicroSeconds; } }