Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rcd7ff5665a2ac5142e29c0cad5339af0639e7c57 -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision cd7ff5665a2ac5142e29c0cad5339af0639e7c57) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -81,7 +81,6 @@ 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). static const F32 HEATERS_VOLTAGE_TOLERANCE_V = HEATERS_MAX_OPERATING_VOLTAGE_V * HEATERS_MAX_VOLTAGE_OUT_OF_RANGE_TOL; ///< Heaters voltage tolerance in volts. -static const F32 PRIMARY_HEATER_VOLTAGE_TOLERANCE_V = HEATERS_MAX_OPERATING_VOLTAGE_V * PRIMARY_HEATER_POWER_TOL; ///< Primary heater power voltage tolerance in volts. /// Heaters data structure typedef struct Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -rcd7ff5665a2ac5142e29c0cad5339af0639e7c57 -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision cd7ff5665a2ac5142e29c0cad5339af0639e7c57) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -1293,7 +1293,7 @@ SET_ALARM_WITH_1_U32_DATA( alarmDetectedPendingTrigger, prevChemDisinfectState ) } - requestNewOperationMode( DG_MODE_FAUL ); + requestNewOperationMode( DG_MODE_STAN ); } /*********************************************************************//** Index: firmware/App/Modes/ModeChemicalDisinfectFlush.c =================================================================== diff -u -rcd7ff5665a2ac5142e29c0cad5339af0639e7c57 -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeChemicalDisinfectFlush.c (.../ModeChemicalDisinfectFlush.c) (revision cd7ff5665a2ac5142e29c0cad5339af0639e7c57) +++ firmware/App/Modes/ModeChemicalDisinfectFlush.c (.../ModeChemicalDisinfectFlush.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -915,7 +915,7 @@ { SET_ALARM_WITH_1_U32_DATA( alarmDetectedPendingTrigger, prevChemDisinfectFlushState ) } - requestNewOperationMode( DG_MODE_FAUL ); + requestNewOperationMode( DG_MODE_STAN ); } /*********************************************************************//** Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -rd51921b4d923754ab63db79923d28c09c27af5aa -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision d51921b4d923754ab63db79923d28c09c27af5aa) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -718,8 +718,9 @@ if ( TRUE == didTimeout( concentrateTestStartTime, CONCENTRATE_TEST_TIME_OUT_MS ) ) { DG_CHEMICALS_FILL_COND_CAL_RECORD_T chemicalsCond; - F32 acidCondUSPerCM = 0.0F; - BOOL haveTestsPassed = FALSE; + F32 acidCondUSPerCM = 0.0F; + BOOL hasAcidTestPassed = FALSE; + BOOL hasCD1CD2TestPassed = FALSE; getFillChemicalCondRecord( &chemicalsCond ); @@ -729,20 +730,37 @@ pctDiffInConductivity = fabs( 2.0F * ( averageAcidConductivity - averageBicarbConductivity ) / ( averageAcidConductivity + averageBicarbConductivity ) ); - if ( ( TRUE == isValueWithinPercentRange( averageAcidConductivity, acidCondUSPerCM, FIVE_PERCENT_FACTOR ) ) && - ( pctDiffInConductivity < FIVE_PERCENT_FACTOR ) ) +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ACID_CONDUCTIVITY_TEST ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - haveTestsPassed = TRUE; - } + if ( TRUE == isValueWithinPercentRange( averageAcidConductivity, acidCondUSPerCM, FIVE_PERCENT_FACTOR ) ) + { + hasAcidTestPassed = TRUE; + } + else + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, averageAcidConductivity ) + } + if ( pctDiffInConductivity < FIVE_PERCENT_FACTOR ) + { + hasCD1CD2TestPassed = TRUE; + } + else + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DG_CD1_CD2_CHECK_FAULT, pctDiffInConductivity ) + } + } #ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_ACID_CONDUCTIVITY_TEST ) ) + else { - haveTestsPassed = TRUE; + hasAcidTestPassed = TRUE; + hasCD1CD2TestPassed = TRUE; } #endif - if ( TRUE == haveTestsPassed ) + if ( ( TRUE == hasAcidTestPassed ) && ( TRUE == hasCD1CD2TestPassed ) ) { DG_ACID_CONCENTRATES_RECORD_T acid; F32 acidMix; @@ -763,11 +781,6 @@ fillStatus.isThisFirstFill = FALSE; result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; } - else - { - // Acid conductivity did not pass, fault - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, averageAcidConductivity ); - } } return result; @@ -1022,7 +1035,7 @@ *************************************************************************/ static BOOL areInletWaterConditionsAlarmsActive( void ) { - // Check inlet water conductivity, temperature, pressure, and RO rejection ratio + // Check inlet water conductivity, temperature, pressure BOOL status = FALSE; checkInletWaterConductivity(); checkInletWaterTemperature(); Index: firmware/App/Modes/ModeFlush.c =================================================================== diff -u -rcd7ff5665a2ac5142e29c0cad5339af0639e7c57 -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision cd7ff5665a2ac5142e29c0cad5339af0639e7c57) +++ firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -952,7 +952,7 @@ { SET_ALARM_WITH_1_U32_DATA( alarmDetectedPendingTrigger, prevFlushState ) } - requestNewOperationMode( DG_MODE_FAUL ); + requestNewOperationMode( DG_MODE_STAN ); } /*********************************************************************//** Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -rcd7ff5665a2ac5142e29c0cad5339af0639e7c57 -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision cd7ff5665a2ac5142e29c0cad5339af0639e7c57) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -1606,7 +1606,7 @@ SET_ALARM_WITH_1_U32_DATA( alarmDetectedPendingTrigger, prevHeatDisinfectState ) } - requestNewOperationMode( DG_MODE_FAUL ); + requestNewOperationMode( DG_MODE_STAN ); } /*********************************************************************//** Index: firmware/App/Modes/ModeHeatDisinfectActiveCool.c =================================================================== diff -u -rcd7ff5665a2ac5142e29c0cad5339af0639e7c57 -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision cd7ff5665a2ac5142e29c0cad5339af0639e7c57) +++ firmware/App/Modes/ModeHeatDisinfectActiveCool.c (.../ModeHeatDisinfectActiveCool.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -723,7 +723,7 @@ { SET_ALARM_WITH_1_U32_DATA( alarmDetectedPendingTrigger, heatDisinfectActiceCoolPrevState ) } - requestNewOperationMode( DG_MODE_FAUL ); + requestNewOperationMode( DG_MODE_STAN ); } /*********************************************************************//** Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rd51921b4d923754ab63db79923d28c09c27af5aa -rff676a9640e5dfe162de78d2b24f356f63bad5bb --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision d51921b4d923754ab63db79923d28c09c27af5aa) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision ff676a9640e5dfe162de78d2b24f356f63bad5bb) @@ -72,6 +72,8 @@ // ********** private function prototypes ********** +static BOOL areInletWaterConditionsAlarmsActive( void ); + static DG_STANDBY_MODE_STATE_T handleStandbyIdleState( void ); static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterState( void ); static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterIdleState( void ); @@ -144,9 +146,13 @@ *************************************************************************/ U32 execStandbyMode( void ) { - checkInletWaterPressure(); - checkInletWaterTemperature(); - checkInletWaterConductivity(); + if ( TRUE == areInletWaterConditionsAlarmsActive() ) + { + setValveState( VSP, VALVE_STATE_CLOSED ); + setValveState( VPI, VALVE_STATE_CLOSED ); + stopSampleWaterRequest = FALSE; + standbyState = DG_STANDBY_MODE_STATE_IDLE; + } // execute current Standby state switch ( standbyState ) @@ -178,6 +184,42 @@ /*********************************************************************//** * @brief + * 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 any of the alarms are active, otherwise, FALSE + *************************************************************************/ +static BOOL areInletWaterConditionsAlarmsActive( void ) +{ + // Check inlet water conductivity, temperature, pressure, and RO rejection ratio + BOOL status = FALSE; + + if ( VALVE_STATE_OPEN == getValveStateName( VPI ) ) + { + checkInletWaterConductivity(); + checkInletWaterTemperature(); + checkInletWaterPressure(); + + // 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_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) || + ( TRUE == isAlarmActive( ALARM_ID_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) ) + { + status = TRUE; + } + } + + return status; +} + +/*********************************************************************//** + * @brief * The handleStandbyIdleState function executes the idle state of the * standby mode state machine. * @details Inputs: pendingSampleWaterRequest, pendingStartDGRequest,