overheating
EIVE/eive-obsw/pipeline/pr-develop This commit looks good Details

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/rwHelpers.h>
#include <objects/systemObjectList.h>
#include <eive/objects.h>
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);

View File

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