Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rfbb77f3224d4ebe0aecf5aa0f43a753cb9a2c9cf -r84cac67b119fdd0716bdd41f85d956f440f1cb81 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision fbb77f3224d4ebe0aecf5aa0f43a753cb9a2c9cf) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 84cac67b119fdd0716bdd41f85d956f440f1cb81) @@ -40,7 +40,8 @@ #define MAX_PRIME_TIME ( 30 * SEC_PER_MIN ) ///< Maximum prime time (in seconds). #define PRIME_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the prime data is published on the CAN bus. -#define BLOOD_PUMP_SLOW_FLOW_RATE_PURGE_AIR_ML_MIN 150 ///< Blood pump slow flow rate after fluid reach lower level of air trap sensor. +#define BLOOD_PUMP_INIT_FLOW_RATE_PURGE_AIR_ML_MIN 150 ///< Blood pump initial flow rate before fluid reach upper level of air trap sensor. +#define BLOOD_PUMP_SLOW_FLOW_RATE_PURGE_AIR_ML_MIN 50 ///< Blood pump slow flow rate for subsequent returns to purge state. #define BLOOD_PUMP_SALINE_FLOW_RATE_PURGE_AIR_ML_MIN 200 ///< Blood pump very slow flow rate during prime saline dialyzer state #define BLOOD_PUMP_SLOW_FLOW_RATE_CIRC_BLOOD_CIRCUIT_ML_MIN 150 ///< Blood pump slow flow rate during prime recirculate blood circuit state. #define BLOOD_PUMP_FAST_FLOW_RATE_CIRC_BLOOD_CIRCUIT_ML_MIN 300 ///< Blood pump fast flow rate during prime recirculate blood circuit state. @@ -148,7 +149,7 @@ static void resetPrimeFlags(); static void setupForPrimePause( void ); static void broadcastPrimingStatus( void ); -static void purgeAirValvesBloodPumpControl( void ); +static void purgeAirValvesBloodPumpControl( BOOL firstTime ); static void handlePrimeBubbleClear( void ); static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeWaitForUserStartState( void ); @@ -459,9 +460,10 @@ * to purge air. * @details Inputs: None * @details Outputs: run blood pump, close VDI, VDO, VBA and VBV valves, open VBT valve - * @return current state (sub-mode) + * @param firstTime flag indicating whether this is first time setting up for purge state + * @return none *************************************************************************/ -static void purgeAirValvesBloodPumpControl( void ) +static void purgeAirValvesBloodPumpControl( BOOL firstTime ) { setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); @@ -472,9 +474,15 @@ signalDialOutPumpHardStop(); signalDialInPumpHardStop(); - // Set the Blood Pump rate to 150 mL/min that helps to avoid entering saline bubbles in to PBo line - setBloodPumpTargetFlowRate( BLOOD_PUMP_SLOW_FLOW_RATE_PURGE_AIR_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - + // + if ( TRUE == firstTime ) + { + setBloodPumpTargetFlowRate( BLOOD_PUMP_INIT_FLOW_RATE_PURGE_AIR_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + } + else + { + setBloodPumpTargetFlowRate( BLOOD_PUMP_SLOW_FLOW_RATE_PURGE_AIR_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + } } /*********************************************************************//** @@ -606,7 +614,7 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_SALINE_PURGE_AIR_STATE; - purgeAirValvesBloodPumpControl(); + purgeAirValvesBloodPumpControl( TRUE ); purgeAirTimeOutStartTime = getMSTimerCount(); primeSalineDialyzerBubbleClearStartTime = getMSTimerCount(); @@ -685,7 +693,7 @@ ( ( BUBBLE_DETECTED == getBubbleStatus( ADV ) ) || ( TRUE == didTimeout( noAirDetectedStartTime, NO_AIR_DETECTED_COUNT ) ) ) ) { signalBloodPumpHardStop(); - purgeAirValvesBloodPumpControl(); + purgeAirValvesBloodPumpControl( FALSE ); purgeAirTimeOutStartTime = getMSTimerCount(); state = HD_PRIME_SALINE_PURGE_AIR_STATE; }