overheating
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good

This commit is contained in:
Irini Kosmidou 2023-03-09 16:53:48 +01:00
parent 224a3af6f8
commit c63b13fc40
2 changed files with 57 additions and 2 deletions

View File

@ -14,6 +14,7 @@
#include <mission/devices/devicedefinitions/payloadPcduDefinitions.h> #include <mission/devices/devicedefinitions/payloadPcduDefinitions.h>
#include <mission/devices/devicedefinitions/rwHelpers.h> #include <mission/devices/devicedefinitions/rwHelpers.h>
#include <objects/systemObjectList.h> #include <objects/systemObjectList.h>
#include <eive/objects.h>
ThermalController::ThermalController(object_id_t objectId, HeaterHandler& heater) ThermalController::ThermalController(object_id_t objectId, HeaterHandler& heater)
: ExtendedControllerBase(objectId), : ExtendedControllerBase(objectId),
@ -1081,6 +1082,9 @@ void ThermalController::ctrlStr() {
sensors[2].second = sensorTemperatures.sensor_dro.value; sensors[2].second = sensorTemperatures.sensor_dro.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_5_STR, heater::HEATER_6_DRO, strLimits); 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() { void ThermalController::ctrlIfBoard() {
@ -1146,8 +1150,9 @@ void ThermalController::ctrlSBandTransceiver() {
ctrlComponentTemperature(heater::HEATER_7_S_BAND, heater::HEATER_4_CAMERA, ctrlComponentTemperature(heater::HEATER_7_S_BAND, heater::HEATER_4_CAMERA,
sBandTransceiverLimits); sBandTransceiverLimits);
if (componentAboveCutOffLimit) { if (componentAboveCutOffLimit) {
triggerEvent(SYRLINKS_OVERHEATING); triggerEvent(SYRLINKS_OVERHEATING); //TODO: TEMP mitgeben
} }
} }
void ThermalController::ctrlPcduP60Board() { void ThermalController::ctrlPcduP60Board() {
thermalComponent = PCDUP60_BOARD; thermalComponent = PCDUP60_BOARD;
@ -1184,6 +1189,9 @@ void ThermalController::ctrlPcduAcu() {
ctrlHeater(switchNr, redSwitchNr, pcduAcuLimits); ctrlHeater(switchNr, redSwitchNr, pcduAcuLimits);
} }
} }
if (componentAboveOpUpperLimit){
EventManagerIF::triggerEvent(objects::PCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH);
}
} }
void ThermalController::ctrlPcduPdu() { void ThermalController::ctrlPcduPdu() {
@ -1196,6 +1204,9 @@ void ThermalController::ctrlPcduPdu() {
sensors[2].second = sensorTemperatures.tmp1075Tcs0.value; sensors[2].second = sensorTemperatures.tmp1075Tcs0.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD, pcduPduLimits); 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() { void ThermalController::ctrlPlPcduBoard() {
@ -1229,6 +1240,9 @@ void ThermalController::ctrlPlocMissionBoard() {
if (componentAboveCutOffLimit) { if (componentAboveCutOffLimit) {
triggerEvent(PLOC_OVERHEATING); triggerEvent(PLOC_OVERHEATING);
} }
if (componentAboveOpUpperLimit){
EventManagerIF::triggerEvent(objects::PLOC_MPSOC_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH);
}
} }
void ThermalController::ctrlPlocProcessingBoard() { void ThermalController::ctrlPlocProcessingBoard() {
@ -1242,6 +1256,9 @@ void ThermalController::ctrlPlocProcessingBoard() {
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD,
plocProcessingBoardLimits); plocProcessingBoardLimits);
if (componentAboveOpUpperLimit){
EventManagerIF::triggerEvent(objects::PLOC_MPSOC_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH);
}
} }
void ThermalController::ctrlDac() { void ThermalController::ctrlDac() {
@ -1254,6 +1271,9 @@ void ThermalController::ctrlDac() {
sensors[2].second = sensorTemperatures.sensor_ploc_heatspreader.value; sensors[2].second = sensorTemperatures.sensor_ploc_heatspreader.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, dacLimits); 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() { void ThermalController::ctrlCameraBody() {
@ -1266,6 +1286,9 @@ void ThermalController::ctrlCameraBody() {
sensors[2].second = sensorTemperatures.sensor_mpa.value; sensors[2].second = sensorTemperatures.sensor_mpa.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_4_CAMERA, heater::HEATER_6_DRO, cameraLimits); ctrlComponentTemperature(heater::HEATER_4_CAMERA, heater::HEATER_6_DRO, cameraLimits);
// if (componentAboveOpUpperLimit){
// EventManagerIF::triggerEvent(objects::, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH);
// }
} }
void ThermalController::ctrlDro() { void ThermalController::ctrlDro() {
@ -1278,6 +1301,9 @@ void ThermalController::ctrlDro() {
sensors[2].second = sensorTemperatures.sensor_mpa.value; sensors[2].second = sensorTemperatures.sensor_mpa.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, droLimits); 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() { void ThermalController::ctrlX8() {
@ -1290,6 +1316,9 @@ void ThermalController::ctrlX8() {
sensors[2].second = sensorTemperatures.sensor_tx_modul.value; sensors[2].second = sensorTemperatures.sensor_tx_modul.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, x8Limits); 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() { void ThermalController::ctrlTx() {
@ -1302,6 +1331,9 @@ void ThermalController::ctrlTx() {
sensors[2].second = sensorTemperatures.sensor_mpa.value; sensors[2].second = sensorTemperatures.sensor_mpa.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, txLimits); 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() { void ThermalController::ctrlMpa() {
@ -1314,6 +1346,9 @@ void ThermalController::ctrlMpa() {
sensors[2].second = sensorTemperatures.sensor_tx_modul.value; sensors[2].second = sensorTemperatures.sensor_tx_modul.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, mpaLimits); 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() { void ThermalController::ctrlHpa() {
@ -1329,6 +1364,9 @@ void ThermalController::ctrlHpa() {
if (componentAboveCutOffLimit) { if (componentAboveCutOffLimit) {
triggerEvent(HPA_OVERHEATING); triggerEvent(HPA_OVERHEATING);
} }
if (componentAboveOpUpperLimit){
EventManagerIF::triggerEvent(objects::PLPCDU_HANDLER, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH);
}
} }
void ThermalController::ctrlScexBoard() { void ThermalController::ctrlScexBoard() {
@ -1341,6 +1379,9 @@ void ThermalController::ctrlScexBoard() {
sensors[2].second = sensorTemperatures.sensor_hpa.value; sensors[2].second = sensorTemperatures.sensor_hpa.value;
numSensors = 3; numSensors = 3;
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_5_STR, scexBoardLimits); ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_5_STR, scexBoardLimits);
if (componentAboveOpUpperLimit){
EventManagerIF::triggerEvent(objects::SCEX, ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH);
}
} }
void ThermalController::performThermalModuleCtrl() { void ThermalController::performThermalModuleCtrl() {
@ -1381,7 +1422,7 @@ void ThermalController::ctrlComponentTemperature(heater::Switchers switchNr,
redSwitchNr)) { // TODO: muss der Heater dann wirklich abgeschalten werden? redSwitchNr)) { // TODO: muss der Heater dann wirklich abgeschalten werden?
if (heaterHandler.checkSwitchState(switchNr)) { if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF); 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, void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers redSwitchNr,
struct TempLimits& tempLimit) { struct TempLimits& tempLimit) {
componentAboveCutOffLimit = false; componentAboveCutOffLimit = false;
componentAboveOpUpperLimit = false;
// if Heater off // if Heater off
if (not heaterStates[switchNr].switchTransition) { if (not heaterStates[switchNr].switchTransition) {
if (not heaterHandler.checkSwitchState(switchNr)) { if (not heaterHandler.checkSwitchState(switchNr)) {
@ -1453,6 +1495,18 @@ void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers
thermalStates[thermalComponent].heating = false; thermalStates[thermalComponent].heating = false;
} }
} else { } 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) { if (sensorTemp >= tempLimit.cutOffLimit) {
componentAboveCutOffLimit = true; componentAboveCutOffLimit = true;
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF); heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);

View File

@ -193,6 +193,7 @@ class ThermalController : public ExtendedControllerBase {
ThermalComponents thermalComponent = NONE; ThermalComponents thermalComponent = NONE;
bool redSwitchNrInUse = false; bool redSwitchNrInUse = false;
bool componentAboveCutOffLimit = false; bool componentAboveCutOffLimit = false;
bool componentAboveOpUpperLimit = false;
std::array<ThermalState, 30> thermalStates{}; std::array<ThermalState, 30> thermalStates{};
std::array<HeaterState, 7> heaterStates{}; std::array<HeaterState, 7> heaterStates{};