Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -r9e145b824b15215371d2b178a405ba1ae8491636 -r96468474a209ba55660ba0f1c7441bb381d24ff8 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 9e145b824b15215371d2b178a405ba1ae8491636) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 96468474a209ba55660ba0f1c7441bb381d24ff8) @@ -54,7 +54,7 @@ #define PRESSURE_OFFSET_PSI 2 ///< Dry bicart pressure offset. #define DRY_BICART_FILL_COMPLETE_PRESSURE ( 10.0F + PRESSURE_OFFSET_PSI ) ///< Maximum pressure reached to indicate the dry bicart fill being completed. #define DRY_BICART_FILL_INITIATE_PRESSURE 1.5F ///< Minimum pressure required to initiate the dry bicart fill process. -#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE 6.0F ///< Maximum pressure allowed at bicart fill during supply process/state +#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE 8.0F ///< Maximum pressure allowed at bicart fill during supply process/state #define DRY_BICART_FILL_INITIATE_SUPPLY_PRESSURE 3.0F ///< Minimum pressure required to initiate the dry bicart fill during supply process/state #define MAX_DRY_BICART_FILL_COMPLETE_PRESSURE 15 ///< Very Max dry bicart fill complete pressure for persistence on d66 @@ -66,9 +66,14 @@ #define DRY_BICART_FILL_VENT_COMPLETE_PRESSURE 1.5F ///< Pressure reached to indicate the dry bicart venting being completed. // Bicarb chamber fill/Supply -#define DRY_BICART_SUPPLY_VALVE_D80_OPEN_TIME_MS ( 3 * MS_PER_SECOND ) ///< Max time allowed for supply (opening D80 valve) during bicarb chamber (F) fill. +#ifdef CONDUCTIVE_LEVEL_SENSOR_ENABLED +#define DRY_BICART_SUPPLY_VALVE_D80_OPEN_TIME_MS ( 10 * MS_PER_SECOND ) ///< Max time allowed for supply (opening D80 valve) during bicarb chamber (F) fill using level sensor +#else +#define DRY_BICART_SUPPLY_VALVE_D80_OPEN_TIME_MS ( 3 * MS_PER_SECOND ) ///< Max time allowed for supply (opening D80 valve) during bicarb chamber (F) fill time based fill +#endif #define DRY_BICART_SUPPLY_VENT_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to vent dry bicart gas before actuating Bicarb chamber(F) venting. -#define DRY_BICART_SUPPLY_VENT_MAX_TIME_MS ( 1.1 * MS_PER_SECOND ) ///< Max time to vent both dry bicart and Chamber F. +#define DRY_BICART_SUPPLY_VENT_MAX_TIME_MS ( 1 * MS_PER_SECOND ) ///< Max time to vent both dry bicart and Chamber F. +#define DRY_BICART_SUPPLY_COMPLETE_TIME_MS ( 2 * MS_PER_SECOND ) ///< Wait time to close the D80 valve after D65 is closed // Dry Bicart Drain #define LARGE_DRY_BICART_MAX_DRAIN_TIME_MS ( 8 * SEC_PER_MIN * MS_PER_SECOND ) ///< Max drain time for large dry bicart in ms. @@ -1202,6 +1207,7 @@ state = DRY_BICART_FILL_WATER_START_STATE; } + // alrm } return state; @@ -1306,7 +1312,7 @@ //Close D64 setValveState( D64_VALV, VALVE_STATE_CLOSED); - //Vent bicart + //Vent bicart to chamber F setValveState( D85_VALV, VALVE_STATE_OPEN ); //Initiate timer to measure length of bicart vent @@ -1331,7 +1337,7 @@ if ( TRUE == didTimeout( dryBiCartFillStartTime, DRY_BICART_FILL_VENT_TIME_MS ) ) { - //Vent chamber F + //Vent chamber F to atmosphere setValveState( D64_VALV, VALVE_STATE_OPEN ); } @@ -1476,12 +1482,16 @@ BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CARTRIDGE_FILL_WATER_END_STATE; // Close vent valves and descaling valve + setValveState( D64_VALV, VALVE_STATE_OPEN ); //open + setValveState( D80_VALV, VALVE_STATE_CLOSED ); setValveState( D81_VALV, VALVE_STATE_CLOSED ); - setValveState( D64_VALV, VALVE_STATE_CLOSED ); setValveState( D85_VALV, VALVE_STATE_CLOSED ); // open inlet water to bicart setValveState( D65_VALV, VALVE_STATE_OPEN ); + //setValveState( D3_VALV, VALVE_STATE_OPEN ); + dryBiCarbSupplyStartTime = getMSTimerCount(); + dryBiCartPersistanceStartTime = 0; return state; } @@ -1498,11 +1508,24 @@ BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CARTRIDGE_FILL_WATER_END_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - if ( d66Pressure >= getDryBicartUpperCartPressure() ) + if ( d66Pressure >= DRY_BICART_FILL_COMPLETE_PRESSURE )// DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE { - // Close water inlet valve as D66 pressure reaches 15 PSI. - setValveState( D65_VALV, VALVE_STATE_CLOSED ); - state = BICARB_CHAMBER_CHECK_LEVEL_STATE; + // persistence + // to check the the maximum cart pressure during persistence on D66 + if ( d66Pressure >= MAX_DRY_BICART_FILL_COMPLETE_PRESSURE ) + { + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + state = BICARB_CHAMBER_CHECK_LEVEL_STATE; + } + // 200 ms persistence on D66 pressure since pressure overshoot just after D65 opening + if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTANCE_DURATION_MS ) ) + { + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + state = BICARB_CHAMBER_CHECK_LEVEL_STATE; + } + // Close water inlet valve as D66 pressure reaches 11 PSI. } return state; @@ -1519,22 +1542,19 @@ static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberCheckLevelState( void ) { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_CHECK_LEVEL_STATE; - LEVEL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); + LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); // TODO: Confirm D80 open on chamber low or end of balancing chamber switching? - // TODO: Enable the below code once level sensor is working - //if ( LEVEL_STATE_LOW == bicarbChamberLevel ) + // if ( getBalancingChamberFillinProgressStatus() == FALSE ) { - // if ( getBalancingChamberFillinProgressStatus() == FALSE ) - { - // Open the Bicarb chamber inlet valve - setValveState( D80_VALV, VALVE_STATE_OPEN ); + setValveState( D64_VALV, VALVE_STATE_CLOSED ); + // Open the Bicarb chamber inlet valve + setValveState( D80_VALV, VALVE_STATE_OPEN ); - // Start a timer when bicarb supply started to chamber F - dryBiCarbSupplyStartTime = getMSTimerCount(); + // Start a timer when bicarb supply started to chamber F + dryBiCarbSupplyStartTime = getMSTimerCount(); - state = BICARB_CHAMBER_FILL_STATE; - } + state = BICARB_CHAMBER_FILL_STATE; } // TODO: alarm @@ -1553,10 +1573,10 @@ { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_FILL_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - LEVEL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); + LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); // Once level reached, close the valve - if ( LEVEL_STATE_HIGH == bicarbChamberLevel ) + if ( LVL_STATE_HIGH == bicarbChamberLevel ) { setValveState( D80_VALV, VALVE_STATE_CLOSED ); state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; @@ -1587,27 +1607,50 @@ { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - LEVEL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); + LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); // Once level reached, close the valve - if ( ( LEVEL_STATE_HIGH == bicarbChamberLevel ) || + if ( ( LVL_STATE_HIGH == bicarbChamberLevel ) || ( TRUE == didTimeout( dryBiCarbSupplyStartTime, DRY_BICART_SUPPLY_VALVE_D80_OPEN_TIME_MS ) ) ) { setValveState( D65_VALV, VALVE_STATE_CLOSED ); - setValveState( D80_VALV, VALVE_STATE_CLOSED ); - dryBiCarbSypplyVentStartTime = getMSTimerCount(); - setValveState( D64_VALV, VALVE_STATE_CLOSED ); - state = BICARB_SUPPLY_VENT_START_STATE; + // do not close the D80 valve, wait till d66 decays to 3 PSI + if ( TRUE == didTimeout( dryBiCarbSupplyStartTime, DRY_BICART_SUPPLY_COMPLETE_TIME_MS ) ) + { + if ( d66Pressure <= getDryBicartLowerCartPressure()) + { + setValveState( D80_VALV, VALVE_STATE_CLOSED ); + setValveState( D85_VALV, VALVE_STATE_OPEN ); + dryBiCarbSypplyVentStartTime = getMSTimerCount(); + state = BICARB_SUPPLY_VENT_START_STATE; + } + } } - /*else if ( d66Pressure <= getDryBicartLowerCartPressure() ) + else if ( d66Pressure <= getDryBicartLowerCartPressure() ) { - setValveState( D65_VALV, VALVE_STATE_OPEN ); } + setValveState( D65_VALV, VALVE_STATE_OPEN ); + } // Close water inlet valve as fill is complete. else if ( d66Pressure >= getDryBicartUpperCartPressure() ) { - setValveState( D65_VALV, VALVE_STATE_CLOSED ); - }*/ + if ( 0 == dryBiCartPersistanceStartTime ) + { + dryBiCartPersistanceStartTime = getMSTimerCount(); + } + // to check the the maximum cart pressure during persistence on D66 + if ( d66Pressure >= MAX_DRY_BICART_FILL_COMPLETE_PRESSURE ) + { + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + } + // 200 ms persistence on D66 pressure since pressure overshoot just after D65 opening + if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTANCE_DURATION_MS ) ) + { + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + } + } return state; } @@ -1623,64 +1666,20 @@ static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberSupplyVentStartState(void) { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_SUPPLY_VENT_START_STATE; - float setpoint; - U32 startTime; F32 d66Pressure = getFilteredPressure( D66_PRES ); - F32 tmpD66Pressure = getFilteredPressure( D66_PRES ); - setpoint = d66Pressure - 1.0; - - if ( ( d66Pressure > DRY_BICART_FILL_INITIATE_SUPPLY_PRESSURE ) ) + if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_MAX_TIME_MS ) ) { setValveState( D64_VALV, VALVE_STATE_OPEN ); - state = BICARB_SUPPLY_VENT_END_STATE; } - //if ( TRUE == didTimeout( dryBiCarbSupplyStartTime, 10 ) ) -#if 0 - while ( tmpD66Pressure >= getDryBicartLowerCartPressure() && tmpD66Pressure >= setpoint ) { - //setpoint = d66Pressure - 1.0; - - // Venting loop: stay open until target PSI is reached - setValveState( D64_VALV, VALVE_STATE_CLOSED ); - setValveState( D85_VALV, VALVE_STATE_OPEN ); - startTime = getMSTimerCount(); - while ( TRUE != didTimeout( startTime, 12 ) ) - { - } - // close the vallve - setValveState( D85_VALV, VALVE_STATE_CLOSED ); - setValveState( D64_VALV, VALVE_STATE_OPEN ); - startTime = getMSTimerCount(); - while ( TRUE != didTimeout( startTime, 100 ) ) - { - } - tmpD66Pressure = getFilteredPressure( D66_PRES ); - //sleep - } -#endif - else if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_TIME_MS ) ) + // D66 pressure drops or time out + if ( ( d66Pressure <= DRY_BICART_FILL_VENT_COMPLETE_PRESSURE ) || + ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_FILL_VENT_MAX_TIME_MS ) ) ) { - //Vent bicart after 1 sec - setValveState( D85_VALV, VALVE_STATE_OPEN ); - } - else if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_MAX_TIME_MS ) ) - { setValveState( D85_VALV, VALVE_STATE_CLOSED ); - //Vent chamber F after 200 ms - setValveState( D64_VALV, VALVE_STATE_OPEN ); - dryBiCarbSypplyVentStartTime = getMSTimerCount(); - //state = BICARB_SUPPLY_VENT_END_STATE; - } - // D66 pressure drops or time out - else if ( ( d66Pressure <= DRY_BICART_FILL_INITIATE_SUPPLY_PRESSURE ) /*|| - ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_FILL_VENT_MAX_TIME_MS ) )*/ ) - { - setValveState( D64_VALV, VALVE_STATE_OPEN ); - setValveState( D85_VALV, VALVE_STATE_CLOSED ); - dryBiCarbSypplyVentStartTime = getMSTimerCount(); state = BICARB_SUPPLY_VENT_END_STATE; } @@ -1699,18 +1698,11 @@ { BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_SUPPLY_VENT_END_STATE; - // close bicart vent and chamber f vent after 1 sec - if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_TIME_MS ) ) - { - setValveState( D85_VALV, VALVE_STATE_CLOSED ); - //setValveState( D64_VALV, VALVE_STATE_CLOSED); - - bicarbChamberFillRequested.data = FALSE; - // for this request override also cleared - bicarbChamberFillRequested.ovData = FALSE; + bicarbChamberFillRequested.data = FALSE; + // for this request override also cleared + bicarbChamberFillRequested.ovData = FALSE; - state = BICARB_CHAMBER_START_STATE; - } + state = BICARB_CHAMBER_START_STATE; return state; }