Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r5c430c3ac17fc8ad836fd70b8a3b8a12af44319e -r6530db1926d689b51c2f5fcd6ae928c40ebf5f42 --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 5c430c3ac17fc8ad836fd70b8a3b8a12af44319e) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 6530db1926d689b51c2f5fcd6ae928c40ebf5f42) @@ -7,8 +7,8 @@ * * @file ModeFill.c * -* @author (last) Dara Navaei -* @date (last) 21-Dec-2022 +* @author (last) Michael Garthwaite +* @date (last) 16-Mar-2023 * * @author (original) Leonardo Baloa * @date (original) 19-Nov-2019 @@ -76,6 +76,7 @@ #define MAX_RO_REJECTION_RATIO_ALLOW 0.10F ///< Maximum RO rejection ratio. #define MAX_CPO_CONDUCTIVITY_ALLOW 100.0F ///< Maximum CPo sensor conductivity value. +#define MIN_FILL_TARGET_TO_CHECK_RO_AND_CPO_ML 550 ///< Minimum fill target to check the RO and CPo alarms in milliliters. // 2m long tubing to cap = 19.5 mL (acid line) + 7.92 mL/m * 2 m (tubing to cap) + 20.82 mL (straw) = 56.15 mL // Prime time in seconds = ( 56.15 mL / 48 mL/min ) x 60 second/min + 25 seconds margin time = 95 seconds. @@ -540,9 +541,9 @@ if ( TRUE == didTimeout( flushBubblesStartTime, FLUSH_BUBBLES_PUMP_TIME_OUT_MS ) ) { - if ( pumpSpeedIndex < RO_PUMP_LOOKUP_TABLE_SIZE ) + if ( pumpSpeedIndex < RO_PUMP_LOOKUP_TABLE_SIZE - 1 ) { - setROPumpTargetFlowRateLPM( RO_PUMP_FLUSH_BUBBLES_FLOWS[ pumpSpeedIndex++ ] / MILLILITERS_PER_LITER, TARGET_RO_PRESSURE_PSI ); + setROPumpTargetFlowRateLPM( RO_PUMP_FLUSH_BUBBLES_FLOWS[ ++pumpSpeedIndex ] / MILLILITERS_PER_LITER, TARGET_RO_PRESSURE_PSI ); flushBubblesStartTime = getMSTimerCount(); } else @@ -731,10 +732,9 @@ { setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); - dialysateFillStartTime = getMSTimerCount(); - - fillStatus.isThisFirstFill = FALSE; - result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; + dialysateFillStartTime = getMSTimerCount(); + fillStatus.isThisFirstFill = FALSE; + result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; } return result; @@ -834,19 +834,22 @@ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_RO_RATIO_CHECK ) != SW_CONFIG_ENABLE_VALUE ) #endif { - F32 avgCPo = sumFillCPoConductivity / (F32)fillCPoConductivitySampleCnt; // sample count incremented above w/o condition so no need for divide by zero checks - F32 avgRR = sumFillRejRatio / (F32)fillCPoConductivitySampleCnt; - - if ( avgCPo > MAX_CPO_CONDUCTIVITY_ALLOW ) + if ( getTargetFillVolumeML() > MIN_FILL_TARGET_TO_CHECK_RO_AND_CPO_ML ) { - // Fault alarm per PRS 483 - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE, avgCPo, MAX_CPO_CONDUCTIVITY_ALLOW ); + F32 avgCPo = sumFillCPoConductivity / (F32)fillCPoConductivitySampleCnt; // sample count incremented above w/o condition so no need for divide by zero checks + F32 avgRR = sumFillRejRatio / (F32)fillCPoConductivitySampleCnt; + + if ( avgCPo > MAX_CPO_CONDUCTIVITY_ALLOW ) + { + // Fault alarm per PRS 483 + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE, avgCPo, MAX_CPO_CONDUCTIVITY_ALLOW ); + } + if ( avgRR > MAX_RO_REJECTION_RATIO_ALLOW ) + { + // Fault alarm per PRS 483 + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, avgRR, MAX_RO_REJECTION_RATIO_ALLOW ); + } } - if ( avgRR > MAX_RO_REJECTION_RATIO_ALLOW ) - { - // Fault alarm per PRS 483 - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, avgRR, MAX_RO_REJECTION_RATIO_ALLOW ); - } } // Check FMP vs. LC @@ -925,7 +928,6 @@ if ( FALSE == areInletWaterConditionsAlarmsActive() ) { - setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); havePauseActuatorsBeenSet = FALSE; result = DG_FILL_MODE_STATE_START; } @@ -956,6 +958,7 @@ ( 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; @@ -1221,7 +1224,7 @@ * @param: value integrated volume in mL * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testSetIntegratedVolumeOverride( U32 value ) +BOOL testSetIntegratedVolumeOverride( F32 value ) { BOOL result = FALSE;