Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -r84176d86411c556fda5080aab9dbb5c6269cb03d -red905d00fa0550676fda4d3a8babb268253eb429 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 84176d86411c556fda5080aab9dbb5c6269cb03d) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision ed905d00fa0550676fda4d3a8babb268253eb429) @@ -30,6 +30,7 @@ #include "PressureSensor.h" #include "PersistentAlarm.h" #include "Pressure.h" +#include "TDInterface.h" #include "TaskGeneral.h" #include "TemperatureSensors.h" #include "Timers.h" @@ -105,9 +106,6 @@ #define ACID_TYPE_2K_2_5_CA 11313.62F ///< standard acid conductivity for 2K #define ACID_TYPE_3K_2_5_CA 11435.68F ///< standard acid conductivity for 3K -#define MIN_BICARB_CONDUCTIVITY 2000 ///< Minimum Bicarb conductivity limit -#define MAX_BICARB_CONDUCTIVITY 4000 ///< Maximum Bicarb conductivity limit - #define MIX_NO_FEED_FORWARD 0.0F ///< Feedforward term for dialysate closed loop control #define MIX_CONTROL_INTERVAL_MS ( 15 * MS_PER_SECOND ) ///< Dialysate mixing control interval in ms @@ -122,6 +120,71 @@ #define TARGET_ADJ_BICARB_SETTING 137.0F ///< User defined Bicarb setting #define TARGET_ADJ_NA_SETTINGS 32.0F ///< User defined Na setting + // Proportioning Ratios: 1 Part Acid : 1.72 Parts Bicarb : 42.28 Parts Water +// Total parts = 1 + 1.72 + 42.28 = 45.0 +#define STD_45X_CONC_MIX_ACID_PART 1.0 ///< Acid portion of 45X concentration mix +#define STD_45X_CONC_MIX_BICARB_PART 1.72 ///< Bicarb portion of 45X concentration mix +#define STD_45X_CONC_MIX_WATER_PART 42.28 ///< Water portion of 45X concentration mix +#define TOTAL_STD_45X_MIX_PART ( STD_45X_CONC_MIX_ACID_PART + \ + STD_45X_CONC_MIX_BICARB_PART + \ + STD_45X_CONC_MIX_WATER_PART ) ///< Total 45X mix +#define ACID_PCT_IN_DIALYSTATE ( ( STD_45X_CONC_MIX_ACID_PART /\ + TOTAL_STD_45X_MIX_PART ) ) ///< Acid percent in Dialysate +#define BICARB_PCT_IN_DIALYSATE ( ( STD_45X_CONC_MIX_BICARB_PART /\ + TOTAL_STD_45X_MIX_PART) ) ///< Bicarb Percent in Dialysate +#define WATER_PCT_IN_DIALYSATE ( ( STD_45X_CONC_MIX_WATER_PART /\ + TOTAL_STD_45X_MIX_PART) ) ///< Water percent in Dialysate + +#define RO_WATER_VOLUME_ML ( BAL_CHAMBER_FILL_VOLUME_ML * \ + WATER_PCT_IN_DIALYSATE ) ///< Water volume +#define ACID_MIX_VOLUME_ML ( BAL_CHAMBER_FILL_VOLUME_ML * \ + ACID_PCT_IN_DIALYSTATE ) ///< Acid volume +#define BICARB_MIX_VOLUME_ML ( BAL_CHAMBER_FILL_VOLUME_ML * \ + BICARB_PCT_IN_DIALYSATE ) ///< Bicarb volume +#define STD_DILUTION_ACID_POST_MIX_NA 100.0 ///< Acid post mix Sodium +#define STD_DILUTION_BICARB_POST_MIX_NA 37.0 ///< Bicarb post mix Sodium +#define STD_DILUTION_BICARB_POST_MIX_CHO3 33.0 ///< Post mix bicarbonate + +#define DIALYSATE_TARGET_STD_NA_SETTINGS 137.0 ///< Standard target sodium +#define DIALYSATE_TARGET_STD_BICARB_SETTING 33.0 ///< Standard bicarb +#define DIALYSATE_TARGET_ADJ_NA_SETTING 137.0 ///< User Sodium +#define DIALYSATE_TARGET_ADJ_BICARB_SETTING 30.0 ///< User bicarb + +#define BICARB_PERCENT_CHANGE ( 1 + ( ( DIALYSATE_TARGET_ADJ_BICARB_SETTING - \ + DIALYSATE_TARGET_STD_BICARB_SETTING) / \ + DIALYSATE_TARGET_STD_BICARB_SETTING ) )///< Bicarb percentage change +#define BICARB_PERCENT_CHANGE_NA ( STD_DILUTION_BICARB_POST_MIX_NA *\ + BICARB_PERCENT_CHANGE ) ///< Percent change of sodium +#define BICARB_PERCENT_CHANGE_NAHCO3 ( STD_DILUTION_BICARB_POST_MIX_CHO3 *\ + BICARB_PERCENT_CHANGE ) ///< Percentage change of bicarbonate + +#define ACID_TARGET_CONCENTRATE_NA ( DIALYSATE_TARGET_ADJ_NA_SETTING - \ + BICARB_PERCENT_CHANGE_NA ) ///< Acid +#define ACID_PERCENT_CHANGE ( ( 1 + ( ACID_TARGET_CONCENTRATE_NA - \ + STD_DILUTION_ACID_POST_MIX_NA ) / \ + STD_DILUTION_ACID_POST_MIX_NA ) ) ///< Acid percentage change + +#define FINAL_NA_ADJ_MIX ( ACID_TARGET_CONCENTRATE_NA + \ + BICARB_PERCENT_CHANGE_NA ) +#define FINAL_NAHCO3_ADJ_MIX ( BICARB_PERCENT_CHANGE_NAHCO3 ) + +#define FINAL_ACID_MIX ( ACID_MIX_VOLUME_ML * \ + ACID_PERCENT_CHANGE ) ///< Final Acid Mix +#define FINAL_BICARB_MIX ( BICARB_MIX_VOLUME_ML * \ + BICARB_PERCENT_CHANGE ) ///< Final bicarb mix + +#define BICARB_CONDUCTIVITY_PRE ( STD_DILUTION_BICARB_POST_MIX_NA * \ + BICARB_PERCENT_CHANGE * \ + getTDBicarbConversionFactor() ) ///< Theoretical bicarb conductivity pre mix +#define BICARB_CONDUCTIVITY_POST ( STD_DILUTION_BICARB_POST_MIX_CHO3 * \ + BICARB_PERCENT_CHANGE * \ + getTDBicarbConversionFactor() ) ///< Theoretical bicarb conductivity post mix +#define ACID_CONDUCTIVITY_POST ( STD_DILUTION_ACID_POST_MIX_NA * + ACID_PERCENT_CHANGE * \ + getTDAcidConversionFactor() ) ///< Theoretical Acid conductivity post mix +#define TOTAL_CONDUCTIVITY ( ACID_CONDUCTIVITY_POST +\ + BICARB_CONDUCTIVITY_POST ) ///< Theoretical Dialysate conductivity + /// Payload record structure for dry bicart fill request typedef struct { @@ -330,13 +393,13 @@ dryBiCartType.ovInitData = 0; dryBiCartType.override = OVERRIDE_RESET; - dryBiCartAcidMixVolume.data = DEFAULT_ACID_VOLUME_ML; - dryBiCartAcidMixVolume.ovData = DEFAULT_ACID_VOLUME_ML; + dryBiCartAcidMixVolume.data = FINAL_ACID_MIX; + dryBiCartAcidMixVolume.ovData = FINAL_ACID_MIX; dryBiCartAcidMixVolume.ovInitData = 0.0F; dryBiCartAcidMixVolume.override = OVERRIDE_RESET; - dryBiCartBicarbMixVolume.data = DEFAULT_BICARB_VOLUME_ML; - dryBiCartBicarbMixVolume.ovData = DEFAULT_BICARB_VOLUME_ML; + dryBiCartBicarbMixVolume.data = FINAL_BICARB_MIX; + dryBiCartBicarbMixVolume.ovData = FINAL_BICARB_MIX; dryBiCartBicarbMixVolume.ovInitData = 0.0F; dryBiCartBicarbMixVolume.override = OVERRIDE_RESET; @@ -360,8 +423,8 @@ dryBiCartBicarbMixVolumeKiGain.ovInitData = 0.0F; dryBiCartBicarbMixVolumeKiGain.override = OVERRIDE_RESET; - dryBiCartBicarbTargetConductivity.data = DRY_BICARB_TARGET_CONDUCTIVITY; - dryBiCartBicarbTargetConductivity.ovData = DRY_BICARB_TARGET_CONDUCTIVITY; + dryBiCartBicarbTargetConductivity.data = BICARB_CONDUCTIVITY_PRE; + dryBiCartBicarbTargetConductivity.ovData = BICARB_CONDUCTIVITY_PRE; dryBiCartBicarbTargetConductivity.ovInitData = 0.0F; dryBiCartBicarbTargetConductivity.override = OVERRIDE_RESET; @@ -370,8 +433,8 @@ dryBiCartBicarbDeltaConductivity.ovInitData = 0.0F; dryBiCartBicarbDeltaConductivity.override = OVERRIDE_RESET; - dryBiCartDialysateTargetConductivity.data = DRY_ACID_BICARB_TARGET_CONDUCTIVITY; - dryBiCartDialysateTargetConductivity.ovData = DRY_ACID_BICARB_TARGET_CONDUCTIVITY; + dryBiCartDialysateTargetConductivity.data = TOTAL_CONDUCTIVITY; + dryBiCartDialysateTargetConductivity.ovData = TOTAL_CONDUCTIVITY; dryBiCartDialysateTargetConductivity.ovInitData = 0.0F; dryBiCartDialysateTargetConductivity.override = OVERRIDE_RESET; @@ -395,13 +458,13 @@ dryBiCartStdMixingBCVolume.ovInitData = 0.0F; dryBiCartStdMixingBCVolume.override = OVERRIDE_RESET; - dryBiCartTargetAdjNaSettings.data = TARGET_ADJ_NA_SETTINGS; - dryBiCartTargetAdjNaSettings.ovData = TARGET_ADJ_NA_SETTINGS; + dryBiCartTargetAdjNaSettings.data = getTDSodiumConcentration();//TARGET_ADJ_NA_SETTINGS; + dryBiCartTargetAdjNaSettings.ovData = getTDSodiumConcentration();//TARGET_ADJ_NA_SETTINGS; dryBiCartTargetAdjNaSettings.ovInitData = 0.0F; dryBiCartTargetAdjNaSettings.override = OVERRIDE_RESET; - dryBiCartTargetAdjBicarbSettings.data = TARGET_ADJ_BICARB_SETTING; - dryBiCartTargetAdjBicarbSettings.ovData = TARGET_ADJ_BICARB_SETTING; + dryBiCartTargetAdjBicarbSettings.data = getTDBicarbonateConcentration();//TARGET_ADJ_BICARB_SETTING; + dryBiCartTargetAdjBicarbSettings.ovData = getTDBicarbonateConcentration();//TARGET_ADJ_BICARB_SETTING; dryBiCartTargetAdjBicarbSettings.ovInitData = 0.0F; dryBiCartTargetAdjBicarbSettings.override = OVERRIDE_RESET; @@ -2369,7 +2432,7 @@ /*********************************************************************//** * @brief * The testDryBiCartStdMixingBCVolumeOverride function sets the override value - * of acid mix control interval + * of Balancing chamber Volume override * @details \b Inputs: dryBiCartStdMixingBCVolume * @details \b Outputs: dryBiCartStdMixingBCVolume * @param message Override message from Dialin which includes the override @@ -2386,7 +2449,7 @@ /*********************************************************************//** * @brief * The testDryBiCartTargetAdjNASettingOverride function sets the override value - * of acid mix control interval + * of user sodium * @details \b Inputs: dryBiCartTargetAdjNaSettings * @details \b Outputs: dryBiCartTargetAdjNaSettings * @param message Override message from Dialin which includes the override @@ -2403,7 +2466,7 @@ /*********************************************************************//** * @brief * The testDryBiCartAcidMixControlIntervalOverride function sets the override value - * of acid mix control interval + * of user bicarb * @details \b Inputs: dryBiCartTargetAdjBicarbSettings * @details \b Outputs: dryBiCartTargetAdjBicarbSettings * @param message Override message from Dialin which includes the override