Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r4053bb88fd83acda93e7b6a27480658e82814609 -rb003e0e60487302c022714f168d9f5dffc09d226 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 4053bb88fd83acda93e7b6a27480658e82814609) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision b003e0e60487302c022714f168d9f5dffc09d226) @@ -24,6 +24,7 @@ #include "Level.h" #include "MessageSupport.h" #include "Messaging.h" +#include "ModeGenDialysate.h" //#include "NVDataMgmt.h" #include "OperationModes.h" #include "PersistentAlarm.h" @@ -56,12 +57,9 @@ #define ADJ_DELTA_TEMP_STEP 2.0F ///< Adjust target temperature based on D28 feedback per cycle. #define MAX_ADJ_DELTA_TEMP_C 7.0F ///< Maximum adjusted delta temperature to add/remove from calculated target temperature #define D5_HEAT_TX_INIT_FEED_FORWARD 0.0F ///< Initial Feed forward term for heater control -//#define D5_HEAT_TX_P_COEFFICIENT 0.050F ///< P Term for AC primary heater control during treatment mode. -//#define D5_HEAT_TX_I_COEFFICIENT 0.015F ///< I Term for AC primary heater control during treatment mode. +#define D5_HEAT_TX_P_COEFFICIENT 0.017F ///< P Term for AC primary heater control during treatment mode. +#define D5_HEAT_TX_I_COEFFICIENT 0.002F ///< I Term for AC primary heater control during treatment mode. -#define D5_HEAT_TX_P_COEFFICIENT 0.035F ///< P Term for AC primary heater control during treatment mode. -#define D5_HEAT_TX_I_COEFFICIENT 0.004F ///< I Term for AC primary heater control during treatment mode. - #define D45_HEAT_P_COEFFICIENT 0.20F ///< P Term for trimmer heater control. #define D45_HEAT_I_COEFFICIENT 0.05F ///< I Term for trimmer heater control. #define D45_HEAT_TX_INIT_FEED_FORWARD 0.0F ///< Initial Feed forward term for heater control @@ -437,15 +435,15 @@ } else { - measuredTempAtDialyzer = getConductivityTemperature( D27_COND ); + measuredTempAtDialyzer = getFilteredConductivitySensorTemperature( D27_COND ); } F32 calcTargetTemp = getHeaterTargetTemperature( D5_HEAT ); F32 dialysateFlowrate = getTDDialysateFlowrate(); F32 deltaTempC = targetTempfromTD - measuredTempAtDialyzer; F32 capDeltaTempC = MIN( fabs(deltaTempC), ADJ_DELTA_TEMP_STEP ); F32 ctrl = 0.0F; - + F32 updatedTarget = 0.0F; #if 0 //Assign the initial calcualted temp for adjsutment if ( FALSE == isTargetTempAdjusted ) @@ -488,7 +486,9 @@ } else if ( fabs(deltaTempC) >= D5_HEAT_OUT_DEADBAND_CONTROL ) { - ctrl = runPIController( PI_CONTROLLER_ID_D5_HEAT_OUTER_LOOP, targetTempfromTD, measuredTempAtDialyzer ); + updatedTarget = calculateUpdatedD28TargetDialysateTemp(); + setHeaterTargetTemperature( D5_HEAT, updatedTarget ); + ctrl = runPIController( PI_CONTROLLER_ID_D5_HEAT_OUTER_LOOP, getHeaterTargetTemperature( D5_HEAT ), measuredTempAtDialyzer ); adjustedPrimaryTargetTemp = ctrl; } Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r16c5398fed27670d52609b19ad870a5f99111534 -rb003e0e60487302c022714f168d9f5dffc09d226 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 16c5398fed27670d52609b19ad870a5f99111534) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision b003e0e60487302c022714f168d9f5dffc09d226) @@ -648,6 +648,35 @@ /*********************************************************************//** * @brief + * The calculateUpdatedD28TargetDialysateTemp function calculate the delta temperature + * required for dialysate temperature to meet the set temperature at dialyzer. + * @details \b Inputs: Qd and target temperature. + * @details \b Outputs: Adjusted D28 Target temperature + * @return none. + *************************************************************************/ +F32 calculateUpdatedD28TargetDialysateTemp( void ) +{ + // Get the dialysate flow rate from TD + F32 dialFlowrate = getTDDialysateFlowrate(); + F32 deltaTemp = 0.0F; + F32 heatDissipation_b3 = 0.0F; + F32 targetTemp = getTDTargetDialysateTemperature(); + F32 initialTempAtD28 = 0.0F; + + // Heat loss model predicts the heat loss ( B3) in the DD flow path and + // finds the delta temperature to be added with the target temperature + // to maintain the target temperature at dialyzer. + //Lets calculate B3 heat dissipation factor + heatDissipation_b3 = calculateHeatDissipationB3(); + + // Reverse calculation of Initial temp at D28 to get the target dialyzer temperature + initialTempAtD28 = calculateInitialTemp( targetTemp, heatDissipation_b3 ); + + return initialTempAtD28; +} + +/*********************************************************************//** + * @brief * The monitorChamberLevelStatus function checks the spent chamber and bicarb * chamber level status and updates the corrosponding flags. * @details \b Inputs: Spent and bicarb chamber levels.