Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r7d4711edd7b40cd3e29f43e766f79a8a09586fe9 -r18a83ba64d9560ce8c4c009560ec1391ae15102f --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 7d4711edd7b40cd3e29f43e766f79a8a09586fe9) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 18a83ba64d9560ce8c4c009560ec1391ae15102f) @@ -66,15 +66,8 @@ #define ACID_PERCENT_FILL 0.02222F ///< Acid volume percentage of reservoir volume. #define DATA_PUBLISH_COUNTER_START_COUNT 70 ///< Data publish counter start count. #define DRAIN_MODE_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the drain mode data is published on the CAN bus. +#define MIN_CONCENTRATE_VOLUME_ML 500.0F ///< Minimum concentrate volume in milliliters. -///< Concentrate bottle acid low volume in mL. -static const F32 CONCENTRATE_BOTTLE_ACID_LOW_VOLUME_ML = ( CONCENTRATE_BOTTLE_PRIMING_VOL_ML + - ( CONCENTRATE_BOTTLE_RESERVOIOR_VOL_ML * CONCENTRATE_BOTTLE_RESERVOIOR_FILLS * ACID_PERCENT_FILL) ); - -///< Concentrate bottle bicarb low volume in mL. -static const F32 CONCENTRATE_BOTTLE_BICARB_LOW_VOLUME_ML = ( CONCENTRATE_BOTTLE_PRIMING_VOL_ML + - ( CONCENTRATE_BOTTLE_RESERVOIOR_VOL_ML * CONCENTRATE_BOTTLE_RESERVOIOR_FILLS * BICARB_PERCENT_FILL) ); - // ********** private data ********** static DG_DRAIN_STATE_T drainState; ///< Currently active drain state. @@ -313,7 +306,7 @@ getHDOperationMode( &hdMode ); // Detect empty bottles using integrated volumes - if ( ( ( acidBottleVolML - getChemicalUsedVolumeML( ACID ) ) <= CONCENTRATE_BOTTLE_ACID_LOW_VOLUME_ML ) && // SRSDG 836 + if ( ( ( acidBottleVolML - getChemicalUsedVolumeML( ACID ) ) <= MIN_CONCENTRATE_VOLUME_ML ) && // SRSDG 836 ( hdMode.hdMode != MODE_POST ) && // don't care about concentrates after treatment complete ( getTestConfigStatus( TEST_CONFIG_MIX_WITH_WATER ) != TRUE ) ) { @@ -323,7 +316,7 @@ activateAlarmNoData ( ALARM_ID_DG_CREATING_DIALYSATE_PLEASE_WAIT ); } - if ( ( ( bicarbBottleVolML - getChemicalUsedVolumeML( BICARB ) ) <= CONCENTRATE_BOTTLE_BICARB_LOW_VOLUME_ML ) && // SRSDG 837 + if ( ( ( bicarbBottleVolML - getChemicalUsedVolumeML( BICARB ) ) <= MIN_CONCENTRATE_VOLUME_ML ) && // SRSDG 837 ( hdMode.hdMode != MODE_POST ) && // don't care about concentrates after treatment complete ( getTestConfigStatus( TEST_CONFIG_MIX_WITH_WATER ) != TRUE ) ) { Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -ra7236428780daa67552e2b1e0b4b05a4f1ffbe82 -r18a83ba64d9560ce8c4c009560ec1391ae15102f --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision a7236428780daa67552e2b1e0b4b05a4f1ffbe82) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 18a83ba64d9560ce8c4c009560ec1391ae15102f) @@ -194,6 +194,7 @@ static void handleDialysateMixing( F32 measuredROFlowRate_mL_min, F32 acidMixingRatio, F32 bicarbMixingRatio ); static BOOL isValueWithinPercentRange( F32 testValue, F32 baseValue, F32 percentFactor ); static void publishFillModeData( void ); +static void updateChemicalsUsage( void ); /*********************************************************************//** * @brief @@ -352,6 +353,7 @@ { checkDialysateTemperatureSensors(); setHeaterTargetTemperature( DG_PRIMARY_HEATER, getPrimaryHeaterTargetTemperature() ); + updateChemicalsUsage(); if ( fillState != DG_FILL_MODE_STATE_PAUSED ) { @@ -623,8 +625,6 @@ // to dialysate production directly if ( TRUE == isThisTheFirstFill() ) { - resetChemicalUsedVolumeML( BICARB ); - resetChemicalUsedVolumeML( ACID ); result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; } else @@ -922,8 +922,6 @@ integratedVolumeML.data += getMeasuredROFlowRateWithConcPumpsLPM() * ML_PER_LITER * FLOW_INTEGRATOR; } - usedAcidVolumeML.data += getMeasuredPumpSpeedMLPM( CONCENTRATEPUMPS_CP1_ACID ) * FLOW_INTEGRATOR; - usedBicarbVolumeML.data += getMeasuredPumpSpeedMLPM( CONCENTRATEPUMPS_CP2_BICARB ) * FLOW_INTEGRATOR; acidConductivityTotal += acidConduSPerCM; bicarbConductivityTotal += bicarbConduSPerCM; conductivitySampleCount++; @@ -1319,7 +1317,20 @@ } } +/*********************************************************************//** + * @brief + * The updateChemicalsUsage function updates the used acid and bicarb volumes. + * @details Inputs: usedAcidVolumeML, usedBicarbVolumeML + * @details Outputs: none + * @return none + *************************************************************************/ +static void updateChemicalsUsage( void ) +{ + usedAcidVolumeML.data += getMeasuredPumpSpeedMLPM( CONCENTRATEPUMPS_CP1_ACID ) * FLOW_INTEGRATOR; + usedBicarbVolumeML.data += getMeasuredPumpSpeedMLPM( CONCENTRATEPUMPS_CP2_BICARB ) * FLOW_INTEGRATOR; +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -re6c60e07b450ec8d58e87bf13d45f96efab54d8b -r18a83ba64d9560ce8c4c009560ec1391ae15102f --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision e6c60e07b450ec8d58e87bf13d45f96efab54d8b) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 18a83ba64d9560ce8c4c009560ec1391ae15102f) @@ -23,6 +23,7 @@ #include "MessageSupport.h" #include "ModeChemicalDisinfect.h" #include "ModeFault.h" +#include "ModeFill.h" #include "ModeHeatDisinfect.h" #include "ModeStandby.h" #include "NVDataMgmt.h" @@ -263,6 +264,9 @@ { pendingStartDGRequest = FALSE; signalSyncToHD(); + // About to start a treatment reset the chemical bottles volumes (regardless whether the user has inserted new bottles) + resetChemicalUsedVolumeML( BICARB ); + resetChemicalUsedVolumeML( ACID ); requestNewOperationMode( DG_MODE_GENE ); } else if ( TRUE == pendingStartDGFlushRequest )