Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -rd86855d12f5103fc16e2e06e267da237c8d549d7 -r8ecacdf946ecec11c2f65000876d767279cdd33a --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision d86855d12f5103fc16e2e06e267da237c8d549d7) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 8ecacdf946ecec11c2f65000876d767279cdd33a) @@ -31,9 +31,9 @@ // ********** private definitions ********** -#define MAX_UF_ACCURACY_ERROR_ML 250 ///< Maximum ultrafiltration accuracy error in mL over the entire treatment. -#define MAX_UF_ACCURACY_ERROR_ML_PER_HR 100 ///< Maximum ultrafiltration accuracy error in mL/hr. -#define UF_ACCURACY_CHECK_INTERVAL ((1 * MIN_PER_HOUR * SEC_PER_MIN * MS_PER_SECOND) / TASK_GENERAL_INTERVAL) ///< Ultrafiltration rate accuracy check interval count +#define MAX_UF_RATE_ML_PER_MIN 45.83 ///< Maximum ultrafiltration rate in mL/min (2750 mL/hr). +#define MAX_UF_ACCURACY_ERROR_ML 25.0 ///< Maximum ultrafiltration accuracy error in mL over the entire treatment. +#define UF_ACCURACY_CHECK_INTERVAL ((1 * SEC_PER_MIN * MS_PER_SECOND) / TASK_GENERAL_INTERVAL) ///< Ultrafiltration rate accuracy check interval count // ********** private data ********** @@ -66,7 +66,7 @@ static UF_STATE_T handleUFRunningState( void ); static UF_STATE_T handleUFCompletedOrOffState( void ); -static void checkUFAccuracy( void ); +static void checkUF( void ); static void updateUFVolumes( void ); /*********************************************************************//** @@ -295,8 +295,8 @@ *************************************************************************/ void execDialysis( void ) { - // check ultrafiltration accuracy during dialysis (even when ultrafiltration is paused). - checkUFAccuracy(); + // check ultrafiltration max rate and accuracy during dialysis (even when ultrafiltration is paused). + checkUF(); // dialysis state machine switch ( currentDialysisState ) @@ -497,26 +497,24 @@ /*********************************************************************//** * @brief - * The checkUFAccuracy function checks ultrafiltration accuracy for the last \n - * minute and triggers an alarm if out of spec. + * The checkUF function checks ultrafiltration accuracy for the last \n + * minute and checks total UF volume. Triggers an alarm if out of spec. * @details * Inputs : uFAccuracyCheckTimerCtr, lastUFVolumeChecked, measUFVolume * Outputs : uFAccuracyCheckTimerCtr, lastUFVolumeChecked * @return none *************************************************************************/ -static void checkUFAccuracy( void ) +static void checkUF( void ) { - // check UF accuracy at 1 hour intervals + // check UF accuracy at 1 minute intervals if ( ++uFAccuracyCheckTimerCtr >= UF_ACCURACY_CHECK_INTERVAL ) { - F32 uFMeasRatePerHr = measUFVolume - lastUFVolumeChecked; - F32 uFSetRatePerHr = ( setUFRate * (F32)MIN_PER_HOUR ); - F32 uFRateError = FABS( uFSetRatePerHr - uFMeasRatePerHr ); + F32 uFMeasRate = measUFVolume - lastUFVolumeChecked; - // check UF accuracy - if ( uFRateError > (F32)MAX_UF_ACCURACY_ERROR_ML_PER_HR ) + // check UF max rate + if ( uFMeasRate > MAX_UF_RATE_ML_PER_MIN ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_UF_RATE_ACCURACY_ERROR, uFSetRatePerHr, uFMeasRatePerHr ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_UF_RATE_TOO_HIGH_ERROR, uFMeasRate ); } // reset for next check lastUFVolumeChecked = measUFVolume;