Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -r8b2c714710d2d533c876614ab3d0a59df10a9ee9 -rde74366a9ca8be78f9b594de1e0938dc6060d179 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 8b2c714710d2d533c876614ab3d0a59df10a9ee9) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision de74366a9ca8be78f9b594de1e0938dc6060d179) @@ -42,10 +42,11 @@ #define DRY_BICART_VENT_COMPLETE_PRESSURE 1.5F ///< Pressure reached to inidcate the drybicart venting being completed. #define DRY_BICART_VENT_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to vent dry bibag gas before actuating Bicarb chamber(F) venting. #define DRY_BICART_VENT_MAX_TIME_MS ( 10 * MS_PER_SECOND ) ///< Max time to vent both bicart and Chamber F. -#define DRY_BICART_FILL_DURATION_DIFF_MS 800 ///< Fill duration difference between last and current fill cycle. +#define DRY_BICART_FILL_DURATION_DIFF_MS 100 ///< Fill duration difference between last and current fill cycle. #define DRY_BICART_FILL_DURATION_MIN_MS 1000 ///< Minimum fill duration to be met to end the fill cycle. #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 VALV_D80_MAX_OPEN_TIME ( 10 * MS_PER_SECOND ) ///< Max time allowed for opening D80 valve. /// Payload record structure for dry bicart fill request typedef struct @@ -66,6 +67,7 @@ static OVERRIDE_U32_T bicarbChamberFillRequested; ///< Start/stop Bicarb chamber fill. static OVERRIDE_U32_T dryBiCartDataPublishInterval; ///< Dry bicart data publish interval. static U32 dryBiCartDataPublicationTimerCounter; ///< Used to schedule drybicart data publication to CAN bus. +static U32 dryBiCarbVentD80StartTime; ///< D80 vent start time. // ********** private function prototypes ********** @@ -115,6 +117,7 @@ currentFillDurationInMS = 0; dryBiCartDataPublicationTimerCounter = 0; biCartFillCycleCounter = 0; + dryBiCarbVentD80StartTime = 0; } /*********************************************************************//** @@ -220,11 +223,12 @@ // Close vent valves and descaling valve 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 D65 setValveState( D65_VALV, VALVE_STATE_OPEN ); + //Open D64 + setValveState( D64_VALV, VALVE_STATE_OPEN ); //Initiate timer to measure length of fill dryBiCartFillStartTime = getMSTimerCount(); state = DRY_BICART_FILL_WATER_END_STATE; @@ -273,6 +277,8 @@ { DRY_BICART_FILL_EXEC_STATE_T state = DRY_BICART_DEGAS_START_STATE; + //Close D64 + setValveState( D64_VALV, VALVE_STATE_CLOSED); //Vent bicart setValveState( D85_VALV, VALVE_STATE_OPEN ); @@ -307,7 +313,7 @@ if ( ( d66Pressure <= DRY_BICART_VENT_COMPLETE_PRESSURE ) || ( TRUE == didTimeout( dryBiCartFillStartTime, DRY_BICART_VENT_MAX_TIME_MS ) ) ) { - setValveState( D64_VALV, VALVE_STATE_CLOSED ); + setValveState( D64_VALV, VALVE_STATE_OPEN ); setValveState( D85_VALV, VALVE_STATE_CLOSED ); state = DRY_BICART_FILL_DURATION_CHECK_STATE; } @@ -467,6 +473,8 @@ { // Open the Bicarb chamber inlet valve setValveState( D80_VALV, VALVE_STATE_OPEN ); + // Start a timer when we open D80 + dryBiCarbVentD80StartTime = getMSTimerCount(); state = BICARB_CHAMBER_FILL_STATE; } @@ -518,17 +526,22 @@ LEVEL_STATE_T bicarbChamberLevel = getLevelStatus( D63_LEVL ); // Once level reached, close the valve - if ( LEVEL_STATE_HIGH == bicarbChamberLevel ) + if ( ( LEVEL_STATE_HIGH <= bicarbChamberLevel ) || + ( TRUE == didTimeout( dryBiCarbVentD80StartTime, VALV_D80_MAX_OPEN_TIME ) ) ) { + setValveState( D65_VALV, VALVE_STATE_CLOSED ); setValveState( D80_VALV, VALVE_STATE_CLOSED ); + state = BICARB_CHAMBER_START_STATE; } +// else +// { +// SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_BICARB_CHAMBER_INVALID_EXEC_STATE, state ); +// } // Close water inlet valve as fill is complete. if ( d66Pressure >= DRY_BICART_FILL_COMPLETE_PRESSURE ) { setValveState( D65_VALV, VALVE_STATE_CLOSED ); - setValveState( D80_VALV, VALVE_STATE_CLOSED ); - state = BICARB_CHAMBER_START_STATE; } return state;