Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -rc45f78c0ff3b0a866b7f6233092a2e611e801460 -rc25d707f6f5f2463639425e2efd6876bed974304 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision c45f78c0ff3b0a866b7f6233092a2e611e801460) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision c25d707f6f5f2463639425e2efd6876bed974304) @@ -49,7 +49,6 @@ #define DIALYSATE_TEMP_LOW_SAFETY_LIMIT_C 42.0F ///< Dialysate low safety temperature limit in C. #define DIALYSATE_TEMP_LOW_SAFETY_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Dialysate temperature low safety timeout in milliseconds. #define DG_DATA_FRESHNESS_TIMEOUT_MS ( 3 * MS_PER_SECOND ) ///< DG data freshness timeout (in ms). -#define DIALYSATE_FLOW_FRESHNESS_TIMEOUT_MS ( 300 * MS_PER_SECOND ) ///< Dialysate flow freshness timeout (in ms). // DN-31OCT2022 // ********** private data ********** @@ -185,7 +184,6 @@ initPersistentAlarm( ALARM_ID_HD_NEW_DIALYSATE_TEMPERATURE_DATA_MESSAGE_NOT_RECEIVE, DG_DATA_FRESHNESS_TIMEOUT_MS, DG_DATA_FRESHNESS_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_HD_NEW_RESERVOIRS_DATA_MESSAGE_NOT_RECEIVE, DG_DATA_FRESHNESS_TIMEOUT_MS, DG_DATA_FRESHNESS_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_HD_NEW_DG_OPERATION_MODE_MESSAGE_NOT_RECEIVE, DG_DATA_FRESHNESS_TIMEOUT_MS, DG_DATA_FRESHNESS_TIMEOUT_MS ); - initPersistentAlarm( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, DIALYSATE_FLOW_FRESHNESS_TIMEOUT_MS, DIALYSATE_FLOW_FRESHNESS_TIMEOUT_MS ); // DN-31OCT2022 } /**********************************************************************//** @@ -242,9 +240,6 @@ // Trigger alarm if not receiving new DG op mode message in timely manner checkDGDataFreshness( ALARM_ID_HD_NEW_DG_OPERATION_MODE_MESSAGE_NOT_RECEIVE, &dgOpModeDataFreshFlag ); - // Trigger alarm if not receiving new DG op mode message in timely manner - //checkDGDataFreshness( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, &dgDialysateFlowDataFreshFlag ); // DN-31OCT2022 - TODO: Will remove this line??? - // Check to see if DG has restarted checkDGRestart(); } Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -rd0c3528f9ce49e8f24176de6bd49f4b5088e78b8 -rc25d707f6f5f2463639425e2efd6876bed974304 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision d0c3528f9ce49e8f24176de6bd49f4b5088e78b8) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision c25d707f6f5f2463639425e2efd6876bed974304) @@ -275,6 +275,7 @@ // Initialize persistent alarm for flow sensor signal strength too low initPersistentAlarm( ALARM_ID_HD_DIAL_IN_FLOW_OUT_OF_RANGE, 0, DIP_MAX_FLOW_RATE_OUT_OF_RANGE_PERSIST ); + initPersistentAlarm( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, DIP_FLOW_VS_SPEED_PERSIST, DIP_FLOW_VS_SPEED_PERSIST ); initTimeWindowedCount( TIME_WINDOWED_COUNT_DIP_COMMUTATION_ERROR, DIP_COMMUTATION_ERROR_MAX_CNT, DIP_COMMUTATION_ERROR_TIME_WIN_MS ); } @@ -806,34 +807,27 @@ if ( ( QdTarget < DIAL_IN_FLOW_QHIGHTRANSITION ) && ( QdTarget > DIAL_IN_FLOW_QLOWTRANSITION ) ) { // use blended flow rate calculation - estimatedFlow = ( ( QdTarget - DIAL_IN_FLOW_QLOWTRANSITION ) / ( DIAL_IN_FLOW_QHIGHTRANSITION - DIAL_IN_FLOW_QLOWTRANSITION ) ) * calculatedFlow + - ( ( DIAL_IN_FLOW_QHIGHTRANSITION - QdTarget ) / ( DIAL_IN_FLOW_QHIGHTRANSITION - DIAL_IN_FLOW_QLOWTRANSITION ) ) * filteredDialInFlowMeterReading; + estimatedFlow = ( ( QdTarget - DIAL_IN_FLOW_QLOWTRANSITION ) / ( DIAL_IN_FLOW_QHIGHTRANSITION - DIAL_IN_FLOW_QLOWTRANSITION ) ) * filteredDialInFlowMeterReading + + ( ( DIAL_IN_FLOW_QHIGHTRANSITION - QdTarget ) / ( DIAL_IN_FLOW_QHIGHTRANSITION - DIAL_IN_FLOW_QLOWTRANSITION ) ) * calculatedFlow; } else - { - if ( QdTarget > DIAL_IN_FLOW_QHIGHTRANSITION) - { - estimatedFlow = filteredDialInFlowMeterReading; // Use flow sensor - } - else - { - estimatedFlow = calculatedFlow; // use calculated flow rate. - } + { // use calculated flow rate. Assume target flow rate has already checked for out of bounds on low end. + estimatedFlow = calculatedFlow; } } // Check the measured flow against estimated flow - / deltaFlow = 0.5 * estimatedFlow; // 50% estimated flow - if ( TRUE == isDialInPumpRunning() ) + if ( ( TRUE == isDialInPumpRunning() ) && ( dialInPumpControlMode != PUMP_CONTROL_MODE_OPEN_LOOP ) ) { - if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, deltaFlow < fabs( estimatedFlow - filteredDialInFlowMeterReading ) ) ) ) - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, filteredDialInFlowMeterReading, estimatedFlow ); - } + if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, deltaFlow < fabs( estimatedFlow - filteredDialInFlowMeterReading ) ) ) ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, filteredDialInFlowMeterReading, estimatedFlow ); + } } else { - isPersistentAlarmTriggered( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, FALSE ); + isPersistentAlarmTriggered( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, FALSE ); } return estimatedFlow;