Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -r581f75133863205963703e6e6970ac66ee5228c1 -rfd2fa46f071ef8943c9c2e432439e34597254bfc --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 581f75133863205963703e6e6970ac66ee5228c1) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision fd2fa46f071ef8943c9c2e432439e34597254bfc) @@ -43,26 +43,22 @@ // ********** private definitions ********** #define DRY_BICART_DATA_PUBLISH_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the balancing chamber data published. +#define PRESSURE_OFFSET_PSI 7.0F ///< Dry bicart pressure offset. // Dry Bicart Fill -#define DRY_BICART_FILL_PERSISTANCE_DURATION_MS 200 ///< Fill persistence duration to overcome the pressure over shoot for beta 1.9 and beta 2.0. -#define DRY_BICART_FILL_DURATION_MIN_MS ( ( 2 * MS_PER_SECOND ) + \ - DRY_BICART_FILL_PERSISTANCE_DURATION_MS ) ///< Minimum fill duration to be met to end the fill cycle. +#define DRY_BICART_FILL_PERSISTENCE_MS 200 ///< Fill persistence duration to overcome the pressure over shoot for beta 1.9 and above. #define DRY_BICART_FILL_COMPLETE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to reset the request flag after fill complete -#define DRY_BICART_FILL_DURATION_DIFF_MS 750 ///< Fill duration difference between last and current fill cycle. - -#define PRESSURE_OFFSET_PSI 1.0F ///< 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 10.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.0F ///< Very max dry bicart fill complete pressure for persistence on d66 - +#define MAX_DRY_BICART_FILL_COMPLETE_PRESSURE 20.0F ///< Very max dry bicart fill complete pressure for persistence on d66 #define DRY_BICART_DEFAULT_MAX_FILL_CYCLE_CNT 10 ///< Default max fill cycle allowed for dry bicart fill/mix with water. #define DRY_BICART_MAX_FILL_CYCLE_CNT 30 ///< Max fill cycle allowed (by override) for dry bicart fill/mix with water. +#define DRY_BICART_MINIMUM_FILL_CYCLE_CNT 3 ///< Minimum fill cycle count for filling dry bicart without overpressuring // Dry Bicart Fill Vent #define DRY_BICART_FILL_VENT_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to vent dry bicart gas before actuating Bicarb chamber(F) venting. -#define DRY_BICART_FILL_VENT_MAX_TIME_MS ( 10 * MS_PER_SECOND ) ///< Max time to vent both dry bicart and Chamber F. +#define DRY_BICART_FILL_VENT_MAX_TIME_MS ( 3 * MS_PER_SECOND ) ///< Max time to vent both dry bicart and Chamber F. #define DRY_BICART_FILL_VENT_COMPLETE_PRESSURE 1.5F ///< Pressure reached to indicate the dry bicart venting being completed. // Bicarb chamber fill/Supply @@ -74,6 +70,8 @@ #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 * 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 +#define DRY_BICART_SUPPLY_FILL_PERSISTENCE_MS 200 ///< Supply fill persistence duration to overcome the pressure over shoot for beta 1.9 and above. +#define DRY_BICART_SUPPLY_VENT_PERSISTENCE_MS 200 ///< Supply vent persistence duration to overcome the pressure over shoot for beta 1.9 and above. // 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. @@ -172,6 +170,7 @@ static OVERRIDE_U32_T biCartMaxFillCycleCount; ///< Maximum number of drybicart fill cycle ( overrideable) static OVERRIDE_F32_T dryBiCartUpperCartPressure; ///< Upper cart pressure static OVERRIDE_F32_T dryBiCartLowerCartPressure; ///< Lower cart pressure +static BOOL dryBiCartFillVentTimeOut; ///< Vent time out flag // initiate the fill/supply/drain static OVERRIDE_U32_T dryBiCartFillRequested; ///< Start/stop dry bicart fill. @@ -192,7 +191,8 @@ static U32 dryBiCartDrainCondStableCount; ///< Debounce counter for "zero" conductivity static U32 dryBiCartDrainTimePeriod; ///< Dry bicart drain time period -static U32 dryBiCartPersistanceStartTime; ///< Dry bicart fill start time. +static U32 dryBiCartPersistenceStartTime; ///< Dry bicart Persistence time. +static U32 drybicartPersistenceOnLowercartPressureStartTime; ///< Dry bicart Persistence on lower cart pressure start time. static BOOL dryBiCartPressureDecayStartTimeFlag; ///< Dry bicart d66 pressure decay start timer. static DRY_BICART_OPERATION_T dryBicartStartRequest; ///< Dry bicart operation, fill or supply or drain request @@ -214,7 +214,12 @@ static OVERRIDE_F32_T dryBiCartDialysateTargetConductivity; ///< Acid bicarb mix conductivity static OVERRIDE_F32_T dryBiCartDialysateDeltaConductivity; ///< Acid bicarb delta conductivity +static OVERRIDE_F32_T dryBiCartStdMixingBCVolume; ///< Acid bicarb mix conductivity +static OVERRIDE_F32_T dryBiCartTargetAdjNaSettings; ///< Acid bicarb delta conductivity +static OVERRIDE_F32_T dryBiCartTargetAdjBicarbSettings; ///< Acid bicarb delta conductivity + static OVERRIDE_U32_T dryBiCartMixControlInterval; ///< Mix control interval +static OVERRIDE_U32_T dryBiCartAcidMixControlInterval; ///< Mix control interval static PI_CONTROLLER_SIGNALS_DATA bicarbControlSignals; ///< Bicarb closed loop control signal data static PI_CONTROLLER_SIGNALS_DATA acidControlSignals; ///< Acid closed loop control signal data @@ -234,7 +239,6 @@ static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberStartState( void ); static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberCartridgeFillWaterStartState( void ); static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberCartridgeFillWaterEndState( void ); -static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberCheckLevelState( void ); static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberFillState( void ); static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberPressureCheckState( void ); static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberSupplyVentStartState(void); @@ -387,6 +391,7 @@ dryBiCartMixControlInterval.override = OVERRIDE_RESET; dryBiCartPressureDecayStartTimeFlag = FALSE; + dryBiCartFillVentTimeOut = FALSE; dryBiCartFillStartTime = 0; lastFillDurationInMS = 0; currentFillDurationInMS = 0; @@ -399,6 +404,7 @@ dryBiCartDrainCondStableCount = 0; dryBiCartDrainTimePeriod = 0; dryBiCartPersistanceStartTime = 0; + drybicartPersistenceOnLowercartPressureStartTime = 0; initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ @@ -600,10 +606,6 @@ bicarbChamberFillExecState = handleBicarbChamberCartridgeFillWaterEndState(); break; - case BICARB_CHAMBER_CHECK_LEVEL_STATE: - bicarbChamberFillExecState = handleBicarbChamberCheckLevelState(); - break; - case BICARB_CHAMBER_FILL_STATE: bicarbChamberFillExecState = handleBicarbChamberFillState(); break; @@ -1268,10 +1270,10 @@ DRY_BICART_FILL_EXEC_STATE_T state = DRY_BICART_FILL_WATER_END_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - // Close dry bicart inlet water if D66 pressure is 11 PSIr + // Close dry bicart inlet water if D66 pressure is 17 PSI if ( d66Pressure >= DRY_BICART_FILL_COMPLETE_PRESSURE ) { - // start the persistance timer once d66 reaches 11 PSI + // start the persistence timer once d66 reaches 17 PSI if ( 0 == dryBiCartPersistanceStartTime ) { dryBiCartPersistanceStartTime = getMSTimerCount(); @@ -1290,7 +1292,7 @@ state = DRY_BICART_DEGAS_START_STATE; } // 200 ms persistence on D66 pressure since pressure overshoot just after D65 opening - if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTANCE_DURATION_MS ) ) + if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTENCE_MS ) ) { setValveState( D65_VALV, VALVE_STATE_CLOSED ); @@ -1303,7 +1305,6 @@ state = DRY_BICART_DEGAS_START_STATE; } } - //TODO:Handle timeout alarm for opening D65 valve too long return state; @@ -1323,14 +1324,14 @@ //Close D64 setValveState( D64_VALV, VALVE_STATE_CLOSED); - //Vent bicart to chamber F setValveState( D85_VALV, VALVE_STATE_OPEN ); - //Initiate timer to measure length of bicart vent - dryBiCartFillStartTime = getMSTimerCount(); - state = DRY_BICART_DEGAS_END_STATE; + dryBiCartFillStartTime = getMSTimerCount(); + dryBiCartPersistanceStartTime = 0; + state = DRY_BICART_DEGAS_END_STATE; + return state; } @@ -1351,17 +1352,33 @@ { //Vent chamber F to atmosphere setValveState( D64_VALV, VALVE_STATE_OPEN ); - } - // D66 pressure drops to below 1.5 PSI or time out - if ( ( d66Pressure <= DRY_BICART_FILL_VENT_COMPLETE_PRESSURE ) || - ( TRUE == didTimeout( dryBiCartFillStartTime, DRY_BICART_FILL_VENT_MAX_TIME_MS ) ) ) - { - setValveState( D64_VALV, VALVE_STATE_OPEN ); - setValveState( D85_VALV, VALVE_STATE_CLOSED ); - state = DRY_BICART_FILL_DURATION_CHECK_STATE; - } + // D66 pressure drops to below 1.5 PSI + if ( ( d66Pressure <= DRY_BICART_FILL_VENT_COMPLETE_PRESSURE ) ) + { + // start the persistence timer once d66 reaches 1.5 PSI + if ( 0 == dryBiCartPersistanceStartTime ) + { + dryBiCartPersistanceStartTime = getMSTimerCount(); + } + // 200 ms persistence on D66 pressure since pressure drop below 1.5 PSI suddenly after opening D64 + if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTENCE_MS ) ) + { + setValveState( D85_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + state = DRY_BICART_FILL_DURATION_CHECK_STATE; + } + } + else if ( ( TRUE == didTimeout( dryBiCartFillStartTime, DRY_BICART_FILL_VENT_MAX_TIME_MS ) ) ) + { + setValveState( D85_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + dryBiCartFillVentTimeOut = TRUE; + + state = DRY_BICART_FILL_DURATION_CHECK_STATE; + } + } //TODO: Alarm when vent timeout exceeded, but pressure not dropped below expected PSI (0 psi) return state; @@ -1384,10 +1401,9 @@ U32 dryBiCartMaxFillCount = getU32OverrideValue( &biCartMaxFillCycleCount ); F32 d66Pressure = getFilteredPressure( D66_PRES ); - // Fill time shortens over the period or number of fill cycle exceeded - if ( ( ( currentFillDurationInMS <= DRY_BICART_FILL_DURATION_MIN_MS ) && - ( diffInFillDuration <= DRY_BICART_FILL_DURATION_DIFF_MS ) ) || - ( biCartFillCycleCounter >= dryBiCartMaxFillCount ) ) + // Fill for a minimum 3 cycle count and vent time out or number of fill cycle exceeded max fill cycle count + if ( ( ( biCartFillCycleCounter >= DRY_BICART_MINIMUM_FILL_CYCLE_CNT ) && ( TRUE == dryBiCartFillVentTimeOut ) ) || + ( biCartFillCycleCounter >= dryBiCartMaxFillCount ) ) { state = DRY_BICART_FILL_COMPLETE_STATE; @@ -1402,18 +1418,10 @@ } else { - // Stop drycart fill if fill request flag is set to false. - if ( FALSE == getU32OverrideValue( &dryBiCartFillRequested ) ) - { - dryBiCartFillRequested.data = FALSE; + dryBiCartFillVentTimeOut = FALSE; - state = DRY_BICART_START_STATE; - } - else - { - // transition to next fill cycle and degas - state = DRY_BICART_FILL_WATER_START_STATE; - } + // transition to next fill cycle and degas + state = DRY_BICART_FILL_WATER_START_STATE; } return state; @@ -1432,17 +1440,18 @@ // stay in this state till bicart request is cleared so that fill complete status can be checked DRY_BICART_FILL_EXEC_STATE_T state = DRY_BICART_FILL_COMPLETE_STATE; - // TODO: check whether its required or not, right now in pre-gen need to check the fill complete status - // TODO: implement the broadcast message for fill complete + // TODO: in pre-gen, need to check the fill complete status if ( TRUE == didTimeout( dryBiCartFillStartTime, DRY_BICART_FILL_COMPLETE_TIME_MS ) ) { - currentFillDurationInMS = 0; - lastFillDurationInMS = 0; - biCartFillCycleCounter = 0; + currentFillDurationInMS = 0; + lastFillDurationInMS = 0; + biCartFillCycleCounter = 0; + dryBiCartFillVentTimeOut = FALSE; // Go idle dryBiCartFillRequested.data = FALSE; // for this request override also cleared dryBiCartFillRequested.ovData = FALSE; + state = DRY_BICART_START_STATE; } @@ -1522,27 +1531,32 @@ BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CARTRIDGE_FILL_WATER_END_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - // check D66 is 11 PSI + // check D66 pressure greater than or equal to 17 PSI if ( d66Pressure >= DRY_BICART_FILL_COMPLETE_PRESSURE ) { // persistence + // start the persistence timer once d66 reaches 17 PSI + if ( 0 == dryBiCartPersistanceStartTime ) + { + dryBiCartPersistanceStartTime = getMSTimerCount(); + } // check the the maximum cart pressure during persistence on D66 if ( d66Pressure >= MAX_DRY_BICART_FILL_COMPLETE_PRESSURE ) { - // Close water inlet valve as D66 pressure reaches max PSI(14-15) after persistence + // Close water inlet valve as D66 pressure reaches max PSI(20) after persistence setValveState( D65_VALV, VALVE_STATE_CLOSED ); dryBiCartPersistanceStartTime = 0; - state = BICARB_CHAMBER_CHECK_LEVEL_STATE; + state = BICARB_CHAMBER_FILL_STATE; } // 200 ms persistence on D66 pressure since pressure overshoot just after D65 opening - if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTANCE_DURATION_MS ) ) + if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTENCE_MS ) ) { // Close water inlet valve as D66 pressure reaches 11 PSI after persistence setValveState( D65_VALV, VALVE_STATE_CLOSED ); dryBiCartPersistanceStartTime = 0; - state = BICARB_CHAMBER_CHECK_LEVEL_STATE; + state = BICARB_CHAMBER_FILL_STATE; } } @@ -1557,9 +1571,9 @@ * @details \b Outputs: valve states, dryBiCarbSupplyStartTime * @return the next bicarb chamber fill state. *************************************************************************/ -static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberCheckLevelState( void ) +static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberFillState( void ) { - BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_CHECK_LEVEL_STATE; + BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; // TODO: set supply in progress to inform BC control to disable alarm setValveState( D64_VALV, VALVE_STATE_CLOSED ); @@ -1569,49 +1583,13 @@ // Start a timer when bicarb supply started to chamber F dryBiCarbSupplyStartTime = getMSTimerCount(); - state = BICARB_CHAMBER_FILL_STATE; + // TODO: alarm - // TODO: alarm - return state; } /*********************************************************************//** * @brief - * The handleBicarbChamberFillState function checks the D66 pressure & - * decides to open D65 and Close the inlet valve (D80) once level reached - * @details \b Inputs: D66 pressure sensor reading, D63 level - * @details \b Outputs: valve states - * @return the next bicarb chamber pressure check state. - *************************************************************************/ -static BICARB_CHAMBER_FILL_EXEC_STATE_T handleBicarbChamberFillState( void ) -{ - BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_CHAMBER_FILL_STATE; - F32 d66Pressure = getFilteredPressure( D66_PRES ); - LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); - - // Once level reached, close the valve - if ( LVL_STATE_HIGH == bicarbChamberLevel ) - { - setValveState( D80_VALV, VALVE_STATE_CLOSED ); - state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; - } - // Open water inlet valve to fill the bicart - else if ( d66Pressure <= getDryBicartLowerCartPressure() ) - { - setValveState( D65_VALV, VALVE_STATE_OPEN ); - state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; - } - else - { - state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; - } - - return state; -} - -/*********************************************************************//** - * @brief * The handleBicarbChamberPressureCheckStartState function actuates the vent valve * present in the Bicart assembly. * @details \b Inputs: D66 Pressure, D63 level, dryBiCarbSupplyStartTime @@ -1624,8 +1602,8 @@ F32 d66Pressure = getFilteredPressure( D66_PRES ); LVL_STATE_T bicarbChamberLevel = getBicarbChamberLevelStatus(); - // Once level reached, close the valve, timeout is for safety in case level sensor didn't work, or else its a time based filling - if ( ( LVL_STATE_HIGH == bicarbChamberLevel ) || + // Once upper level reached high , close the valve, timeout is for safety in case level sensor didn't work(10 sec), or else its a time based filling (3 sec) + if ( ( LVL_STATE_HIGH == bicarbChamberLevel ) || ( TRUE == didTimeout( dryBiCarbSupplyStartTime, DRY_BICART_SUPPLY_VALVE_D80_OPEN_TIME_MS ) ) ) { setValveState( D65_VALV, VALVE_STATE_CLOSED ); @@ -1636,14 +1614,15 @@ dryBiCarbSupplyStartTime = getMSTimerCount(); dryBiCartPressureDecayStartTimeFlag = TRUE; } - // 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 ); + + dryBiCarbSupplyStartTime = getMSTimerCount(); dryBiCarbSypplyVentStartTime = getMSTimerCount(); state = BICARB_SUPPLY_VENT_START_STATE; @@ -1652,12 +1631,22 @@ } else if ( d66Pressure <= getDryBicartLowerCartPressure() ) { + // start persistence timer + if ( 0 == drybicartPersistenceOnLowercartPressureStartTime ) + { + drybicartPersistenceOnLowercartPressureStartTime = getMSTimerCount(); + } + // 200 ms persistence on D66 pressure + if ( TRUE == didTimeout( drybicartPersistenceOnLowercartPressureStartTime, DRY_BICART_SUPPLY_FILL_PERSISTENCE_MS ) ) + { setValveState( D65_VALV, VALVE_STATE_OPEN ); + drybicartPersistenceOnLowercartPressureStartTime = 0; + } } // Close water inlet valve as fill is complete. else if ( d66Pressure >= getDryBicartUpperCartPressure() ) { - // start persistance timer + // start persistence timer if ( 0 == dryBiCartPersistanceStartTime ) { dryBiCartPersistanceStartTime = getMSTimerCount(); @@ -1669,7 +1658,7 @@ 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 ) ) + if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_SUPPLY_FILL_PERSISTENCE_MS ) ) { setValveState( D65_VALV, VALVE_STATE_CLOSED ); dryBiCartPersistanceStartTime = 0; @@ -1692,20 +1681,37 @@ BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_SUPPLY_VENT_START_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); - // open D64 after 1 sec - if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_MAX_TIME_MS ) ) + if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_TIME_MS ) ) { + //Vent chamber F to atmosphere setValveState( D64_VALV, VALVE_STATE_OPEN ); - } - // D66 pressure drops to 1.5 or time out - if ( ( d66Pressure <= DRY_BICART_FILL_VENT_COMPLETE_PRESSURE ) || - ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_FILL_VENT_MAX_TIME_MS ) ) ) - { + // D66 pressure drops to below 1.5 PSI or time out + if ( ( d66Pressure <= DRY_BICART_FILL_VENT_COMPLETE_PRESSURE ) ) + { + // start the persistance timer once d66 reaches 11 PSI + if ( 0 == dryBiCartPersistanceStartTime ) + { + dryBiCartPersistanceStartTime = getMSTimerCount(); + } + // 200 ms persistence on D66 pressure since pressure overshoot just after D65 opening + if ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_SUPPLY_VENT_PERSISTENCE_MS ) ) + { + //etValveState( D64_VALV, VALVE_STATE_OPEN ); + setValveState( D85_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; - setValveState( D85_VALV, VALVE_STATE_CLOSED ); + state = BICARB_SUPPLY_VENT_END_STATE; + } + } + else if ( ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_FILL_VENT_MAX_TIME_MS ) ) ) + { + setValveState( D85_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + dryBiCartFillVentTimeOut = TRUE; - state = BICARB_SUPPLY_VENT_END_STATE; + state = BICARB_SUPPLY_VENT_END_STATE; + } } return state; @@ -1758,8 +1764,14 @@ dryBiCartDrainTimePeriod = SMALL_DRY_BICART_MAX_DRAIN_TIME_MS; } + //Close D14 valve + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D34_VALV, VALVE_STATE_CLOSED ); + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + // open bypass valve - setValveState( D34_VALV, VALVE_STATE_OPEN ); + setValveState( D91_VALV, VALVE_STATE_OPEN ); // TODO: open DD drain setValveState( D53_VALV, VALVE_STATE_OPEN ); @@ -1770,9 +1782,8 @@ // Open balancing chamber valves valveControlForBCOpenState(); - //Close D14 valve - setValveState( D14_VALV, VALVE_STATE_CLOSED ); + // Run D10 In Open loop mode(max speed 200ml/min) setConcentratePumpTargetSpeed( D10_PUMP, DRAIN_BICART_PUMP_SPEED, DOSING_CONT_VOLUME ); requestConcentratePumpOn( D10_PUMP ); @@ -1809,6 +1820,7 @@ // Open D64 valve (vent for equilibrium) setValveState( D64_VALV, VALVE_STATE_OPEN ); + state = DRY_BICART_FLUID_DRAIN_DURATION_CHECK_STATE; return state; @@ -1845,7 +1857,7 @@ setValveState( D85_VALV, VALVE_STATE_CLOSED ); // close bypass valve - setValveState( D34_VALV, VALVE_STATE_CLOSED ); + setValveState( D91_VALV, VALVE_STATE_CLOSED ); // TODO: close DD drain setValveState( D53_VALV, VALVE_STATE_CLOSED );