Index: firmware/App/Controllers/Ultrafiltration.c =================================================================== diff -u -r25dbc6221b63e20fe61b2af0ce9c9f56bf13e807 -rab9df65fbbb4f8387a5f2c0e7aa26bd234843150 --- firmware/App/Controllers/Ultrafiltration.c (.../Ultrafiltration.c) (revision 25dbc6221b63e20fe61b2af0ce9c9f56bf13e807) +++ firmware/App/Controllers/Ultrafiltration.c (.../Ultrafiltration.c) (revision ab9df65fbbb4f8387a5f2c0e7aa26bd234843150) @@ -45,6 +45,7 @@ static U32 currentUFCompCounter; ///< Counter (in task interval) to initiate the periodic ultrafiltration temperature compensation. static F32 compUFrate; ///< compensated UF rate static U32 ufDataPublicationTimerCounter; ///< Used to schedule ultrafiltration data publication to CAN bus. +static BOOL isUFRateUpdated; ///< flag indicating to update UF rate needed. static OVERRIDE_U32_T ufDataPublishInterval; ///< Ultrafiltration data publish interval. // ********** private function prototypes ********** @@ -73,6 +74,7 @@ currentUFCompCounter = 0; compUFrate = getTDUFRate(); ufDataPublicationTimerCounter = 0; + isUFRateUpdated = FALSE; } /*********************************************************************//** @@ -142,6 +144,10 @@ if ( TRUE == isUltrafiltrationRequested ) { + // start with TD UF rate + compUFrate = getTDUFRate(); + currentUFCompCounter = 0; + setConcentratePumpTargetSpeed( D76_PUMP, compUFrate, DOSING_CONT_VOLUME ); requestConcentratePumpOn( D76_PUMP ); @@ -169,11 +175,6 @@ requestConcentratePumpOff( D76_PUMP, FALSE ); state = DD_UF_PAUSED; } - else - { - // Get the updated rate if there is any change - setConcentratePumpTargetSpeed( D76_PUMP, compUFrate, DOSING_CONT_VOLUME ); - } return state; } @@ -202,6 +203,19 @@ /*********************************************************************//** * @brief + * The signalUFRateUpdate function sets the flag to udpate the + * UF rate. + * @details \b Inputs: none + * @details \b Outputs: isUFRateUpdated + * @return none. + *************************************************************************/ +void signalUFRateUpdate( void ) +{ + isUFRateUpdated = TRUE; +} + +/*********************************************************************//** + * @brief * The UpdateUFCompensation function updates the ultrafiltration rate * based on the dialysate temperature compensation. * @details \b Inputs: D4 and D50 temperature @@ -210,7 +224,7 @@ *************************************************************************/ static void UpdateUFCompensation( void ) { - if ( ++currentUFCompCounter >= UF_COMP_INTERVAL ) + if ( ( ++currentUFCompCounter >= UF_COMP_INTERVAL ) || ( TRUE == isUFRateUpdated ) ) { F32 freshDensity = ( COMP_SLOPE * getD4AverageTemperature() ) + COMP_INTERCEPT; // Fresh side dialysate density F32 spentDensity = ( COMP_SLOPE * getD50AverageTemperature() ) + COMP_INTERCEPT; // spent side dialysate density @@ -224,7 +238,11 @@ compUFrate = getTDUFRate() + balancingError; } + // Update UF rate + setConcentratePumpTargetSpeed( D76_PUMP, compUFrate, DOSING_CONT_VOLUME ); + currentUFCompCounter = 0; + isUFRateUpdated = FALSE; } } Index: firmware/App/Controllers/Ultrafiltration.h =================================================================== diff -u -r25dbc6221b63e20fe61b2af0ce9c9f56bf13e807 -rab9df65fbbb4f8387a5f2c0e7aa26bd234843150 --- firmware/App/Controllers/Ultrafiltration.h (.../Ultrafiltration.h) (revision 25dbc6221b63e20fe61b2af0ce9c9f56bf13e807) +++ firmware/App/Controllers/Ultrafiltration.h (.../Ultrafiltration.h) (revision ab9df65fbbb4f8387a5f2c0e7aa26bd234843150) @@ -46,6 +46,7 @@ void transitionToUltrafiltration( void ); // Prepares for transition to ultrafiltration execution U32 execUFControl( void ); // Execute the ultrafiltration state machine UF_EXEC_STATE_T getCurrentUFExecState( void ); // Get the current state of the balancing chamber execution +void signalUFRateUpdate( void ); // Update UF rate when there is a change in rate BOOL testDDUFDataPublishIntervalOverride( MESSAGE_T *message ); // To override the UF data publish interval Index: firmware/App/DDCommon.h =================================================================== diff -u -r25dbc6221b63e20fe61b2af0ce9c9f56bf13e807 -rab9df65fbbb4f8387a5f2c0e7aa26bd234843150 --- firmware/App/DDCommon.h (.../DDCommon.h) (revision 25dbc6221b63e20fe61b2af0ce9c9f56bf13e807) +++ firmware/App/DDCommon.h (.../DDCommon.h) (revision ab9df65fbbb4f8387a5f2c0e7aa26bd234843150) @@ -43,7 +43,7 @@ //#define __PITEST__ 1 //Uncomment below if diener concentrate pump used -#define __DIENER_CONC_PUMP__ 1 +//#define __DIENER_CONC_PUMP__ 1 //Uncomment below if beta hardware is used //#define __BETA_HW_VER__ 1 Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r333e2d0c0462dcb4343a279420949cce716ebab7 -rab9df65fbbb4f8387a5f2c0e7aa26bd234843150 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 333e2d0c0462dcb4343a279420949cce716ebab7) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision ab9df65fbbb4f8387a5f2c0e7aa26bd234843150) @@ -239,6 +239,7 @@ signalDialysatePumpHardStop( D48_PUMP ); requestConcentratePumpOff( D11_PUMP, FALSE ); requestConcentratePumpOff( D10_PUMP, FALSE ); + requestConcentratePumpOff( D76_PUMP, FALSE ); stopHeater( D5_HEAT ); stopHeater( D45_HEAT ); @@ -545,6 +546,7 @@ setHeaterTargetTemperature( D5_HEAT, getGenDialysateTargetTemperature() ); //TODO: update others parameters setting as needed. + signalUFRateUpdate(); //reset the flag isTreatmentParamUpdated = FALSE; Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -r2e89a75592087ba15cae7070a92173e9f1efa8fe -rab9df65fbbb4f8387a5f2c0e7aa26bd234843150 --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 2e89a75592087ba15cae7070a92173e9f1efa8fe) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision ab9df65fbbb4f8387a5f2c0e7aa26bd234843150) @@ -446,8 +446,11 @@ data.x6Temp = getTemperatureValue( X6_TEMP ); data.d4Temp = getTemperatureValue( D4_TEMP ); data.d50Temp = getTemperatureValue( D50_TEMP ); + //Testing data.boardTemp = getTemperatureValue( BRD_TEMP ); data.baroTemp = getTemperatureValue( BARO_TEMP ); + //data.boardTemp = getD4AverageTemperature(); + //data.baroTemp = getD50AverageTemperature(); data.d16CondTemp = getConductivityTemperatureValue( D17_COND ); data.d28CondTemp = getConductivityTemperatureValue( D27_COND ); data.d30CondTemp = getConductivityTemperatureValue( D29_COND );