Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r0ee5103ebceb698eadac7b18398471361811a151 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 0ee5103ebceb698eadac7b18398471361811a151) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -144,6 +144,7 @@ static EMSTAT_READ_T emstatBoardRead[ NUM_OF_EMSTAT_BOARDS ]; ///< EMSTAT board read. static COND_SENSOR_STATUS_T condSensorStatus[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensors status. static DG_COND_SENSORS_CAL_RECORD_T condSensorsCalRecord; ///< Conductivity sensors' calibration record. +static CAL_DATA_DG_COND_SENSORS_T condSensorCalTable[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensors calibration table. // ********** private function prototypes ********** @@ -174,6 +175,32 @@ { memset( &condSensorStatus[ i ], 0x0, sizeof( COND_SENSOR_STATUS_T ) ); benignPolynomialCalRecord( &condSensorsCalRecord.condSensors[ i ] ); + + switch( i ) + { + case CONDUCTIVITYSENSORS_CPI_SENSOR: + condSensorCalTable[ i ] = CAL_DATA_CPI_COND_SENSOR; + break; + + case CONDUCTIVITYSENSORS_CPO_SENSOR: + condSensorCalTable[ i ] = CAL_DATA_CPO_COND_SENSOR; + break; + + case CONDUCTIVITYSENSORS_CD1_SENSOR: + condSensorCalTable[ i ] = CAL_DATA_CD1_COND_SENSOR; + break; + + case CONDUCTIVITYSENSORS_CD2_SENSOR: + condSensorCalTable[ i ] = CAL_DATA_CD2_COND_SENSOR; + break; + +#ifndef _VECTORCAST_ + default: + // This switch is in a for loop so VectorCAST cannot reach to default. + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID, i ) + break; +#endif + } } // Reset all the read packages of the Emstat boards @@ -371,6 +398,36 @@ /*********************************************************************//** * @brief + * The setCondcutivitySensorCalTable function sets the calibration table to + * be use of the corresponding conductivity sensor. + * @details Inputs: none + * @details Outputs: condSensorCalTable + * @param sensor the conductivity sensor ID to use the calibration table for + * @param calTable the calibration table to be used for the selected conductivity + * sensor + * @return none + *************************************************************************/ +void setCondcutivitySensorCalTable( CONDUCTIVITY_SENSORS_T sensor, CAL_DATA_DG_COND_SENSORS_T calTable ) +{ + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + if ( calTable < NUM_OF_CAL_DATA_COND_SENSORS ) + { + condSensorCalTable[ sensor ] = calTable; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_DG_INVALID_COND_SNSNR_CAL_TABLE_SELECTED, calTable ) + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID, sensor ) + } +} + +/*********************************************************************//** + * @brief * The getConductivityValue function gets the compensated conductivity * value for a given conductivity sensor id. * @details Inputs: compensatedConductivityValues[] @@ -411,7 +468,7 @@ static F32 calcCompensatedConductivity( F32 conductivity, F32 temperature ) { // EC = EC_25 * (1 + temp_coef * ( temperature - 25 )) - F32 compensatedCoef = ( 1.0F + ( COND_SENSOR_TEMPERATURE_COEF * ( temperature - COND_SENSOR_REFERENCE_TEMPERATURE ) ) ); + F32 compensatedCoef = ( 1.0F + ( COND_SENSOR_TEMPERATURE_COEF * ( temperature - COND_SENSOR_REFERENCE_TEMPERATURE ) ) ); return conductivity / compensatedCoef; } @@ -426,8 +483,8 @@ *************************************************************************/ static void calcRORejectionRatio( void ) { - F32 cpi = getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ); - F32 cpo = getConductivityValue( CONDUCTIVITYSENSORS_CPO_SENSOR ); + F32 cpi = getConductivityValue( CONDUCTIVITYSENSORS_CPI_SENSOR ); + F32 cpo = getConductivityValue( CONDUCTIVITYSENSORS_CPO_SENSOR ); roRejectionRatio = RO_REJECTION_RATIO_OUT_OF_RANGE_VALUE; @@ -536,8 +593,8 @@ *************************************************************************/ static void processEmstatBoard( EMSTAT_BOARD_T board ) { - U08 emstatByte = 0; - U16 rxFifoCount = 0; + U08 emstatByte = 0; + U16 rxFifoCount = 0; switch ( board ) { @@ -633,7 +690,6 @@ *************************************************************************/ static void processEmstatMeasurementDataPackets( U08 boardSensorIndex, EMSTAT_READ_T* readPackage, EMSTAT_VARIABLE_T* receivedPackets ) { - CONDUCTIVITY_SENSORS_T sensorId = readPackage->sensors[ boardSensorIndex ].condSnsr; BOOL convStatus = hexStrToDec( (U08*)&receivedPackets->status, &condSensorStatus[ sensorId ].sensorStatus, sizeof( receivedPackets->status ) ); BOOL isSensorStatusBad = ( EMSTAT_PICO_STATUS_TIMING_NOT_MET == condSensorStatus[ sensorId ].sensorStatus ? TRUE : FALSE ); @@ -695,27 +751,14 @@ *************************************************************************/ static F32 getCalibrationAppliedConductivityValue( U32 sensorId, F32 compensatedValue ) { - CAL_DATA_DG_COND_SENSORS_T id = (CAL_DATA_DG_COND_SENSORS_T)sensorId; - F32 conductivity = 0.0F; + CAL_DATA_DG_COND_SENSORS_T calTableId = condSensorCalTable[ sensorId ]; + F32 conductivity = 0.0F; - if ( DG_MODE_CHEM == getCurrentOperationMode() ) - { - // If the mode is in chemical disinfect, use the chemical disinfect calibration data for CD1 and CD2 - if ( CAL_DATA_CD1_COND_SENSOR == id ) - { - id = CAL_DATA_CD1_CHEM_DIS_COND_SENSOR; - } - else if ( CAL_DATA_CD2_COND_SENSOR == id ) - { - id = CAL_DATA_CD2_CHEM_DIS_COND_SENSOR; - } - } - - conductivity = pow( compensatedValue, 4 ) * condSensorsCalRecord.condSensors[ id ].fourthOrderCoeff + - pow( compensatedValue, 3 ) * condSensorsCalRecord.condSensors[ id ].thirdOrderCoeff + - pow( compensatedValue, 2 ) * condSensorsCalRecord.condSensors[ id ].secondOrderCoeff + - compensatedValue * condSensorsCalRecord.condSensors[ id ].gain + - condSensorsCalRecord.condSensors[ id ].offset; + conductivity = pow( compensatedValue, 4 ) * condSensorsCalRecord.condSensors[ calTableId ].fourthOrderCoeff + + pow( compensatedValue, 3 ) * condSensorsCalRecord.condSensors[ calTableId ].thirdOrderCoeff + + pow( compensatedValue, 2 ) * condSensorsCalRecord.condSensors[ calTableId ].secondOrderCoeff + + compensatedValue * condSensorsCalRecord.condSensors[ calTableId ].gain + + condSensorsCalRecord.condSensors[ calTableId ].offset; return conductivity; } Index: firmware/App/Controllers/ConductivitySensors.h =================================================================== diff -u -rb8f298547eb578000b3ff3cf55732fda7a689ce0 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision b8f298547eb578000b3ff3cf55732fda7a689ce0) +++ firmware/App/Controllers/ConductivitySensors.h (.../ConductivitySensors.h) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -19,6 +19,7 @@ #define __CONDUCTIVITYSENSORS_H__ #include "DGCommon.h" +#include "NVDataMgmtDGRecords.h" /** * @defgroup ConductivitySensors ConductivitySensors @@ -85,6 +86,8 @@ void checkInletWaterConductivity( void ); +void setCondcutivitySensorCalTable( CONDUCTIVITY_SENSORS_T sensor, CAL_DATA_DG_COND_SENSORS_T calTable ); + F32 getConductivityValue( U32 sensorId ); BOOL testSetConductivityOverride( U32 sensorId, F32 value ); Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -r9ee1ea22d257ddc87e9f0074a0193d4a060be101 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision 9ee1ea22d257ddc87e9f0074a0193d4a060be101) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -26,6 +26,7 @@ #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "TemperatureSensors.h" +#include "TestSupport.h" #include "Thermistors.h" #include "Timers.h" @@ -448,7 +449,7 @@ // The RPM is expected to be 5500 @ 100% duty cycle // The nominal RPM = duty cycle * 5500 / 1.0 // The RPM tolerance is -25% to +50% of the nominal RPM - F32 dutyCycle = ( OVERRIDE_RESET == fansStatus.dutyCycle.override ? fansStatus.dutyCycle.data : fansStatus.dutyCycle.ovData ); + F32 dutyCycle = getF32OverrideValue( &fansStatus.dutyCycle ); F32 fansNominalRPM = dutyCycle * FANS_MAX_ALLOWED_RPM; F32 fansMinAllowedRPM = fansNominalRPM - ( fansNominalRPM * FANS_MIN_RPM_OUT_OF_RANGE_TOL ); F32 fansMaxAllowedRPM = fansNominalRPM + ( fansNominalRPM * FANS_MAX_RPM_OUT_OF_RANGE_TOL ); Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -re12f1b3d41ae133bc0975fcb126e431c2bedda59 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision e12f1b3d41ae133bc0975fcb126e431c2bedda59) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -296,6 +296,10 @@ setCPLDCleanLEDColor( CPLD_CLEAN_LED_YELLOW ); + // Set CD1 and CD2 conductivity sensors calibration table to be picked from the chemical disinfect calibration record + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD1_SENSOR, CAL_DATA_CD1_COND_SENSOR_CHEM_DISINFECT ); + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD2_SENSOR, CAL_DATA_CD2_COND_SENSOR_CHEM_DISINFECT ); + #ifndef _RELEASE_ if ( nelsonSupport != NELSON_CHEM_DISINFECT ) #endif Index: firmware/App/Modes/ModeChemicalDisinfectFlush.c =================================================================== diff -u -re12f1b3d41ae133bc0975fcb126e431c2bedda59 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Modes/ModeChemicalDisinfectFlush.c (.../ModeChemicalDisinfectFlush.c) (revision e12f1b3d41ae133bc0975fcb126e431c2bedda59) +++ firmware/App/Modes/ModeChemicalDisinfectFlush.c (.../ModeChemicalDisinfectFlush.c) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -200,6 +200,11 @@ setCPLDCleanLEDColor( CPLD_CLEAN_LED_YELLOW ); + // Upon transition to mode chemical flush set CD1 and CD2 calibration records to be picked to the normal + // table. If the chemical disinfect is successful, mode chemical disinfect flush is automatically started + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD1_SENSOR, CAL_DATA_CD1_COND_SENSOR ); + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD2_SENSOR, CAL_DATA_CD2_COND_SENSOR ); + activateAlarmNoData( ALARM_ID_DG_CHEM_DISINFECT_FLUSH_REMOVE_ACID ); return chemDisinfectFlushState; Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -rc7ea3969643ead419cbfcd34c3cb203c45bcad71 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision c7ea3969643ead419cbfcd34c3cb203c45bcad71) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -614,6 +614,9 @@ setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2_BICARB, BICARB_PUMP_40_ML_PER_MIN ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP2_BICARB ); + // Prior to collecting data for bicarb test, change the CD2 calibration table + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD2_SENSOR, CAL_DATA_CD2_COND_SENSOR_FILL_BICARB_TEST ); + // State transition concentrateTestStartTime = getMSTimerCount(); result = DG_FILL_MODE_STATE_TEST_BICARB_CONDUCTIVITY; @@ -680,6 +683,10 @@ setROPumpTargetFlowRateLPM( RO_PUMP_800_ML_PER_MIN / MILLILITERS_PER_LITER, TARGET_RO_PRESSURE_PSI ); setConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1_ACID, ACID_PUMP_20_ML_PER_MIN ); requestConcentratePumpOn( CONCENTRATEPUMPS_CP1_ACID ); + + // Set back the conductivity of CD2 calibration table to the normal calibration table + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD2_SENSOR, CAL_DATA_CD2_COND_SENSOR ); + // State transition concentrateTestStartTime = getMSTimerCount(); result = DG_FILL_MODE_STATE_TEST_ACID_CONDUCTIVITY; Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r3e5c16b70fb34da7d58f5cf6efff896fdb3d00c3 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 3e5c16b70fb34da7d58f5cf6efff896fdb3d00c3) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -130,6 +130,11 @@ setCPLDCleanLEDColor( CPLD_CLEAN_LED_OFF ); + // Upon transition to mode standby set CD1 and CD2 calibration records to be picked to the normal + // table. If the chemical disinfect fails, the mode transitions back to mode standby. + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD1_SENSOR, CAL_DATA_CD1_COND_SENSOR ); + setCondcutivitySensorCalTable( CONDUCTIVITYSENSORS_CD2_SENSOR, CAL_DATA_CD2_COND_SENSOR ); + #ifndef _RELEASE_ setHeatNelsonSupportMode( NELSON_NONE ); setChemNelsonSupportMode( NELSON_NONE ); Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -rc7ea3969643ead419cbfcd34c3cb203c45bcad71 -rfd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision c7ea3969643ead419cbfcd34c3cb203c45bcad71) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision fd89ed3ac616c0ee40e3ffc357d379cb2f4aa12a) @@ -149,6 +149,7 @@ SW_FAULT_ID_PI_CTRL_INVALID_STEP_LIMIT, SW_FAULT_ID_DG_INVALID_RO_PUMP_DUTY_CYCLE_SELECTED, SW_FAULT_ID_DG_INVALID_TEST_CONFIG_SELECTED, // 120 + SW_FAULT_ID_DG_INVALID_COND_SNSNR_CAL_TABLE_SELECTED, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T;