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