Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r60db0506b1a90ed00b0e83159f6e7510ab6e4b7b -rd31e9b40e9d56df8fa3551bbba63f6bec3a72811 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 60db0506b1a90ed00b0e83159f6e7510ab6e4b7b) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision d31e9b40e9d56df8fa3551bbba63f6bec3a72811) @@ -23,6 +23,7 @@ #include "Level.h" #include "MessageSupport.h" #include "Messaging.h" +#include "ModeGenDialysate.h" //#include "NVDataMgmt.h" #include "OperationModes.h" #include "PersistentAlarm.h" @@ -55,8 +56,8 @@ #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.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 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 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. @@ -427,14 +428,14 @@ #ifdef __TEENSY_CONDUCTIVITY_DRIVER__ F32 measuredTempAtDialyzer = getTeensyConductivityTemperatureValue( D27_COND ); #else - F32 measuredTempAtDialyzer = getConductivityTemperatureValue( D27_COND ); + F32 measuredTempAtDialyzer = getFilteredConductivitySensorTemperature( D27_COND ); #endif 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 ) @@ -477,7 +478,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 -r60db0506b1a90ed00b0e83159f6e7510ab6e4b7b -rd31e9b40e9d56df8fa3551bbba63f6bec3a72811 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 60db0506b1a90ed00b0e83159f6e7510ab6e4b7b) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision d31e9b40e9d56df8fa3551bbba63f6bec3a72811) @@ -616,6 +616,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. Index: firmware/App/Modes/ModeGenDialysate.h =================================================================== diff -u -rb2e7c9194acd84783d2bbad64c5720410493e199 -rd31e9b40e9d56df8fa3551bbba63f6bec3a72811 --- firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision b2e7c9194acd84783d2bbad64c5720410493e199) +++ firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision d31e9b40e9d56df8fa3551bbba63f6bec3a72811) @@ -52,6 +52,7 @@ U32 transitionToGenDialysateMode( void ); // Prepares for transition to gen dialysate mode U32 execGenDialysateMode( void ); // Execute the gen dialysate mode state machine (call from OperationModes) void execGenDialysateMonitor( void ); // Dialysate generation monitor +F32 calculateUpdatedD28TargetDialysateTemp( void ); // Calculated updated D28 temperature with Ultrafilters heat loss BOOL hydChamberWaterInletControl( void ); // Hydraulics chamber inlet water control DD_GEND_MODE_STATE_T getCurrentGenDialysateState( void ); // Get the current state of the gen dialysate mode.