Index: firmware/App/Controllers/FlowSensors.c =================================================================== diff -u -r0c296cef29037819be204c45a23d4d38a52b2718 -rbaaf3dc55c2dee07d04efb97022fd2329a5bd73d --- firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision 0c296cef29037819be204c45a23d4d38a52b2718) +++ firmware/App/Controllers/FlowSensors.c (.../FlowSensors.c) (revision baaf3dc55c2dee07d04efb97022fd2329a5bd73d) @@ -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,11 @@ 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; // Check if a new calibration is available if ( TRUE == isNewCalibrationRecordAvailable() ) @@ -139,20 +139,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 ].measuredFlowBeforeCalLPM.data = oldest2CurrentEdgeDiff * FLOW_SENSORS_LITERS_PER_PULSES * SEC_PER_MIN; + flowSensorStatus[ i ].measuredROFlowWithCPsLPM.data = getCalibrationAppliedFlowLPM( i, flowSensorStatus[ i ].measuredFlowBeforeCalLPM.data ); flowSensorStatus[ i ].measuredFlowLPM.data = 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( flowSensorStatus[ i ].measuredFlowLPM.data, 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; + flowSensorStatus[ i ].measuredFlowLPM.data = getCalibrationAppliedFlowLPM( i, flowSensorStatus[ i ].measuredFlowBeforeCalLPM.data ); + flowSensorStatus[ i ].measuredFlowLPM.data = MAX( flowSensorStatus[ i ].measuredFlowLPM.data, 0.0F ); break; #ifndef _VECTORCAST_ @@ -210,6 +210,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, Index: firmware/App/Controllers/FlowSensors.h =================================================================== diff -u -r0c296cef29037819be204c45a23d4d38a52b2718 -rbaaf3dc55c2dee07d04efb97022fd2329a5bd73d --- firmware/App/Controllers/FlowSensors.h (.../FlowSensors.h) (revision 0c296cef29037819be204c45a23d4d38a52b2718) +++ firmware/App/Controllers/FlowSensors.h (.../FlowSensors.h) (revision baaf3dc55c2dee07d04efb97022fd2329a5bd73d) @@ -30,8 +30,8 @@ */ // ********** public definitions ********** -#define MAX_FLOWRATE_LPM 2.00F ///< Maximum flow rate in L/min. -#define MIN_DIALYSATE_FLOWRATE_LPM 0.05F ///< Minimum target flow rate in L/min. +#define MAX_FLOWRATE_LPM 2.0F ///< Maximum flow rate in L/min. +#define MIN_DIALYSATE_FLOWRATE_LPM 0.0F ///< Minimum target flow rate in L/min. /// Flow meters name typedef enum @@ -51,6 +51,7 @@ F32 getMeasuredFlowRateLPM( FLOW_SENSORS_T sensorId ); F32 getMeasuredROFlowRateWithConcPumpsLPM( void ); +F32 getMeasuredRawFlowRateLPM( FLOW_SENSORS_T sensorId ); BOOL testSetFlowDataPublishIntervalOverride( U32 value ); BOOL testResetFlowDataPublishIntervalOverride( void ); Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r9cc5da6947aa143a10f95519eb7f366c1b095d61 -rbaaf3dc55c2dee07d04efb97022fd2329a5bd73d --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9cc5da6947aa143a10f95519eb7f366c1b095d61) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision baaf3dc55c2dee07d04efb97022fd2329a5bd73d) @@ -345,19 +345,19 @@ if ( DG_PRIMARY_HEATER == heater ) { - alarm = ALARM_ID_RO_FLOW_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON; - measFlow = getMeasuredFlowRateLPM( RO_FLOW_SENSOR ); - minFlow = MIN_RO_HEATER_FLOWRATE_LPM; + alarm = ALARM_ID_RO_FLOW_TOO_LOW_WHILE_PRIMARY_HEATER_IS_ON; + measFlow = getMeasuredFlowRateLPM( RO_FLOW_SENSOR ); + minFlow = MIN_RO_HEATER_FLOWRATE_LPM; + isFlowLow = ( measFlow < minFlow ? TRUE : FALSE ); } else { - alarm = ALARM_ID_DIALYSATE_FLOW_TOO_LOW_WHILE_TRIMMER_HEATER_IS_ON; - measFlow = getMeasuredFlowRateLPM( DIALYSATE_FLOW_SENSOR ); - minFlow = MIN_DIALYSATE_FLOWRATE_LPM; + alarm = ALARM_ID_DIALYSATE_FLOW_TOO_LOW_WHILE_TRIMMER_HEATER_IS_ON; + measFlow = getMeasuredRawFlowRateLPM( DIALYSATE_FLOW_SENSOR ); + minFlow = MIN_DIALYSATE_FLOWRATE_LPM; + isFlowLow = ( measFlow - minFlow < NEARLY_ZERO ? TRUE : FALSE ); } - isFlowLow = ( measFlow < minFlow ? TRUE : FALSE ); - checkPersistentAlarm( alarm, isFlowLow, measFlow, minFlow ); } else Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r256d5cb05f1ef09e19e2f2733a111f600c73a7ee -rbaaf3dc55c2dee07d04efb97022fd2329a5bd73d --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 256d5cb05f1ef09e19e2f2733a111f600c73a7ee) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision baaf3dc55c2dee07d04efb97022fd2329a5bd73d) @@ -17,6 +17,7 @@ #include "ConcentratePumps.h" #include "ConductivitySensors.h" +#include "CPLD.h" #include "DrainPump.h" #include "Heaters.h" #include "ModeFill.h" @@ -30,7 +31,6 @@ #include "TemperatureSensors.h" #include "Timers.h" #include "Valves.h" -#include "CPLD.h" /** * @addtogroup DGDrainMode