Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r88f28230d288947ba84840b967e95b32e3deffaa -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 88f28230d288947ba84840b967e95b32e3deffaa) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -132,10 +132,8 @@ stopConcentratePump( pumpId ); } - initPersistentAlarm( PERSISTENT_ALARM_CP1_SPEED_CONTROL_ERROR, ALARM_ID_CP1_SPEED_CONTROL_ERROR, - TRUE, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); - initPersistentAlarm( PERSISTENT_ALARM_CP2_SPEED_CONTROL_ERROR, ALARM_ID_CP2_SPEED_CONTROL_ERROR, - TRUE, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_CP1_SPEED_CONTROL_ERROR, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_CP2_SPEED_CONTROL_ERROR, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD, CONCENTRATE_PUMP_SPEED_CONTROL_PERSISTENCE_PERIOD ); } /*********************************************************************//** @@ -154,17 +152,18 @@ calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP1, getFPGACP1HallSensePulseWidth() ); calcMeasuredPumpsSpeed( CONCENTRATEPUMPS_CP2, getFPGACP2HallSensePulseWidth() ); - data.cp1TargetSpeed = concentratePumps[ CONCENTRATEPUMPS_CP1 ].pumpTargetSpeed; + data.cp1CurrentSpeed = concentratePumps[ CONCENTRATEPUMPS_CP1 ].currentPumpSpeed; data.cp1MeasuredSpeed = getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1 ); - data.cp2TargetSpeed = concentratePumps[ CONCENTRATEPUMPS_CP2 ].pumpTargetSpeed; + data.cp2CurrentSpeed = concentratePumps[ CONCENTRATEPUMPS_CP2 ].currentPumpSpeed; data.cp2MeasuredSpeed = getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2 ); F32 const cp1Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1 ) - concentratePumps[ CONCENTRATEPUMPS_CP1 ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP1 ].currentPumpSpeed; F32 const cp2Error = fabs( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2 ) - concentratePumps[ CONCENTRATEPUMPS_CP2 ].currentPumpSpeed ) / concentratePumps[ CONCENTRATEPUMPS_CP2 ].currentPumpSpeed; - // TODO add the right limit values - checkPersistentAlarm( PERSISTENT_ALARM_CP1_SPEED_CONTROL_ERROR, cp1Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp1Error, 0 ); - checkPersistentAlarm( PERSISTENT_ALARM_CP2_SPEED_CONTROL_ERROR, cp2Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp2Error, 0 ); +#ifndef DISABLE_DIALYSATE_CHECK + checkPersistentAlarm( ALARM_ID_CP1_SPEED_CONTROL_ERROR, cp1Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp1Error, CONCENTRATE_PUMP_ERROR_TOLERANCE ); + checkPersistentAlarm( ALARM_ID_CP2_SPEED_CONTROL_ERROR, cp2Error > CONCENTRATE_PUMP_ERROR_TOLERANCE, cp2Error, CONCENTRATE_PUMP_ERROR_TOLERANCE ); +#endif concentratePumpMonitorTimerCounter = 0U; broadcastConcentratePumpData( &data ); Index: firmware/App/Controllers/ConcentratePumps.h =================================================================== diff -u -r3461c140ba07e74863dee1d4c51d0119076fecf8 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 3461c140ba07e74863dee1d4c51d0119076fecf8) +++ firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -41,9 +41,9 @@ /// Concentrate pump data struct. typedef struct { - F32 cp1TargetSpeed; ///< Concentrate pump CP1 target speed + F32 cp1CurrentSpeed; ///< Concentrate pump CP1 current set speed F32 cp1MeasuredSpeed; ///< Concentrate pump CP1 measured speed - F32 cp2TargetSpeed; ///< Concentrate pump CP2 target speed + F32 cp2CurrentSpeed; ///< Concentrate pump CP2 current set speed F32 cp2MeasuredSpeed; ///< Concentrate pump CP2 measured speed } CONCENTRATE_PUMP_DATA_T; Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r666d17245e2873e847cdf0b1da07abfe0702523e -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 666d17245e2873e847cdf0b1da07abfe0702523e) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -141,16 +141,11 @@ setFPGACPoProbeType( COND_CPO_SENSOR_PROBE_TYPE ); initTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CONDUCTIVITY_SENSOR_ERROR, MAX_CONDUCTIVITY_SENSOR_FAILURES, MAX_CONDUCTIVITY_SENSOR_FAILURE_WINDOW_MS ); - initPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_HIGH_CONDUCTIVITY, ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, - FALSE, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); - initPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_CONDUCTIVITY, ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY, - FALSE, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); - initPersistentAlarm( PERSISTENT_ALARM_RO_REJECTION_RATIO_OUT_OF_RANGE, ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, - FALSE, RO_REJECTION_RATIO_PERSISTENCE_PERIOD, RO_REJECTION_RATIO_PERSISTENCE_PERIOD ); - initPersistentAlarm( PERSISTENT_ALARM_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE, ALARM_ID_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE, - TRUE, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD ); - initPersistentAlarm( PERSISTENT_ALARM_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE, ALARM_ID_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE, - TRUE, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, RO_REJECTION_RATIO_PERSISTENCE_PERIOD, RO_REJECTION_RATIO_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD ); } /*********************************************************************//** @@ -199,10 +194,8 @@ BOOL const isCondTooHigh = ( conductivity > COND_SENSOR_CPI_CPO_MAX_VALUE ); BOOL const isCondTooLow = ( conductivity < COND_SENSOR_CPI_CPO_MIN_VALUE ); - // TODO fill the limit argument with the right value - // TODO add the right limit values - checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_HIGH_CONDUCTIVITY, isCondTooHigh, conductivity, 0 ); - checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_CONDUCTIVITY, isCondTooLow, conductivity, 0 ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, isCondTooHigh, conductivity, COND_SENSOR_CPI_CPO_MAX_VALUE ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY, isCondTooLow, conductivity, COND_SENSOR_CPI_CPO_MIN_VALUE ); } /*********************************************************************//** @@ -220,8 +213,7 @@ F32 const cpo = getConductivityValue( CONDUCTIVITYSENSORS_CPO_SENSOR ); BOOL const isRORejectionRatioOutOfRange = ( roRejectionRatio > MAX_RO_REJECTION_RATIO_ALLOW ) || ( cpo >= MAX_CPO_CONDUCTIVITY_ALLOW ); - // TODO fill the limit argument with the right value - checkPersistentAlarm( PERSISTENT_ALARM_RO_REJECTION_RATIO_OUT_OF_RANGE, isRORejectionRatioOutOfRange, roRejectionRatio, 0 ); + checkPersistentAlarm( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, isRORejectionRatioOutOfRange, roRejectionRatio, MAX_RO_REJECTION_RATIO_ALLOW ); #endif } @@ -241,9 +233,10 @@ BOOL const isPostAcidConductivityOutOfRange = ( postAcidConductivity <= CONCENTRATE_POST_ACID_MIN_CONDUCTIVITY ) || ( postAcidConductivity >= CONCENTRATE_POST_ACID_MAX_CONDUCTIVITY ); BOOL const isPostBicarbConductivityOutOfRange = ( postBicarbonateConductivity <= CONCENTRATE_POST_BICARB_MIN_CONDUCTIVITY ) || ( postBicarbonateConductivity >= CONCENTRATE_POST_BICARB_MAX_CONDUCTIVITY ); - // TODO fill the limit argument with the right value - checkPersistentAlarm( PERSISTENT_ALARM_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE, isPostAcidConductivityOutOfRange, postAcidConductivity, 0 ); - checkPersistentAlarm( PERSISTENT_ALARM_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE, isPostBicarbConductivityOutOfRange, postBicarbonateConductivity, 0 ); +#ifndef DISABLE_DIALYSATE_CHECK + checkPersistentAlarm( ALARM_ID_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE, isPostAcidConductivityOutOfRange, postAcidConductivity, CONCENTRATE_POST_ACID_MIN_CONDUCTIVITY ); + checkPersistentAlarm( ALARM_ID_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE, isPostBicarbConductivityOutOfRange, postBicarbonateConductivity, CONCENTRATE_POST_BICARB_MIN_CONDUCTIVITY ); +#endif } /*********************************************************************//** Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r1abaeb395cb7ffb2cb0ea9c1ba65c353d9c416f8 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 1abaeb395cb7ffb2cb0ea9c1ba65c353d9c416f8) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -145,12 +145,10 @@ DRAIN_PUMP_MIN_DAC, DRAIN_PUMP_MAX_DAC ); // Initialize the persistent alarm for open loop RPM out of range - initPersistentAlarm( PERSISTENT_ALARM_DRAIN_PUMP_RPM_OUT_OF_RANGE, ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, TRUE, - OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT, OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT ); + initPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT, OPEN_LOOP_RPM_OUT_OF_RANGE_TIME_OUT ); // Initialize the persistent alarm for RPM not to be less than the min RPM when the pump is off - initPersistentAlarm( PERSISTENT_ALARM_DRAIN_PUMP_OFF_ERROR, ALARM_ID_DRAIN_PUMP_OFF_FAULT, TRUE, - SAFETY_SHUTDOWN_TIMEOUT, SAFETY_SHUTDOWN_TIMEOUT ); + initPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, SAFETY_SHUTDOWN_TIMEOUT, SAFETY_SHUTDOWN_TIMEOUT ); } /*********************************************************************//** @@ -265,15 +263,15 @@ // Check if RPM is out of range. Using fabs since the read RPM can be above or below the target. BOOL isRPMOutOfRange = fabs( targetRPM - currentDrainPumpRPM ) > threshold; - checkPersistentAlarm( PERSISTENT_ALARM_DRAIN_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, currentDrainPumpRPM, threshold ); + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, isRPMOutOfRange, currentDrainPumpRPM, threshold ); } // Check if the pump is in off state and the RPM is greater than the minimum RPM if ( drainPumpState == DRAIN_PUMP_OFF_STATE ) { BOOL isRPMTooHigh = currentDrainPumpRPM > MIN_DRAIN_PUMP_RPM; - checkPersistentAlarm( PERSISTENT_ALARM_DRAIN_PUMP_OFF_ERROR, isRPMTooHigh, currentDrainPumpRPM, MIN_DRAIN_PUMP_RPM ); + checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, isRPMTooHigh, currentDrainPumpRPM, MIN_DRAIN_PUMP_RPM ); // If the off fault alarm has become active, trigger the safety shutdown if ( isAlarmActive( ALARM_ID_DRAIN_PUMP_OFF_FAULT ) ) Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -r2e4afce5a9fd0392b330461ed38322ecadd59aa1 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision 2e4afce5a9fd0392b330461ed38322ecadd59aa1) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -111,8 +111,7 @@ fansMonitorCounter = 0; // Initialize a persistent alarm for fans RPM out of range - initPersistentAlarm( PERSISTENT_ALARM_FANS_RPM_OUT_RANGE, ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, - TRUE, FANS_MAX_ALLOWED_RPM_OUT_OF_RANGE_INTERVAL, FANS_MAX_ALLOWED_RPM_OUT_OF_RANGE_INTERVAL ); + initPersistentAlarm( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, FANS_MAX_ALLOWED_RPM_OUT_OF_RANGE_INTERVAL, FANS_MAX_ALLOWED_RPM_OUT_OF_RANGE_INTERVAL ); } /*********************************************************************//** @@ -482,15 +481,8 @@ for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) { - // Call persistent alarm if a fan's RPM is out of range - if ( fansStatus.rpm[ fan ] >= FANS_MAX_ALLOWED_RPM ) - { - checkPersistentAlarm( PERSISTENT_ALARM_FANS_RPM_OUT_RANGE, TRUE, fansStatus.rpm[ fan ], FANS_MAX_ALLOWED_RPM ); - } - else if ( fansStatus.rpm[ fan ] <= FANS_MIN_ALLOWED_RPM ) - { - checkPersistentAlarm( PERSISTENT_ALARM_FANS_RPM_OUT_RANGE, TRUE, fansStatus.rpm[ fan ], FANS_MIN_ALLOWED_RPM ); - } + BOOL const fanRpmOutOfRange = ( fansStatus.rpm[ fan ] >= FANS_MAX_ALLOWED_RPM ) && ( fansStatus.rpm[ fan ] <= FANS_MIN_ALLOWED_RPM ); + checkPersistentAlarm( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, fanRpmOutOfRange, fansStatus.rpm[ fan ], FANS_MAX_ALLOWED_RPM ); } fansMonitorCounter = 0; Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r35246359c5a9080c704e0a6f1563e99a337e2e91 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 35246359c5a9080c704e0a6f1563e99a337e2e91) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -110,10 +110,8 @@ pressuresSelfTestState = PRESSURE_SELF_TEST_STATE_START; pressuresDataPublicationTimerCounter = 0; - initPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_PRESSURE, ALARM_ID_INLET_WATER_LOW_PRESSURE, - FALSE, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); - initPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_PRESSURE_FAULT, ALARM_ID_INLET_WATER_PRESSURE_FAULT, - FALSE, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_PRESSURE, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_FAULT, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD, INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ); } /*********************************************************************//** @@ -247,8 +245,7 @@ F32 const pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); BOOL const isPressureTooLow = ( pressure < MIN_INLET_WATER_PRESSURE ); - // TODO fill the limit argument with the right value - checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_PRESSURE, isPressureTooLow, pressure, 0 ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_LOW_PRESSURE, isPressureTooLow, pressure, MIN_INLET_WATER_PRESSURE ); } /*********************************************************************//** @@ -264,8 +261,7 @@ F32 const pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); BOOL const isPressureTooLow = ( pressure < MIN_INLET_WATER_PRESSURE ); - // TODO fill the limit argument with the right value - checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_PRESSURE_FAULT, isPressureTooLow, pressure, 0 ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_FAULT, isPressureTooLow, pressure, MIN_INLET_WATER_PRESSURE ); } /*********************************************************************//** Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -rd5b2e26598becc953ce0a7c8928c0c814fcc53a9 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision d5b2e26598becc953ce0a7c8928c0c814fcc53a9) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -171,22 +171,17 @@ MIN_RO_PUMP_DUTY_CYCLE, MAX_RO_PUMP_DUTY_CYCLE ); // Initialize the persistent alarm for flow out of upper and lower range - initPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_UPPER_RANGE, ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE, TRUE, - FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ); + initPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ); + initPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ); - initPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_LOWER_RANGE, ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE, TRUE, - FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL, FLOW_OUT_OF_RANGE_PERSISTENT_INTERVAL ); - // Initialize the persistent alarm for max allowed pressure out of range - initPersistentAlarm( PERSISTENT_ALARM_RO_PUMP_PRESSURE_OUT_OF_RANGE, ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE, TRUE, - MAX_PRESSURE_OUT_OF_RANGE_PERSISTENT_INTERVAL, MAX_PRESSURE_OUT_OF_RANGE_PERSISTENT_INTERVAL ); + initPersistentAlarm( ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE, MAX_PRESSURE_OUT_OF_RANGE_PERSISTENT_INTERVAL, MAX_PRESSURE_OUT_OF_RANGE_PERSISTENT_INTERVAL ); // Initialize the persistent alarm for ramp up to target flow timeout - initPersistentAlarm( PERSISTENT_ALARM_RO_PUMP_RAMP_UP_TO_TARGET_FLOW_TIMEOUT, ALARM_ID_RO_PUMP_RAMP_UP_TO_FLOW_TIMEOUT, TRUE, - MAX_ALLOWED_RAMP_UP_TIME, MAX_ALLOWED_RAMP_UP_TIME ); + initPersistentAlarm( ALARM_ID_RO_PUMP_RAMP_UP_TO_FLOW_TIMEOUT, MAX_ALLOWED_RAMP_UP_TIME, MAX_ALLOWED_RAMP_UP_TIME ); // Initialize the persistent alarm for not turning off the pump - initPersistentAlarm( PERSISTEMT_ALARM_RO_PUMP_OFF_ERROR, ALARM_ID_RO_PUMP_OFF_FAULT, TRUE, SAFETY_SHUTDOWN_TIMEOUT, SAFETY_SHUTDOWN_TIMEOUT ); + initPersistentAlarm( ALARM_ID_RO_PUMP_OFF_FAULT, SAFETY_SHUTDOWN_TIMEOUT, SAFETY_SHUTDOWN_TIMEOUT ); // Initialize the variables roControlTimerCounter = 0; @@ -296,7 +291,7 @@ // to make sure the hardware (especially the ROF) is not damaged. If it is the case, we need to stop immediately F32 actualPressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_OUTLET ); BOOL isPressureMax = actualPressure >= MAX_ALLOWED_MEASURED_PRESSURE_PSI; - checkPersistentAlarm( PERSISTENT_ALARM_RO_PUMP_PRESSURE_OUT_OF_RANGE, isPressureMax, actualPressure, MAX_ALLOWED_MEASURED_PRESSURE_PSI ); + checkPersistentAlarm( ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE, isPressureMax, actualPressure, MAX_ALLOWED_MEASURED_PRESSURE_PSI ); // Read flow at the control set if ( ++flowFilterCounter >= FLOW_SAMPLES_TO_AVERAGE ) @@ -331,8 +326,8 @@ { BOOL isFlowOutOfUpperRange = currentFlow > targetFlow; BOOL isFlowOutOfLowerRange = currentFlow < targetFlow; - checkPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_UPPER_RANGE, isFlowOutOfUpperRange, currentFlow, targetFlow ); - checkPersistentAlarm( PERSISTENT_ALARM_RO_FLOW_RATE_OUT_OF_LOWER_RANGE, isFlowOutOfLowerRange, currentFlow, targetFlow ); + checkPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE, isFlowOutOfUpperRange, currentFlow, targetFlow ); + checkPersistentAlarm( ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE, isFlowOutOfLowerRange, currentFlow, targetFlow ); } } @@ -342,7 +337,7 @@ F32 pressureInlet = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); BOOL isPumpRunning = ( pressureInlet + MAX_PRESSURE_TARGET_TOLERANCE ) < actualPressure; - checkPersistentAlarm( PERSISTEMT_ALARM_RO_PUMP_OFF_ERROR, isPumpRunning, pressureInlet, ( pressureInlet + MAX_PRESSURE_TARGET_TOLERANCE ) ); + checkPersistentAlarm( ALARM_ID_RO_PUMP_OFF_FAULT, isPumpRunning, pressureInlet, ( pressureInlet + MAX_PRESSURE_TARGET_TOLERANCE ) ); // Check if it has timed out if ( isAlarmActive( ALARM_ID_RO_PUMP_OFF_FAULT ) ) @@ -485,7 +480,7 @@ BOOL isFlowInRange = fabs( targetFlowRate - actualFlowRate ) > ROP_FLOW_TARGET_TOLERANCE; // Check if the ramp up has timed out - checkPersistentAlarm( PERSISTENT_ALARM_RO_PUMP_RAMP_UP_TO_TARGET_FLOW_TIMEOUT, isFlowInRange, actualFlowRate, MAX_ALLOWED_RAMP_UP_TIME ); + checkPersistentAlarm( ALARM_ID_RO_PUMP_RAMP_UP_TO_FLOW_TIMEOUT, isFlowInRange, actualFlowRate, MAX_ALLOWED_RAMP_UP_TIME ); // If the ramp up persistent alarm is active, turn off the pump and go to off state if ( isAlarmActive( ALARM_ID_RO_PUMP_RAMP_UP_TO_FLOW_TIMEOUT ) ) Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r2e4afce5a9fd0392b330461ed38322ecadd59aa1 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 2e4afce5a9fd0392b330461ed38322ecadd59aa1) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -147,14 +147,6 @@ static const F32 TEMP_EQUATION_COEFF_A = 3.9083E-3; ///< ADC to temperature conversion coefficient A. static const F32 TEMP_EQUATION_COEFF_B = -5.775E-7; ///< ADC to temperature conversion coefficient B. -/// Max FPGA error count limit. -static const F32 MAX_FPGA_ERROR_COUNT_LIMIT = TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD / - ( FPGA_RAW_ADC_READ_INTERVAL_COUNT * TASK_PRIORITY_INTERVAL ); - -/// Max internal error count limit. -static const F32 MAX_INTERNAL_ERROR_COUNT_LIMIT = TEMPERATURE_SENSORS_INTERNAL_ERROR_PERSISTENT_PERIOD / - ( FPGA_RAW_ADC_READ_INTERVAL_COUNT * TASK_PRIORITY_INTERVAL ); - // ********** private function prototypes ********** static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestStart( void ); @@ -258,21 +250,13 @@ tempSensors[ TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR ].conversionCoeff = conversionCoeff; // Persistent alarms for inlet water high/low temperature - initPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_HIGH_TEMPERATURE, ALARM_ID_INLET_WATER_HIGH_TEMPERATURE, - TRUE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); - initPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_TEMPERATURE, ALARM_ID_INLET_WATER_LOW_TEMPERATURE, - TRUE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_TEMPERATURE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); + initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_TEMPERATURE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); // Persistent alarm for temperature sensors internal error // When the FPGA read count does not increment for a period of time, it is considered as an internal error of the temperature sensors // driver. This is internal because FPGA does not error out if the FPGA read count does not increment. - initPersistentAlarm( PERSISTENT_ALARM_TEMP_SENSORS_INTERNAL_ERROR, ALARM_ID_TEMPERATURE_SENSORS_FAULT, - TRUE, TEMPERATURE_SENSORS_INTERNAL_ERROR_PERSISTENT_PERIOD, TEMPERATURE_SENSORS_INTERNAL_ERROR_PERSISTENT_PERIOD ); - - // Persistent alarm for temperature sensors FPGA error - // This is FPGA error which is read from FPGA and it should be 0. If it is not 0 for a period of time, an alarm is raised. - initPersistentAlarm( PERSISTENT_ALARM_TEMP_SENSORS_FPGA_ERROR, ALARM_ID_TEMPERATURE_SENSORS_FAULT, TRUE, - TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD, TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD ); + initPersistentAlarm( ALARM_ID_TEMPERATURE_SENSORS_FAULT, TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD, TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD ); } /*********************************************************************//** @@ -353,8 +337,8 @@ BOOL const isWaterTempTooHigh = temperature > MAX_WATER_INPUT_TEMPERATURE; BOOL const isWaterTempTooLow = temperature < MIN_WATER_INPUT_TEMPERATURE; - checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_HIGH_TEMPERATURE, isWaterTempTooHigh, temperature, MAX_WATER_INPUT_TEMPERATURE ); - checkPersistentAlarm( PERSISTENT_ALARM_INLET_WATER_LOW_TEMPERATURE, isWaterTempTooLow, temperature, MIN_WATER_INPUT_TEMPERATURE ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_TEMPERATURE, isWaterTempTooHigh, temperature, MAX_WATER_INPUT_TEMPERATURE ); + checkPersistentAlarm( ALARM_ID_INLET_WATER_LOW_TEMPERATURE, isWaterTempTooLow, temperature, MIN_WATER_INPUT_TEMPERATURE ); } /*********************************************************************//** @@ -592,8 +576,7 @@ } } - checkPersistentAlarm( PERSISTENT_ALARM_TEMP_SENSORS_INTERNAL_ERROR, !isFPGACountChanging, sensorIndex, MAX_INTERNAL_ERROR_COUNT_LIMIT ); - checkPersistentAlarm( PERSISTENT_ALARM_TEMP_SENSORS_FPGA_ERROR, !isFPGAErrorZero, sensorIndex, MAX_FPGA_ERROR_COUNT_LIMIT ); + checkPersistentAlarm( ALARM_ID_TEMPERATURE_SENSORS_FAULT, !isFPGACountChanging || !isFPGAErrorZero, sensorIndex, TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD ); return isADCValid; } Index: firmware/App/Controllers/Thermistors.c =================================================================== diff -u -r374bab15ea30aba82ee139e8a494764db312f468 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 374bab15ea30aba82ee139e8a494764db312f468) +++ firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -102,8 +102,7 @@ thermistorsStatus[ THERMISTOR_POWER_SUPPLY_2 ].betaValue = POWER_SUPPLY_THERMISTOR_BETA_VALUE; // Initialize a persistent alarm for thermistors temeprature out of range - initPersistentAlarm( PERSISTENT_ALARM_THERMISTOR_TEMPERATURE_OUT_OF_RANGE, ALARM_ID_DG_THERMISOTRS_TEMPERATURE_OUT_OF_RANGE, - TRUE, MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD, MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD ); + initPersistentAlarm( ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE, MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD, MAX_ALLOWED_TEMP_OUT_OF_RANGE_PERIOD ); } /*********************************************************************//** @@ -234,7 +233,7 @@ // If the values are out of range, raise an alarm if ( temperature < MIN_ALLOWED_TEMPERATURE || temperature >= MAX_ALLOWED_TEMPERATURE ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_THERMISOTRS_TEMPERATURE_OUT_OF_RANGE, thermistor, temperature ); + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE, thermistor, temperature ); // If any thermistor/sensor is not in range, POST has failed thermistorsSelfTestReslt = SELF_TEST_STATUS_FAILED; } @@ -321,12 +320,9 @@ for ( thermistor = THERMISTOR_ONBOARD_NTC; thermistor < NUM_OF_THERMISTORS; thermistor++ ) { temperature = getThermistorTemperatureValue( thermistor ); + BOOL const isTempOutOfRange = ( temperature >= MAX_ALLOWED_TEMPERATURE ) && ( temperature < MIN_ALLOWED_TEMPERATURE ); - BOOL isTempOutOfUpperRange = temperature >= MAX_ALLOWED_TEMPERATURE; - BOOL isTempOutOfLowerRange = temperature < MIN_ALLOWED_TEMPERATURE; - - checkPersistentAlarm( PERSISTENT_ALARM_THERMISTOR_TEMPERATURE_OUT_OF_RANGE, isTempOutOfLowerRange, temperature, MIN_ALLOWED_TEMPERATURE ); - checkPersistentAlarm( PERSISTENT_ALARM_THERMISTOR_TEMPERATURE_OUT_OF_RANGE, isTempOutOfUpperRange, temperature, MAX_ALLOWED_TEMPERATURE ); + checkPersistentAlarm( ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE, isTempOutOfRange, temperature, MAX_ALLOWED_TEMPERATURE ); } } Index: firmware/App/Controllers/UVReactors.c =================================================================== diff -u -r080a5f15856ba1461784d260fe09157cb77b608b -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 080a5f15856ba1461784d260fe09157cb77b608b) +++ firmware/App/Controllers/UVReactors.c (.../UVReactors.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -66,9 +66,6 @@ static U32 dataPublishCounter = 0; ///< UV reactors data publish counter. static U32 selfTestElapsedTime = 0; ///< UV reactors self test elapsed time. -static const U32 MAX_UNHEALTHY_REACTOR_COUNT_LIMIT = MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD / - TASK_GENERAL_INTERVAL; ///< UV reactors max unhealthy count. - // Self test functions static UV_REACTORS_SELF_TEST_STATE_T handleUVReactorsSelfTestOff( void ); static UV_REACTORS_SELF_TEST_STATE_T handleUVReactorsSelfTestCheckHealth( void ); @@ -116,8 +113,7 @@ reactorsStatus[ reactor ].switchState = TURN_OFF; } - initPersistentAlarm( PERSISTENT_ALARM_UV_REACTOR_UNHEALTHY, ALARM_ID_UV_REACTOR_NOT_HEALTHY, TRUE, - MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD, MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD ); + initPersistentAlarm( ALARM_ID_UV_REACTOR_NOT_HEALTHY, MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD, MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD ); } /*********************************************************************//** @@ -383,7 +379,7 @@ BOOL isReactorHealthy = getUVReactorHealth( reactor ); - checkPersistentAlarm( PERSISTENT_ALARM_UV_REACTOR_UNHEALTHY, !isReactorHealthy, (U32)reactor, MAX_UNHEALTHY_REACTOR_COUNT_LIMIT ); + checkPersistentAlarm( ALARM_ID_UV_REACTOR_NOT_HEALTHY, !isReactorHealthy, (U32)reactor, MAX_ALLOWED_UNHEALTHY_REACTOR_PERIOD ); // Check if the alarm has been active if( isAlarmActive( ALARM_ID_UV_REACTOR_NOT_HEALTHY ) ) Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -rf7292cd3376119210980f14e8bdb0ec5e0cf5df5 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision f7292cd3376119210980f14e8bdb0ec5e0cf5df5) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -70,10 +70,6 @@ void initFillMode( void ) { fillState = DG_FILL_MODE_STATE_START; - - // TODO figure this out - //initPersistentAlarm( PERSISTENT_ALARM_RO_PUMP_FLOW_RATE_OUT_OF_RANGE, ALARM_ID_RO_PUMP_FLOW_RATE_OUT_OF_RANGE, - // FALSE, RO_FLOW_RATE_OUT_OF_RANGE_PERSISTENCE_PERIOD, RO_FLOW_RATE_OUT_OF_RANGE_PERSISTENCE_PERIOD ); } /*********************************************************************//** @@ -266,10 +262,6 @@ setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1, acidCP1PumpFlowRate ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2, bicarbCP2PumpFlowRate ); - - BOOL const isROPumpFlowRateOutOfRange = ( measuredROFlowRate <= FILL_MIN_RO_FLOW_RATE ) || ( measuredROFlowRate >= FILL_MAX_RO_FLOW_RATE ); - - //checkPersistentAlarm( PERSISTENT_ALARM_RO_PUMP_FLOW_RATE_OUT_OF_RANGE, isROPumpFlowRateOutOfRange, measuredROFlowRate ); TODO figure this out } /**@}*/ Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r4d7d40a27130dc813d653f044cbb856b1b7d8481 -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 4d7d40a27130dc813d653f044cbb856b1b7d8481) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -16,7 +16,8 @@ ***************************************************************************/ #include "AlarmMgmt.h" -#include "OperationModes.h" +#include "OperationModes.h" +#include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Timers.h" @@ -279,6 +280,31 @@ return result; } +/*********************************************************************//** + * @brief + * The checkPersistentAlarm function triggers/clears an alarm if an alarm condition + * has persisted/cleared over given time limit. + * @details Inputs: none + * @details Outputs: checks whether an alarm is triggered or an alarm condition is cleared + * @param alarmID ID of alarm to check + * @param isErrorOccured Flag indicates alarm condition is active or not + * @param data alarm data + * @param limit alarm condition limit + * @return TRUE if given alarm is active, FALSE if not + *************************************************************************/ +void checkPersistentAlarm( ALARM_ID_T alarm, BOOL const isErrorOccured, F32 const data, F32 const limit ) +{ + if ( TRUE == isPersistentAlarmTriggered( alarm, isErrorOccured ) ) + { + SET_ALARM_WITH_2_F32_DATA( alarm, data, limit ); + } + + if ( TRUE == isPersistentAlarmConditionCleared( alarm, isErrorOccured ) ) + { + clearAlarmCondition( alarm ); + } +} + /************************************************************************* * TEST SUPPORT FUNCTIONS Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r00a3d52090bee79dac6e9eed3bd79342fcbca83f -r2fea76e972a450a97c74b2a9f627095032a3b586 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 00a3d52090bee79dac6e9eed3bd79342fcbca83f) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) @@ -174,8 +174,11 @@ void activateAlarmNoData( ALARM_ID_T alarm ); void activateAlarm1Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData ); void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2 ); -void clearAlarm( ALARM_ID_T alarm ); -BOOL isAlarmActive( ALARM_ID_T alarm ); +void clearAlarm( ALARM_ID_T alarm ); +void clearAlarmCondition( ALARM_ID_T alarm ); +BOOL isAlarmActive( ALARM_ID_T alarm ); + +void checkPersistentAlarm( ALARM_ID_T alarm, BOOL const isErrorOccured, F32 const data, F32 const limit ); BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); BOOL testResetAlarmStateOverride( U32 alarmID );