v6.1.0-branch #750
@ -43,6 +43,8 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
|
|
||||||
- Two events for heaters being commanded ON and OFF by the TCS controller
|
- Two events for heaters being commanded ON and OFF by the TCS controller
|
||||||
- Upper limit for burn time of TCS heaters. Currently set to 1 hour for each heater.
|
- Upper limit for burn time of TCS heaters. Currently set to 1 hour for each heater.
|
||||||
|
This mechanism will only track the burn time for heaters which were commanded by the
|
||||||
|
TCS controller.
|
||||||
- TCS controller is now observable by introducing a new HK dataset which exposes some internal
|
- TCS controller is now observable by introducing a new HK dataset which exposes some internal
|
||||||
fields related to TCS control.
|
fields related to TCS control.
|
||||||
|
|
||||||
|
@ -1781,9 +1781,11 @@ void ThermalController::heaterTransitionControl(
|
|||||||
if (currentHeaterStates[i] == heaterStates[i].target) {
|
if (currentHeaterStates[i] == heaterStates[i].target) {
|
||||||
// Required for max heater period control
|
// Required for max heater period control
|
||||||
if (currentHeaterStates[i] == heater::SwitchState::ON) {
|
if (currentHeaterStates[i] == heater::SwitchState::ON) {
|
||||||
heaterStates[i].heaterOnPeriod.setTimeout(MAX_HEATER_ON_DURATIONS_MS[i]);
|
heaterStates[i].heaterOnMaxBurnTime.setTimeout(MAX_HEATER_ON_DURATIONS_MS[i]);
|
||||||
heaterStates[i].heaterOnPeriod.resetTimer();
|
heaterStates[i].heaterOnMaxBurnTime.resetTimer();
|
||||||
|
heaterStates[i].trackHeaterMaxBurnTime = true;
|
||||||
} else {
|
} else {
|
||||||
|
heaterStates[i].trackHeaterMaxBurnTime = false;
|
||||||
// The heater might still be one for some thermal components, so cross-check
|
// The heater might still be one for some thermal components, so cross-check
|
||||||
// those components
|
// those components
|
||||||
crossCheckHeaterStateOfComponentsWhenHeaterGoesOff(static_cast<heater::Switch>(i));
|
crossCheckHeaterStateOfComponentsWhenHeaterGoesOff(static_cast<heater::Switch>(i));
|
||||||
@ -1804,10 +1806,14 @@ void ThermalController::heaterTransitionControl(
|
|||||||
void ThermalController::heaterMaxDurationControl(
|
void ThermalController::heaterMaxDurationControl(
|
||||||
const tcsCtrl::HeaterSwitchStates& currentHeaterStates) {
|
const tcsCtrl::HeaterSwitchStates& currentHeaterStates) {
|
||||||
for (unsigned i = 0; i < heater::Switch::NUMBER_OF_SWITCHES; i++) {
|
for (unsigned i = 0; i < heater::Switch::NUMBER_OF_SWITCHES; i++) {
|
||||||
|
// Right now, we only track the maximum duration for heater which were commanded by the TCS
|
||||||
|
// controller.
|
||||||
if (currentHeaterStates[i] == heater::SwitchState::ON and
|
if (currentHeaterStates[i] == heater::SwitchState::ON and
|
||||||
heaterStates[i].heaterOnPeriod.hasTimedOut()) {
|
heaterStates[i].trackHeaterMaxBurnTime and
|
||||||
|
heaterStates[i].heaterOnMaxBurnTime.hasTimedOut()) {
|
||||||
heaterStates[i].switchTransition = false;
|
heaterStates[i].switchTransition = false;
|
||||||
heaterStates[i].heaterSwitchControlCycles = 0;
|
heaterStates[i].heaterSwitchControlCycles = 0;
|
||||||
|
heaterStates[i].trackHeaterMaxBurnTime = false;
|
||||||
heaterHandler.switchHeater(static_cast<heater::Switch>(i), heater::SwitchState::OFF);
|
heaterHandler.switchHeater(static_cast<heater::Switch>(i), heater::SwitchState::OFF);
|
||||||
triggerEvent(tcsCtrl::TCS_HEATER_MAX_BURN_TIME_REACHED, static_cast<uint32_t>(i),
|
triggerEvent(tcsCtrl::TCS_HEATER_MAX_BURN_TIME_REACHED, static_cast<uint32_t>(i),
|
||||||
MAX_HEATER_ON_DURATIONS_MS[i]);
|
MAX_HEATER_ON_DURATIONS_MS[i]);
|
||||||
@ -1815,7 +1821,7 @@ void ThermalController::heaterMaxDurationControl(
|
|||||||
// those components
|
// those components
|
||||||
crossCheckHeaterStateOfComponentsWhenHeaterGoesOff(static_cast<heater::Switch>(i));
|
crossCheckHeaterStateOfComponentsWhenHeaterGoesOff(static_cast<heater::Switch>(i));
|
||||||
} else if (currentHeaterStates[i] == heater::SwitchState::OFF) {
|
} else if (currentHeaterStates[i] == heater::SwitchState::OFF) {
|
||||||
heaterStates[i].heaterOnPeriod.resetTimer();
|
heaterStates[i].heaterOnMaxBurnTime.resetTimer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,10 +51,11 @@ struct ThermalState {
|
|||||||
* Abstraction for the state of a single heater.
|
* Abstraction for the state of a single heater.
|
||||||
*/
|
*/
|
||||||
struct HeaterState {
|
struct HeaterState {
|
||||||
bool switchTransition;
|
bool switchTransition = false;
|
||||||
heater::SwitchState target;
|
heater::SwitchState target = heater::SwitchState::OFF;
|
||||||
uint8_t heaterSwitchControlCycles;
|
uint8_t heaterSwitchControlCycles = 0;
|
||||||
Countdown heaterOnPeriod;
|
bool trackHeaterMaxBurnTime = false;
|
||||||
|
Countdown heaterOnMaxBurnTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
using HeaterSwitchStates = std::array<heater::SwitchState, heater::NUMBER_OF_SWITCHES>;
|
using HeaterSwitchStates = std::array<heater::SwitchState, heater::NUMBER_OF_SWITCHES>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user