Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r736cc5b56cc9c784ab1d8fc8687a73d190c35759 -rd916204a4e6286cd5cfbac7fea9ea15ee69b3000 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 736cc5b56cc9c784ab1d8fc8687a73d190c35759) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision d916204a4e6286cd5cfbac7fea9ea15ee69b3000) @@ -65,6 +65,7 @@ #define STEADY_VOLUME_DIALYSATE_PRIME_HISTERESIS_ML 0.3F ///< mL of histeresis for the steady state check that determines when bypass line is primed. #define STEADY_VOLUME_BYPASS_PRIME_HISTERESIS_ML 0.3F ///< mL of histeresis for the steady state check that determines when bypass line is primed. #define PRESSURE_OFFSET_DIALYSATE_PRIME_MMHG 50.0F ///< +/- offset from start pressure that defines a range to keep PBo in during dialysate dialyzer prime state. +#define VENOUS_PRESSURE_DIALSYATE_LINE_OCCLUSION_MMHG -15.0F ///< Measured venous pressure indicates possible clamping/occlusion during dialysate priming. #define DPO_RATE_STEP_PER_SEC_DIALYSATE_PRIME_ML_MIN 1 ///< DPo rate step to maintain pressure during dialysate dialyzer prime state. #define VENOUS_PRESSURE_BUBBLE_CLEAR_MAX_MMHG ( 200.0F ) ///< Maximum venous pressure reading (in mmHg) for bubble clear. @@ -143,6 +144,7 @@ static F32 minimumReservoirVolume; ///< Minimum reservoir volume in mL. static U32 steadyVolumeCount; ///< Use to keep track the number of dVolume/dt < Threshold static BOOL bubbleClearEnded; ///< Bubble clear ended boolean signal. +static BOOL primeDialysateOcclusionDetected; ///< flag used when dialysate occlusion alarm set // ********** private function prototypes ********** @@ -181,6 +183,7 @@ primePauseStartTime = 0; primeStatusBroadcastTimerCounter = 0; bubbleClearEnded = FALSE; + primeDialysateOcclusionDetected = FALSE; } /*********************************************************************//** @@ -818,6 +821,8 @@ if ( TRUE == didTimeout( steadyVolumeSamplingStartTime, LOAD_CELL_STEADY_VOLUME_SAMPLING_TIME ) ) { F32 venPres = getFilteredVenousPressure(); + F32 measuredDialInFlow = getDGRawDialysateFlowRateLMin() * ML_PER_LITER; + BOOL lowFlow = ( measuredDialInFlow < MIN_DG_DIAL_FLOW_RATE ? TRUE : FALSE ); if ( venPres > ( primeDialysateDialyzerStartVenPres + PRESSURE_OFFSET_DIALYSATE_PRIME_MMHG ) ) { @@ -829,6 +834,20 @@ primeDialysateDialyzerDPoRate -= DPO_RATE_STEP_PER_SEC_DIALYSATE_PRIME_ML_MIN; setDialOutPumpTargetRate( primeDialysateDialyzerDPoRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); } + + // if dialysate line is clamped for some reasons, raise an alarm based on the measured venous pressure and raw flow rate. + if ( ( venPres <= VENOUS_PRESSURE_DIALSYATE_LINE_OCCLUSION_MMHG ) && ( TRUE == lowFlow ) ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRIME_DIALYSATE_LINE_OCCLUSION, venPres, measuredDialInFlow ); + primeDialysateOcclusionDetected = TRUE; + } + else if ( TRUE == primeDialysateOcclusionDetected ) + { + // after clearance of occlusion, start the blood side priming due to any air bubbles collected prior. + state = HD_PRIME_SALINE_SETUP_STATE; + primeDialysateOcclusionDetected = FALSE; + } + steadyVolumeSamplingStartTime = getMSTimerCount(); }