Index: firmware/App/Controllers/ConcentratePumps.h =================================================================== diff -u -rdf87716215d606300dd2617a6854b7071c0ce545 -r15c7997efce023a44ee415b39b90530f3552bf31 --- firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision df87716215d606300dd2617a6854b7071c0ce545) +++ firmware/App/Controllers/ConcentratePumps.h (.../ConcentratePumps.h) (revision 15c7997efce023a44ee415b39b90530f3552bf31) @@ -35,8 +35,8 @@ #define DOSING_CONCENTRATE_PUMP_SPEED 100.0F ///< Diener pump speed for acid and bicarb dosing pump speed in mL/min #define DRAIN_BICART_PUMP_SPEED 200.0F ///< Diener pump speed for cartridge drains at maximum speed in mL/min -#define DEFAULT_ACID_VOLUME_ML 0.67F ///< Acid concentrate volume in ml. -#define DEFAULT_BICARB_VOLUME_ML 1.15F ///< Bicarb concentrate volume in ml. +#define DEFAULT_ACID_VOLUME_ML 0.666666667F ///< Acid concentrate volume in ml. +#define DEFAULT_BICARB_VOLUME_ML 1.146666667F ///< Bicarb concentrate volume in ml. #define DOSING_CONT_VOLUME 0xFFFFFFFF ///< Volume set to 0xFFFFFFFF enables continuous delivery based on the speed set. Index: firmware/App/Controllers/DryBiCart.c =================================================================== diff -u -rff89a75d211aadc40b919b23a791d6196bd667b4 -r15c7997efce023a44ee415b39b90530f3552bf31 --- firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision ff89a75d211aadc40b919b23a791d6196bd667b4) +++ firmware/App/Controllers/DryBiCart.c (.../DryBiCart.c) (revision 15c7997efce023a44ee415b39b90530f3552bf31) @@ -48,11 +48,11 @@ #define DRY_BICART_FILL_DURATION_MIN_MS ( 2 * MS_PER_SECOND ) ///< Minimum fill duration to be met to end the fill cycle. #define DRY_BICART_FILL_COMPLETE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Wait time to reset the request flag after fill complete #define DRY_BICART_FILL_DURATION_DIFF_MS 750 ///< Fill duration difference between last and current fill cycle. -#define PRESSURE_OFFSET 2 -#define DRY_BICART_FILL_COMPLETE_PRESSURE (10.0F + PRESSURE_OFFSET) ///< Maximum pressure reached to indicate the dry bicart fill being completed. +#define PRESSURE_OFFSET 2 ///< Dry bicart pressure offset +#define DRY_BICART_FILL_COMPLETE_PRESSURE ( 10.0F + PRESSURE_OFFSET ) ///< Maximum pressure reached to indicate the dry bicart fill being completed. #define DRY_BICART_FILL_INITIATE_PRESSURE 3.0F ///< Minimum pressure required to initiate the dry bicart fill process. -#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE 6.0F ///< Maximum pressure reached to indicate the dry bicart fill being completed. -#define DRY_BICART_FILL_INITIATE_SUPPLY_PRESSURE 3.0F ///< Minimum pressure required to initiate the dry bicart fill process. +#define DRY_BICART_FILL_COMPLETE_SUPPLY_PRESSURE 6.0F ///< Maximum pressure allowed at bicart fill during supply process/state +#define DRY_BICART_FILL_INITIATE_SUPPLY_PRESSURE 3.0F ///< Minimum pressure required to initiate the dry bicart fill during supply process/state #define DRY_BICART_DEFAULT_MAX_FILL_CYCLE_CNT 10 ///< Default max fill cycle allowed for dry bicart fill/mix with water. #define DRY_BICART_MAX_FILL_CYCLE_CNT 30 ///< Max fill cycle allowed (by override) for dry bicart fill/mix with water. @@ -76,25 +76,16 @@ #define DRY_BICART_DRAIN_COND_STABLE_SAMPLES 10U ///< Debounce samples (10*50ms=500ms) // drybicarb mixing -#define DEFAULT_ACID_VOLUME_ML 0.67F ///< Acid concentrate volume in ml. -#define DEFAULT_BICARB_VOLUME_ML 1.15F ///< Bicarb concentrate volume in ml. +#define BICARB_VOL_CONTROL_P_COEFFICIENT 0.00008484 ///< Bicarb proportional gain (kp) +#define BICARB_VOL_CONTROL_I_COEFFICIENT 0.00033936 ///< Bicarb integral gain. (ki) +#define MIN_BICARB_VOLUME_ML 0.868686869 ///< Minimum bicarb volume in mL +#define MAX_BICARB_VOLUME_ML 1.8 ///< Maximum bicarb volume in mL -#define KP_SCALE_FACTOR 1 -#define KI_SCALE_FACTOR 1 +#define ACID_VOL_CONTROL_P_COEFFICIENT (0.00000997/2) ///< Acid proportional gain (kp) +#define ACID_VOL_CONTROL_I_COEFFICIENT (0.00003988/2) ///< Acid integral gain. (ki) +#define MIN_ACID_VOLUME_ML 0.3 ///< Minimum acid volume in mL +#define MAX_ACID_VOLUME_ML 1.0 ///< Maximum acid volume in mL/min. -#define BICARB_VOL_CONTROL_P_COEFFICIENT 0.00008484 ///< Proportional gain (kp) -#define BICARB_VOL_CONTROL_I_COEFFICIENT 0.00033936 ///< Integral gain. (ki) -#define MIN_BICARB_VOLUME_ML 0.868686869 ///< Minimum target bicarb in mL/min. -#define MAX_BICARB_VOLUME_ML 1.8 ///< Maximum target bicarb volume in mL/min. - -#define ACID_VOL_CONTROL_P_COEFFICIENT (0.00000997/2) ///< Proportional gain (kp) -#define ACID_VOL_CONTROL_I_COEFFICIENT (0.00003988/2) ///< Integral gain. (ki) -#define MIN_ACID_VOLUME_ML 0.3 ///< Minimum target acid volume in mL/min. -#define MAX_ACID_VOLUME_ML 1.0 ///< Maximum target acid volume in mL/min. - -#define STD_BICARB_DOSING 1.146666667F ///< Standard bicarb dosing volume -#define STD_ACID_DOSING 0.666666667F ///< Standard acid dosing volume - #define DRY_BICARB_TARGET_CONDUCTIVITY 2714.0F ///< Target bicarb conductivity #define DRY_BICARB_DELTA_CONDUCTIVITY 500.0F ///< Delta bicarb conductivity @@ -392,17 +383,17 @@ dryBiCartDrainCondStableCount = 0; dryBiCartDrainTimePeriod = 0; - initializePIController(PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ + initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ MIN_BICARB_VOLUME_ML, MAX_BICARB_VOLUME_ML, FALSE, MIX_NO_FEED_FORWARD ); - resetPIController(PI_CONTROLLER_ID_BICARB_VOL, STD_BICARB_DOSING, MIX_NO_FEED_FORWARD); + resetPIController( PI_CONTROLLER_ID_BICARB_VOL, DEFAULT_BICARB_VOLUME_ML, MIX_NO_FEED_FORWARD); - initializePIController(PI_CONTROLLER_ID_ACID_VOL, 0.0F, \ + initializePIController( PI_CONTROLLER_ID_ACID_VOL, 0.0F, \ getAcidKpGainCoefficient(), getAcidKiGainCoefficient(),\ MIN_ACID_VOLUME_ML, MAX_ACID_VOLUME_ML, FALSE, MIX_NO_FEED_FORWARD ); - resetPIController(PI_CONTROLLER_ID_ACID_VOL, STD_ACID_DOSING, MIX_NO_FEED_FORWARD); + resetPIController( PI_CONTROLLER_ID_ACID_VOL, DEFAULT_ACID_VOLUME_ML, MIX_NO_FEED_FORWARD); } /*********************************************************************//** @@ -465,6 +456,13 @@ *************************************************************************/ void execDryBicart( void ) { + //( TRUE == getBicarbChamberFillRequested() ) + //supply dryBicartStartRequest = DRY_BICART_SUPPLY ; + //( TRUE == getBicartFillRequested() ) + //fill dryBicartStartRequest = DRY_BICART_INITIAL_FILL; + //( TRUE == getBicartDrainRequested() ) + //drain dryBicartStartRequest = DRY_BICART_DRAIN; + //else idle dryBicartStartRequest = DRY_BICART_IDLE; updateDrybicartOperation(); if( getCurrentBalancingChamberExecState() > BAL_CHAMBER_STATE_IDLE ) @@ -665,13 +663,8 @@ *************************************************************************/ F32 getBicarbMixVol( void ) { - F32 result = dryBiCartBicarbMixVolume.data; + F32 result = getF32OverrideValue( &dryBiCartBicarbMixVolume ); - if ( OVERRIDE_KEY == dryBiCartBicarbMixVolume.override ) - { - result = dryBiCartBicarbMixVolume.ovData; - } - return result; } @@ -684,13 +677,8 @@ *************************************************************************/ F32 getAcidMixVol( void ) { - F32 result = dryBiCartAcidMixVolume.data; + F32 result = getF32OverrideValue( &dryBiCartAcidMixVolume ); - if ( OVERRIDE_KEY == dryBiCartAcidMixVolume.override ) - { - result = dryBiCartAcidMixVolume.ovData; - } - return result; } @@ -872,13 +860,8 @@ *************************************************************************/ static F32 getBicarbDeltaConductivity( void ) { - F32 result = dryBiCartBicarbDeltaConductivity.data; + F32 result = getF32OverrideValue( &dryBiCartBicarbDeltaConductivity ); - if ( OVERRIDE_KEY == dryBiCartBicarbDeltaConductivity.override ) - { - result = dryBiCartBicarbDeltaConductivity.ovData; - } - return result; } @@ -891,13 +874,8 @@ *************************************************************************/ static F32 getBicarbTargetConductivity( void ) { - F32 result = dryBiCartBicarbTargetConductivity.data; + F32 result = getF32OverrideValue( &dryBiCartBicarbTargetConductivity ); - if ( OVERRIDE_KEY == dryBiCartBicarbTargetConductivity.override ) - { - result = dryBiCartBicarbTargetConductivity.ovData; - } - return result; } @@ -910,13 +888,8 @@ *************************************************************************/ static F32 getAcidBicarbDeltaConductivity( void ) { - F32 result = dryBiCartDialysateDeltaConductivity.data; + F32 result = getF32OverrideValue( &dryBiCartDialysateDeltaConductivity ); - if ( OVERRIDE_KEY == dryBiCartDialysateDeltaConductivity.override ) - { - result = dryBiCartDialysateDeltaConductivity.ovData; - } - return result; } @@ -929,13 +902,8 @@ *************************************************************************/ static F32 getAcidBicarbTargetConductivity( void ) { - F32 result = dryBiCartDialysateTargetConductivity.data; + F32 result = getF32OverrideValue( &dryBiCartDialysateTargetConductivity ); - if ( OVERRIDE_KEY == dryBiCartDialysateTargetConductivity.override ) - { - result = dryBiCartDialysateTargetConductivity.ovData; - } - return result; } @@ -949,13 +917,8 @@ *************************************************************************/ static F32 getBicarbKpGainCoefficient( void ) { - F32 result = dryBiCartBicarbMixVolumeKpGain.data; + F32 result = getF32OverrideValue( &dryBiCartBicarbMixVolumeKpGain ); - if ( OVERRIDE_KEY == dryBiCartBicarbMixVolumeKpGain.override ) - { - result = dryBiCartBicarbMixVolumeKpGain.ovData; - } - return result; } @@ -969,13 +932,8 @@ *************************************************************************/ static F32 getBicarbKiGainCoefficient( void ) { - F32 result = dryBiCartBicarbMixVolumeKiGain.data; + F32 result = getF32OverrideValue( &dryBiCartBicarbMixVolumeKiGain ); - if ( OVERRIDE_KEY == dryBiCartBicarbMixVolumeKiGain.override ) - { - result = dryBiCartBicarbMixVolumeKiGain.ovData; - } - return result; } @@ -989,13 +947,8 @@ *************************************************************************/ static F32 getAcidKpGainCoefficient( void ) { - F32 result = dryBiCartAcidMixVolumeKpGain.data; + F32 result = getF32OverrideValue( &dryBiCartAcidMixVolumeKpGain ); - if ( OVERRIDE_KEY == dryBiCartAcidMixVolumeKpGain.override ) - { - result = dryBiCartAcidMixVolumeKpGain.ovData; - } - return result; } @@ -1009,13 +962,8 @@ *************************************************************************/ static F32 getAcidKiGainCoefficient( void ) { - F32 result = dryBiCartAcidMixVolumeKiGain.data; + F32 result = getF32OverrideValue( &dryBiCartAcidMixVolumeKiGain ); - if ( OVERRIDE_KEY == dryBiCartAcidMixVolumeKiGain.override ) - { - result = dryBiCartAcidMixVolumeKiGain.ovData; - } - return result; } @@ -1116,13 +1064,13 @@ { if ( BICARB_MIX_ID == mixId ) { - resetPIController( PI_CONTROLLER_ID_BICARB_VOL, STD_BICARB_DOSING, MIX_NO_FEED_FORWARD ); + resetPIController( PI_CONTROLLER_ID_BICARB_VOL, DEFAULT_BICARB_VOLUME_ML, MIX_NO_FEED_FORWARD ); state = DIALYSATE_MIXING_CONTROL_TO_TARGET_STATE; } else if ( ACID_MIX_ID == mixId ) { - resetPIController( PI_CONTROLLER_ID_ACID_VOL, STD_ACID_DOSING, MIX_NO_FEED_FORWARD ); + resetPIController( PI_CONTROLLER_ID_ACID_VOL, DEFAULT_ACID_VOLUME_ML, MIX_NO_FEED_FORWARD ); state = DIALYSATE_MIXING_CONTROL_TO_TARGET_STATE; } @@ -1155,13 +1103,13 @@ F32 measuredBicarbConductivity; measuredBicarbConductivity = getFilteredConductivity( D17_COND ); - F32 bicarbMixVol = runPIController(PI_CONTROLLER_ID_BICARB_VOL, getBicarbTargetConductivity(), measuredBicarbConductivity); + F32 bicarbMixVol = runPIController( PI_CONTROLLER_ID_BICARB_VOL, getBicarbTargetConductivity(), measuredBicarbConductivity ); //Set bicarb dosing vol setBicarbMixVol( bicarbMixVol ); debugBicarbControl = getDebugPIControllerSignals( PI_CONTROLLER_ID_BICARB_VOL ); - memcpy((void*)&bicarbControlSignals, (void*)&debugBicarbControl, sizeof(PI_CONTROLLER_SIGNALS_DATA)); + memcpy( (void*)&bicarbControlSignals, (void*)&debugBicarbControl, sizeof(PI_CONTROLLER_SIGNALS_DATA) ); } // ACID Mix else if ( ACID_MIX_ID == mixId ) @@ -1171,13 +1119,13 @@ measuredAcidBicarbMixConductivity = getFilteredConductivity( D27_COND ); - F32 acidMixVol = runPIController(PI_CONTROLLER_ID_ACID_VOL, getAcidBicarbTargetConductivity(), measuredAcidBicarbMixConductivity); + F32 acidMixVol = runPIController( PI_CONTROLLER_ID_ACID_VOL, getAcidBicarbTargetConductivity(), measuredAcidBicarbMixConductivity ); //Set acid dosing vol setAcidMixVol( acidMixVol ); debugAcidControl = getDebugPIControllerSignals( PI_CONTROLLER_ID_ACID_VOL ); - memcpy((void*)&acidControlSignals, (void*)&debugAcidControl, sizeof(PI_CONTROLLER_SIGNALS_DATA)); + memcpy( (void*)&acidControlSignals, (void*)&debugAcidControl, sizeof(PI_CONTROLLER_SIGNALS_DATA) ); } } @@ -1233,8 +1181,8 @@ //if(FP_MODE_GENP == getCurrentFPOperationMode()) { // TODO: pre gen should start the D12 pump and D14 valve - setValveState( D14_VALV, VALVE_STATE_OPEN ); - setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, TRUE ); + //setValveState( D14_VALV, VALVE_STATE_OPEN ); + setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM_B1_9_B2_0, TRUE ); state = DRY_BICART_FILL_WATER_START_STATE; } @@ -1573,11 +1521,11 @@ state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; } // Open water inlet valve to fill the bicart - /*else if ( d66Pressure <= getDryBicartLowerCartPressure() ) + else if ( d66Pressure <= getDryBicartLowerCartPressure() ) { setValveState( D65_VALV, VALVE_STATE_OPEN ); state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; - }*/ + } else { state = BICARB_CHAMBER_PRESSURE_CHECK_STATE; @@ -1932,16 +1880,16 @@ // TODO: remove after feature testing memcpy( &data.dryBiCartAcidDosingControl , &acidControlSignals , sizeof( PI_CONTROLLER_SIGNALS_DATA ) ); - data.dryBiCartAcidMixVolume = getAcidMixVol(); - data.dryBiCartBicarbMixVolume = getBicarbMixVol(); + data.dryBiCartAcidMixVolume = getAcidMixVol(); + data.dryBiCartBicarbMixVolume = getBicarbMixVol(); // TODO: remove after feature testing data.dryBiCartBicarbDosingKPgain = getBicarbKpGainCoefficient(); // TODO: remove after feature testing data.dryBiCartBicarbDosingKIgain = getBicarbKiGainCoefficient(); - data.dryBiCartAcidDosingKPgain = getAcidKpGainCoefficient(); - data.dryBiCartAcidDosingKIgain = getAcidKiGainCoefficient(); + data.dryBiCartAcidDosingKPgain = getAcidKpGainCoefficient(); + data.dryBiCartAcidDosingKIgain = getAcidKiGainCoefficient(); broadcastData( MSG_ID_DD_DRY_BICART_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( DRY_BICART_DATA_T ) ); @@ -2103,11 +2051,11 @@ { BOOL result = f32Override( message, &dryBiCartBicarbMixVolumeKpGain ); - initializePIController(PI_CONTROLLER_ID_BICARB_VOL, MIN_BICARB_VOLUME_ML,\ + initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ MIN_BICARB_VOLUME_ML, MAX_BICARB_VOLUME_ML, FALSE, MIX_NO_FEED_FORWARD ); - resetPIController(PI_CONTROLLER_ID_BICARB_VOL, STD_BICARB_DOSING, MIX_NO_FEED_FORWARD); + resetPIController( PI_CONTROLLER_ID_BICARB_VOL, DEFAULT_BICARB_VOLUME_ML, MIX_NO_FEED_FORWARD ); return result; } @@ -2126,10 +2074,10 @@ { BOOL result = f32Override( message, &dryBiCartBicarbMixVolumeKiGain ); - initializePIController(PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ + initializePIController( PI_CONTROLLER_ID_BICARB_VOL, 0.0F,\ getBicarbKpGainCoefficient(), getBicarbKiGainCoefficient(),\ MIN_BICARB_VOLUME_ML, MAX_BICARB_VOLUME_ML, FALSE, MIX_NO_FEED_FORWARD ); - resetPIController(PI_CONTROLLER_ID_BICARB_VOL, STD_BICARB_DOSING, MIX_NO_FEED_FORWARD); + resetPIController( PI_CONTROLLER_ID_BICARB_VOL, DEFAULT_BICARB_VOLUME_ML, MIX_NO_FEED_FORWARD ); return result; } @@ -2148,10 +2096,10 @@ { BOOL result = f32Override( message, &dryBiCartAcidMixVolumeKpGain ); - initializePIController(PI_CONTROLLER_ID_ACID_VOL, 0.0F, \ + initializePIController( PI_CONTROLLER_ID_ACID_VOL, 0.0F, \ getAcidKpGainCoefficient(), getAcidKiGainCoefficient(),\ MIN_ACID_VOLUME_ML, MAX_ACID_VOLUME_ML, FALSE, MIX_NO_FEED_FORWARD ); - resetPIController(PI_CONTROLLER_ID_ACID_VOL, STD_ACID_DOSING, MIX_NO_FEED_FORWARD); + resetPIController( PI_CONTROLLER_ID_ACID_VOL, DEFAULT_ACID_VOLUME_ML, MIX_NO_FEED_FORWARD ); return result; } @@ -2170,10 +2118,10 @@ { BOOL result = f32Override( message, &dryBiCartAcidMixVolumeKiGain ); - initializePIController(PI_CONTROLLER_ID_ACID_VOL, 0.0F, \ + initializePIController( PI_CONTROLLER_ID_ACID_VOL, 0.0F, \ getAcidKpGainCoefficient(), getAcidKiGainCoefficient(),\ MIN_ACID_VOLUME_ML, MAX_ACID_VOLUME_ML, FALSE, MIX_NO_FEED_FORWARD ); - resetPIController(PI_CONTROLLER_ID_ACID_VOL, STD_ACID_DOSING, MIX_NO_FEED_FORWARD); + resetPIController( PI_CONTROLLER_ID_ACID_VOL, DEFAULT_ACID_VOLUME_ML, MIX_NO_FEED_FORWARD ); return result; }