Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r9b0538b33513dd1443e64c3b1c894133476255d8 -rb689a4627e86e263cb69e83b91e80802bf411c92 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9b0538b33513dd1443e64c3b1c894133476255d8) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision b689a4627e86e263cb69e83b91e80802bf411c92) @@ -59,10 +59,8 @@ #define D5_HEAT_TX_P_COEFFICIENT 0.05F ///< P Term for AC primary heater control during treatment mode. #define D5_HEAT_TX_I_COEFFICIENT 0.001F ///< 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_P_COEFFICIENT 0.05F ///< P Term for trimmer heater control. -#define D45_HEAT_I_COEFFICIENT 0.02F ///< I Term for trimmer heater control. +#define D45_HEAT_P_COEFFICIENT 0.01F ///< P Term for trimmer heater control. +#define D45_HEAT_I_COEFFICIENT 0.005F ///< I Term for trimmer heater control. #define D45_HEAT_TX_INIT_FEED_FORWARD 0.0F ///< Initial Feed forward term for heater control #define HEATERS_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Heaters data publish interval. @@ -82,7 +80,7 @@ #define D5_HEAT_CONTROL_INTERVAL_MS 3000 /// Primary heater control interval in milli seconds #define D5_HEAT_CONTROL_INTERVAL_COUNT ( D5_HEAT_CONTROL_INTERVAL_MS / TASK_GENERAL_INTERVAL ) ///< Primary heater control interval count. -#define D45_HEAT_CONTROL_INTERVAL_MS ( 1 * MS_PER_SECOND ) ///< Trimmer heater control interval in milli seconds +#define D45_HEAT_CONTROL_INTERVAL_MS ( 3 * MS_PER_SECOND ) ///< Trimmer heater control interval in milli seconds #define D45_HEAT_CONTROL_INTERVAL_COUNT ( D45_HEAT_CONTROL_INTERVAL_MS / TASK_GENERAL_INTERVAL ) ///< Trimmer heater control interval count. #define D5_TARGET_TEMP_ADJUST_LOW_QD_INTERVAL ( 3 * SEC_PER_MIN * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Adjust primary target temperature - outer loop control interval for low Qd. #define D5_TARGET_TEMP_ADJUST_HIGH_QD_INTERVAL ( 1 * SEC_PER_MIN * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Adjust primary target temperature - outer loop control interval for high Qd. @@ -792,7 +790,7 @@ if ( D5_HEAT == heater ) { - measuredTemperature = getD4AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D4_TEMP ); if ( DD_MODE_HEAT != opMode ) { @@ -822,7 +820,7 @@ } else { - measuredTemperature = getD50AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D50_TEMP ); if ( DD_MODE_HEAT != opMode ) { @@ -885,7 +883,7 @@ if ( D5_HEAT == heater ) { // Inlet temperature post heat exchanger - F32 inletTemperature = getD78AverageTemperature(); + F32 inletTemperature = getFilteredTemperatureValue( D78_TEMP ); F32 deltaTempC = targetTemperature - inletTemperature; F32 capDeltaTempC = MAX( deltaTempC, HEATERS_ZERO_DELTA_TEMP_C ); F32 flowrate = ( getTDDialysateFlowrate() + RINSE_PUMP_EST_FLOWRATE ) / LITER_IN_ML ; @@ -906,7 +904,7 @@ targetTemperature = adjustedPrimaryTargetTemp; } #if 1 - measuredTemperature = getD4AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D4_TEMP ); deltaTempC = fabs( targetTemperature - measuredTemperature ); if ( deltaTempC >= D5_HEATER_DEADBAND_CONTROL ) @@ -915,7 +913,7 @@ control[ heater ].data = ctrl; } #else - measuredTemperature = getD4AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D4_TEMP ); deltaTempC = targetTemperature - measuredTemperature; capDeltaTempC = fabs(deltaTempC); d5_p_gain = ( D5_HEATER_PWM_ADJ_SLOPE_FACTOR * getTDDialysateFlowrate() ) + D5_HEATER_PWM_INTERCEPT_FACTOR; @@ -956,7 +954,7 @@ } else { - measuredTemperature = getD50AverageTemperature(); + measuredTemperature = getFilteredTemperatureValue( D50_TEMP ); ctrl = runPIController( PI_CONTROLLER_ID_D45_HEAT, targetTemperature, measuredTemperature ); control[ heater ].data = ctrl; Index: firmware/App/Controllers/Ultrafiltration.c =================================================================== diff -u -rd748813399d38ef5b71d760e327e368cc82d7a38 -rb689a4627e86e263cb69e83b91e80802bf411c92 --- firmware/App/Controllers/Ultrafiltration.c (.../Ultrafiltration.c) (revision d748813399d38ef5b71d760e327e368cc82d7a38) +++ firmware/App/Controllers/Ultrafiltration.c (.../Ultrafiltration.c) (revision b689a4627e86e263cb69e83b91e80802bf411c92) @@ -239,8 +239,8 @@ { 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 + F32 freshDensity = ( COMP_SLOPE * getFilteredTemperatureValue( D4_TEMP ) ) + COMP_INTERCEPT; // Fresh side dialysate density + F32 spentDensity = ( COMP_SLOPE * getFilteredTemperatureValue( D50_TEMP ) ) + COMP_INTERCEPT; // spent side dialysate density F32 compFreshFlowrate = getTDDialysateFlowrate() * freshDensity; // Qd * fresh density F32 compSpentFlowrate = getTDDialysateFlowrate() * spentDensity; // Qd * spent density F32 balancingError = compFreshFlowrate - compSpentFlowrate; // Error in g/min Index: firmware/App/Drivers/TemperatureSensors.c =================================================================== diff -u -r50144ec3e96785cf76d5bfd22ee65029c82e732b -rb689a4627e86e263cb69e83b91e80802bf411c92 --- firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 50144ec3e96785cf76d5bfd22ee65029c82e732b) +++ firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision b689a4627e86e263cb69e83b91e80802bf411c92) @@ -110,8 +110,7 @@ //benignPolynomialCalRecord( &tempSensorCalRecord.tempSensors[ i ] ); } - // Initialize TH1 (primary heater), TH2(outlet Heat Exchanger), TAUX ( Inlet Heat exchanger), - // TH3 ( Trim Heater) constants. + // Initialize temperature sensors constants. tempSensors[ D1_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; tempSensors[ D1_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; tempSensors[ D1_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; @@ -138,9 +137,12 @@ tempSensors[ D99_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; // Board temperature sensors conversion coefficient - tempSensors[ BRD_TEMP ].conversionCoeff = conversionCoeff; - tempSensors[ BRD_TEMP ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ BRD_TEMP ].conversionCoeff = conversionCoeff; + tempSensors[ BRD_TEMP ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + // TODO : for testing, fix the ambient temperature as 35DegC. + temperatureValue[ BRD_TEMP ].data = 35.0F; + // Persistent alarm for the temperature sensors range check initPersistentAlarm( ALARM_ID_DD_TEMPERATURE_SENSOR_OUT_OF_RANGE, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS ); Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -r9b0538b33513dd1443e64c3b1c894133476255d8 -rb689a4627e86e263cb69e83b91e80802bf411c92 --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 9b0538b33513dd1443e64c3b1c894133476255d8) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision b689a4627e86e263cb69e83b91e80802bf411c92) @@ -266,7 +266,7 @@ startHeater( D5_HEAT ); //Turn on Trimmer heater - setHeaterTargetTemperature( D45_HEAT, getD4AverageTemperature() ); + setHeaterTargetTemperature( D45_HEAT, getFilteredTemperatureValue( D4_TEMP ) ); startHeater( D45_HEAT ); //Testing : Enable close loop once testing is complete @@ -303,7 +303,7 @@ startHeater( D5_HEAT ); //Turn on Trimmer heater - setHeaterTargetTemperature( D45_HEAT, getD4AverageTemperature() ); + setHeaterTargetTemperature( D45_HEAT, getFilteredTemperatureValue( D4_TEMP ) ); startHeater( D45_HEAT ); //setDialysatePumpTargetRPM( D12_PUMP, FRESH_DIAL_PUMP_INITIAL_RPM, FALSE ); Index: firmware/App/Monitors/Temperature.c =================================================================== diff -u -r895ae090a3c78f9e002ac526332ef29929ceef71 -rb689a4627e86e263cb69e83b91e80802bf411c92 --- firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision 895ae090a3c78f9e002ac526332ef29929ceef71) +++ firmware/App/Monitors/Temperature.c (.../Temperature.c) (revision b689a4627e86e263cb69e83b91e80802bf411c92) @@ -416,66 +416,33 @@ /*********************************************************************//** * @brief - * The getD4AverageTemperature function returns the average temperature - * for D4 temp sensor. + * The getFilteredTemperatureValue function gets the filtered current + * Temperature sensor temperature (in deg C) for a given sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. * @details \b Inputs: filteredcurrentTemperatureReadings * @details \b Outputs: none - * @return the D4 average temperature + * @param sensor ID of temperature sensor to get temperature reading for. + * @return The filtered current temperature sensor temperature (in deg C) of + * the given sensor. *************************************************************************/ -F32 getD4AverageTemperature( void ) +F32 getFilteredTemperatureValue( TEMPERATURE_SENSORS_T sensor ) { - F32 temperature = getF32OverrideValue( &filteredcurrentTemperatureReadings[ D4_TEMP ] ); + F32 temperature = 0.0F; - return temperature; -} + if ( sensor < NUM_OF_TEMPERATURE_SENSORS ) + { + temperature = getF32OverrideValue( &filteredcurrentTemperatureReadings[ sensor ] ); + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_TEMPERATURE_SENSOR_SELECTED3, sensor ) + } -/*********************************************************************//** - * @brief - * The getD50AverageTemperature function returns the average temperature - * for D50 temp sensor. - * @details \b Inputs: filteredcurrentTemperatureReadings - * @details \b Outputs: none - * @return the D50 average temperature - *************************************************************************/ -F32 getD50AverageTemperature( void ) -{ - F32 temperature = getF32OverrideValue( &filteredcurrentTemperatureReadings[ D50_TEMP ] ); - return temperature; } /*********************************************************************//** * @brief - * The getD99AverageTemperature function returns the average temperature - * for D99 temperature sensor. - * @details \b Inputs: filteredcurrentTemperatureReadings - * @details \b Outputs: none - * @return the D99 average temperature - *************************************************************************/ -F32 getD99AverageTemperature( void ) -{ - F32 temperature = getF32OverrideValue( &filteredcurrentTemperatureReadings[ D99_TEMP ] ); - - return temperature; -} - -/*********************************************************************//** - * @brief - * The getD78AverageTemperature function returns the average temperature - * for D78 temperature sensor. - * @details \b Inputs: filteredcurrentTemperatureReadings - * @details \b Outputs: none - * @return the D78 average temperature - *************************************************************************/ -F32 getD78AverageTemperature( void ) -{ - F32 temperature = getF32OverrideValue( &filteredcurrentTemperatureReadings[ D78_TEMP ] ); - - return temperature; -} - -/*********************************************************************//** - * @brief * The getTempMovingAverageTimeInterval function calculates the temperature * interval used for sample collection based on the dialysate flow rate, * to find the average value. @@ -529,12 +496,12 @@ data.d44CondTemp = getConductivityTemperatureValue( D43_COND ); data.d75CondTemp = getConductivityTemperatureValue( D74_COND ); #endif - data.d4AvgTemp = getD4AverageTemperature(); - data.d50AvgTemp = getD50AverageTemperature(); - data.d99AvgTemp = getD99AverageTemperature(); + data.d4AvgTemp = getFilteredTemperatureValue( D4_TEMP ); + data.d50AvgTemp = getFilteredTemperatureValue( D50_TEMP ); + data.d99AvgTemp = getFilteredTemperatureValue( D99_TEMP ); data.d28AvgTemp = dialTempMovingAvgData[ DIAL_TEMP_D28 ].dialTempAvgC; data.d30AvgTemp = dialTempMovingAvgData[ DIAL_TEMP_D30 ].dialTempAvgC; - data.d78AvgTemp = getD78AverageTemperature(); + data.d78AvgTemp = getFilteredTemperatureValue( D78_TEMP ); data.d9PresTemp = getFilteredPressureSensorTemperature( D9_PRES ); data.d66PresTemp = getFilteredPressureSensorTemperature( D66_PRES ); data.d51PresTemp = getFilteredPressureSensorTemperature( D51_PRES ); Index: firmware/App/Monitors/Temperature.h =================================================================== diff -u -r1bea59c13158a871b80e76d75a2a1a579ae67434 -rb689a4627e86e263cb69e83b91e80802bf411c92 --- firmware/App/Monitors/Temperature.h (.../Temperature.h) (revision 1bea59c13158a871b80e76d75a2a1a579ae67434) +++ firmware/App/Monitors/Temperature.h (.../Temperature.h) (revision b689a4627e86e263cb69e83b91e80802bf411c92) @@ -75,16 +75,12 @@ F32 p16InternalTemp; ///< P16 internal Temperature } TEMPERATURE_SENSORS_FP_DATA_T; - - // ********** public function prototypes ********** void initTemperature( void ); SELF_TEST_STATUS_T execTemperatureSensorsSelfTest( void ); void execTemperatureSensors( void ); -F32 getD4AverageTemperature( void ); -F32 getD50AverageTemperature( void ); -F32 getD78AverageTemperature( void ); +F32 getFilteredTemperatureValue( TEMPERATURE_SENSORS_T sensor ); void checkDialysateTemperatureSensors( void ); BOOL testDDTemperatureSensorsDataPublishIntervalOverride( MESSAGE_T *message ); Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r60db0506b1a90ed00b0e83159f6e7510ab6e4b7b -rb689a4627e86e263cb69e83b91e80802bf411c92 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 60db0506b1a90ed00b0e83159f6e7510ab6e4b7b) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision b689a4627e86e263cb69e83b91e80802bf411c92) @@ -154,6 +154,7 @@ SW_FAULT_ID_DRY_BICART_DRAIN_INVALID_EXEC_STATE = 123, SW_FAULT_ID_INVALID_RINSE_PUMP = 124, SW_FAULT_ID_PI_CTRL_INVALID_FEED_FORWARD_LIMIT = 125, + SW_FAULT_ID_INVALID_TEMPERATURE_SENSOR_SELECTED3 = 126, NUM_OF_SW_FAULT_IDS } DD_SW_FAULT_ID_T;