Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -rc4ea2fbaae71d7beca3879c0970d488f169ebae4 -r322747d530c1b8205be257557e53dcfe9caad50a --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision c4ea2fbaae71d7beca3879c0970d488f169ebae4) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 322747d530c1b8205be257557e53dcfe9caad50a) @@ -35,7 +35,7 @@ #define CONCENTRATE_PUMP_FORWARD_DIR 0x1 ///< Concentrate pump forward direction configuration. #define CONCENTRATE_PUMP_REVERSE_DIR 0x0 ///< Concentrate pump reverse direction configuration. -#define CONCENTRATE_PUMP_SPEED_INCREMENT 10.0F ///< Speed increase (mL/min) when controlling concentrate pump to target step speed. +#define CONCENTRATE_PUMP_RAMP_SPEED_INCREMENT 10.0F ///< Speed increase (mL/min) when controlling concentrate pump to target step speed. #define CONCENTRATE_PUMP_MIN_SPEED 3.0F ///< Minimum speed for concentrate pump in mL per min. #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_ON_PCT 0.02F ///< Concentrate pump speed out of range tolerance when on in percentage. #define CONCENTRATE_PUMP_SPD_OUT_OF_RANGE_TOL_WHEN_SLOW_MLPM 1.0F ///< Concentrate pump speed out of range tolerance when slow in mL/min. @@ -54,7 +54,7 @@ #define CONCENTRATE_PUMP_HALL_SENSORS_OUT_OF_RANGE_TIME_MS ( 5 * MS_PER_SECOND ) ///< Hall sensors out of range time in milliseconds. #define CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP 8.0F ///< Number of micro-steps ( fractions of step) per step. -#define CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION ( ( 1 / CONCENTRATE_PUMP_VOLUME_PER_REV ) * \ +#define CONCENTRATE_PUMP_VOLUME_TO_REVOLUTION ( ( 1.0F / CONCENTRATE_PUMP_VOLUME_PER_REV ) * \ ( CONCENTRATE_PUMP_STEP_PER_REV * \ CONCENTRATE_PUMP_MICRO_STEPS_PER_STEP ) ) ///< Convert volume in to number of revolutions needed. #ifdef __PUMPTEST__ @@ -87,7 +87,6 @@ #define CONCENTRATE_PUMP_CONTROL_SLEEP_OFF 0x40 ///< Concentrate pump control sleep off. #define CONCENTRATE_PUMP_CONTROL_ENABLE_MASK 0x10 ///< Concentrate pump control enable bit mask. - static const U32 CONCENTRATE_PUMP_CONTROL_FORWARD = CONCENTRATE_PUMP_CONTROL_SLEEP_OFF | CONCENTRATE_PUMP_CONTROL_NOT_RESET | CONCENTRATE_PUMP_CONTROL_ENABLE | @@ -165,6 +164,7 @@ static void monitorPumpSpeed( CONCENTRATE_PUMPS_T pumpId, ALARM_ID_T alarm ); static void checkConcentratePumpControlSet( CONCENTRATE_PUMPS_T pumpId ); static void publishConcentratePumpData( void ); +static void monitorPumpParkStatus( void ); /*********************************************************************//** * @brief @@ -253,14 +253,39 @@ // Calculate pump speed for each defined pump calcMeasuredPumpsSpeed(); + // Update rev count status + pumpMesauredRevCnt[ D11_PUMP ].data = (U32)getFPGAD11PumpRevolutionCountStatus(); + pumpMesauredRevCnt[ D10_PUMP ].data = (U32)getFPGAD10PumpRevolutionCountStatus(); + + //Monitor Pump Park status + monitorPumpParkStatus(); + + //Monitor Pump Speed + monitorPumpSpeed( D11_PUMP, ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR ); + monitorPumpSpeed( D10_PUMP, ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR ); + + checkPersistentAlarm( ALARM_ID_DD_CONCENTRATE_PUMP_FAULT, isConcPumpFault, fpgaConcPumpsFault, CONCENTRATE_PUMP_FAULT_PERSISTENCE_PERIOD ); + + //Publish concentrate pump data + publishConcentratePumpData(); +} + +/*********************************************************************//** + * @brief + * The monitorPumpParkStatus function monitors the concentrate pump park status + * and associated fault handling. + * @details \b Inputs: Park status + * @details \b Outputs: isConcPumpParkInProgress,acidConcentratePumpParkPersistenceClear + * bicarbConcentratePumpParkPersistenceClear + * @return none + *************************************************************************/ +static void monitorPumpParkStatus( void ) +{ parked[ D11_PUMP ].data = (U32)getFPGAD11PumpIsParked(); parked[ D10_PUMP ].data = (U32)getFPGAD10PumpIsParked(); parkFaulted[ D11_PUMP ].data = (U32)getFPGAD11PumpParkFault(); parkFaulted[ D10_PUMP ].data = (U32)getFPGAD10PumpParkFault(); - pumpMesauredRevCnt[ D11_PUMP ].data = (U32)getFPGAD11PumpRevolutionCountStatus(); - pumpMesauredRevCnt[ D10_PUMP ].data = (U32)getFPGAD10PumpRevolutionCountStatus(); - if ( ( TRUE == getConcPumpIsParked( D11_PUMP ) ) || ( TRUE == getConcPumpParkIsFaulted( D11_PUMP ) ) ) { // If the pump has parked or faulted during the park, then it is not in progress @@ -297,14 +322,6 @@ resetPersistentAlarmTimer( ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR ); } } - - monitorPumpSpeed( D11_PUMP, ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR ); - monitorPumpSpeed( D10_PUMP, ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR ); - - checkPersistentAlarm( ALARM_ID_DD_CONCENTRATE_PUMP_FAULT, isConcPumpFault, fpgaConcPumpsFault, CONCENTRATE_PUMP_FAULT_PERSISTENCE_PERIOD ); - - //Publish concentrate pump data - publishConcentratePumpData(); } /*********************************************************************//** @@ -485,6 +502,7 @@ * @details \b Alarms: ALARM_ID_DD_SOFTWARE_FAULT when invalid pump ID is seen. * @param pumpId pump id to set step speed * @param targetSpeed_ml_min target speed in mL/min + * @param targetVolume_ml dosing volume to be delivered in ml. * @return none *************************************************************************/ void setConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId, F32 targetSpeed_ml_min, F32 targetVolume_ml ) @@ -804,14 +822,10 @@ if ( D11_PUMP == pumpId ) { setFPGAD11PumpSetStepSpeed( CONCENTRATE_PUMP_ZERO_FLOW_RATE ); - //concentratePumps[ D11_PUMP ].controlSet |= CONCENTRATE_PUMP_CONTROL_ENABLE_MASK; - //setFPGAD11PumpControl( concentratePumps[ D11_PUMP ].controlSet ); } else { setFPGAD10PumpSetStepSpeed( CONCENTRATE_PUMP_ZERO_FLOW_RATE ); - //concentratePumps[ D10_PUMP ].controlSet |= CONCENTRATE_PUMP_CONTROL_ENABLE_MASK; - //setFPGAD10PumpControl( concentratePumps[ D10_PUMP ].controlSet ); } #ifndef __PUMPTEST__ // Park concentrate pump too if requested @@ -884,7 +898,6 @@ static CONCENTRATE_PUMP_STATE_T handleConcentratePumpRampToTargetSpeedState( CONCENTRATE_PUMPS_T pumpId ) { CONCENTRATE_PUMP_STATE_T state = CONCENTRATE_PUMP_RAMP_TO_TARGET_SPEED_STATE; - //U16 currentMeasuredRev = getConcPumpCurrentMeasuredRevolutionCount( pumpId ); if ( TRUE == stepConcentratePumpToTargetSpeed( pumpId ) ) { @@ -915,7 +928,6 @@ static CONCENTRATE_PUMP_STATE_T handleConcentratePumpControlTargetSpeedState( CONCENTRATE_PUMPS_T pumpId ) { CONCENTRATE_PUMP_STATE_T state = CONCENTRATE_PUMP_CONTROL_TARGET_SPEED_STATE; - //U16 currentMeasuredRev = getConcPumpCurrentMeasuredRevolutionCount( pumpId ); F32 targetToCurreSpeedDiffMLPM = fabs( getPumpTargetSpeed( pumpId ) - concentratePumps[ pumpId ].currentPumpSpeed ); if ( ++concentratePumps[ pumpId ].controlTimerCounter >= CONCENTRATE_PUMP_CONTROL_INTERVAL ) @@ -960,9 +972,9 @@ if ( currentToTargetDiff > NEARLY_ZERO ) { - if ( currentToTargetDiff > CONCENTRATE_PUMP_SPEED_INCREMENT ) + if ( currentToTargetDiff > CONCENTRATE_PUMP_RAMP_SPEED_INCREMENT ) { - speedIncrease = CONCENTRATE_PUMP_SPEED_INCREMENT; + speedIncrease = CONCENTRATE_PUMP_RAMP_SPEED_INCREMENT; } else { @@ -1035,24 +1047,15 @@ for ( pumpId = CONCENTRATEPUMPS_FIRST; pumpId < NUM_OF_CONCENTRATE_PUMPS; pumpId++ ) { - switch ( pumpId ) + if ( D11_PUMP == pumpId ) { - case D11_PUMP: - pulseWidthCount = getFPGAD11PumpHallSensePulseWidth(); - break; + pulseWidthCount = getFPGAD11PumpHallSensePulseWidth(); + } + else + { + pulseWidthCount = getFPGAD10PumpHallSensePulseWidth(); + } - case D10_PUMP: - pulseWidthCount = getFPGAD10PumpHallSensePulseWidth(); - break; - -#ifndef _VECTORCAST_ - // Disabled in VectorCAST since it cannot be reached in VectorCAST because the switch case is in a for loop - default: - // Loop only allows for valid concentrate pump Ids. - break; -#endif - } - pulseWidthInMicroSeconds = pulseWidthCount * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION; concentratePumps[ pumpId ].pulseWidthUS = pulseWidthInMicroSeconds; isPumpPulseWidthOut = ( pulseWidthInMicroSeconds <= (F32)CONCENTRATE_PUMP_MIN_ALLOWED_HALL_SENSOR_COUNT ? TRUE : FALSE ); @@ -1121,37 +1124,30 @@ * required set bit, they are set again. * @details \b Inputs: concentratePumps * @details \b Outputs: none - * @details \b Alarms: ALARM_ID_DD_SOFTWARE_FAULT when invalid pump ID is seen. * @param pumpId pump id to check its control set bit * @return none *************************************************************************/ static void checkConcentratePumpControlSet( CONCENTRATE_PUMPS_T pumpId ) { U08 controlSetBits; - switch ( pumpId ) + if ( D11_PUMP == pumpId ) { - case D11_PUMP: - controlSetBits = getFPGAD11PumpControlStatus(); + controlSetBits = getFPGAD11PumpControlStatus(); - if ( controlSetBits != concentratePumps[ pumpId ].controlSet ) - { - setFPGAD11PumpControl( concentratePumps[ pumpId ].controlSet ); - } - break; + if ( controlSetBits != concentratePumps[ pumpId ].controlSet ) + { + setFPGAD11PumpControl( concentratePumps[ pumpId ].controlSet ); + } + } + else + { + controlSetBits = getFPGAD10PumpControlStatus(); - case D10_PUMP: - controlSetBits = getFPGAD10PumpControlStatus(); - - if ( controlSetBits != concentratePumps[ pumpId ].controlSet ) - { - setFPGAD10PumpControl( concentratePumps[ pumpId ].controlSet ); - } - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONCENTRATE_PUMP_INVALID_PUMP_ID, pumpId ); - break; + if ( controlSetBits != concentratePumps[ pumpId ].controlSet ) + { + setFPGAD10PumpControl( concentratePumps[ pumpId ].controlSet ); + } } }