Index: firmware/App/Controllers/FlowSensors.c =================================================================== diff -u -r0c296cef29037819be204c45a23d4d38a52b2718 -r4b4eab2b311a43bd1fa35f24e427a8beb17df8b0 --- firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision 0c296cef29037819be204c45a23d4d38a52b2718) +++ firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision 4b4eab2b311a43bd1fa35f24e427a8beb17df8b0) @@ -48,6 +48,7 @@ { U08 edgeCountsIndex; ///< Edge counts index. U16 edgeCountsBuffer[ FLOW_SENSORS_EDGES_BUFFER_LENGTH ]; ///< Edge counts buffer array. + OVERRIDE_F32_T measuredFlowBeforeCalLPM; ///< Measured flow before calibration in L/min. OVERRIDE_F32_T measuredFlowLPM; ///< Measured flow in L/min. OVERRIDE_F32_T measuredROFlowWithCPsLPM; ///< Measured RO flow with concentrate pumps in L/min. } FLOW_SENSOR_STATUS_T; @@ -115,12 +116,12 @@ void execFlowSensorsMonitor( void ) { U08 i; - U08 countsIndex = 0; - U16 oldestEdgeCount = 0; - U16 oldest2CurrentEdgeDiff = 0; - F32 flowBeforeCalibrationLPM = 0.0F; - F32 currentFlowLPM = 0.0F; - BOOL isFlowOutOfRange = FALSE; + U08 countsIndex = 0; + U16 oldestEdgeCount = 0; + U16 oldest2CurrentEdgeDiff = 0; + F32 currentFlowLPM = 0.0F; + BOOL isFlowOutOfRange = FALSE; + F32 measFlow = 0.0F; // Check if a new calibration is available if ( TRUE == isNewCalibrationRecordAvailable() ) @@ -139,20 +140,20 @@ case RO_FLOW_SENSOR: flowSensorStatus[ i ].edgeCountsBuffer[ countsIndex ] = getFPGAROFlowSensorEdgeCount(); oldest2CurrentEdgeDiff = u16DiffWithWrap( oldestEdgeCount, flowSensorStatus[ i ].edgeCountsBuffer[ countsIndex ] ); - flowBeforeCalibrationLPM = oldest2CurrentEdgeDiff * FLOW_SENSORS_LITERS_PER_PULSES * SEC_PER_MIN; - flowSensorStatus[ i ].measuredROFlowWithCPsLPM.data = getCalibrationAppliedFlowLPM( i, flowBeforeCalibrationLPM ); - flowSensorStatus[ i ].measuredFlowLPM.data = flowSensorStatus[ i ].measuredROFlowWithCPsLPM.data - + flowSensorStatus[ i ].measuredFlowBeforeCalLPM.data = oldest2CurrentEdgeDiff * FLOW_SENSORS_LITERS_PER_PULSES * SEC_PER_MIN; + flowSensorStatus[ i ].measuredROFlowWithCPsLPM.data = getCalibrationAppliedFlowLPM( i, flowSensorStatus[ i ].measuredFlowBeforeCalLPM.data ); + measFlow = flowSensorStatus[ i ].measuredROFlowWithCPsLPM.data - ( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP1_ACID ) / ML_PER_LITER ) - ( getMeasuredPumpSpeed( CONCENTRATEPUMPS_CP2_BICARB ) / ML_PER_LITER ); - flowSensorStatus[ i ].measuredFlowLPM.data = MAX( flowSensorStatus[ i ].measuredFlowLPM.data, 0.0 ); + flowSensorStatus[ i ].measuredFlowLPM.data = MAX( measFlow, 0.0F ); break; case DIALYSATE_FLOW_SENSOR: flowSensorStatus[ i ].edgeCountsBuffer[ countsIndex ] = getFPGADialysateFlowSensorEdgeCount(); oldest2CurrentEdgeDiff = u16DiffWithWrap( oldestEdgeCount, flowSensorStatus[ i ].edgeCountsBuffer[ countsIndex ] ); - flowBeforeCalibrationLPM = oldest2CurrentEdgeDiff * FLOW_SENSORS_LITERS_PER_PULSES * SEC_PER_MIN; - flowSensorStatus[ i ].measuredFlowLPM.data = getCalibrationAppliedFlowLPM( i, flowBeforeCalibrationLPM ); - flowSensorStatus[ i ].measuredFlowLPM.data = MAX( flowSensorStatus[ i ].measuredFlowLPM.data, 0.0 ); + flowSensorStatus[ i ].measuredFlowBeforeCalLPM.data = oldest2CurrentEdgeDiff * FLOW_SENSORS_LITERS_PER_PULSES * SEC_PER_MIN; + measFlow = getCalibrationAppliedFlowLPM( i, flowSensorStatus[ i ].measuredFlowBeforeCalLPM.data ); + flowSensorStatus[ i ].measuredFlowLPM.data = MAX( measFlow, 0.0F ); break; #ifndef _VECTORCAST_ @@ -210,6 +211,21 @@ /*********************************************************************//** * @brief + * The getMeasuredRawFlowRateLPM function gets the measured flow + * rate of a flow sensor before applying the calibration to it in L/min. + * @details Inputs: flowSensorStatus + * @details Outputs: flowSensorStatus + * @return the current flow rate before applying calibration (in L/min). + *************************************************************************/ +F32 getMeasuredRawFlowRateLPM( FLOW_SENSORS_T sensorId ) +{ + F32 flow = getF32OverrideValue( &flowSensorStatus[ sensorId ].measuredFlowBeforeCalLPM ); + + return flow; +} + +/*********************************************************************//** + * @brief * The publishFlowSensorsData function publishes flow sensors data at * the set interval. * @details Inputs: flowSensorsDataPublicationCounter,