Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -ra631e128cd6be44aa232e23b58a229bfb8fe9043 -r0e6a31089c00ac89f121c538bf0e8576b38b25e7 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision a631e128cd6be44aa232e23b58a229bfb8fe9043) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 0e6a31089c00ac89f121c538bf0e8576b38b25e7) @@ -132,8 +132,9 @@ static U32 dryBiCarbSypplyVentStartTime; ///< Bicarb supply vent start time for both bicart & Chamber F. // drain static U32 dryBiCartDrainStartTime; ///< Drain overall start time (for max timeout) -static U32 dryBiCartDrainLastCondSampleTime; ///< Last time conductivity was sampled -static U32 dryBiCartDrainCondStableCount; ///< Debounce counter for "zero" conductivity +//TODO: implement draining +//static U32 dryBiCartDrainLastCondSampleTime; ///< Last time conductivity was sampled +//static U32 dryBiCartDrainCondStableCount; ///< Debounce counter for "zero" conductivity static U32 dryBiCartDrainTimePeriod; ///< Dry bicart drain time period static U32 dryBiCartPersistenceStartTime; ///< Dry bicart Persistence time. @@ -242,8 +243,8 @@ dryBiCarbSupplyStartTime = 0; dryBiCarbSypplyVentStartTime = 0; dryBiCartDrainStartTime = 0; - dryBiCartDrainLastCondSampleTime = 0; - dryBiCartDrainCondStableCount = 0; + //dryBiCartDrainLastCondSampleTime = 0; + //dryBiCartDrainCondStableCount = 0; dryBiCartDrainTimePeriod = 0; dryBiCartPersistenceStartTime = 0; drybicartPersistenceOnLowercartPressureStartTime = 0; @@ -1325,8 +1326,8 @@ } dryBiCartDrainStartTime = getMSTimerCount(); - dryBiCartDrainLastCondSampleTime = dryBiCartDrainStartTime; - dryBiCartDrainCondStableCount = 0; + //dryBiCartDrainLastCondSampleTime = dryBiCartDrainStartTime; + //dryBiCartDrainCondStableCount = 0; state = DRY_BICART_FLUID_DRAIN_STATE; } Index: firmware/App/Controllers/MixingControl.c =================================================================== diff -u -ra631e128cd6be44aa232e23b58a229bfb8fe9043 -r0e6a31089c00ac89f121c538bf0e8576b38b25e7 --- firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision a631e128cd6be44aa232e23b58a229bfb8fe9043) +++ firmware/App/Controllers/MixingControl.c (.../MixingControl.c) (revision 0e6a31089c00ac89f121c538bf0e8576b38b25e7) @@ -97,8 +97,8 @@ #define STD_DILUTION_BICARB_POST_MIX_NA 37.0F ///< Bicarb post mix Sodium #define STD_DILUTION_BICARB_POST_MIX_CHO3 33.0F ///< Post mix bicarbonate -//#define DIALYSATE_TARGET_STD_NA_SETTINGS 137.0F ///< Standard target sodium -//#define DIALYSATE_TARGET_STD_BICARB_SETTING 33.0F ///< Standard bicarb +#define MS_TO_US(x) (((F32)(x)) * 1000.0f) ///< MilliSiemense to microSiemense convertion factor + #define DIALYSATE_TARGET_USER_ADJ_SODIUM_SETTING getTDSodiumConcentration() ///< User Sodium #define DIALYSATE_TARGET_USER_ADJ_BICARB_SETTING getTDBicarbonateConcentration() ///< User bicarb @@ -160,8 +160,8 @@ // publish static OVERRIDE_U32_T mixingControlDataPublishInterval; ///< Mixing Control data publish interval. static U32 mixingControlDataPublicationTimerCounter; ///< Used to schedule mixingControl data publication to CAN bus. -static F32 lastBicarbMixVolume; ///< Deadband bicarb mix volume -static F32 lastAcidMixVolume; ///< Deadband acid mix volume +static F32 mixingControlLastBicarbMixVolume; ///< Deadband bicarb mix volume +static F32 mixingControlLastAcidMixVolume; ///< Deadband acid mix volume // mixing static OVERRIDE_F32_T mixingControlAcidVolume; ///< Acid concentrate volume in ml ( overrideable). @@ -247,13 +247,13 @@ mixingControlDataPublishInterval.ovInitData = 0; mixingControlDataPublishInterval.override = OVERRIDE_RESET; - mixingControlAcidVolume.data = DEFAULT_ACID_VOLUME_ML; - mixingControlAcidVolume.ovData = DEFAULT_ACID_VOLUME_ML; + mixingControlAcidVolume.data = FINAL_ACID_MIX; + mixingControlAcidVolume.ovData = FINAL_ACID_MIX; mixingControlAcidVolume.ovInitData = 0.0F; mixingControlAcidVolume.override = OVERRIDE_RESET; - mixingControlBicarbVolume.data = DEFAULT_BICARB_VOLUME_ML; - mixingControlBicarbVolume.ovData = DEFAULT_BICARB_VOLUME_ML; + mixingControlBicarbVolume.data = FINAL_BICARB_MIX; + mixingControlBicarbVolume.ovData = FINAL_BICARB_MIX; mixingControlBicarbVolume.ovInitData = 0.0F; mixingControlBicarbVolume.override = OVERRIDE_RESET; @@ -277,8 +277,8 @@ mixingControlBicarbVolumeKiGain.ovInitData = 0.0F; mixingControlBicarbVolumeKiGain.override = OVERRIDE_RESET; - mixingControlBicarbTargetConductivity.data = BICARB_TARGET_CONDUCTIVITY; - mixingControlBicarbTargetConductivity.ovData = BICARB_TARGET_CONDUCTIVITY; + mixingControlBicarbTargetConductivity.data = getBicarbConductivityPre(); + mixingControlBicarbTargetConductivity.ovData = getBicarbConductivityPre(); mixingControlBicarbTargetConductivity.ovInitData = 0.0F; mixingControlBicarbTargetConductivity.override = OVERRIDE_RESET; @@ -287,8 +287,8 @@ mixingControlBicarbDeltaConductivity.ovInitData = 0.0F; mixingControlBicarbDeltaConductivity.override = OVERRIDE_RESET; - mixingControlDialysateTargetConductivity.data = DIALYSATE_TARGET_CONDUCTIVITY; - mixingControlDialysateTargetConductivity.ovData = DIALYSATE_TARGET_CONDUCTIVITY; + mixingControlDialysateTargetConductivity.data = getTotalConductivity(); + mixingControlDialysateTargetConductivity.ovData = getTotalConductivity(); mixingControlDialysateTargetConductivity.ovInitData = 0.0F; mixingControlDialysateTargetConductivity.override = OVERRIDE_RESET; @@ -323,8 +323,8 @@ mixingControlAcidControlInterval.override = OVERRIDE_RESET; mixingControlDataPublicationTimerCounter = 0; - lastBicarbMixVolume = 0; - lastAcidMixVolume = 0; + mixingControlLastBicarbMixVolume = 0; + mixingControlLastAcidMixVolume = 0; initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ @@ -578,7 +578,9 @@ *************************************************************************/ static F32 getTotalConductivity( void ) { - return TOTAL_CONDUCTIVITY; + F32 totalConductivity = TOTAL_CONDUCTIVITY; + // convert millisiemense to micro siemense + return MS_TO_US(totalConductivity); } /*********************************************************************//** @@ -590,7 +592,9 @@ *************************************************************************/ static F32 getAcidConducivityPost( void ) { - return ACID_CONDUCTIVITY_POST; + F32 acidConductivityPost = ACID_CONDUCTIVITY_POST; + // convert millisiemense to micro siemense + return MS_TO_US(acidConductivityPost); } /*********************************************************************//** @@ -602,7 +606,10 @@ *************************************************************************/ static F32 getBicarbConductivityPost( void ) { - return BICARB_CONDUCTIVITY_PRE; + // right now post mix value is same as BICARB_CONDUCTIVITY_PRE + F32 bicarbConductivityPost = BICARB_CONDUCTIVITY_PRE; + // convert millisiemense to micro siemense + return MS_TO_US(bicarbConductivityPost); } /*********************************************************************//** @@ -614,7 +621,9 @@ *************************************************************************/ static F32 getBicarbConductivityPre( void ) { - return BICARB_CONDUCTIVITY_PRE; + F32 bicarbConductivityPre = BICARB_CONDUCTIVITY_PRE; + // convert millisiemense to micro siemense + return MS_TO_US(bicarbConductivityPre); } /*********************************************************************//** @@ -666,7 +675,7 @@ //TODO: right now using the fixed conductivity , later use the calculated version API F32 measuredAcidBicarbMixConductivity = getFilteredConductivity( D27_COND ); F32 DialysateConductivity = getDialysateTargetConductivity(); - F32 DialysateDeltaConductivity = getDialysateTargetConductivity(); + F32 DialysateDeltaConductivity = getDialysateDeltaConductivity(); if ( TRUE != getTestConfigStatus( TEST_CONFIG_DD_ENABLE_DOSING_OPEN_LOOP_CONTROL ) ) { @@ -734,7 +743,7 @@ // Control based on the measured and target conductivity PI_CONTROLLER_SIGNALS_DATA debugBicarbControl; F32 measuredBicarbConductivity = getFilteredConductivity( D17_COND ); - F32 bicarbConductivity = getBicarbTargetConductivity();//getBicarbConductivityPre(); + F32 bicarbConductivity = getBicarbConductivityPre(); //TODO: ALARM if measuredDialysateConductivity or bicarbConductivity is or both 0 if ( fabs ( bicarbConductivity - measuredBicarbConductivity ) > BICARB_DEADBAND_CONTROL ) @@ -747,7 +756,7 @@ else { //use the previous value, this is for debug - lastBicarbMixVolume = getBicarbMixVol(); + mixingControlLastBicarbMixVolume = getBicarbMixVol(); } debugBicarbControl = getDebugPIControllerSignals( PI_CONTROLLER_ID_BICARB_VOL ); @@ -767,7 +776,7 @@ // TODO: use the calculated API F32 measuredDialysateConductivity = getFilteredConductivity( D27_COND ); - F32 DialysateConductivity = getDialysateTargetConductivity();//getTotalConductivity(); + F32 DialysateConductivity = getTotalConductivity(); PI_CONTROLLER_SIGNALS_DATA debugAcidControl; //TODO: ALARM if measuredDialysateConductivity or DialysateConductivity is or both 0 @@ -781,7 +790,7 @@ else { // use the previous value, this is for debug - lastAcidMixVolume = getAcidMixVol(); + mixingControlLastAcidMixVolume = getAcidMixVol(); } debugAcidControl = getDebugPIControllerSignals( PI_CONTROLLER_ID_ACID_VOL ); @@ -853,10 +862,17 @@ data.acidControlInterval = (U32)dialysateMix[ ACID_MIX_ID ].controlTimerCounter; data.currentBicarbMixVolume = getBicarbMixVol(); - data.lastBicarbMixVolume = lastBicarbMixVolume; + data.lastBicarbMixVolume = mixingControlLastBicarbMixVolume; data.currentAcidMixVolume = getAcidMixVol(); - data.lastAcidMixVolume = lastAcidMixVolume; + data.lastAcidMixVolume = mixingControlLastAcidMixVolume; + data.bicarbConductivityPreMix = getBicarbConductivityPre(); + data.bicarbConductivityPostMix = getBicarbConductivityPost(); + data.acidConductivityPostMix = getAcidConducivityPost(); + // acid+bicarb conductivity or Dialysate conductivity + data.totalConductivity = getTotalConductivity(); + + //TODO :broadcast theretical pre and post conductivity // TODO: remove after feature testing Index: firmware/App/Controllers/MixingControl.h =================================================================== diff -u -r145fd716a856f864f39fb0f9884865f6e45b9256 -r0e6a31089c00ac89f121c538bf0e8576b38b25e7 --- firmware/App/Controllers/MixingControl.h (.../MixingControl.h) (revision 145fd716a856f864f39fb0f9884865f6e45b9256) +++ firmware/App/Controllers/MixingControl.h (.../MixingControl.h) (revision 0e6a31089c00ac89f121c538bf0e8576b38b25e7) @@ -48,6 +48,10 @@ F32 lastBicarbMixVolume; ///< Mixing control last bicarb mix volume F32 currentAcidMixVolume; ///< Mixing control current acid mix volume F32 lastAcidMixVolume; ///< Mixing control last acid mix volume + F32 bicarbConductivityPreMix; ///< Bicarb conductivity pre mix + F32 bicarbConductivityPostMix; ///< Bicarb conductivity post mix + F32 acidConductivityPostMix; ///< Acid conductivity post mix + F32 totalConductivity; ///< Total Conductivity(Acid+Bicab)or Dialysate conductivity // TODO: remove after closed loops stabilized PI_CONTROLLER_SIGNALS_DATA bicarbData; ///< Mixing control bicarb mixing closed loop control signals data PI_CONTROLLER_SIGNALS_DATA acidData; ///< Mixing control acid mixing closed loop control signals data Index: firmware/App/Services/TDInterface.c =================================================================== diff -u -r145fd716a856f864f39fb0f9884865f6e45b9256 -r0e6a31089c00ac89f121c538bf0e8576b38b25e7 --- firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision 145fd716a856f864f39fb0f9884865f6e45b9256) +++ firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision 0e6a31089c00ac89f121c538bf0e8576b38b25e7) @@ -62,14 +62,14 @@ #define TD_BICARBONATE_MIN ( 20U ) ///< TD Min acid type index #define TD_BICARBONATE_MAX ( 40U ) ///< TD Max acid type index -#define BICARBONATE_CONVERSION_FACTOR 0.07337F ///< Bicarbonate conversion factor mS/cm per mmol/L +#define BICARBONATE_CONVERSION_FACTOR 0.073371212F ///< Bicarbonate conversion factor mS/cm per mmol/L #define MAX_ACID_CONC_TYPES 10 ///< Number of acid concentrate conversion factors // TODO move to institutional records once implemented /// Acid concentration conversion factors for each acid type -const F32 ACID_CONVERSION_FACTOR[ MAX_ACID_CONC_TYPES ] = { 0.11192F, - 0.11313F, - 0.11435F, +const F32 ACID_CONVERSION_FACTOR[ MAX_ACID_CONC_TYPES ] = { 0.1119255F, + 0.1131362F, + 0.1143568F, 0.0F, 0.0F, 0.0F, @@ -142,12 +142,12 @@ tdDialysateTemp.ovInitData = TD_DIALYSATE_TEMP_MIN_DEGC; tdDialysateTemp.override = OVERRIDE_RESET; - tdAcidConvFactor.data = 0.0F; + tdAcidConvFactor.data = ACID_CONVERSION_FACTOR[ TD_ACID_TYPE_MIN ]; tdAcidConvFactor.ovData = 0.0F; tdAcidConvFactor.ovInitData = ACID_CONVERSION_FACTOR[ TD_ACID_TYPE_MIN ]; tdAcidConvFactor.override = OVERRIDE_RESET; - tdBicarbConvFactor.data = 0.0F; + tdBicarbConvFactor.data = BICARBONATE_CONVERSION_FACTOR; tdBicarbConvFactor.ovData = 0.0F; tdBicarbConvFactor.ovInitData = BICARBONATE_CONVERSION_FACTOR; tdBicarbConvFactor.override = OVERRIDE_RESET; Index: firmware/App/Services/TDInterface.h =================================================================== diff -u -rabe1c4a42afb385a660381e48bd007331f60950c -r0e6a31089c00ac89f121c538bf0e8576b38b25e7 --- firmware/App/Services/TDInterface.h (.../TDInterface.h) (revision abe1c4a42afb385a660381e48bd007331f60950c) +++ firmware/App/Services/TDInterface.h (.../TDInterface.h) (revision 0e6a31089c00ac89f121c538bf0e8576b38b25e7) @@ -53,7 +53,7 @@ F32 getTDTargetDialysateTemperature( void ); BOOL getTDDialyzerBypass( void ); F32 getTDAcidConversionFactor( void ); -F32 etTDBicarbConversionFactor( void ); +F32 getTDBicarbConversionFactor( void ); U32 getTDSodiumConcentration( void ); U32 getTDBicarbonateConcentration( void );