Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -238,18 +238,17 @@ /*********************************************************************//** * @brief - * The isInletWaterConductivityInRange function checks inlet water conductivity value + * The checkInletWaterConductivity function checks inlet water conductivity value * and triggers an alarm when conductivity value is not within the specified * values. * @details Inputs: CPi sensor conductivity * @details Outputs: Trigger warning alarm if conductivity is in the warning * range. Trigger alarm if conductivity is below minimum conductivity. - * @return TRUE if the inlet water conductivity is in range otherwise, FALSE + * @return none *************************************************************************/ -BOOL isInletWaterConductivityInRange( void ) +void checkInletWaterConductivity( void ) { #ifndef DISABLE_WATER_QUALITY_CHECK - BOOL status = TRUE; F32 conductivity = getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ); BOOL isConductTooLow = ( conductivity < MAX_COND_SENSOR_CPI_WARNING_LOW ? TRUE : FALSE ); BOOL isConductInWarningRange = ( conductivity > MAX_COND_SENSOR_CPI_WARNING_HIGH ? TRUE : FALSE ); @@ -273,14 +272,6 @@ { checkPersistentAlarm( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE, FALSE, conductivity, MAX_COND_SENSOR_CPI_WARNING_HIGH ); } - - if ( ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE ) ) ) - { - status = FALSE; - } - - return status; #endif } Index: firmware/App/Controllers/ConductivitySensors.h =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -84,7 +84,7 @@ SELF_TEST_STATUS_T execConductivitySensorsSelfTest( void ); -BOOL isInletWaterConductivityInRange( void ); +void checkInletWaterConductivity( void ); void checkRORejectionRatio( void ); F32 getConductivityValue( U32 sensorId ); Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r264d5853c97ab9550878609c9302e87464078734 -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 264d5853c97ab9550878609c9302e87464078734) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -365,6 +365,7 @@ } else { + // There are not out of range conditions, clear the alarms checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE, FALSE, getDrainPumpMeasuredRPM(), MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ); checkPersistentAlarm( ALARM_ID_DRAIN_PUMP_OFF_FAULT, FALSE, getDrainPumpMeasuredRPM(), MIN_DRAIN_PUMP_RPM ); } Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u -ra7ce8c41a18998898d7525c0a7bf4d7d40c5371a -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision a7ce8c41a18998898d7525c0a7bf4d7d40c5371a) +++ firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -87,13 +87,13 @@ } // Check state reading and act upon - if ( FLUID_LEAK_STATE_WET == getFluidLeakState() ) + if ( FLUID_LEAK_STATE_DRY == getFluidLeakState() ) { - activateAlarmNoData( ALARM_ID_DG_FLUID_LEAK_DETECTED ); + clearAlarmCondition( ALARM_ID_DG_FLUID_LEAK_DETECTED ); } - else // FLUID_LEAK_STATE_DRY == getFluidLeakState() + else { - clearAlarmCondition( ALARM_ID_DG_FLUID_LEAK_DETECTED ); + activateAlarmNoData( ALARM_ID_DG_FLUID_LEAK_DETECTED ); } } Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -re0cdf49eb0f54239e5d765282e0952cea7ded1bd -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision e0cdf49eb0f54239e5d765282e0952cea7ded1bd) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -367,7 +367,7 @@ { // TODO add the function that gets the flow of the new flow sensor for DG. For now it is assumed that trimmer heater flow sensor // is not 0 so the heater can run if needed - F32 measFlow = ( DG_PRIMARY_HEATER == heater ? getMeasuredROFlowRate() : 50.0 ); + F32 measFlow = ( DG_PRIMARY_HEATER == heater ? getMeasuredROFlowRateLPM() : 50.0 ); // TODO get the minimum new flow sensor flow sensor F32 minFlow = ( DG_PRIMARY_HEATER == heater ? MIN_RO_FLOWRATE_LPM : MIN_RO_FLOWRATE_LPM ); BOOL isFlowLow = ( measFlow < minFlow ? TRUE : FALSE ); Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -re0cdf49eb0f54239e5d765282e0952cea7ded1bd -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision e0cdf49eb0f54239e5d765282e0952cea7ded1bd) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -155,6 +155,7 @@ void execLoadCell( void ) { U32 ii; + U32 a1 = getFPGALoadCellA1(); U32 a2 = getFPGALoadCellA2(); U32 b1 = getFPGALoadCellB1(); @@ -176,6 +177,8 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_LOAD_CELL_ADC_ERROR, ( a1 | a2 | b1 | b2 ) ) } + // TODO use ALARM_ID_DG_LOAD_CELL_FPGA_READ_ERROR for read error + // Check if a new calibration is available if ( TRUE == isNewCalibrationRecordAvailable() ) { @@ -301,16 +304,16 @@ F32 weight = getLoadCellSmallFilteredWeight( loadCellID ); // Check if the load cell is being tared for the first time - if ( fabs(loadcells[ loadCellID ].autoCalOffset ) < NEARLY_ZERO ) + if ( fabs( loadcells[ loadCellID ].autoCalOffset ) < NEARLY_ZERO ) { // For the first tare, the weight of the reservoir should be considered // The current weight of the load cell should not be greater than the weight of the reservoir + the extra weight - F32 deltaWeight = fabs( weight - EMPTY_RESERVOIR_WEIGHT_GRAMS ); + F32 deltaWeight = fabs( weight - EMPTY_RESERVOIR_WEIGHT_GRAMS ); isWeightOutOfRange = ( deltaWeight > MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_FIRST_TARE_GRAMS ? TRUE : FALSE ); } else { - isWeightOutOfRange = ( fabs(weight) > MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS ? TRUE : FALSE ); + isWeightOutOfRange = ( fabs( weight ) > MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS ? TRUE : FALSE ); } if ( FALSE == isWeightOutOfRange ) Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -50,8 +50,10 @@ #define MIN_INLET_WATER_PRESSURE_WARNING_LOW 28.0F ///< Minimum allowed low pressure value. #define INLET_WATER_PRESSURE_PERSISTENCE_PERIOD ( 5 * MS_PER_SECOND ) ///< Persistence period for pressure out of range error. +#define PRESSURE_OUT_OF_RANGE_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Pressure out of range persistence period in milliseconds. #define PRESSURES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the pressures data is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 10 ///< Data publish counter start count. +#define PRESSURE_SENSORS_ADC_CHECK_ARRAY_LEN 4 ///< Pressure sensors ADC check array length. /// Defined states for the pressures monitor state machine. typedef enum PresOccl_States @@ -120,21 +122,20 @@ pressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; initPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, 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 ); + initPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, PRESSURE_OUT_OF_RANGE_TIMEOUT_MS, PRESSURE_OUT_OF_RANGE_TIMEOUT_MS ); } /*********************************************************************//** * @brief - * The checkInletPressure function checks inlet water pressure value + * The checkInletWaterPressure function checks inlet water pressure value * and triggers an alarm when pressure value is out of allowed range. * @details Inputs: RO pump inlet pressure sensor value * @details Outputs: Triggers low pressure persistent alarm - * @return TURE is pressure is in range otherwise, FALSE + * @return none *************************************************************************/ -BOOL isInletPressureInRange( void ) +void checkInletWaterPressure( void ) { #ifndef DISABLE_WATER_QUALITY_CHECK - BOOL status = TRUE; F32 pressure = getMeasuredDGPressure( PRESSURE_SENSOR_RO_PUMP_INLET ); BOOL isPressureTooLow = ( pressure < MAX_INLET_WATER_PRESSURE_WARNING_LOW ? TRUE : FALSE ); @@ -147,13 +148,6 @@ { checkPersistentAlarm( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE, FALSE, pressure, MAX_INLET_WATER_PRESSURE_WARNING_LOW ); } - - if ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) - { - status = FALSE; - } - - return status; #endif } @@ -227,13 +221,13 @@ case PRESSURE_SELF_TEST_STATE_START: getNVRecord2Driver( GET_CAL_PRESSURE_SENOSRS, (U08*)&pressuresCalRecord, sizeof( DG_PRES_SENSORS_CAL_RECORD_T ), NUM_OF_CAL_DATA_PRES_SENSORS, ALARM_ID_DG_PRESSURE_SENSORS_INVALID_CAL_RECORD ); - pressuresSelfTestState = PRESSURE_TEST_STATE_IN_PROGRESS; + pressuresSelfTestState = PRESSURE_TEST_STATE_IN_PROGRESS; pressuresSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; break; case PRESSURE_TEST_STATE_IN_PROGRESS: pressuresSelfTestResult = handleSelfTestADCCheck(); - pressuresSelfTestState = PRESSURE_TEST_STATE_COMPLETE; + pressuresSelfTestState = PRESSURE_TEST_STATE_COMPLETE; break; case PRESSURE_TEST_STATE_COMPLETE: @@ -270,16 +264,18 @@ * @return next state *************************************************************************/ static PRESSURE_STATE_T handlePressuresContReadState( void ) -{ - PRESSURE_STATE_T result = PRESSURE_CONTINUOUS_READ_STATE; +{ S32 measuredPressureReadingsRaw[ NUM_OF_PRESSURE_SENSORS ]; U32 sensorID; F32 pressureReading; + BOOL isPressureOutOfRange; + PRESSURE_STATE_T result = PRESSURE_CONTINUOUS_READ_STATE; + // get latest raw pressure readings - measuredPressureReadingsRaw[ PRESSURE_SENSOR_RO_PUMP_INLET ] = (S32)getIntADCReading( INT_ADC_RO_PUMP_INLET_PRESSURE ) - PUMP_PRESSURE_ZERO; - measuredPressureReadingsRaw[ PRESSURE_SENSOR_RO_PUMP_OUTLET ] = (S32)getIntADCReading( INT_ADC_RO_PUMP_OUTLET_PRESSURE ) - PUMP_PRESSURE_ZERO; - measuredPressureReadingsRaw[ PRESSURE_SENSOR_DRAIN_PUMP_INLET ] = (S32)getIntADCReading( INT_ADC_DRAIN_PUMP_INLET_PRESSURE ) - PUMP_PRESSURE_ZERO; + measuredPressureReadingsRaw[ PRESSURE_SENSOR_RO_PUMP_INLET ] = (S32)getIntADCReading( INT_ADC_RO_PUMP_INLET_PRESSURE ) - PUMP_PRESSURE_ZERO; + measuredPressureReadingsRaw[ PRESSURE_SENSOR_RO_PUMP_OUTLET ] = (S32)getIntADCReading( INT_ADC_RO_PUMP_OUTLET_PRESSURE ) - PUMP_PRESSURE_ZERO; + measuredPressureReadingsRaw[ PRESSURE_SENSOR_DRAIN_PUMP_INLET ] = (S32)getIntADCReading( INT_ADC_DRAIN_PUMP_INLET_PRESSURE ) - PUMP_PRESSURE_ZERO; measuredPressureReadingsRaw[ PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ] = (S32)getIntADCReading( INT_ADC_DRAIN_PUMP_OUTLET_PRESSURE ) - PUMP_PRESSURE_ZERO; // update sums for pressure average calculations measuredPressureReadingsSum[ PRESSURE_SENSOR_RO_PUMP_INLET ] += measuredPressureReadingsRaw[ PRESSURE_SENSOR_RO_PUMP_INLET ]; @@ -301,15 +297,15 @@ F32 pressuresBeforeCal[ NUM_OF_PRESSURE_SENSORS ]; // Calculate average pressures - F32 avgRoIn = (F32)measuredPressureReadingsSum[ PRESSURE_SENSOR_RO_PUMP_INLET ] * PRESSURE_AVERAGE_MULTIPLIER; - F32 avgRoOut = (F32)measuredPressureReadingsSum[ PRESSURE_SENSOR_RO_PUMP_OUTLET ] * PRESSURE_AVERAGE_MULTIPLIER; - F32 avgDrnIn = (F32)measuredPressureReadingsSum[ PRESSURE_SENSOR_DRAIN_PUMP_INLET ] * PRESSURE_AVERAGE_MULTIPLIER; + F32 avgRoIn = (F32)measuredPressureReadingsSum[ PRESSURE_SENSOR_RO_PUMP_INLET ] * PRESSURE_AVERAGE_MULTIPLIER; + F32 avgRoOut = (F32)measuredPressureReadingsSum[ PRESSURE_SENSOR_RO_PUMP_OUTLET ] * PRESSURE_AVERAGE_MULTIPLIER; + F32 avgDrnIn = (F32)measuredPressureReadingsSum[ PRESSURE_SENSOR_DRAIN_PUMP_INLET ] * PRESSURE_AVERAGE_MULTIPLIER; F32 avgDrnOut = (F32)measuredPressureReadingsSum[ PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ] * PRESSURE_AVERAGE_MULTIPLIER; // Convert average pressure readings to PSI - pressuresBeforeCal[ PRESSURE_SENSOR_RO_PUMP_INLET ] = avgRoIn * PUMP_PRESSURE_PSIA_PER_COUNT - PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; - pressuresBeforeCal[ PRESSURE_SENSOR_RO_PUMP_OUTLET ] = avgRoOut * PUMP_PRESSURE_PSIA_PER_COUNT - PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; - pressuresBeforeCal[ PRESSURE_SENSOR_DRAIN_PUMP_INLET ] = avgDrnIn * PUMP_PRESSURE_PSIA_PER_COUNT - PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; + pressuresBeforeCal[ PRESSURE_SENSOR_RO_PUMP_INLET ] = avgRoIn * PUMP_PRESSURE_PSIA_PER_COUNT - PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; + pressuresBeforeCal[ PRESSURE_SENSOR_RO_PUMP_OUTLET ] = avgRoOut * PUMP_PRESSURE_PSIA_PER_COUNT - PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; + pressuresBeforeCal[ PRESSURE_SENSOR_DRAIN_PUMP_INLET ] = avgDrnIn * PUMP_PRESSURE_PSIA_PER_COUNT - PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; pressuresBeforeCal[ PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ] = avgDrnOut * PUMP_PRESSURE_PSIA_PER_COUNT - PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; // Reset average counter @@ -318,11 +314,11 @@ // Apply calibration to the pressure values prior to storing them for ( sensor = 0; sensor < NUM_OF_PRESSURE_SENSORS; sensor++ ) { - pressures[ sensor ].data = pow(pressuresBeforeCal[ sensor ], 4) * pressuresCalRecord.pressureSensors[ sensor ].fourthOrderCoeff + - pow(pressuresBeforeCal[ sensor ], 3) * pressuresCalRecord.pressureSensors[ sensor ].thirdOrderCoeff + - pow(pressuresBeforeCal[ sensor ], 2) * pressuresCalRecord.pressureSensors[ sensor ].secondOrderCoeff + - pressuresBeforeCal[ sensor ] * pressuresCalRecord.pressureSensors[ sensor ].gain + - pressuresCalRecord.pressureSensors[ sensor ].offset; + pressures[ sensor ].data = pow( pressuresBeforeCal[ sensor ], 4 ) * pressuresCalRecord.pressureSensors[ sensor ].fourthOrderCoeff + + pow( pressuresBeforeCal[ sensor ], 3 ) * pressuresCalRecord.pressureSensors[ sensor ].thirdOrderCoeff + + pow( pressuresBeforeCal[ sensor ], 2 ) * pressuresCalRecord.pressureSensors[ sensor ].secondOrderCoeff + + pressuresBeforeCal[ sensor ] * pressuresCalRecord.pressureSensors[ sensor ].gain + + pressuresCalRecord.pressureSensors[ sensor ].offset; } // reset sums for next averaging @@ -334,11 +330,10 @@ for ( sensorID = 0; sensorID < NUM_OF_PRESSURE_SENSORS; sensorID++ ) { - pressureReading = getMeasuredDGPressure( sensorID ) + PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; - if ( ( pressureReading < MIN_VALID_PRESSURE_RANGE ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE ) ) - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRESSURE_SENSOR_FAULT, sensorID, pressureReading ); - } + pressureReading = getMeasuredDGPressure( sensorID ) + PUMP_PRESSURE_PSIA_TO_PSI_OFFSET; + isPressureOutOfRange = ( ( pressureReading < MIN_VALID_PRESSURE_RANGE ) || ( pressureReading > MAX_VALID_PRESSURE_RANGE ) ? TRUE : FALSE ); + + checkPersistentAlarm( ALARM_ID_DG_PRESSURE_OUT_OF_RANGE, isPressureOutOfRange, (F32)sensorID, pressureReading ); } return result; @@ -380,13 +375,27 @@ *************************************************************************/ static SELF_TEST_STATUS_T handleSelfTestADCCheck( void ) { + U08 i; + U16 sensorADC; + U16 sensorsADC[ PRESSURE_SENSORS_ADC_CHECK_ARRAY_LEN ]; + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; - U16 const inletPressureADCReading = getIntADCReading( INT_ADC_RO_PUMP_INLET_PRESSURE ); - if ( ( 0 == inletPressureADCReading ) || ( inletPressureADCReading >= INT_ADC_FULL_SCALE_BITS ) ) + // Insert the pressure sensors ADC read into the array + sensorsADC[ 0 ] = getIntADCReading( INT_ADC_RO_PUMP_INLET_PRESSURE ); + sensorsADC[ 1 ] = getIntADCReading( INT_ADC_RO_PUMP_OUTLET_PRESSURE ); + sensorsADC[ 2 ] = getIntADCReading( INT_ADC_DRAIN_PUMP_INLET_PRESSURE ); + sensorsADC[ 3 ] = getIntADCReading( INT_ADC_DRAIN_PUMP_OUTLET_PRESSURE ); + + for ( i = 0; i < PRESSURE_SENSORS_ADC_CHECK_ARRAY_LEN; i++ ) { - result = SELF_TEST_STATUS_FAILED; - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRESSURE_SENSOR_FAULT, inletPressureADCReading ); + sensorADC = sensorsADC[ i ]; + + if ( ( 0 == sensorADC ) || ( sensorADC >= INT_ADC_FULL_SCALE_BITS ) ) + { + result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRESSURE_SENSOR_FAULT, i ); + } } return result; Index: firmware/App/Controllers/Pressures.h =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/Pressures.h (.../Pressures.h) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Controllers/Pressures.h (.../Pressures.h) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -57,7 +57,7 @@ void initPressures( void ); void execPressures( void ); SELF_TEST_STATUS_T execPressureSelfTest( void ); -BOOL isInletPressureInRange( void ); +void checkInletWaterPressure( void ); F32 getMeasuredDGPressure( U32 pressureID ); BOOL testSetPressuresDataPublishIntervalOverride( U32 value ); Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -272,9 +272,6 @@ initPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_TEMPERATURE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); - initPersistentAlarm( ALARM_ID____AVAILABLE_28, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, - INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); - initPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD, INLET_WATER_TEMPERATURE_PERSISTENCE_PERIOD ); @@ -360,16 +357,15 @@ /*********************************************************************//** * @brief - * The isInletWaterTemperatureInRange function checks inlet water temperature value + * The checkInletWaterTemperature function checks inlet water temperature value * and triggers an alarm when temperature value is out of allowed range. * @details Inputs: none * @details Outputs: none - * @return TRUE if the temperature are in range otherwise, FALSE + * @return none *************************************************************************/ -BOOL isInletWaterTemperatureInRange( void ) +void checkInletWaterTemperature( void ) { #ifndef DISABLE_WATER_QUALITY_CHECK - BOOL status = TRUE; F32 temperature = getTemperatureValue( TEMPSENSORS_INLET_PRIMARY_HEATER ); BOOL isWaterTempInHighRange = ( temperature > MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? TRUE : FALSE ); BOOL isWaterTempInLowRange = ( temperature < MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ? TRUE : FALSE ); @@ -396,14 +392,6 @@ { checkPersistentAlarm( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, FALSE, temperature, MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); } - - if ( ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ) ) ) - { - status = FALSE; - } - - return status; #endif } @@ -942,8 +930,7 @@ // Check both temperature and to be in range if ( ( temperature < TEMP_SENSORS_MIN_ALLOWED_DEGREE_C ) || ( temperature > tempSensors[ sensorIndex ].maxAllowedTemperature ) ) { - // TODO investigate - //checkPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSOR_OUT_OF_RANGE, TRUE, sensorIndex, temperature ); + checkPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSOR_OUT_OF_RANGE, TRUE, sensorIndex, temperature ); } } Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -94,7 +94,7 @@ SELF_TEST_STATUS_T execTemperatureSensorsSelfTest( void ); void execTemperatureSensors( void ); -BOOL isInletWaterTemperatureInRange( void ); +void checkInletWaterTemperature( void ); F32 getTemperatureValue( U32 sensorIndex ); Index: firmware/App/DGCommon.h =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -44,7 +44,7 @@ // #define HEATERS_DEBUG 1 // Not needed // #define PRESSURES_DEBUG 1 // Not needed // #define IGNORE_DRAIN_PUMP_MONITOR 1 // Build switch - #define IGNORE_HEATERS_MONITOR 1 // Build switch + // #define IGNORE_HEATERS_MONITOR 1 // Build switch #define IGNORE_RO_PUMP_MONITOR 1 // Build switch #define DISABLE_RO_RATIO_CHECK 1 // Implement // #define DISABLE_COND_SENSOR_CHECK 1 // Disabled for Tom // Implement @@ -64,8 +64,8 @@ #define DISABLE_EMPTY_BOTTLES_ALARMS 1 // Implement // #define DISABLE_PRIME_CONCENT_LINES 1 -// #define DISABLE_BICARB_CONDUCTIVITY_TEST 1 -// #define DISABLE_ACID_CONDUCTIVITY_TEST 1 + #define DISABLE_BICARB_CONDUCTIVITY_TEST 1 + #define DISABLE_ACID_CONDUCTIVITY_TEST 1 // Turn these flags on to disable dialysate mixing #define DISABLE_DIALYSATE_CHECK 1 // Disabled for Tom // Implement // #define DISABLE_MIXING 1 // Implement Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -141,9 +141,9 @@ U32 execDrainMode( void ) { // check inlet water conductivity, temperature, pressure, and RO rejection ratio - isInletWaterConductivityInRange(); - isInletWaterTemperatureInRange(); - isInletPressureInRange(); + checkInletWaterConductivity(); + checkInletWaterTemperature(); + checkInletWaterPressure(); checkRORejectionRatio(); // execute current drain state Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -143,7 +143,7 @@ static DG_FILL_MODE_STATE_T handleDeliverDialysateState( void ); static DG_FILL_MODE_STATE_T handlePausedState( void ); -static BOOL areInletWaterConditionsOutOfRange( void ); +static BOOL areInletWaterConditionsAlarmsActive( void ); static void checkDialysateTemperatureSensors( void ); static void handleDialysateMixing( F32 measuredROFlowRate_mL_min ); static void setFillInfoToRTCRAM( void ); @@ -238,7 +238,7 @@ activateAlarmNoData( ALARM_ID_DG_DIALYSATE_FILL_OUT_OF_TIME ); } - fillState = ( TRUE == areInletWaterConditionsOutOfRange() ? DG_FILL_MODE_STATE_PAUSED : fillState ); + fillState = ( TRUE == areInletWaterConditionsAlarmsActive() ? DG_FILL_MODE_STATE_PAUSED : fillState ); // Execute current Fill state switch ( fillState ) @@ -634,7 +634,6 @@ // Do the necessary setup here before transition to Produce Dialysate State fillStatus.isThisFirstFill = FALSE; result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; - } #ifndef DISABLE_ACID_CONDUCTIVITY_TEST else @@ -784,36 +783,39 @@ havePauseActuatorsBeenSet = TRUE; } - if ( FALSE == areInletWaterConditionsOutOfRange() ) + if ( FALSE == areInletWaterConditionsAlarmsActive() ) { setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); havePauseActuatorsBeenSet = FALSE; result = DG_FILL_MODE_STATE_START; } - return result; } /*********************************************************************//** * @brief - * The areInletWaterConditionsOutOfRange function checks whether the inlet - * water conditions are in range. + * The areInletWaterConditionsAlarmsActive function checks whether the inlet + * water conditions are out of range and any of their alarms are active. * @details Inputs: none * @details Outputs: None - * @return TRUE if the inlet water conditions are in range otherwise, FALSE + * @return TRUE if any of the alarms are active, otherwise, FALSE *************************************************************************/ -static BOOL areInletWaterConditionsOutOfRange( void ) +static BOOL areInletWaterConditionsAlarmsActive( void ) { // Check inlet water conductivity, temperature, pressure, and RO rejection ratio - BOOL status = FALSE; - BOOL inletConductivityStatus = isInletWaterConductivityInRange(); - BOOL inletTemperatureStatus = isInletWaterTemperatureInRange(); - BOOL inletPressureStatus = isInletPressureInRange(); + BOOL status = FALSE; + checkInletWaterConductivity(); + checkInletWaterTemperature(); + checkInletWaterPressure(); - // If any of the inlet water conditions that are recoverable are not met, transition to pause mode - if ( ( FALSE == inletConductivityStatus ) || ( FALSE == inletTemperatureStatus ) || ( FALSE == inletPressureStatus ) ) + // Check if any of the alarms are active + if ( ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) ) { status = TRUE; } Index: firmware/App/Modes/ModeGenIdle.c =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Modes/ModeGenIdle.c (.../ModeGenIdle.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -185,9 +185,9 @@ U32 execGenIdleMode( void ) { // Check inlet water conductivity, temperature, pressure, and RO rejection ratio - isInletWaterConductivityInRange(); - isInletWaterTemperatureInRange(); - isInletPressureInRange(); + checkInletWaterConductivity(); + checkInletWaterTemperature(); + checkInletWaterPressure(); checkRORejectionRatio(); // Transition to standby mode when HD is not communicating Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r750a8b61a1e9a63823ecc6ed441cd01524ffc02b -r95eefee71702fbf031025dc35ebaf553dfb050b7 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 750a8b61a1e9a63823ecc6ed441cd01524ffc02b) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 95eefee71702fbf031025dc35ebaf553dfb050b7) @@ -226,7 +226,7 @@ DG_STANDBY_MODE_STATE_T state = DG_STANDBY_MODE_STATE_FLUSH_FILTER; U32 const filterFlushTimePeriod_ms = getU32OverrideValue( &filterFlushTimePeriod ); - isInletPressureInRange(); + checkInletWaterPressure(); if ( TRUE == didTimeout( filterFlushStartTime, filterFlushTimePeriod_ms ) ) {