diff --git a/mission/controller/ThermalController.cpp b/mission/controller/ThermalController.cpp index fe104fa3..e9bd3ad1 100644 --- a/mission/controller/ThermalController.cpp +++ b/mission/controller/ThermalController.cpp @@ -14,6 +14,7 @@ #include #include #include +#include ThermalController::ThermalController(object_id_t objectId, HeaterHandler& heater) : ExtendedControllerBase(objectId), @@ -1081,6 +1082,9 @@ void ThermalController::ctrlStr() { sensors[2].second = sensorTemperatures.sensor_dro.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_5_STR, heater::HEATER_6_DRO, strLimits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::STAR_TRACKER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlIfBoard() { @@ -1146,8 +1150,9 @@ void ThermalController::ctrlSBandTransceiver() { ctrlComponentTemperature(heater::HEATER_7_S_BAND, heater::HEATER_4_CAMERA, sBandTransceiverLimits); if (componentAboveCutOffLimit) { - triggerEvent(SYRLINKS_OVERHEATING); + triggerEvent(SYRLINKS_OVERHEATING); //TODO: TEMP mitgeben } + } void ThermalController::ctrlPcduP60Board() { thermalComponent = PCDUP60_BOARD; @@ -1184,6 +1189,9 @@ void ThermalController::ctrlPcduAcu() { ctrlHeater(switchNr, redSwitchNr, pcduAcuLimits); } } + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlPcduPdu() { @@ -1196,6 +1204,9 @@ void ThermalController::ctrlPcduPdu() { sensors[2].second = sensorTemperatures.tmp1075Tcs0.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD, pcduPduLimits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlPlPcduBoard() { @@ -1229,6 +1240,9 @@ void ThermalController::ctrlPlocMissionBoard() { if (componentAboveCutOffLimit) { triggerEvent(PLOC_OVERHEATING); } + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PLOC_MPSOC_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlPlocProcessingBoard() { @@ -1242,6 +1256,9 @@ void ThermalController::ctrlPlocProcessingBoard() { numSensors = 3; ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, plocProcessingBoardLimits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PLOC_MPSOC_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlDac() { @@ -1254,6 +1271,9 @@ void ThermalController::ctrlDac() { sensors[2].second = sensorTemperatures.sensor_ploc_heatspreader.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, dacLimits); + if (componentAboveOpUpperLimit){ + //EventManagerIF::triggerEvent(objects::, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlCameraBody() { @@ -1266,6 +1286,9 @@ void ThermalController::ctrlCameraBody() { sensors[2].second = sensorTemperatures.sensor_mpa.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_4_CAMERA, heater::HEATER_6_DRO, cameraLimits); +// if (componentAboveOpUpperLimit){ +// EventManagerIF::triggerEvent(objects::, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); +// } } void ThermalController::ctrlDro() { @@ -1278,6 +1301,9 @@ void ThermalController::ctrlDro() { sensors[2].second = sensorTemperatures.sensor_mpa.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, droLimits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PLPCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlX8() { @@ -1290,6 +1316,9 @@ void ThermalController::ctrlX8() { sensors[2].second = sensorTemperatures.sensor_tx_modul.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, x8Limits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PLPCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlTx() { @@ -1302,6 +1331,9 @@ void ThermalController::ctrlTx() { sensors[2].second = sensorTemperatures.sensor_mpa.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, txLimits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PLPCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlMpa() { @@ -1314,6 +1346,9 @@ void ThermalController::ctrlMpa() { sensors[2].second = sensorTemperatures.sensor_tx_modul.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, mpaLimits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PLPCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlHpa() { @@ -1329,6 +1364,9 @@ void ThermalController::ctrlHpa() { if (componentAboveCutOffLimit) { triggerEvent(HPA_OVERHEATING); } + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::PLPCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::ctrlScexBoard() { @@ -1341,6 +1379,9 @@ void ThermalController::ctrlScexBoard() { sensors[2].second = sensorTemperatures.sensor_hpa.value; numSensors = 3; ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_5_STR, scexBoardLimits); + if (componentAboveOpUpperLimit){ + EventManagerIF::triggerEvent(objects::SCEX, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH); + } } void ThermalController::performThermalModuleCtrl() { @@ -1381,7 +1422,7 @@ void ThermalController::ctrlComponentTemperature(heater::Switchers switchNr, redSwitchNr)) { // TODO: muss der Heater dann wirklich abgeschalten werden? if (heaterHandler.checkSwitchState(switchNr)) { heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF); - sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl; + sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl; // TODO: printouts löschen } } } @@ -1428,6 +1469,7 @@ bool ThermalController::chooseHeater(heater::Switchers& switchNr, heater::Switch void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers redSwitchNr, struct TempLimits& tempLimit) { componentAboveCutOffLimit = false; + componentAboveOpUpperLimit = false; // if Heater off if (not heaterStates[switchNr].switchTransition) { if (not heaterHandler.checkSwitchState(switchNr)) { @@ -1453,6 +1495,18 @@ void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers thermalStates[thermalComponent].heating = false; } } else { + // TODO: if >= opLimit -> Event; nicht für syrlinks + if (sensorTemp >= tempLimit.opUpperLimit) { + componentAboveOpUpperLimit = true; + heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF); + sif::info << "ThermalController::ctrlHeater: Reached CutOffLimit: Heater " + << thermalComponent << " OFF" << std::endl; + heaterStates[switchNr].switchTransition = true; + if (heaterHandler.checkSwitchState(redSwitchNr)) { + heaterHandler.switchHeater(redSwitchNr, HeaterHandler::SwitchState::OFF); + heaterStates[redSwitchNr].switchTransition = true; + } + } if (sensorTemp >= tempLimit.cutOffLimit) { componentAboveCutOffLimit = true; heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF); diff --git a/mission/controller/ThermalController.h b/mission/controller/ThermalController.h index cfcaf96f..7adaa2d3 100644 --- a/mission/controller/ThermalController.h +++ b/mission/controller/ThermalController.h @@ -193,6 +193,7 @@ class ThermalController : public ExtendedControllerBase { ThermalComponents thermalComponent = NONE; bool redSwitchNrInUse = false; bool componentAboveCutOffLimit = false; + bool componentAboveOpUpperLimit = false; std::array thermalStates{}; std::array heaterStates{};