Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r6f1e8598b0f3dbe9d2462f35308ff27e04bce84e -r08eb8944c4db804b373cf37a78a761b01f00e649 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 6f1e8598b0f3dbe9d2462f35308ff27e04bce84e) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 08eb8944c4db804b373cf37a78a761b01f00e649) @@ -8,7 +8,7 @@ * @file TemperatureSensors.c * * @author (last) Dara Navaei -* @date (last) 14-Apr-2023 +* @date (last) 13-Jun-2023 * * @author (original) Dara Navaei * @date (original) 08-Apr-2020 @@ -120,7 +120,6 @@ OVERRIDE_F32_T temperatureValues; ///< Temperature values with override F32 maxAllowedTemp; ///< Maximum allowed temperature of the sensor U32 alarmStartTime; ///< Alarm start time - U08 sensorErrorBitStatus; ///< Temperature sensor error bit status BOOL fpgaErrorStatus; ///< Temperature sensor FPGA error status S32 baroTempSnsrDiff; ///< Barometric sensor temperature difference } TEMP_SENSOR_T; @@ -414,57 +413,79 @@ *************************************************************************/ void checkInletWaterTemperature( void ) { -#ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WATER_QUALITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) -#endif + F32 temperature = getTemperatureValue( TEMPSENSORS_INLET_PRIMARY_HEATER ); + + if ( VALVE_STATE_OPEN == getValveStateName( VPI ) ) { - DG_OP_MODE_T opMode = getCurrentOperationMode(); - 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 ); - switch( opMode ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WATER_QUALITY_CHECK ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - case DG_MODE_GENE: - case DG_MODE_FILL: - case DG_MODE_DRAI: - case DG_MODE_STAN: - if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ) ) + if ( getTestConfigStatus( TEST_CONFIG_DISABLE_INLET_WATER_TEMP_CHECK ) != TRUE ) + { + DG_OP_MODE_T opMode = getCurrentOperationMode(); + BOOL isWaterTempInHighRange = ( temperature > MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? TRUE : FALSE ); + BOOL isWaterTempInLowRange = ( temperature < MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ? TRUE : FALSE ); + + switch( opMode ) { - isWaterTempInHighRange = ( temperature <= MIN_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? FALSE : TRUE ); - } + case DG_MODE_GENE: + case DG_MODE_FILL: + case DG_MODE_DRAI: + case DG_MODE_STAN: + if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ) ) + { + isWaterTempInHighRange = ( temperature <= MIN_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? FALSE : TRUE ); + } - // Per PRS 406 - checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, isWaterTempInHighRange, temperature, MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); + // Per PRS 406 + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, isWaterTempInHighRange, temperature, + MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); - if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ) ) - { - isWaterTempInLowRange = ( temperature >= MAX_WATER_TEMPERATURE_WARNING_LOW_RANGE ? FALSE : TRUE ); - } + if ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ) ) + { + isWaterTempInLowRange = ( temperature >= MAX_WATER_TEMPERATURE_WARNING_LOW_RANGE ? FALSE : TRUE ); + } - // Per PRS 405 - checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, isWaterTempInLowRange, temperature, MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); - break; + // Per PRS 405 + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, isWaterTempInLowRange, temperature, + MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); + break; - case DG_MODE_FLUS: - case DG_MODE_HEAT: - case DG_MODE_HCOL: - case DG_MODE_CHEM: - case DG_MODE_CHFL: - if ( VALVE_STATE_OPEN == getValveStateName( VPI ) ) - { - isWaterTempInHighRange = ( temperature > MAX_CLEANING_MODE_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? TRUE : FALSE ); - // Per PRS 557 - checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_HIGH, isWaterTempInHighRange, temperature, MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); - checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_LOW, isWaterTempInLowRange, temperature, MAX_WATER_TEMPERATURE_WARNING_LOW_RANGE ); - } - break; + case DG_MODE_FLUS: + case DG_MODE_HEAT: + case DG_MODE_HCOL: + case DG_MODE_CHEM: + case DG_MODE_CHFL: + case DG_MODE_ROPS: + isWaterTempInHighRange = ( temperature > MAX_CLEANING_MODE_WATER_TEMPERATURE_WARNING_HIGH_RANGE ? TRUE : FALSE ); + // Per PRS 557 + checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_HIGH, isWaterTempInHighRange, temperature, + MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); + 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; + default: + // NOTE: Do nothing in the rest of the modes + break; + } + } } } + else + { + // VPI is closed - clear all alarms + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE, FALSE, temperature, + MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); + checkPersistentAlarm( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE, FALSE, temperature, + MIN_WATER_TEMPERATURE_WARNING_LOW_RANGE ); + checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_HIGH, FALSE, temperature, + MAX_WATER_TEMPERATURE_WARNING_HIGH_RANGE ); + checkPersistentAlarm( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_LOW, FALSE, temperature, + MAX_WATER_TEMPERATURE_WARNING_LOW_RANGE ); + } } /*********************************************************************//** @@ -677,58 +698,10 @@ *************************************************************************/ static void processTempSnsrsADCRead( U32 sensorIndex, U32 adc ) { - // Some of the temperature sensors have an MSB bit that is used as an error flag. This flag will be a TRUE by default. - BOOL isErrorBitNotValid = FALSE; - S32 convertedADC = (S32)( adc & MASK_OFF_U32_MSB ); + S32 convertedADC = (S32)( adc & MASK_OFF_U32_MSB ); - switch( sensorIndex ) - { - case TEMPSENSORS_LOAD_CELL_A1_B1: - case TEMPSENSORS_LOAD_CELL_A2_B2: - case TEMPSENSORS_CONDUCTIVITY_SENSOR_1: - case TEMPSENSORS_CONDUCTIVITY_SENSOR_2: - case TEMPSENSORS_OUTLET_PRIMARY_HEATER: - case TEMPSENSORS_INLET_PRIMARY_HEATER: - case TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR: - case TEMPSENSORS_OUTLET_REDUNDANT: - case TEMPSENSORS_INTERNAL_TRO_RTD: - case TEMPSENSORS_INLET_DIALYSATE: - case TEMPSENSORS_INTERNAL_TDI_RTD: - case TEMPSENSORS_HEAT_DISINFECT: - case TEMPSENSORS_INTERNAL_THD_RTD: - { - U08 i; - - // Shift bits by 31 to right to check the error bit status - tempSensors[ sensorIndex ].sensorErrorBitStatus = adc >> SHIFT_BITS_BY_31; - - for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; i++ ) - { - // If that bit is a 1, there is either CRC error or Status error that are ored on top of each other - // NOTE: only a few sensors have the error bit available but for simplicity, all the sensors are looped. - // This variable is zeroed in the init function and the sensors that do not use this bit are never checked (and set) to - // any other values so those sensors will never trigger this fault. - // If any of the sensors have this bit to be 1, set the error occurred be 1 - if ( tempSensors[ i ].sensorErrorBitStatus > 0 ) - { - isErrorBitNotValid = TRUE; - } - } - } - break; - - default: - // Do nothing. FPGA board temperature sensor does not have error flag bit - // If a wrong temperature sensor name is picked, the function that converts - // ADC counts to temperature raises an alarm. - break; - } - - if ( FALSE == isErrorBitNotValid ) - { - // Make sure the error bit is not true before - processADCRead( sensorIndex, convertedADC ); - } + // Make sure the error bit is not true before + processADCRead( sensorIndex, convertedADC ); } /*********************************************************************//**