Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rc1ef106ed0f97dc998230c6e154aa2362aa476d8 -rb170a68ce18b6654fb3abad7d5611f0b681f1278 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision c1ef106ed0f97dc998230c6e154aa2362aa476d8) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision b170a68ce18b6654fb3abad7d5611f0b681f1278) @@ -151,9 +151,16 @@ * @brief * The initHeaters function initializes the variables and the PI controllers * for the primary and trimmer heaters. - * @details - * Inputs : none - * Outputs : Heaters module initialized + * @details Inputs: heatersSelfTestState, primaryHeatersExecState, + * trimmerHeaterExecState, primaryHeaterTargetTemperature, + * trimmerHeaterTargetTemperature, primaryHeaterTimerCounter, + * dataPublicationTimerCounter, isPrimaryHeaterOn, isTrimmerHeaterOn, + * selfTestElapsedTime + * @details Outputs: heatersSelfTestState, primaryHeatersExecState, + * trimmerHeaterExecState, primaryHeaterTargetTemperature, + * trimmerHeaterTargetTemperature, primaryHeaterTimerCounter, + * dataPublicationTimerCounter, isPrimaryHeaterOn, isTrimmerHeaterOn, + * selfTestElapsedTime * @return none *************************************************************************/ void initHeaters( void ) @@ -183,9 +190,8 @@ * @brief * The setPrimaryHeaterTargetTemperature function sets the primary heater * target temperature. - * @details - * Inputs : none - * Outputs : primaryHeaterTargetTemperature + * @details Inputs: primaryHeaterTargetTemperature + * @details Outputs: primaryHeaterTargetTemperature * @param targetTemp target temperature for the primary heater * @return none *************************************************************************/ @@ -198,9 +204,8 @@ * @brief * The setTrimmerHeaterTargetTemperature function sets the trimmer heater * target temperature. - * @details - * Inputs : none - * Outputs : trimmerHeaterTargetTemperature + * @details Inputs: trimmerHeaterTargetTemperature + * @details Outputs: trimmerHeaterTargetTemperature * @param targetTemp target temperature for the trimmer heater * @return none *************************************************************************/ @@ -213,10 +218,10 @@ * @brief * The startPrimaryHeater function starts the primary heaters. It resets * the primary heaters state and sets the main primary heater duty cycle. - * @details - * Inputs : primaryHeaterTargetTemperature - * Outputs : hasStartPrimaryHeaterRequested - * @return status + * @details Inputs: primaryHeaterTargetTemperature, + * hasStartPrimaryHeaterRequested + * @details Outputs: hasStartPrimaryHeaterRequested + * @return returns TRUE if the status of the primary heater was successful *************************************************************************/ BOOL startPrimaryHeater( void ) { @@ -237,10 +242,10 @@ * @brief * The startTrimmerHeater function starts the trimmer heater. It resets the * trimmer heater's state and sets the duty cycle of the trimmer heater. - * @details - * Inputs : trimmerHeaterTargetTemperature - * Outputs : hasStartTrimmerHeaterRequested - * @return status + * @details Inputs: trimmerHeaterTargetTemperature, + * hasStartTrimmerHeaterRequested + * @details Outputs: hasStartTrimmerHeaterRequested + * @return returns TRUE if the staring the trimmer heater was successful *************************************************************************/ BOOL startTrimmerHeater( void ) { @@ -260,9 +265,10 @@ /*********************************************************************//** * @brief * The stopPrimaryHeater function stops the primary heater. - * @details - * Inputs : none - * Outputs : Primary heater stops + * @details Inputs: mainPrimaryHeaterDutyCycle, smallPrimaryHeaterDutyCycle, + * isPrimaryHeaterOn + * @details Outputs: mainPrimaryHeaterDutyCycle, smallPrimaryHeaterDutyCycle, + * isPrimaryHeaterOn * @return none *************************************************************************/ void stopPrimaryHeater( void ) @@ -277,9 +283,8 @@ /*********************************************************************//** * @brief * The stopTrimmerHeater function stops the trimmer heater. - * @details - * Inputs : none - * Outputs : Trimmer heater stops + * @details Inputs: trimmerHeaterDutyCycle, isTrimmerHeaterOn + * @details Outputs: trimmerHeaterDutyCycle, isTrimmerHeaterOn * @return none *************************************************************************/ void stopTrimmerHeater( void ) @@ -291,10 +296,10 @@ /*********************************************************************//** * @brief - * The execHeatersMonitor function turns off the heaters when RO pump is not on. - * @details - * Inputs : none - * Outputs : Turns off the heaters when RO pump is not on + * The execHeatersMonitor function turns off the heaters when RO pump is + * not on. + * @details Inputs: none + * @details Outputs: none * @return none *************************************************************************/ void execHeatersMonitor( void ) @@ -313,11 +318,11 @@ /*********************************************************************//** * @brief - * The execHeatersSelfTest function executes the heaters' self-test state machine. - * @details - * Inputs : heatersSelfTestState - * Outputs : heatersSelfTestState - * @return heatersSelfTestState + * The execHeatersSelfTest function executes the heaters' self-test state + * machine. + * @details Inputs: heatersSelfTestState + * @details Outputs: heatersSelfTestState + * @return heatersSelfTestResult which is the status of the heaters self test *************************************************************************/ SELF_TEST_STATUS_T execHeatersSelfTest( void ) { @@ -351,9 +356,8 @@ /*********************************************************************//** * @brief * The execPrimaryHeaters function executes the primary heaters' state machine. - * @details - * Inputs : primaryHeatersExecState - * Outputs : primaryHeatersExecState + * @details Inputs: primaryHeatersExecState + * @details Outputs: primaryHeatersExecState * @return none *************************************************************************/ void execPrimaryHeaters( void ) @@ -378,9 +382,8 @@ /*********************************************************************//** * @brief * The execTrimmerHeater function executes the trimmer heater's state machine. - * @details - * Inputs : trimmerHeaterExecState - * Outputs : trimmerHeaterExecState + * @details Inputs: trimmerHeaterExecState + * @details Outputs: trimmerHeaterExecState * @return none *************************************************************************/ void execTrimmerHeater( void ) @@ -400,16 +403,17 @@ trimmerHeaterExecState = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; break; } + + publishHeatersData(); } /*********************************************************************//** * @brief - * The handleHeatersSelfTestStart function starts the small primary and - * the trimmer heaters for self-test. - * @details - * Inputs : heatersSelfTestResult, selfTestElapsedTime - * Outputs : heatersSelfTestResult, selfTestElapsedTime - * @return state (HEATERS_SELF_TEST_STATES_T) + * The handleHeatersSelfTestStart function handles the start state of the + * heaters self test. + * @details Inputs: heatersSelfTestResult, selfTestElapsedTime + * @details Outputs: heatersSelfTestResult, selfTestElapsedTime + * @return next state *************************************************************************/ static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestStart( void ) { @@ -435,26 +439,24 @@ * elapsed, it checks the thermocouple temperature shared among the two * heaters. If they are in range, it sets the main primary heater and transitions * to the next state. If it fails, it sets an alarm and fails the test. - * @details - * Inputs : heatersSelfTestResult, selfTestElapsedTime - * Outputs : heatersSelfTestResult, selfTestElapsedTime - * @return state (HEATERS_SELF_TEST_STATES_T) + * @details Inputs: heatersSelfTestResult, selfTestElapsedTime + * @details Outputs: heatersSelfTestResult, selfTestElapsedTime + * @return next state *************************************************************************/ static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestSmallPrimaryAndTrimmerHeaters( void ) { HEATERS_SELF_TEST_STATES_T state = HEATERS_SELF_TEST_SMALL_PRIMARY_AND_TRIMMER_HEATERS; if ( didTimeout( selfTestElapsedTime, HEATERS_POST_HEAT_UP_TIME_SECONDS ) ) { - setSmallPrimaryHeaterPWM( 0 ); - setTrimmerHeaterPWM( 0 ); + setSmallPrimaryHeaterPWM( 0.0 ); + setTrimmerHeaterPWM( 0.0 ); F32 convertedTemperature = getTemperatureValue( TEMPSENSORS_TRIMMER_HEATER_INTERNAL ); if ( fabs( convertedTemperature - SMALL_PRIMARY_AND_TRIMMER_HEATERS_POST_TARGET_TEMPERATURE ) > HEATERS_POST_TEMPERATURE_TOLERANCE ) { - //TODO alarm - // TODO POST failed + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_HEATERS_FAULT, HEATERS_SELF_TEST_SMALL_PRIMARY_AND_TRIMMER_HEATERS ); heatersSelfTestResult = SELF_TEST_STATUS_FAILED; state = HEATERS_SELF_TEST_COMPLETE; } @@ -475,25 +477,23 @@ * on the main primary heater has elapsed. When the time has elapsed, it * checks to ensure the thermocouple temperature is within the tolerance * of the target temperature. It then transitions to the complete state. - * @details - * Inputs : heatersSelfTestResult - * Outputs : heatersSelfTestResult - * @return state (HEATERS_SELF_TEST_STATES_T) + * @details Inputs: heatersSelfTestResult + * @details Outputs: heatersSelfTestResult + * @return next state *************************************************************************/ static HEATERS_SELF_TEST_STATES_T handleHeatersSelfTestMainPrimaryHeater( void ) { HEATERS_SELF_TEST_STATES_T state = HEATERS_SELF_TEST_MAIN_PRIMARY_HEATER; if ( didTimeout( selfTestElapsedTime, HEATERS_POST_HEAT_UP_TIME_SECONDS ) ) { - setMainPrimaryHeaterPWM( 0 ); + setMainPrimaryHeaterPWM( 0.0 ); F32 convertedTemperature = getTemperatureValue( TEMPSENSORS_PRIMARY_HEATER_INTERNAL ); if ( fabs( convertedTemperature - MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE ) > HEATERS_POST_TEMPERATURE_TOLERANCE ) { - //TODO alarm - // TODO POST failed + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_HEATERS_FAULT, HEATERS_SELF_TEST_MAIN_PRIMARY_HEATER ); heatersSelfTestResult = SELF_TEST_STATUS_FAILED; } else @@ -509,12 +509,11 @@ /*********************************************************************//** * @brief - * The handlePrimaryHeaterStateOff function handles the primary heaters at - * off state. - * @details - * Inputs : hasStartPrimaryHeaterRequested, isPrimaryHeaterOn - * Outputs : state (PRIMARY_HEATERS_EXEC_STATES_T), isPrimaryHeaterOn - * @return state (PRIMARY_HEATERS_EXEC_STATES_T) + * The handlePrimaryHeaterStateOff function handles the primary heaters off + * state. + * @details Inputs: hasStartPrimaryHeaterRequested, isPrimaryHeaterOn + * @details Outputs: hasStartPrimaryHeaterRequested, isPrimaryHeaterOn + * @return next state *************************************************************************/ static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateOff( void ) { @@ -549,21 +548,18 @@ state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; } - publishHeatersData(); - return state; } /*********************************************************************//** * @brief * The handlePrimaryHeaterStateControlToTarget function handles the primary * heaters at control state when the heaters are active. - * @details - * Inputs : primaryHeaterTimerCounter, mainPrimaryHeaterDutyCycle, + * @details Inputs: primaryHeaterTimerCounter, mainPrimaryHeaterDutyCycle, * smallPrimaryHeaterDutyCycle, isPrimaryHeaterOn - * Outputs : primaryHeaterTimerCounter, mainPrimaryHeaterDutyCycle, - * smallPrimaryHeaterDutyCycle - * @return state (PRIMARY_HEATERS_EXEC_STATES_T) + * @details Outputs: primaryHeaterTimerCounter, mainPrimaryHeaterDutyCycle, + * smallPrimaryHeaterDutyCycle, isPrimaryHeaterOn + * @return next state *************************************************************************/ static PRIMARY_HEATERS_EXEC_STATES_T handlePrimaryHeaterStateControlToTarget( void ) { @@ -593,8 +589,6 @@ primaryHeaterTimerCounter = 0; } - publishHeatersData(); - // TODO remove this code #ifdef DEBUG_ENABLED #ifdef ENABLE_DIP_SWITCHES @@ -623,12 +617,11 @@ /*********************************************************************//** * @brief - * The handleTrimmerHeaterStateOff function handles the trimmer heater at + * The handleTrimmerHeaterStateOff function handles the trimmer heater * off state. - * @details - * Inputs : hasStartTrimmerHeaterRequested, isTrimmerHeaterOn - * Outputs : state (TRIMMER_HEATER_EXEC_STATES_T), isTrimmerHeaterOn - * @return state (TRIMMER_HEATER_EXEC_STATES_T) + * @details Inputs: hasStartTrimmerHeaterRequested, isTrimmerHeaterOn + * @details Outputs: hasStartTrimmerHeaterRequested, isTrimmerHeaterOn + * @return next state *************************************************************************/ static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterStateOff( void ) { @@ -666,34 +659,30 @@ state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; } - publishHeatersData(); - return state; } /*********************************************************************//** * @brief * The handleTrimmerHeaterControlToTarget function handles the trimmer * heater at control state when the heater is active. - * @details - * Inputs : trimmerHeaterTimerCounter, trimmerHeaterDutyCycle - * Outputs : trimmerHeaterTimerCounter, trimmerHeaterDutyCycle, isTrimmerHeaterOn - * @return state (TRIMMER_HEATER_EXEC_STATES_T) + * @details Inputs: trimmerHeaterTimerCounter, trimmerHeaterDutyCycle, + * isTrimmerHeaterOn + * @details Outputs: trimmerHeaterTimerCounter, trimmerHeaterDutyCycle + * @return next state *************************************************************************/ static TRIMMER_HEATER_EXEC_STATES_T handleTrimmerHeaterControlToTarget( void ) { TRIMMER_HEATER_EXEC_STATES_T state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; if ( ++trimmerHeaterTimerCounter >= CONTROLLER_CHECK_INTERVAL_COUNT ) { - F32 outletTemp = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANCY ); + F32 outletTemp = getTemperatureValue( TEMPSENSORS_OUTLET_REDUNDANT ); trimmerHeaterDutyCycle = runPIController( PI_CONTROLLER_ID_TRIMMER_HEATER, trimmerHeaterTargetTemperature, outletTemp ); setTrimmerHeaterPWM( trimmerHeaterDutyCycle ); trimmerHeaterTimerCounter = 0; } - publishHeatersData(); - // TODO remove this code #ifdef DEBUG_ENABLED #ifdef ENABLE_DIP_SWITCHES @@ -726,10 +715,10 @@ /*********************************************************************//** * @brief - * The setMainPrimaryHeaterPWM function sets the PWM of the main primary heater. - * @details - * Inputs : none - * Outputs : Sets the PWM duty cycle for the main primary heater + * The setMainPrimaryHeaterPWM function sets the PWM of the main primary + * heater. + * @details Inputs: none + * @details Outputs: none * @param pwm PWM duty cycle to set for 1st primary heater element * @return none *************************************************************************/ @@ -740,10 +729,10 @@ /*********************************************************************//** * @brief - * The setSmallPrimaryHeaterPWM function sets the PWM of the small primary heater. - * @details - * Inputs : none - * Outputs : Sets the PWM duty cycle for the small primary heater + * The setSmallPrimaryHeaterPWM function sets the PWM of the small primary + * heater. + * @details Inputs: none + * @details Outputs: none * @param pwm PWM duty cycle to set for 2nd primary heater element * @return none *************************************************************************/ @@ -755,9 +744,8 @@ /*********************************************************************//** * @brief * The setTrimmerHeaterPWM function sets the PWM of the trimmer heater. - * @details - * Inputs : none - * Outputs : Sets the PWM duty cycle for the trimmer heater + * @detailsInputs: none + * @details Outputs: none * @param pwm PWM duty cycle to set for trimmer heater * @return none *************************************************************************/ @@ -768,11 +756,12 @@ /*********************************************************************//** * @brief - * The resetHeaterState function resets the PI controller of the selected heater. - * @details - * Inputs : mainPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle - * Outputs : mainPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle - * @param heater enumeration of the heater for which the PI controller will be reset + * The resetHeaterState function resets the PI controller of the selected + * heater. + * @details Inputs: mainPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle + * @details Outputs: mainPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle + * @param heater enumeration of the heater for which the PI controller + * will be reset * @return none *************************************************************************/ static void resetHeaterState( NAME_OF_HEATER_T heater ) @@ -792,10 +781,9 @@ /*********************************************************************//** * @brief * The getPublishHeatersDataInterval function gets the publish interval. - * @details - * Inputs : heatersDataPublishInterval - * Outputs : none - * @return result + * @details Inputs: heatersDataPublishInterval + * @details Outputs: none + * @return data publish interval *************************************************************************/ U32 getPublishHeatersDataInterval( void ) { @@ -812,36 +800,23 @@ /*********************************************************************//** * @brief * The publishTemperatureData function publishes the temperature sensors - * data into the USB debug port at the defined time interval. - * @details - * Inputs : dataPublicationTimerCounter - * Outputs : Broadcast temperature sensors' data + * data. + * @details Inputs: dataPublicationTimerCounter + * @details Outputs: dataPublicationTimerCounter * @return none *************************************************************************/ static void publishHeatersData( void ) { if ( ++dataPublicationTimerCounter >= getPublishHeatersDataInterval() ) { - broadcastHeatersData( (U32)(mainPrimaryHeaterDutyCycle*100), (U32)(smallPrimaryHeaterDutyCycle*100), (U32)(trimmerHeaterDutyCycle*100) ); - //NOTE: This section will be removed -#ifdef DEBUG_ENABLED -#ifdef HEATERS_DEBUG - { - char debugTempStr[ 256 ]; - sprintf( debugTempStr, "TPo: %6.2f, PriCJ: %6.2f, PriTC: %6.2f, TpriInt: %6.2f, TRo: %6.2f, TriCJ: %6.2f, TriTC: %6.2f, TtriInt: %6.2f\r\n", - getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER ), - getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ), - getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ), - getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL ), - getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY ), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL ) ); + HEATERS_DATA_T heatersData; - sendDebugData ( (U08*)debugTempStr, strlen(debugTempStr) ); - } -#endif -#endif + heatersData.mainPrimaryDutyCycle = mainPrimaryHeaterDutyCycle * 100; + heatersData.smallPrimaryDutyCycle = smallPrimaryHeaterDutyCycle * 100; + heatersData.trimmerDutyCycle = trimmerHeaterDutyCycle * 100; + + broadcastHeatersData( &heatersData ); + dataPublicationTimerCounter = 0; } } @@ -856,10 +831,10 @@ * @brief * The testSetHeatersPublishIntervalOverride function overrides the heaters * publish data time interval. - * @details - * Inputs : heatersDataPublishInterval - * Outputs : heatersDataPublishInterval - * @return result + * @details Inputs: heatersDataPublishInterval + * @details Outputs: heatersDataPublishInterval + * @param value which is the data publish interval + * @return data publish interval override *************************************************************************/ BOOL testSetHeatersPublishIntervalOverride( U32 value ) { @@ -881,10 +856,9 @@ * @brief * The testResetHeatersPublishIntervalOverride function resets the heaters * publish time interval to its previous time interval. - * @details - * Inputs : heatersDataPublishInterval - * Outputs : heatersDataPublishInterval - * @return result + * @details Inputs: heatersDataPublishInterval + * @details Output : heatersDataPublishInterval + * @return returns TRUE if reset was successful *************************************************************************/ BOOL testResetHeatersPublishIntervalOverride( void ) {