Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -rfed8ef4f0540818dfb7ca670a65eac39c12cb25a -r0e457429d65039d16cd631c3aaa06b5409de67c4 --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision fed8ef4f0540818dfb7ca670a65eac39c12cb25a) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 0e457429d65039d16cd631c3aaa06b5409de67c4) @@ -91,6 +91,8 @@ #define SYRINGE_PUMP_DAC_VOLTAGE_MAX_ERROR 0.05F ///< Force sensor POST check for DAC voltage - max delta. #define MIN_SYRINGE_PUMP_RATE_FOR_DIR_ALARM 0.5F ///< Minimum measured rate (in mL/hr) required before enforcing direction alarm. +/// HW volume variance in the syringe pump in mL. +#define SYRINGE_PUMP_HW_TOLERANCE_ML 0.65F /// HW volume variance in the syringe pump in encoder counts. #define SYRINGE_PUMP_HW_TOLERANCE_POS ( SYRINGE_ENCODER_COUNTS_PER_ML * SYRINGE_PUMP_HW_TOLERANCE_ML ) /// Expected position of empty in relation to home position. @@ -1463,11 +1465,11 @@ U32 preStop = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ); U32 setTxDur = getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); F32 hepDurHr = ( (F32)( setTxDur - preStop ) / (F32)MIN_PER_HOUR ); - F32 txVolumeReq = SYRINGE_PUMP_PRIME_VOLUME_ML + bolusVol + ( hepDurHr * contRate ) + SYRINGE_PUMP_HW_TOLERANCE_ML; + F32 txVolumeReq = SYRINGE_PUMP_PRIME_VOLUME_ML + bolusVol + ( hepDurHr * contRate ); F32 syringeVol = ( SYRINGE_PUMP_EMPTY_POS - (F32)pos ) / SYRINGE_ENCODER_COUNTS_PER_ML; - syringePumpVolumeRequired = txVolumeReq; - txVolumeReq = txVolumeReq + SYRINGE_PUMP_PRELOAD_MARGIN_VOLUME_ML; + syringePumpVolumeRequired = txVolumeReq + SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML; + txVolumeReq = txVolumeReq + SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML + SYRINGE_PUMP_PRELOAD_MARGIN_VOLUME_ML; // Handle ramp up rampSyringePump(); @@ -1831,11 +1833,9 @@ syringePumpEmptyForceCount = 0; } // If near empty position, assume syringe is empty - // Check for force threshold within SYRINGE_PUMP_HW_TOLERANCE_POS of empty - if ( pos >= SYRINGE_PUMP_EMPTY_POS || - ( syringePumpEmptyForceCount > SYRINGE_PUMP_EMPTY_FORCE_COUNT && - ( pos <= ( SYRINGE_PUMP_EMPTY_POS + SYRINGE_PUMP_HW_TOLERANCE_POS ) || - pos >= ( SYRINGE_PUMP_EMPTY_POS - SYRINGE_PUMP_HW_TOLERANCE_POS ) ) ) ) + // Check for force threshold over some time and within SYRINGE_PUMP_HW_TOLERANCE_POS of empty + if ( ( pos >= SYRINGE_PUMP_EMPTY_POS ) || + ( ( syringePumpEmptyForceCount >= SYRINGE_PUMP_EMPTY_FORCE_COUNT ) && ( pos >= ( SYRINGE_PUMP_EMPTY_POS - SYRINGE_PUMP_HW_TOLERANCE_POS ) ) ) ) { heparinDeliveryState = HEPARIN_STATE_EMPTY; SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_EMPTY, (F32)pos, force ) Index: firmware/App/Controllers/SyringePump.h =================================================================== diff -u -rfed8ef4f0540818dfb7ca670a65eac39c12cb25a -r0e457429d65039d16cd631c3aaa06b5409de67c4 --- firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision fed8ef4f0540818dfb7ca670a65eac39c12cb25a) +++ firmware/App/Controllers/SyringePump.h (.../SyringePump.h) (revision 0e457429d65039d16cd631c3aaa06b5409de67c4) @@ -33,7 +33,7 @@ // ********** public definitions ********** #define SYRINGE_PUMP_PRIME_VOLUME_ML 0.353F ///< Target syringe prime volume (in mL). -#define SYRINGE_PUMP_HW_TOLERANCE_ML 1.0F ///< HW volume variance of the syringe pump in mL. TBD value. +#define SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML 0.8F ///< Advised fill volume offset due to HW variance. /// Enumeration of syringe pump operations. typedef enum SyringePumpOperations Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -rfed8ef4f0540818dfb7ca670a65eac39c12cb25a -r0e457429d65039d16cd631c3aaa06b5409de67c4 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision fed8ef4f0540818dfb7ca670a65eac39c12cb25a) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 0e457429d65039d16cd631c3aaa06b5409de67c4) @@ -560,7 +560,7 @@ stagedParams[ TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT ].sInt; F32 heparinVolume_mL = ( stagedParams[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].sFlt * \ ( stagedParams[ TREATMENT_PARAM_TREATMENT_DURATION ].uInt - stagedParams[ TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ].uInt ) ) + \ - stagedParams[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].sFlt + SYRINGE_PUMP_PRIME_VOLUME_ML + SYRINGE_PUMP_HW_TOLERANCE_ML; + stagedParams[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].sFlt + SYRINGE_PUMP_PRIME_VOLUME_ML + SYRINGE_PUMP_FILL_VOLUME_OFFSET_ML; // Check max dialysate volume dependency