Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -rc45f78c0ff3b0a866b7f6233092a2e611e801460 -r85a94d154c634f0bb7b85a3a7312a77fdb9708df --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision c45f78c0ff3b0a866b7f6233092a2e611e801460) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 85a94d154c634f0bb7b85a3a7312a77fdb9708df) @@ -784,10 +784,11 @@ *************************************************************************/ static F32 calcDialInFlow( void ) { - F32 estimatedFlow; - F32 QdTarget = getTargetDialInFlowRate(); + F32 estimatedFlow; + F32 QdTarget = getTargetDialInFlowRate(); + F32 deltaFlow; - if (QdTarget >= DIAL_IN_FLOW_QHIGHTRANSITION) + if ( QdTarget >= DIAL_IN_FLOW_QHIGHTRANSITION ) { //At higher flow rates, use the flow meter value. Assume target flow rate has already checked for out of bounds on high end. estimatedFlow = filteredDialInFlowMeterReading; @@ -803,7 +804,7 @@ F32 calculatedFlow = ( motorRPM * 2 * DIAL_IN_STROKE_VOLUME/DIAL_IN_GEAR_RATIO ) * alphaTerm; - if ( ( QdTarget < DIAL_IN_FLOW_QHIGHTRANSITION ) && ( QdTarget >= DIAL_IN_FLOW_QLOWTRANSITION ) ) + 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; @@ -815,17 +816,24 @@ } // Check the measured flow against estimated flow - / - F32 deltaFlow = 0.5 * estimatedFlow; // 50% estimated flow + deltaFlow = 0.5 * estimatedFlow; // 50% estimated flow //if ( deltaFlow < fabs( estimatedFlow - filteredDialInFlowMeterReading ) ) //{ // SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, filteredDialInFlowMeterReading, estimatedFlow ); //} // Check measured rotor speed vs. measured motor speed while controlling to target - if ( ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_DIAL_IN_FLOW_CHECK_FAILURE, deltaFlow < fabs( estimatedFlow - filteredDialInFlowMeterReading ) ) ) ) + if ( TRUE == isDialInPumpRunning() ) { - 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 ); + } return estimatedFlow; }