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; Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r94895e32fe18e78b98fe3bb7786838cf00afdbfa -r8ecacdf946ecec11c2f65000876d767279cdd33a --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 94895e32fe18e78b98fe3bb7786838cf00afdbfa) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 8ecacdf946ecec11c2f65000876d767279cdd33a) @@ -95,7 +95,7 @@ { ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_ARTERIAL_PRESSURE_HIGH { ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_VENOUS_PRESSURE_LOW { ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_VENOUS_PRESSURE_HIGH - { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE, TRUE , TRUE, TRUE, TRUE, TRUE, TRUE, FALSE }, // ALARM_ID_UF_RATE_ACCURACY_ERROR + { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE, TRUE , TRUE, TRUE, TRUE, TRUE, TRUE, FALSE }, // ALARM_ID_UF_RATE_TOO_HIGH_ERROR { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE, TRUE , TRUE, TRUE, TRUE, TRUE, TRUE, FALSE }, // ALARM_ID_UF_VOLUME_ACCURACY_ERROR }; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r054fa08b67ed2a31f7848b179fbcd1b4da501b0f -r8ecacdf946ecec11c2f65000876d767279cdd33a --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 054fa08b67ed2a31f7848b179fbcd1b4da501b0f) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 8ecacdf946ecec11c2f65000876d767279cdd33a) @@ -54,9 +54,9 @@ #define MAX_COMM_CRC_FAILURES 5 #define MAX_COMM_CRC_FAILURE_WINDOW_MS (10 * SEC_PER_MIN * MS_PER_SECOND) -#define MSG_NOT_ACKED_TIMEOUT_MS ( MS_PER_SECOND * 1 ) -#define MSG_NOT_ACKED_MAX_RETRIES 3 -#define PENDING_ACK_LIST_SIZE 25 +#define MSG_NOT_ACKED_TIMEOUT_MS 120 +#define MSG_NOT_ACKED_MAX_RETRIES 3 +#define PENDING_ACK_LIST_SIZE 25 #pragma pack(push, 1)