Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r364c00d074d23989f2d714189a8c89964e32b458 -r9a53a029929eb0fc6dadc155fdb1e855331b5b0e --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 364c00d074d23989f2d714189a8c89964e32b458) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9a53a029929eb0fc6dadc155fdb1e855331b5b0e) @@ -23,6 +23,7 @@ #include "AlarmMgmt.h" #include "DGDefs.h" #include "FlowSensors.h" +#include "FPGA.h" #include "Heaters.h" #include "MessageSupport.h" #include "ModeFill.h" @@ -70,6 +71,7 @@ #define DATA_PUBLISH_COUNTER_START_COUNT 70 ///< Data publish counter start count. #define MIN_RO_HEATER_FLOWRATE_LPM 0.2F ///< Minimum target RO heater flow rate in L/min. #define PRIMARY_HEATER_POWER_TOL 0.1F ///< Primary heater power tolerance. +#define MAIN_PIMARY_HEATER_VOLTAGE_ADC_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Main primary heater voltage ADC FPGA error. static const F32 WATER_SPECIFIC_HEAT_DIVIDED_BY_MINUTES = 4184 / SEC_PER_MIN; ///< Water specific heat in J/KgC / 60. static const F32 PRIMARY_HEATERS_MAXIMUM_POWER_WATTS = 475 + 237.5F; ///< Primary heaters maximum power (main primary = 475W and small primary = 237.5W). @@ -152,6 +154,10 @@ initPersistentAlarm( ALARM_ID_DG_PRIMARY_HEATER_POWER_VOLTAGE_OUT_OF_RANGE, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS, HEATERS_VOLTAGE_OUT_OF_RANGE_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_RO_FLOW_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON, HEATERS_ON_NO_FLOW_TIMEOUT_MS, HEATERS_ON_NO_FLOW_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_DIALYSATE_FLOW_TOO_LOW_WHILE_TRIMMER_HEATER_IS_ON, HEATERS_ON_NO_FLOW_TIMEOUT_MS, HEATERS_ON_NO_FLOW_TIMEOUT_MS ); + + // Initialize the FPGA persistent alarm + initFPGAPersistentAlarm( MAIN_PRIMARY_HEATER_VOLTAGE_ADC, ALARM_ID_DG_MAIN_PRIMARY_HEATER_FPGA_FAULT, + MAIN_PIMARY_HEATER_VOLTAGE_ADC_FPGA_ERROR_TIMEOUT_MS, MAIN_PIMARY_HEATER_VOLTAGE_ADC_FPGA_ERROR_TIMEOUT_MS ); } /*********************************************************************//** @@ -530,8 +536,7 @@ *************************************************************************/ static HEATERS_STATE_T handleHeaterStateControlToDisinfectTarget( DG_HEATERS_T heater ) { - HEATERS_STATE_T state = HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET; - + HEATERS_STATE_T state = HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET; F32 heatDisinfectSensorTemp = getTemperatureValue( TEMPSENSORS_HEAT_DISINFECT ); // Check if the heaters control conditions have changed, if yes, switch back to ramp to target @@ -877,9 +882,14 @@ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_V3_SYSTEM ) ) { // V3 use CPU based value for Primary, same as Secondary - mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); + mainPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); } + else #endif + { + // If the system is DVT, check the FPGA persistent alarm of the main primary heater's voltage ADC + checkFPGAPersistentAlarms( MAIN_PRIMARY_HEATER_VOLTAGE_ADC, getFPGAHeaterGateADCErrorCount(), getFPGAHeaterGateADCReadCount() ); + } F32 smallPriVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_SMALL_PRIM_HTR_V ); F32 trimmerVoltage = getMonitoredLineLevel( MONITORED_LINE_24V_GND_TRIM_HTR_V );