Index: firmware/App/Controllers/BalancingChamber.c =================================================================== diff -u -r1c478c1aff953528127767db1f4f747a7f7089c8 -re46f4e6b13e82349b47037c96692519f2d798997 --- firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision 1c478c1aff953528127767db1f4f747a7f7089c8) +++ firmware/App/Controllers/BalancingChamber.c (.../BalancingChamber.c) (revision e46f4e6b13e82349b47037c96692519f2d798997) @@ -680,10 +680,14 @@ // After the first BC cycle, fault if fill never completes at the Qd-based timeout. if ( ( TRUE == isFillTimeoutEnabled ) && ( balChamberFillTimeoutCount > 0 ) && ( currentBalChamberFillCounter > balChamberFillTimeoutCount ) ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BC_FILL_TIMEOUT_FAULT, currentBalChamberFillCounter, balChamberFillTimeoutCount ); + if ( getTestConfigStatus( TEST_CONFIG_DD_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BC_FILL_TIMEOUT_FAULT, currentBalChamberFillCounter, balChamberFillTimeoutCount ); - // Move to the idle state - state = BAL_CHAMBER_STATE_IDLE; + // Move to the idle state + state = BAL_CHAMBER_STATE_IDLE; + + } } // Check fresh dialysate pressure back in range to indicate fresh fill complete. @@ -943,10 +947,14 @@ // After the first BC cycle, fault if fill never completes at the Qd-based timeout. if ( ( TRUE == isFillTimeoutEnabled ) && ( balChamberFillTimeoutCount > 0 ) && ( currentBalChamberFillCounter > balChamberFillTimeoutCount ) ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BC_FILL_TIMEOUT_FAULT, currentBalChamberFillCounter, balChamberFillTimeoutCount ); + if ( getTestConfigStatus( TEST_CONFIG_DD_DISABLE_BC_PRESSURE_ALARMS ) != TRUE ) + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BC_FILL_TIMEOUT_FAULT, currentBalChamberFillCounter, balChamberFillTimeoutCount ); - // Move to the idle state - state = BAL_CHAMBER_STATE_IDLE; + // Move to the idle state + state = BAL_CHAMBER_STATE_IDLE; + + } } // Spent side of balancing chamber fill is complete or not Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -rb92b5e0b81f0cfcd821de28e2b309c36eb957a46 -re46f4e6b13e82349b47037c96692519f2d798997 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision b92b5e0b81f0cfcd821de28e2b309c36eb957a46) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision e46f4e6b13e82349b47037c96692519f2d798997) @@ -44,25 +44,26 @@ #define DRY_BICART_DATA_PUBLISH_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the balancing chamber data published. + // 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 ) + \ +#define DRY_BICART_FILL_DURATION_MIN_MS ( ( 3 * MS_PER_SECOND ) + \ DRY_BICART_FILL_PERSISTANCE_DURATION_MS ) ///< Minimum fill duration to be met to end the fill cycle. #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 DRY_BICART_FILL_DURATION_DIFF_MS 1750//750 ///< Fill duration difference between last and current fill cycle. -#define PRESSURE_OFFSET_PSI 1.0F ///< Dry bicart pressure offset. +#define PRESSURE_OFFSET_PSI 7.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 20.0F ///< Very max dry bicart fill complete pressure for persistence on d66 +#define MAX_DRY_BICART_FILL_COMPLETE_PRESSURE 22.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. // 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 @@ -86,13 +87,13 @@ // drybicarb mixing #define BICARB_VOL_CONTROL_P_COEFFICIENT ( 0.00008484 * 2 ) ///< Bicarb proportional gain (kp) -#define BICARB_VOL_CONTROL_I_COEFFICIENT ( 0.00033936 / 5 ) ///< Bicarb integral gain. (ki) -#define MIN_BICARB_VOLUME_ML 0.868686869 ///< Minimum bicarb volume in mL -#define MAX_BICARB_VOLUME_ML 1.8 ///< Maximum bicarb volume in mL +#define BICARB_VOL_CONTROL_I_COEFFICIENT ( 0.00033936 / 4 ) ///< Bicarb integral gain. (ki) +#define MIN_BICARB_VOLUME_ML 0.1 ///< Minimum bicarb volume in mL +#define MAX_BICARB_VOLUME_ML 2.0 ///< Maximum bicarb volume in mL #define ACID_VOL_CONTROL_P_COEFFICIENT ( 0.00000997 / 2 ) ///< Acid proportional gain (kp) -#define ACID_VOL_CONTROL_I_COEFFICIENT ( 0.00003988 / 2 ) ///< Acid integral gain. (ki) -#define MIN_ACID_VOLUME_ML 0.3 ///< Minimum acid volume in mL +#define ACID_VOL_CONTROL_I_COEFFICIENT ( 0.00003988 / 5 ) ///< Acid integral gain. (ki) +#define MIN_ACID_VOLUME_ML 0.1 ///< Minimum acid volume in mL #define MAX_ACID_VOLUME_ML 1.0 ///< Maximum acid volume in mL/min. #define DRY_BICARB_TARGET_CONDUCTIVITY 2714.0F ///< Target bicarb conductivity @@ -111,12 +112,12 @@ #define MIX_NO_FEED_FORWARD 0.0F ///< Feedforward term for dialysate closed loop control #define MIX_CONTROL_INTERVAL_MS ( 15 * MS_PER_SECOND ) ///< Dialysate mixing control interval in ms -#define BICARB_MIX_CONTROL_INTERVAL ( 3 * MS_PER_SECOND /\ +#define BICARB_MIX_CONTROL_INTERVAL ( 9 * MS_PER_SECOND /\ TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate mix is controlled. #define ACID_MIX_CONTROL_INTERVAL ( MIX_CONTROL_INTERVAL_MS /\ TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate mix is controlled. -#define BICARB_DEADBAND_CONTROL 50.0F ///< Dry Bicarb dead band control -#define ACID_DEADBAND_CONTROL 100.0F ///< Acid dead band control +#define BICARB_DEADBAND_CONTROL 15.0F ///< Dry Bicarb dead band control +#define ACID_DEADBAND_CONTROL 50.0F ///< Acid dead band control #define STD_MIX_BC_VOLUME 30.0F ///< Standard balancing chamber volume #define TARGET_ADJ_BICARB_SETTING 137.0F ///< User defined Bicarb setting @@ -176,6 +177,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 ventTimeOut; ///< Vent time out flag // initiate the fill/supply/drain static OVERRIDE_U32_T dryBiCartFillRequested; ///< Start/stop dry bicart fill. @@ -196,7 +198,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 dryBiCartPersistanceStartTime; ///< Dry bicart Persistance time. +static U32 dryBiCartPersistanceLowCartPressureStartTime; ///< Dry bicart Persistance 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 @@ -416,6 +419,7 @@ dryBiCartAcidMixControlInterval.override = OVERRIDE_RESET; dryBiCartPressureDecayStartTimeFlag = FALSE; + ventTimeOut = FALSE; dryBiCartFillStartTime = 0; lastFillDurationInMS = 0; currentFillDurationInMS = 0; @@ -428,6 +432,7 @@ dryBiCartDrainCondStableCount = 0; dryBiCartDrainTimePeriod = 0; dryBiCartPersistanceStartTime = 0; + dryBiCartPersistanceLowCartPressureStartTime = 0; initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ @@ -1305,19 +1310,7 @@ { dryBiCartPersistanceStartTime = getMSTimerCount(); } - //check the the maximum cart pressure during persistence on D66 - if ( d66Pressure >= MAX_DRY_BICART_FILL_COMPLETE_PRESSURE ) - { - setValveState( D65_VALV, VALVE_STATE_CLOSED ); - lastFillDurationInMS = currentFillDurationInMS; - currentFillDurationInMS = calcTimeSince( dryBiCartFillStartTime ); - //Increment number of fill cycle - biCartFillCycleCounter++; - dryBiCartPersistanceStartTime = 0; - - 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 ) ) { @@ -1332,7 +1325,10 @@ state = DRY_BICART_DEGAS_START_STATE; } } - + else + { + dryBiCartPersistanceStartTime = 0; + } //TODO:Handle timeout alarm for opening D65 valve too long return state; @@ -1358,6 +1354,7 @@ //Initiate timer to measure length of bicart vent dryBiCartFillStartTime = getMSTimerCount(); + dryBiCartPersistanceStartTime = 0; state = DRY_BICART_DEGAS_END_STATE; return state; @@ -1380,17 +1377,57 @@ { //Vent chamber F to atmosphere setValveState( D64_VALV, VALVE_STATE_OPEN ); +#if 1 + // ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTANCE_DURATION_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_FILL_PERSISTANCE_DURATION_MS ) ) + { + //etValveState( D64_VALV, VALVE_STATE_OPEN ); + 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; + state = DRY_BICART_FILL_DURATION_CHECK_STATE; + ventTimeOut = TRUE; + } + else + { + dryBiCartPersistanceStartTime = 0; + } + + //} } +#endif - // 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 ) ) ) +#if 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( 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 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 ); + dryBiCartPersistanceStartTime = 0; + state = DRY_BICART_FILL_DURATION_CHECK_STATE; + } } - +#endif //TODO: Alarm when vent timeout exceeded, but pressure not dropped below expected PSI (0 psi) return state; @@ -1414,9 +1451,8 @@ 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 ) ) + if ( (( biCartFillCycleCounter >= 3 ) && TRUE == ventTimeOut) || + - ( biCartFillCycleCounter >= dryBiCartMaxFillCount ) ) { state = DRY_BICART_FILL_COMPLETE_STATE; @@ -1442,6 +1478,7 @@ { // transition to next fill cycle and degas state = DRY_BICART_FILL_WATER_START_STATE; + ventTimeOut = FALSE; } } @@ -1560,15 +1597,7 @@ { 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 - 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 ) ) { @@ -1579,6 +1608,10 @@ state = BICARB_CHAMBER_CHECK_LEVEL_STATE; } } + else + { + dryBiCartPersistanceStartTime = 0; + } return state; } @@ -1678,6 +1711,7 @@ { setValveState( D80_VALV, VALVE_STATE_CLOSED ); setValveState( D85_VALV, VALVE_STATE_OPEN ); + dryBiCarbSupplyStartTime = getMSTimerCount(); dryBiCarbSypplyVentStartTime = getMSTimerCount(); state = BICARB_SUPPLY_VENT_START_STATE; @@ -1686,7 +1720,17 @@ } else if ( d66Pressure <= getDryBicartLowerCartPressure() ) { + // start persistance timer + if ( 0 == dryBiCartPersistanceLowCartPressureStartTime ) + { + dryBiCartPersistanceLowCartPressureStartTime = getMSTimerCount(); + } + // 200 ms persistence on D66 pressure since pressure overshoot just after D65 opening + if ( TRUE == didTimeout( dryBiCartPersistanceLowCartPressureStartTime, DRY_BICART_FILL_PERSISTANCE_DURATION_MS ) ) + { setValveState( D65_VALV, VALVE_STATE_OPEN ); + dryBiCartPersistanceStartTime = 0; + } } // Close water inlet valve as fill is complete. else if ( d66Pressure >= getDryBicartUpperCartPressure() ) @@ -1696,19 +1740,19 @@ { dryBiCartPersistanceStartTime = getMSTimerCount(); } - //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; } } + else + { + dryBiCartPersistanceStartTime = 0; + dryBiCartPersistanceLowCartPressureStartTime = 0; + } return state; } @@ -1726,6 +1770,40 @@ BICARB_CHAMBER_FILL_EXEC_STATE_T state = BICARB_SUPPLY_VENT_START_STATE; F32 d66Pressure = getFilteredPressure( D66_PRES ); + if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_TIME_MS ) ) + { + //Vent chamber F to atmosphere + setValveState( D64_VALV, VALVE_STATE_OPEN ); + // ( TRUE == didTimeout( dryBiCartPersistanceStartTime, DRY_BICART_FILL_PERSISTANCE_DURATION_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_FILL_PERSISTANCE_DURATION_MS ) ) + { + //etValveState( D64_VALV, VALVE_STATE_OPEN ); + setValveState( D85_VALV, VALVE_STATE_CLOSED ); + dryBiCartPersistanceStartTime = 0; + 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; + state = BICARB_SUPPLY_VENT_END_STATE; + ventTimeOut = TRUE; + } + + //} + } +#if 0 // open D64 after 1 sec if ( TRUE == didTimeout( dryBiCarbSypplyVentStartTime, DRY_BICART_SUPPLY_VENT_MAX_TIME_MS ) ) { @@ -1741,7 +1819,7 @@ state = BICARB_SUPPLY_VENT_END_STATE; } - +#endif return state; } @@ -1792,28 +1870,7 @@ dryBiCartDrainTimePeriod = SMALL_DRY_BICART_MAX_DRAIN_TIME_MS; } - // open bypass valve - setValveState( D34_VALV, VALVE_STATE_OPEN ); - // TODO: open DD drain - setValveState( D53_VALV, VALVE_STATE_OPEN ); - - // TODO: open iofp drain valve - setValveState( M12_VALV, VALVE_STATE_OPEN ); - - // 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 ); - - // Run D48 at 1000 rpm,There is no improvement over above 1000 rpm for drain duration. - setDialysatePumpTargetRPM( D48_PUMP, DIAL_PUMP_DRAIN_RPM, TRUE ); - dryBiCartDrainStartTime = getMSTimerCount(); dryBiCartDrainLastCondSampleTime = dryBiCartDrainStartTime; dryBiCartDrainCondStableCount = 0; @@ -1838,11 +1895,31 @@ // Open vent valves and close descaling valve setValveState( D80_VALV, VALVE_STATE_OPEN ); - setValveState( D81_VALV, VALVE_STATE_CLOSED ); setValveState( D85_VALV, VALVE_STATE_OPEN ); - // Open D64 valve (vent for equilibrium) setValveState( D64_VALV, VALVE_STATE_OPEN ); + // open bypass valve + setValveState( D34_VALV, VALVE_STATE_OPEN ); + // TODO: open iofp drain valve + setValveState( M12_VALV, VALVE_STATE_OPEN ); + // Open balancing chamber valves + valveControlForBCOpenState(); + + //Close D14 valve + setValveState( D14_VALV, VALVE_STATE_CLOSED ); + setValveState( D65_VALV, VALVE_STATE_CLOSED ); + setValveState( D35_VALV, VALVE_STATE_CLOSED ); + setValveState( D40_VALV, VALVE_STATE_CLOSED ); + setValveState( D91_VALV, VALVE_STATE_CLOSED ); + setValveState( D81_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 ); + + // Run D48 at 1000 rpm,There is no improvement over above 1000 rpm for drain duration. + setDialysatePumpTargetRPM( D48_PUMP, DIAL_PUMP_DRAIN_RPM, TRUE ); + state = DRY_BICART_FLUID_DRAIN_DURATION_CHECK_STATE; return state; @@ -1970,14 +2047,14 @@ data.dryBiCartType = getU32OverrideValue( &dryBiCartType ); data.dryBiCartDrainTimePeriod = dryBiCartDrainTimePeriod; + data.dryBiCartBicarbMixVolume = getBicarbMixVol(); + data.dryBiCartAcidMixVolume = getAcidMixVol(); + // TODO: remove after feature testing memcpy( &data.dryBiCartBicarbMixingControl, &bicarbControlSignals, sizeof( PI_CONTROLLER_SIGNALS_DATA ) ); // TODO: remove after feature testing memcpy( &data.dryBiCartAcidMixingControl , &acidControlSignals , sizeof( PI_CONTROLLER_SIGNALS_DATA ) ); - data.dryBiCartAcidMixVolume = getAcidMixVol(); - data.dryBiCartBicarbMixVolume = getBicarbMixVol(); - // TODO: remove after feature testing data.dryBiCartBicarbMixingKPgain = getBicarbKpGainCoefficient(); // TODO: remove after feature testing Index: firmware/App/Controllers/DryBiCart.h =================================================================== diff -u -r4c91b459486b4150d09b2f1a13b763ef3d430b2f -re46f4e6b13e82349b47037c96692519f2d798997 --- firmware/App/Controllers/DryBiCart.h (.../DryBiCart.h) (revision 4c91b459486b4150d09b2f1a13b763ef3d430b2f) +++ firmware/App/Controllers/DryBiCart.h (.../DryBiCart.h) (revision e46f4e6b13e82349b47037c96692519f2d798997) @@ -50,13 +50,16 @@ U32 dryBiCartType; ///< Dry bicart type (small-0/large-1) U32 dryBiCartDrainTimePeriod; ///< Dry bicart drain time based on catridge type (small/large) + + F32 dryBiCartBicarbMixVolume; ///< Dry bicart bicarb dose volume + F32 dryBiCartAcidMixVolume; ///< Dry bicart acid dose volume + // TODO: remove after closed loops stabilized PI_CONTROLLER_SIGNALS_DATA dryBiCartBicarbMixingControl; ///< Dry bicart bicarb mixing closed loop control signals data PI_CONTROLLER_SIGNALS_DATA dryBiCartAcidMixingControl; ///< Dry bicart acid mixing closed loop control signals data - F32 dryBiCartAcidMixVolume; ///< Dry bicart acid dose volume - F32 dryBiCartBicarbMixVolume; ///< Dry bicart bicarb dose volume + F32 dryBiCartBicarbMixingKPgain; ///< Dry bicart bicarb mixing control kp gain F32 dryBiCartBicarbMixingKIgain; ///< Dry bicart bicarb mixing control ki gain Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -ra7af93efacb700dc80504906356851e9991ba3b1 -re46f4e6b13e82349b47037c96692519f2d798997 --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision a7af93efacb700dc80504906356851e9991ba3b1) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision e46f4e6b13e82349b47037c96692519f2d798997) @@ -35,7 +35,7 @@ #define COND_SENSOR_REPORT_PERIOD ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Broadcast conductivity values message every second. #define COND_SENSOR_UPDATE_INTERVAL ( 700 / TASK_PRIORITY_INTERVAL ) ///< Time in task intervals for new sensor data #define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. -#define CONDUCTIVITY_SAMPLE_FILTER_MS ( 30 ) ///< Filter conductivity data for given time. Currently set to have 5 samples over 3.5s ( 700ms sample rate ) +#define CONDUCTIVITY_SAMPLE_FILTER_MS ( 210 ) ///< Filter conductivity data for given time. Currently set to have 5 samples over 3.5s ( 700ms sample rate ) #define CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS ( 30 ) ///< Filter conductivity temperature data for given time. Currently set to have 5 samples over 3.5s ( 700ms sample rate ) #define SIZE_OF_COND_ROLLING_AVG ( CONDUCTIVITY_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity moving average sample count. #define SIZE_OF_COND_TEMP_ROLLING_AVG ( CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity temprature moving average sample count.