From 1c93f51f69c657ddf406646f8f0fc279f2781e93 Mon Sep 17 00:00:00 2001 From: meggert Date: Sat, 16 Mar 2024 13:48:49 +0100 Subject: [PATCH 1/7] prevent switching of heaters in external control --- mission/controller/ThermalController.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mission/controller/ThermalController.cpp b/mission/controller/ThermalController.cpp index 2729cec0..7d8d99a0 100644 --- a/mission/controller/ThermalController.cpp +++ b/mission/controller/ThermalController.cpp @@ -1792,7 +1792,8 @@ void ThermalController::heaterMaxDurationControl( 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 (heaterHandler.getHealth(static_cast(i)) != HasHealthIF::EXTERNAL_CONTROL and + currentHeaterStates[i] == heater::SwitchState::ON and heaterStates[i].trackHeaterMaxBurnTime and heaterStates[i].heaterOnMaxBurnTime.hasTimedOut()) { heaterStates[i].switchTransition = false; -- 2.43.0 From c65e813e94a40801cf621179f3b7fee044941090 Mon Sep 17 00:00:00 2001 From: meggert Date: Sat, 16 Mar 2024 13:53:22 +0100 Subject: [PATCH 2/7] changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1086a9f..b9fd085c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,11 @@ will consitute of a breaking change warranting a new major release: # [unreleased] +## Fixed + +- Heaters set to `EXTERNAL CONTROL` no longer can be switched off by the `TCS Controller`, if + they violate the maximum burn duration of the controller. + # [v7.7.2] 2024-03-06 ## Fixed -- 2.43.0 From 36edd3e3241d77c8a6fa25ba45ccb1a98a6b29c9 Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 18 Mar 2024 10:33:51 +0100 Subject: [PATCH 3/7] changed lower op limits for ploc --- mission/controller/ThermalController.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mission/controller/ThermalController.h b/mission/controller/ThermalController.h index 1062fe97..6b6d9cde 100644 --- a/mission/controller/ThermalController.h +++ b/mission/controller/ThermalController.h @@ -197,9 +197,9 @@ class ThermalController : public ExtendedControllerBase { tcsCtrl::TempLimits pcduAcuLimits = tcsCtrl::TempLimits(-35.0, -35.0, 80.0, 85.0, 85.0); tcsCtrl::TempLimits pcduPduLimits = tcsCtrl::TempLimits(-35.0, -35.0, 80.0, 85.0, 85.0); tcsCtrl::TempLimits plPcduBoardLimits = tcsCtrl::TempLimits(-55.0, -40.0, 80.0, 85.0, 125.0); - tcsCtrl::TempLimits plocMissionBoardLimits = tcsCtrl::TempLimits(-30.0, -10.0, 40.0, 45.0, 60); + tcsCtrl::TempLimits plocMissionBoardLimits = tcsCtrl::TempLimits(-30.0, -5.0, 40.0, 45.0, 60); tcsCtrl::TempLimits plocProcessingBoardLimits = - tcsCtrl::TempLimits(-30.0, -10.0, 40.0, 45.0, 60.0); + tcsCtrl::TempLimits(-30.0, -5.0, 40.0, 45.0, 60.0); tcsCtrl::TempLimits dacLimits = tcsCtrl::TempLimits(-65.0, -40.0, 113.0, 118.0, 150.0); tcsCtrl::TempLimits cameraLimits = tcsCtrl::TempLimits(-40.0, -30.0, 60.0, 65.0, 85.0); tcsCtrl::TempLimits droLimits = tcsCtrl::TempLimits(-40.0, -30.0, 75.0, 80.0, 90.0); -- 2.43.0 From 096328aadca7d839b7721739bffba6878715ec74 Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 18 Mar 2024 10:34:21 +0100 Subject: [PATCH 4/7] backup heater will not be chosen if heater is on ext ctrl and on --- mission/controller/ThermalController.cpp | 26 ++++++++++++++---------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/mission/controller/ThermalController.cpp b/mission/controller/ThermalController.cpp index 7d8d99a0..31c5f663 100644 --- a/mission/controller/ThermalController.cpp +++ b/mission/controller/ThermalController.cpp @@ -1641,21 +1641,25 @@ bool ThermalController::chooseHeater(heater::Switch& switchNr, heater::Switch re bool heaterAvailable = true; HasHealthIF::HealthState mainHealth = heaterHandler.getHealth(switchNr); + heater::SwitchState mainState = heaterHandler.getSwitchState(switchNr); HasHealthIF::HealthState redHealth = heaterHandler.getHealth(redSwitchNr); - if (mainHealth != HasHealthIF::HEALTHY) { - if (redHealth == HasHealthIF::HEALTHY) { - switchNr = redSwitchNr; - ctrlCtx.redSwitchNrInUse = true; - } else { - heaterAvailable = false; - // Special case: Ground might command/do something with the heaters, so prevent spam. - if (not(mainHealth == EXTERNAL_CONTROL and redHealth == EXTERNAL_CONTROL)) { - triggerEvent(tcsCtrl::NO_HEALTHY_HEATER_AVAILABLE, switchNr, redSwitchNr); + if (not(mainHealth == HasHealthIF::EXTERNAL_CONTROL and mainState == heater::SwitchState::ON)) { + if (mainHealth != HasHealthIF::HEALTHY) { + if (redHealth == HasHealthIF::HEALTHY) { + switchNr = redSwitchNr; + ctrlCtx.redSwitchNrInUse = true; + } else { + heaterAvailable = false; + // Special case: Ground might command/do something with the heaters, so prevent spam. + if (not(mainHealth == EXTERNAL_CONTROL and redHealth == EXTERNAL_CONTROL)) { + triggerEvent(tcsCtrl::NO_HEALTHY_HEATER_AVAILABLE, switchNr, redSwitchNr); + } } + } else { + ctrlCtx.redSwitchNrInUse = false; } - } else { - ctrlCtx.redSwitchNrInUse = false; } + return heaterAvailable; } -- 2.43.0 From 950e86ce4bc4fa540c82061c1c81a7cd94cc8654 Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 18 Mar 2024 10:56:57 +0100 Subject: [PATCH 5/7] cleaner solution --- mission/controller/ThermalController.cpp | 30 +++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/mission/controller/ThermalController.cpp b/mission/controller/ThermalController.cpp index 31c5f663..ef21f2d9 100644 --- a/mission/controller/ThermalController.cpp +++ b/mission/controller/ThermalController.cpp @@ -1643,21 +1643,22 @@ bool ThermalController::chooseHeater(heater::Switch& switchNr, heater::Switch re HasHealthIF::HealthState mainHealth = heaterHandler.getHealth(switchNr); heater::SwitchState mainState = heaterHandler.getSwitchState(switchNr); HasHealthIF::HealthState redHealth = heaterHandler.getHealth(redSwitchNr); - if (not(mainHealth == HasHealthIF::EXTERNAL_CONTROL and mainState == heater::SwitchState::ON)) { - if (mainHealth != HasHealthIF::HEALTHY) { - if (redHealth == HasHealthIF::HEALTHY) { - switchNr = redSwitchNr; - ctrlCtx.redSwitchNrInUse = true; - } else { - heaterAvailable = false; - // Special case: Ground might command/do something with the heaters, so prevent spam. - if (not(mainHealth == EXTERNAL_CONTROL and redHealth == EXTERNAL_CONTROL)) { - triggerEvent(tcsCtrl::NO_HEALTHY_HEATER_AVAILABLE, switchNr, redSwitchNr); - } - } + if (mainHealth == HasHealthIF::EXTERNAL_CONTROL and mainState == heater::SwitchState::ON) { + return false; + } + if (mainHealth != HasHealthIF::HEALTHY) { + if (redHealth == HasHealthIF::HEALTHY) { + switchNr = redSwitchNr; + ctrlCtx.redSwitchNrInUse = true; } else { - ctrlCtx.redSwitchNrInUse = false; + heaterAvailable = false; + // Special case: Ground might command/do something with the heaters, so prevent spam. + if (not(mainHealth == EXTERNAL_CONTROL and redHealth == EXTERNAL_CONTROL)) { + triggerEvent(tcsCtrl::NO_HEALTHY_HEATER_AVAILABLE, switchNr, redSwitchNr); + } } + } else { + ctrlCtx.redSwitchNrInUse = false; } return heaterAvailable; @@ -1714,7 +1715,8 @@ void ThermalController::checkLimitsAndCtrlHeater(HeaterContext& htrCtx) { if (thermalStates[ctrlCtx.thermalComponent].heating) { // We are already in a heating cycle, so need to check whether heating task is complete. if (ctrlCtx.sensorTemp >= htrCtx.tempLimit.opLowerLimit + TEMP_OFFSET and - heaterCtrlAllowed()) { + heaterCtrlAllowed() /*and + heaterHandler.getHealth(htrCtx.switchNr) != HasHealthIF::EXTERNAL_CONTROL*/) { sif::info << "TCS: Heater " << static_cast(ctrlCtx.thermalComponent) << " OFF" << std::endl; heaterSwitchHelper(htrCtx.switchNr, heater::SwitchState::OFF, ctrlCtx.thermalComponent); -- 2.43.0 From 311ecd7fd23b186fcd2acac2d845e16c0146b1c3 Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 18 Mar 2024 10:58:19 +0100 Subject: [PATCH 6/7] changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9fd085c..68bb84a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,12 @@ will consitute of a breaking change warranting a new major release: - Heaters set to `EXTERNAL CONTROL` no longer can be switched off by the `TCS Controller`, if they violate the maximum burn duration of the controller. +## Changed + +- If a primary heater is set to `EXTERNAL CONTROL` and `ON`, the `TCS Controller` will no + try to control the temperature of that object. +- Set lower OP limit of `PLOC` to -5°C. + # [v7.7.2] 2024-03-06 ## Fixed -- 2.43.0 From 67e6ccf4aef23bbb87ea42a06a9f44897f61eda5 Mon Sep 17 00:00:00 2001 From: meggert Date: Mon, 18 Mar 2024 11:00:29 +0100 Subject: [PATCH 7/7] cleanup --- mission/controller/ThermalController.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mission/controller/ThermalController.cpp b/mission/controller/ThermalController.cpp index ef21f2d9..c406a5be 100644 --- a/mission/controller/ThermalController.cpp +++ b/mission/controller/ThermalController.cpp @@ -1715,8 +1715,7 @@ void ThermalController::checkLimitsAndCtrlHeater(HeaterContext& htrCtx) { if (thermalStates[ctrlCtx.thermalComponent].heating) { // We are already in a heating cycle, so need to check whether heating task is complete. if (ctrlCtx.sensorTemp >= htrCtx.tempLimit.opLowerLimit + TEMP_OFFSET and - heaterCtrlAllowed() /*and - heaterHandler.getHealth(htrCtx.switchNr) != HasHealthIF::EXTERNAL_CONTROL*/) { + heaterCtrlAllowed()) { sif::info << "TCS: Heater " << static_cast(ctrlCtx.thermalComponent) << " OFF" << std::endl; heaterSwitchHelper(htrCtx.switchNr, heater::SwitchState::OFF, ctrlCtx.thermalComponent); -- 2.43.0