Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r9426334142cbfdea9ee99e3040fc08ff0247da7b -r5e3a46112ebab361a33b9f7cadb619eb12b44c0f --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 9426334142cbfdea9ee99e3040fc08ff0247da7b) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 5e3a46112ebab361a33b9f7cadb619eb12b44c0f) @@ -93,6 +93,10 @@ #define BARO_SENSOR_REFERENCE_TEMP_C 2000 ///< Barometric sensor reference temperature in C. #define BARO_SENSOR_WAIT_FOR_COEFF_TIME_OUT_MS ( 20 * MS_PER_SECOND ) ///< Barometric sensor wait for coefficients timeout in milliseconds. +#define TDI_TRO_TEMP_SENSORS_MAX_DEVIATION_C 1.0F ///< Dialysate temperature sensors maximum allowed deviation in C. +#define DIALYSATE_TEMP_SNSRS_OUT_OF_RANGE_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Dialysate temperature sensors drift timeout in milliseconds. +#define TDI_TRO_TEMP_SENSORS_MAX_DEVIATION_IN_HEAT_DIS_C 3.0F ///< Dialysate temperature sensors maximum allowed deviation in heat disinfect in C. + /// Temperature sensor exec states. typedef enum tempSensors_Exec_States { @@ -329,6 +333,7 @@ // Persistent alarm for the temperature sensors range check initPersistentAlarm( ALARM_ID_DG_TEMPERATURE_SENSORS_ADC_FAULT, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS ); + initPersistentAlarm( ALARM_ID_DG_DIALYSATE_TEMPERATURE_SENSORS_OUT_OF_RANGE, 0, DIALYSATE_TEMP_SNSRS_OUT_OF_RANGE_TIMEOUT_MS ); // Initialize the FPGA persistent alarms initFPGAPersistentAlarm( FPGA_PERS_ERROR_TWO_WIRE_ADC_TEMP_SENSORS, ALARM_ID_DG_TWO_WIRE_SENSORS_FPGA_FAULT, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS); @@ -398,6 +403,9 @@ // Monitor the temperature values monitorTemperatureSenors(); + // Check the TDi/TRo drift + checkDialysateTemperatureSensors(); + // Publish the data publishTemperatureSensorsData(); } @@ -446,6 +454,10 @@ checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_LOW, isWaterTempInLowRange, temperature, MAX_WATER_TEMPERATURE_WARNING_LOW_RANGE ); } break; + + default: + // NOTE: Do nothing in the rest of the modes + break; } } } @@ -527,6 +539,31 @@ /*********************************************************************//** * @brief + * The checkDialysateTemperatureSensors function checks whether the + * dialysate temperature sensors have drifted. If they are drifted, it raises + * an alarm. + * @details Inputs: none + * @details Outputs: None + * @return none + *************************************************************************/ +void checkDialysateTemperatureSensors( void ) +{ +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_TEMPERATURE_SENSORS_ALARM ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + F32 TDi = getTemperatureValue( TEMPSENSORS_INLET_DIALYSATE ); + F32 TRo = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANT ); + DG_OP_MODE_T op = getCurrentOperationMode(); + F32 driftC = ( DG_MODE_HEAT == op ? TDI_TRO_TEMP_SENSORS_MAX_DEVIATION_IN_HEAT_DIS_C : TDI_TRO_TEMP_SENSORS_MAX_DEVIATION_C ); + BOOL isDriftOut = ( fabs( TDi - TRo ) > driftC ? TRUE : FALSE ); + + checkPersistentAlarm( ALARM_ID_DG_DIALYSATE_TEMPERATURE_SENSORS_OUT_OF_RANGE, isDriftOut, fabs( TDi - TRo ), driftC ); + } +} + +/*********************************************************************//** + * @brief * The getADC2TempConversion function calculates the temperature from the * moving average ADC samples. * @details Inputs: tempEquationCoeffA, tempEquationCoeffB