Index: firmware/App/Controllers/RinsePump.c =================================================================== diff -u -r30199912da641d8832d8dcd8239b6fc5fe53b204 -rbe3fa274cd01b6dec1f98fa7266739b55648d582 --- firmware/App/Controllers/RinsePump.c (.../RinsePump.c) (revision 30199912da641d8832d8dcd8239b6fc5fe53b204) +++ firmware/App/Controllers/RinsePump.c (.../RinsePump.c) (revision be3fa274cd01b6dec1f98fa7266739b55648d582) @@ -19,6 +19,7 @@ #include "FpgaDD.h" #include "Messaging.h" #include "OperationModes.h" +#include "PersistentAlarm.h" #include "RinsePump.h" #include "TaskGeneral.h" #include "Timers.h" @@ -46,7 +47,10 @@ #define RINSE_PUMP_PULSE_WIDTH_INVALID_MIN 0U ///< Invalid pulse width minimum (no rotation). #define RINSE_PUMP_PULSE_WIDTH_INVALID_MAX 0xFFFFU ///< Invalid pulse width maximum (sensor fault). #define RINSE_PUMP_SPD_OUT_OF_RANGE_TOL_PCT 0.10F ///< Rinse pump commanded vs measured speed tolerance (10%). +#define RINSE_PUMP_SPEED_OUT_PERSISTENCE_MS 500 ///< Persistence time (ms) before declaring speed-out-of-range alarm. #define RINSE_PUMP_MAX_RPM_ESTIMATE 3000U ///< Estimated max rinse pump RPM (for PWM-to-target conversion). +#define RINSE_PUMP_ZERO_U32 0U ///< Zero value for U32 variables (speed, counts). +#define RINSE_PUMP_ZERO_F32 0.0F ///< Zero value for F32 variables (error). // ********** private data ********** @@ -85,8 +89,10 @@ rinsePumpPwmPercentage.ovData = RINSE_PUMP_DEFAULT_PWM_PERCENT; rinsePumpPwmPercentage.ovInitData = RINSE_PUMP_DEFAULT_PWM_PERCENT; rinsePumpPwmPercentage.override = OVERRIDE_RESET; - rinsePumpMeasuredSpeed = 0U; - rinsePumpTargetSpeedRPM = 0U; + rinsePumpMeasuredSpeed = RINSE_PUMP_ZERO_U32; + rinsePumpTargetSpeedRPM = RINSE_PUMP_ZERO_U32; + + initPersistentAlarm( ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE, 0, RINSE_PUMP_SPEED_OUT_PERSISTENCE_MS ); } /*********************************************************************//** @@ -160,7 +166,7 @@ { // Pulse width in 10us resolution U16 pumpPulseWidth = getFPGAD79RinsePumpPulseWidth(); - U32 pumpSpeedPerSec = 0U; + U32 pumpSpeedPerSec = RINSE_PUMP_ZERO_U32; if ( ( RINSE_PUMP_PULSE_WIDTH_INVALID_MIN != pumpPulseWidth ) && ( RINSE_PUMP_PULSE_WIDTH_INVALID_MAX != pumpPulseWidth ) ) { @@ -171,7 +177,7 @@ } else { - rinsePumpMeasuredSpeed = 0U; + rinsePumpMeasuredSpeed = RINSE_PUMP_ZERO_U32; } } @@ -181,34 +187,19 @@ * @details \b Inputs: none * @details \b Outputs: publish rinse pump data * @details \b Alarm: ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE when - * commanded vs measured speed deviates beyond tolerance. Data1=measured RPM, Data2=target RPM. + * commanded vs measured speed deviates beyond tolerance for RINSE_PUMP_SPEED_OUT_PERSISTENCE_MS (persistent alarm). * @return none *************************************************************************/ void execRinsePumpMonitor( void ) { - U08 fpgaConcPumpsFault = getFPGAConcentratePumpsFault(); - BOOL isConcPumpFault = ( fpgaConcPumpsFault > 0 ? TRUE : FALSE ); - - - // Check if a new calibration is available -// if ( TRUE == isNewCalibrationRecordAvailable() ) -// { -// // Get the calibration values of acid and bicarb -// getNVRecord2Driver( GET_CAL_ACID_CONCENTREATES, (U08*)&acidConcentrateCalRecord, sizeof( acidConcentrateCalRecord ), -// NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK, ALARM_ID_DD_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_DD_BICARB_CONCENTRATE_INVALID_CAL_RECORD ); -// } - // Calculate rinse pump speed calculateRinsePumpSpeed(); - - // Monitor pump speed (commanded vs measured tolerance, triggers ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE) + // Monitor pump speed monitorRinsePumpSpeed(); - //Publish rinse pump data // TODO should be done in monitor or controller? -// publishRinsePumpData(); + // Publish rinse pump data + publishRinsePumpData(); } @@ -242,13 +233,13 @@ break; } - publishRinsePumpData(); } /*********************************************************************//** * @brief * The monitorRinsePumpSpeed function monitors the rinse pump speed and - * triggers the alarms if they are out of range. + * triggers the alarm via the persistent alarm API when out of range for + * RINSE_PUMP_SPEED_OUT_PERSISTENCE_MS. * @details \b Inputs: none * @details \b Outputs: none * @return none @@ -257,30 +248,24 @@ { F32 rpTargetSpeed = (F32)rinsePumpTargetSpeedRPM; F32 rpMeasSpeed = (F32)rinsePumpMeasuredSpeed; - F32 rpError = 0.0F; + F32 rpError = RINSE_PUMP_ZERO_F32; BOOL isRpSpeedOut = FALSE; F32 tolerance = RINSE_PUMP_SPD_OUT_OF_RANGE_TOL_PCT; if ( RINSE_PUMP_STATE_ON == currentRinsePumpState ) { rpError = fabs( rpMeasSpeed - rpTargetSpeed ); - if ( rpTargetSpeed > 0.0F ) + if ( rpTargetSpeed > RINSE_PUMP_ZERO_F32 ) { rpError = rpError / rpTargetSpeed; } isRpSpeedOut = ( rpError > tolerance ? TRUE : FALSE ); } - if ( TRUE == isRpSpeedOut ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE, rinsePumpMeasuredSpeed, rinsePumpTargetSpeedRPM ); - } - else - { - clearAlarmConditionDD( ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE ); - } + checkPersistentAlarm( ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE, isRpSpeedOut, + (F32)rinsePumpMeasuredSpeed, (F32)rinsePumpTargetSpeedRPM ); } /*********************************************************************//** @@ -308,7 +293,7 @@ { RINSE_PUMP_STATE_T state = RINSE_PUMP_STATE_OFF; - rinsePumpTargetSpeedRPM = 0U; + rinsePumpTargetSpeedRPM = RINSE_PUMP_ZERO_U32; if ( TRUE == getTestConfigStatus( TEST_CONFIG_DD_FP_ENABLE_BETA_2_0_HW ) ) { @@ -396,7 +381,7 @@ data.d79PumpRPM = rinsePumpMeasuredSpeed; broadcastData( MSG_ID_DD_RINSE_PUMP_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( RINSE_PUMP_PAYLOAD_T ) ); - rinsePumpDataPublicationTimerCounter = 0; + rinsePumpDataPublicationTimerCounter = RINSE_PUMP_ZERO_U32; } }