Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r98cc51d12256e9e9d63632d0206e9cd6e5b92429 -r510c62da033207630341774dd097ac7efef862fb --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 98cc51d12256e9e9d63632d0206e9cd6e5b92429) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 510c62da033207630341774dd097ac7efef862fb) @@ -77,8 +77,11 @@ #define VENOUS_PRESSURE_LIMIT_MAX_MMHG ( 400.0F ) ///< Maximum venous pressure limit (in mmHg). #define VENOUS_PRESSURE_LIMIT_MIN_MMHG ( 20.0F ) ///< Minimum venous pressure limit (in mmHg). #define VENOUS_PRESSURE_OCCL_OFFSET_MMHG ( 50.0F ) ///< Venous pressure occlusion threshold offset from max alarm limit (in mmHg). -#define VENOUS_PRES_AIR_TRAP_FILL_DELAY_MS ( ( 5 * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) ///< Venous pressure low exemption delay (in task intervals) following an air trap fill. +#define VENOUS_PRES_AT_FILL_DELAY_MAX_BLOOD_VOL_ML ( 41.667F ) ///< Venous pressure low exemption delay after air trap fill maximum blood volume (in mL). +/// Venous pressure low exemption period (in task intervals) conversion factor (from Qb in mL/min) following an air trap fill. +static const U32 VENOUS_PRES_AT_FILL_DELAY_FACTOR = (U32)( VENOUS_PRES_AT_FILL_DELAY_MAX_BLOOD_VOL_ML * (F32)SEC_PER_MIN * ( (F32)MS_PER_SECOND / (F32)TASK_GENERAL_INTERVAL ) ); + #define PSI_TO_MMHG ( 51.7149F ) ///< Conversion factor for converting PSI to mmHg. #define VENOUS_PRESSURE_NORMAL_OP 0 ///< Venous pressure status bits indicate normal operation. @@ -801,12 +804,16 @@ if ( pressureLimitsActive != FALSE ) { BOOL venPresLow, venPresHigh; + S32 qB = abs( getTargetBloodFlowRate() ); + U32 qBx = ( 0 == qB ? MIN_SET_BLOOD_FLOW_RATE : (U32)qB ); + // compute exemption period (in general task intervals) for low venous pressure alarms after air trap fills + U32 exemptPeriod = VENOUS_PRES_AT_FILL_DELAY_FACTOR / qBx; venPresLow = ( venPres < (F32)currentVenousMinLimit ? TRUE : FALSE ); venPresHigh = ( venPres > (F32)currentVenousMaxLimit ? TRUE : FALSE ); // Check venous pressure is within alarm limits - if ( ( airTrapValveState != STATE_OPEN ) && ( venLowPresExemptAfterAirTrapFillTimerCtr > VENOUS_PRES_AIR_TRAP_FILL_DELAY_MS ) ) + if ( ( airTrapValveState != STATE_OPEN ) && ( venLowPresExemptAfterAirTrapFillTimerCtr > exemptPeriod ) ) { if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_PRESSURE_LOW, venPresLow ) ) {