Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -rfe346c67b8f22781066256b2cadd20f43c0db54b -rc759ca75d6f762c83e78c381605a394ba2990b5b --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision fe346c67b8f22781066256b2cadd20f43c0db54b) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision c759ca75d6f762c83e78c381605a394ba2990b5b) @@ -57,7 +57,7 @@ #define CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL ( 500 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is monitored. #define CONCENTRATE_PUMP_CONTROL_INTERVAL ( 1 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the concentrate pump is controlled. -#define CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ( 6 * MS_PER_SECOND ) ///< Persistence period for concentrate pump speed control error. +#define CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ( 5 * MS_PER_SECOND ) ///< Persistence period for concentrate pump speed control error. #define NUMBER_OF_ACID_AND_BICARB_NV_DATA_TO_CHECK 1 ///< Number of acid and bicarb non-volatile data to check. @@ -120,6 +120,8 @@ // ********** private data ********** static U32 concentratePumpMonitorTimerCounter; ///< Timer counter to perform monitor on concentrate pump. +static BOOL acidConcentratePumpParkPersistenceClear; ///< Boolean acid park persistence clearing. +static BOOL bicarbConcentratePumpParkPersistenceClear; ///< Boolean for bicard park persistence clearing. /// Concentrate pump data publish interval. static OVERRIDE_U32_T concentratePumpDataPublishInterval = { CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, CONCENTRATE_PUMP_DATA_PUBLISH_INTERVAL, 0, 0 }; @@ -151,6 +153,8 @@ CONCENTRATE_PUMPS_T pumpId; concentratePumpMonitorTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + acidConcentratePumpParkPersistenceClear = FALSE; ///< Boolean acid park persistence clearing. + bicarbConcentratePumpParkPersistenceClear = FALSE; for ( pumpId = CONCENTRATEPUMPS_CP1_ACID; pumpId < NUM_OF_CONCENTRATE_PUMPS; ++pumpId ) { @@ -205,6 +209,34 @@ concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].parkFaulted.data = (U32)getFPGAAcidPumpParkFault(); concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].parkFaulted.data = (U32)getFPGABicarbPumpParkFault(); + // Don't monitor persistence for cp speed alarms if we parked. + if ( TRUE == acidConcentratePumpParkPersistenceClear ) + { + // Clear flag and resume persistence checking once park bit is set. + if ( TRUE == concentratePumps[ CONCENTRATEPUMPS_CP1_ACID ].parked.data ) + { + acidConcentratePumpParkPersistenceClear = FALSE; + } + else + { + resetPersistentAlarmTimer( ALARM_ID_CP1_SPEED_CONTROL_ERROR ); + } + } + + if ( TRUE == bicarbConcentratePumpParkPersistenceClear ) + { + // Clear flag and resume persistence checking once park bit is set. + if ( TRUE == concentratePumps[ CONCENTRATEPUMPS_CP2_BICARB ].parked.data ) + { + bicarbConcentratePumpParkPersistenceClear = FALSE; + } + else + { + resetPersistentAlarmTimer( ALARM_ID_CP2_SPEED_CONTROL_ERROR ); + } + } + + #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONC_PUMPS_SPEED_ALARM ) != SW_CONFIG_ENABLE_VALUE ) #endif @@ -588,10 +620,12 @@ if ( CONCENTRATEPUMPS_CP1_ACID == pumpId ) { setFPGAAcidPumpParkCmd(); + acidConcentratePumpParkPersistenceClear = TRUE; } else { setFPGABicarbPumpParkCmd(); + bicarbConcentratePumpParkPersistenceClear = TRUE; } } }