Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r8d0fc6d479a5191202d54f739d333f1001976ab7 -re0f0e562f964f53ac9b9bd62ff2092c0b12e202b --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 8d0fc6d479a5191202d54f739d333f1001976ab7) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision e0f0e562f964f53ac9b9bd62ff2092c0b12e202b) @@ -8,7 +8,7 @@ * @file ModeFill.c * * @author (last) Dara Navaei -* @date (last) 29-Feb-2024 +* @date (last) 28-Oct-2024 * * @author (original) Leonardo Baloa * @date (original) 19-Nov-2019 @@ -61,9 +61,9 @@ #define FILL_MODE_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the fill mode data is published on the CAN bus. #define DIALYSATE_FILL_TIME_OUT ( 5 * SEC_PER_MIN * MS_PER_SECOND ) ///< Time out period when reservoir is not filled with correct dialysate. -#define CONC_PUMPS_PRIME_AT_MAX_SPEED_TIME_OUT_MS ( 7 * MS_PER_SECOND ) ///< Concentrate pumps prime at maximum speed timeout in milliseconds. -#define CONC_PUMPS_PRIME_CHECK_COND_SNSRS_TIME_OUT_MS ( 10 * MS_PER_SECOND ) ///< Concentrate pumps prime check conductivity sensors timeout in milliseconds. -#define CONC_PUMPS_PRIME_MAX_ALLOWED_PRIME_TIME_OUT_MS ( 60 * MS_PER_SECOND ) ///< Concentrate pumps prime maximum allowed timeout in prime in milliseconds. +#define CONC_PUMPS_PRIME_AT_MAX_SPEED_TIME_OUT_MS ( 10 * MS_PER_SECOND ) ///< Concentrate pumps prime at maximum speed timeout in milliseconds. +#define CONC_PUMPS_PRIME_CHECK_COND_SNSRS_TIME_OUT_MS ( 13 * MS_PER_SECOND ) ///< Concentrate pumps prime check conductivity sensors timeout in milliseconds. +#define CONC_PUMPS_PRIME_MAX_ALLOWED_PRIME_TIME_OUT_MS ( 45 * MS_PER_SECOND ) ///< Concentrate pumps prime maximum allowed timeout in prime in milliseconds. #define HUNDRED_PERCENT_FACTOR 1.00F ///< Hundred percent of expected conductivity when first time reaches it. #define FLOW_INTEGRATED_VOLUME_CHECK_TOLERANCE 0.1F ///< Flow integrated volume has 10% tolerance compare to load cell reading. @@ -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 ) { @@ -617,41 +619,42 @@ { DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_TEST_INLET_WATER; - // If this is the first fill of a treatment, prime acid and bicarb lines, otherwise transition - // to dialysate production directly - if ( TRUE == isThisTheFirstFill() ) + if ( ( isConcPumpParkInProgress( CONCENTRATEPUMPS_CP1_ACID ) != TRUE ) && ( isConcPumpParkInProgress( CONCENTRATEPUMPS_CP2_BICARB ) ) != TRUE ) { - resetChemicalUsedVolumeML( BICARB ); - resetChemicalUsedVolumeML( ACID ); - result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; - } - else - { - result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; - } + // If this is the first fill of a treatment, prime acid and bicarb lines, otherwise transition + // to dialysate production directly + if ( TRUE == isThisTheFirstFill() ) + { + result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; + } + else + { + result = DG_FILL_MODE_STATE_PRODUCE_DIALYSATE; + } - if ( TRUE == isTestingActivated() ) - { - switch ( dialinFillForCalCheck ) + if ( TRUE == isTestingActivated() ) { - case DIALIN_FILL_FOR_CAL_PRIME: - result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; - break; + switch ( dialinFillForCalCheck ) + { + case DIALIN_FILL_FOR_CAL_PRIME: + result = DG_FILL_MODE_STATE_PRIME_CONCENTRATE_LINES; + break; - case DIALIN_FILL_FOR_CAL_BICARB_CHECK: - result = DG_FILL_MODE_STATE_TEST_BICARB_CONDUCTIVITY; - break; + case DIALIN_FILL_FOR_CAL_BICARB_CHECK: + result = DG_FILL_MODE_STATE_TEST_BICARB_CONDUCTIVITY; + break; - case DIALIN_FILL_FOR_CAL_ACID_CHECK: - result = DG_FILL_MODE_STATE_TEST_ACID_CONDUCTIVITY; - break; + case DIALIN_FILL_FOR_CAL_ACID_CHECK: + result = DG_FILL_MODE_STATE_TEST_ACID_CONDUCTIVITY; + break; - default: - // Do nothing. This means there is not a request for the fill calibration check so proceed with the normal operations. - break; + default: + // Do nothing. This means there is not a request for the fill calibration check so proceed with the normal operations. + break; + } } + setModeFillStateTransition( result ); } - setModeFillStateTransition( result ); return result; } @@ -919,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++; @@ -1316,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 *************************************************************************/