ThermalController: events for overheating
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit
This commit is contained in:
parent
e46b4c51d5
commit
519d55af4b
@ -9,25 +9,16 @@
|
||||
#include <fsfw_hal/linux/spi/SpiComIF.h>
|
||||
#include <fsfw_hal/linux/spi/SpiCookie.h>
|
||||
#include <linux/callbacks/gpioCallbacks.h>
|
||||
#include <linux/devices/Max31865RtdLowlevelHandler.h>
|
||||
#include <mission/controller/AcsController.h>
|
||||
#include <mission/devices/Max31865EiveHandler.h>
|
||||
#include <mission/devices/ScexDeviceHandler.h>
|
||||
#include <mission/devices/SusHandler.h>
|
||||
#include <mission/system/fdir/RtdFdir.h>
|
||||
#include <mission/system/fdir/SusFdir.h>
|
||||
#include <mission/system/objects/SusAssembly.h>
|
||||
#include <mission/system/objects/TcsBoardAssembly.h>
|
||||
|
||||
#include "OBSWConfig.h"
|
||||
#include "devConf.h"
|
||||
#include "devices/addresses.h"
|
||||
#include "devices/gpioIds.h"
|
||||
#include "eive/definitions.h"
|
||||
#include "mission/controller/ThermalController.h"
|
||||
#include "mission/system/tree/acsModeTree.h"
|
||||
#include "mission/system/tree/payloadModeTree.h"
|
||||
#include "mission/system/tree/tcsModeTree.h"
|
||||
|
||||
void ObjectFactory::createSunSensorComponents(GpioIF* gpioComIF, SpiComIF* spiComIF,
|
||||
PowerSwitchIF* pwrSwitcher, std::string spiDev,
|
||||
|
@ -3,7 +3,6 @@
|
||||
#include <bsp_q7s/core/CoreDefinitions.h>
|
||||
#include <fsfw/datapool/PoolReadGuard.h>
|
||||
#include <fsfw/thermal/ThermalComponentIF.h>
|
||||
#include <fsfw/thermal/ThermalModuleIF.h>
|
||||
#include <fsfw_hal/devicehandlers/devicedefinitions/MgmLIS3HandlerDefs.h>
|
||||
#include <linux/devices/devicedefinitions/StarTrackerDefinitions.h>
|
||||
#include <mission/devices/devicedefinitions/BpxBatteryDefinitions.h>
|
||||
@ -989,16 +988,14 @@ void ThermalController::ctrlAcsBoard() {
|
||||
|
||||
if (heaterAvailable) {
|
||||
// A side
|
||||
chooseOf5Sensors(switchNr, deviceTemperatures.gyro0SideA, deviceTemperatures.mgm0SideA,
|
||||
deviceTemperatures.gyro1SideA, deviceTemperatures.mgm0SideA,
|
||||
sensorTemperatures.sensor_tcs_board);
|
||||
chooseOf4Sensors(switchNr, deviceTemperatures.gyro0SideA, deviceTemperatures.mgm0SideA,
|
||||
deviceTemperatures.gyro1SideA, sensorTemperatures.sensor_tcs_board);
|
||||
if (sensorTempAvailable) {
|
||||
ctrlHeater(switchNr, redSwitchNr, &acsBoardLimits);
|
||||
}
|
||||
// B side
|
||||
chooseOf5Sensors(switchNr, deviceTemperatures.gyro2SideB, deviceTemperatures.mgm2SideB,
|
||||
deviceTemperatures.gyro3SideB, deviceTemperatures.mgm2SideB,
|
||||
sensorTemperatures.sensor_tcs_board);
|
||||
chooseOf4Sensors(switchNr, deviceTemperatures.gyro2SideB, deviceTemperatures.mgm2SideB,
|
||||
deviceTemperatures.gyro3SideB, sensorTemperatures.sensor_tcs_board);
|
||||
if (sensorTempAvailable) {
|
||||
ctrlHeater(switchNr, redSwitchNr, &acsBoardLimits);
|
||||
}
|
||||
@ -1151,6 +1148,9 @@ void ThermalController::ctrlObc() {
|
||||
ctrlComponentTemperature(heater::HEATER_0_OBC_BRD, heater::HEATER_2_ACS_BRD,
|
||||
deviceTemperatures.q7s, sensorTemperatures.tmp1075Tcs1,
|
||||
sensorTemperatures.tmp1075Tcs0, &obcLimits);
|
||||
if (componentOverheating) {
|
||||
triggerEvent(OBC_OVERHEATING);
|
||||
}
|
||||
}
|
||||
|
||||
void ThermalController::ctrlObcIfBoard() {
|
||||
@ -1164,6 +1164,9 @@ void ThermalController::ctrlSBandTransceiver() {
|
||||
deviceTemperatures.syrlinksPowerAmplifier,
|
||||
deviceTemperatures.syrlinksBasebandBoard,
|
||||
sensorTemperatures.sensor_4k_camera, &sBandTransceiverLimits);
|
||||
if (componentOverheating) {
|
||||
triggerEvent(SYRLINKS_OVERHEATING);
|
||||
}
|
||||
}
|
||||
void ThermalController::ctrlPcduP60Board() {
|
||||
ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD,
|
||||
@ -1219,6 +1222,9 @@ void ThermalController::ctrlPlPcduBoard() {
|
||||
sensorTemperatures.sensor_plpcdu_heatspreader);
|
||||
if (sensorTempAvailable) {
|
||||
ctrlHeater(switchNr, redSwitchNr, &plPcduBoardLimits);
|
||||
if (componentOverheating) {
|
||||
triggerEvent(PLPCDU_OVERHEATING, switchNr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1228,6 +1234,9 @@ void ThermalController::ctrlPlocMissionBoard() {
|
||||
sensorTemperatures.sensor_ploc_heatspreader,
|
||||
sensorTemperatures.sensor_ploc_missionboard,
|
||||
sensorTemperatures.sensor_dac_heatspreader, &plocMissionBoardLimits);
|
||||
if (componentOverheating) {
|
||||
triggerEvent(PLOC_OVERHEATING);
|
||||
}
|
||||
}
|
||||
|
||||
void ThermalController::ctrlPlocProcessingBoard() {
|
||||
@ -1278,6 +1287,9 @@ void ThermalController::ctrlHpa() {
|
||||
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA,
|
||||
sensorTemperatures.sensor_hpa, sensorTemperatures.sensor_x8,
|
||||
sensorTemperatures.sensor_mpa, &hpaLimits);
|
||||
if (componentOverheating) {
|
||||
triggerEvent(HPA_OVERHEATING);
|
||||
}
|
||||
}
|
||||
|
||||
void ThermalController::ctrlScexBoard() {
|
||||
@ -1288,20 +1300,25 @@ void ThermalController::ctrlScexBoard() {
|
||||
|
||||
void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers redSwitchNr,
|
||||
struct TempLimits* tempLimit) {
|
||||
componentOverheating = false;
|
||||
// Heater off
|
||||
if (not heaterHandler.checkSwitchState(switchNr)) {
|
||||
if (sensorTemp < (*tempLimit).opLowerLimit) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::ON);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " ON" << std::endl;
|
||||
}
|
||||
// Heater on
|
||||
} else if (heaterHandler.checkSwitchState(switchNr)) {
|
||||
if (sensorTemp >= (*tempLimit).opLowerLimit + TEMP_OFFSET) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl;
|
||||
}
|
||||
} else if (not redSwitchNrInUse) {
|
||||
if (heaterHandler.checkSwitchState(redSwitchNr)) {
|
||||
if (sensorTemp >= (*tempLimit).cutOffLimit) {
|
||||
componentOverheating = true;
|
||||
heaterHandler.switchHeater(redSwitchNr, HeaterHandler::SwitchState::OFF);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater" << redSwitchNr << " OFF" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1327,15 +1344,16 @@ void ThermalController::chooseSensor(heater::Switchers switchNr, const lp_float_
|
||||
const lp_float_t& sensor2, const lp_float_t& sensor3) {
|
||||
sensorTempAvailable = true;
|
||||
|
||||
if (sensor1.isValid()) {
|
||||
if (sensor1.isValid() and sensor1.value != INVALID_TEMPERATURE) {
|
||||
sensorTemp = sensor1.value;
|
||||
} else if (sensor2.isValid()) {
|
||||
} else if (sensor2.isValid() and sensor2.value != INVALID_TEMPERATURE) {
|
||||
sensorTemp = sensor2.value;
|
||||
} else if (sensor3.isValid()) {
|
||||
} else if (sensor3.isValid() and sensor3.value != INVALID_TEMPERATURE) {
|
||||
sensorTemp = sensor3.value;
|
||||
} else {
|
||||
if (heaterHandler.checkSwitchState(switchNr)) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl;
|
||||
}
|
||||
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
|
||||
sensorTempAvailable = false;
|
||||
@ -1363,40 +1381,18 @@ void ThermalController::chooseOf4Sensors(heater::Switchers switchNr, const lp_fl
|
||||
const lp_float_t& sensor4) {
|
||||
sensorTempAvailable = true;
|
||||
|
||||
if (sensor1.isValid()) {
|
||||
if (sensor1.isValid() and sensor1.value != INVALID_TEMPERATURE) {
|
||||
sensorTemp = sensor1.value;
|
||||
} else if (sensor2.isValid()) {
|
||||
} else if (sensor2.isValid() and sensor2.value != INVALID_TEMPERATURE) {
|
||||
sensorTemp = sensor2.value;
|
||||
} else if (sensor3.isValid()) {
|
||||
} else if (sensor3.isValid() and sensor3.value != INVALID_TEMPERATURE) {
|
||||
sensorTemp = sensor3.value;
|
||||
} else if (sensor4.isValid()) {
|
||||
} else if (sensor4.isValid() and sensor4.value != INVALID_TEMPERATURE) {
|
||||
sensorTemp = sensor4.value;
|
||||
} else {
|
||||
if (heaterHandler.checkSwitchState(switchNr)) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
||||
}
|
||||
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
|
||||
sensorTempAvailable = false;
|
||||
}
|
||||
}
|
||||
void ThermalController::chooseOf5Sensors(heater::Switchers switchNr, const lp_float_t& sensor1,
|
||||
const lp_float_t& sensor2, const lp_float_t& sensor3,
|
||||
const lp_float_t& sensor4, const lp_float_t& sensor5) {
|
||||
sensorTempAvailable = true;
|
||||
|
||||
if (sensor1.isValid()) {
|
||||
sensorTemp = sensor1.value;
|
||||
} else if (sensor2.isValid()) {
|
||||
sensorTemp = sensor2.value;
|
||||
} else if (sensor3.isValid()) {
|
||||
sensorTemp = sensor3.value;
|
||||
} else if (sensor4.isValid()) {
|
||||
sensorTemp = sensor4.value;
|
||||
} else if (sensor5.isValid()) {
|
||||
sensorTemp = sensor5.value;
|
||||
} else {
|
||||
if (heaterHandler.checkSwitchState(switchNr)) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater" << switchNr << " OFF" << std::endl;
|
||||
}
|
||||
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
|
||||
sensorTempAvailable = false;
|
||||
|
@ -58,6 +58,11 @@ class ThermalController : public ExtendedControllerBase {
|
||||
static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::TCS_CONTROLLER;
|
||||
static constexpr Event NO_VALID_SENSOR_TEMPERATURE = MAKE_EVENT(0, severity::MEDIUM);
|
||||
static constexpr Event NO_HEALTHY_HEATER_AVAILABLE = MAKE_EVENT(1, severity::MEDIUM);
|
||||
static constexpr Event SYRLINKS_OVERHEATING = MAKE_EVENT(2, severity::HIGH);
|
||||
static constexpr Event PLOC_OVERHEATING = MAKE_EVENT(3, severity::HIGH);
|
||||
static constexpr Event OBC_OVERHEATING = MAKE_EVENT(4, severity::HIGH);
|
||||
static constexpr Event HPA_OVERHEATING = MAKE_EVENT(5, severity::HIGH);
|
||||
static constexpr Event PLPCDU_OVERHEATING = MAKE_EVENT(6, severity::HIGH);
|
||||
|
||||
static const uint32_t DELAY = 500;
|
||||
|
||||
@ -143,6 +148,7 @@ class ThermalController : public ExtendedControllerBase {
|
||||
bool sensorTempAvailable = true;
|
||||
bool heaterAvailable = true;
|
||||
bool redSwitchNrInUse = false;
|
||||
bool componentOverheating = false;
|
||||
|
||||
// Initial delay to make sure all pool variables have been initialized their owners
|
||||
Countdown initialCountdown = Countdown(DELAY);
|
||||
@ -169,9 +175,6 @@ class ThermalController : public ExtendedControllerBase {
|
||||
void chooseOf4Sensors(heater::Switchers switchNr, const lp_float_t& sensor1,
|
||||
const lp_float_t& sensor2, const lp_float_t& sensor3,
|
||||
const lp_float_t& sensor4);
|
||||
void chooseOf5Sensors(heater::Switchers switchNr, const lp_float_t& sensor1,
|
||||
const lp_float_t& sensor2, const lp_float_t& sensor3,
|
||||
const lp_float_t& sensor4, const lp_float_t& sensor5);
|
||||
|
||||
void ctrlAcsBoard();
|
||||
void ctrlMgt();
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
#include "devices/gpioIds.h"
|
||||
#include "devices/powerSwitcherList.h"
|
||||
|
||||
HeaterHandler::HeaterHandler(object_id_t setObjectId_, GpioIF* gpioInterface_, HeaterHelper helper,
|
||||
|
Loading…
x
Reference in New Issue
Block a user