basic implementation for passive cooling
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:
@ -972,7 +972,7 @@ void ThermalController::ctrlAcsBoard() {
|
||||
numSensors = 4;
|
||||
if (selectAndReadSensorTemp()) {
|
||||
if (chooseHeater(switchNr, redSwitchNr)) {
|
||||
ctrlHeater(switchNr, redSwitchNr, acsBoardLimits);
|
||||
checkLimitsAndCtrlHeater(switchNr, redSwitchNr, acsBoardLimits);
|
||||
}
|
||||
resetSensorsArray();
|
||||
return;
|
||||
@ -990,14 +990,14 @@ void ThermalController::ctrlAcsBoard() {
|
||||
numSensors = 4;
|
||||
if (selectAndReadSensorTemp()) {
|
||||
if (chooseHeater(switchNr, redSwitchNr)) {
|
||||
ctrlHeater(switchNr, redSwitchNr, acsBoardLimits);
|
||||
checkLimitsAndCtrlHeater(switchNr, redSwitchNr, acsBoardLimits);
|
||||
}
|
||||
} else {
|
||||
if (chooseHeater(switchNr, redSwitchNr)) {
|
||||
if (heaterHandler.checkSwitchState(switchNr)) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater" << static_cast<int>(thermalComponent)
|
||||
<< " OFF" << std::endl;
|
||||
sif::info << "ThermalController::checkLimitsAndCtrlHeater: Heater"
|
||||
<< static_cast<int>(thermalComponent) << " OFF" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1023,7 +1023,11 @@ void ThermalController::ctrlMgt() {
|
||||
}
|
||||
|
||||
void ThermalController::ctrlRw() {
|
||||
// TODO: better solution?
|
||||
Event eventToTrigger = 0;
|
||||
bool oneIsAboveLimit = false;
|
||||
|
||||
std::array<uint32_t, 4> sensorTemps{};
|
||||
|
||||
// RW1
|
||||
thermalComponent = RW;
|
||||
sensors[0].first = sensorTemperatures.sensor_rw1.isValid();
|
||||
@ -1036,6 +1040,11 @@ void ThermalController::ctrlRw() {
|
||||
sensors[3].second = sensorTemperatures.sensor_dro.value;
|
||||
numSensors = 4;
|
||||
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_6_DRO, rwLimits);
|
||||
sensorTemps[0] = tempFloatToU32();
|
||||
if (componentAboveUpperLimit) {
|
||||
oneIsAboveLimit = true;
|
||||
eventToTrigger = overHeatEventToTrigger;
|
||||
}
|
||||
|
||||
// RW2
|
||||
thermalComponent = RW;
|
||||
@ -1049,6 +1058,13 @@ void ThermalController::ctrlRw() {
|
||||
sensors[3].second = sensorTemperatures.sensor_dro.value;
|
||||
numSensors = 4;
|
||||
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_6_DRO, rwLimits);
|
||||
sensorTemps[1] = tempFloatToU32();
|
||||
if (componentAboveUpperLimit) {
|
||||
oneIsAboveLimit = true;
|
||||
if (eventToTrigger != ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH) {
|
||||
eventToTrigger = overHeatEventToTrigger;
|
||||
}
|
||||
}
|
||||
|
||||
// RW3
|
||||
thermalComponent = RW;
|
||||
@ -1062,6 +1078,13 @@ void ThermalController::ctrlRw() {
|
||||
sensors[3].second = sensorTemperatures.sensor_dro.value;
|
||||
numSensors = 4;
|
||||
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_6_DRO, rwLimits);
|
||||
sensorTemps[2] = tempFloatToU32();
|
||||
if (componentAboveUpperLimit) {
|
||||
oneIsAboveLimit = true;
|
||||
if (eventToTrigger != ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH) {
|
||||
eventToTrigger = overHeatEventToTrigger;
|
||||
}
|
||||
}
|
||||
|
||||
// RW4
|
||||
thermalComponent = RW;
|
||||
@ -1075,6 +1098,23 @@ void ThermalController::ctrlRw() {
|
||||
sensors[3].second = sensorTemperatures.sensor_dro.value;
|
||||
numSensors = 4;
|
||||
ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_6_DRO, rwLimits);
|
||||
sensorTemps[3] = tempFloatToU32();
|
||||
if (componentAboveUpperLimit) {
|
||||
oneIsAboveLimit = true;
|
||||
if (eventToTrigger != ThermalComponentIF::COMPONENT_TEMP_OOL_HIGH) {
|
||||
eventToTrigger = overHeatEventToTrigger;
|
||||
}
|
||||
}
|
||||
|
||||
if (oneIsAboveLimit and not rwTooHotFlag) {
|
||||
EventManagerIF::triggerEvent(objects::RW1, eventToTrigger, sensorTemps[0]);
|
||||
EventManagerIF::triggerEvent(objects::RW2, eventToTrigger, sensorTemps[1]);
|
||||
EventManagerIF::triggerEvent(objects::RW3, eventToTrigger, sensorTemps[2]);
|
||||
EventManagerIF::triggerEvent(objects::RW4, eventToTrigger, sensorTemps[3]);
|
||||
rwTooHotFlag = true;
|
||||
} else if (not oneIsAboveLimit) {
|
||||
rwTooHotFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
void ThermalController::ctrlStr() {
|
||||
@ -1100,6 +1140,7 @@ void ThermalController::ctrlIfBoard() {
|
||||
sensors[2].second = deviceTemperatures.mgm2SideB.value;
|
||||
numSensors = 3;
|
||||
ctrlComponentTemperature(heater::HEATER_2_ACS_BRD, heater::HEATER_3_PCDU_PDU, ifBoardLimits);
|
||||
// TODO: special event overheating + could go back to safe mode
|
||||
}
|
||||
|
||||
void ThermalController::ctrlTcsBoard() {
|
||||
@ -1112,6 +1153,7 @@ void ThermalController::ctrlTcsBoard() {
|
||||
sensors[2].second = sensorTemperatures.tmp1075Tcs1.value;
|
||||
numSensors = 3;
|
||||
ctrlComponentTemperature(heater::HEATER_0_OBC_BRD, heater::HEATER_2_ACS_BRD, tcsBoardLimits);
|
||||
// TODO: special event overheating + could go back to safe mode
|
||||
}
|
||||
|
||||
void ThermalController::ctrlObc() {
|
||||
@ -1205,7 +1247,7 @@ void ThermalController::ctrlPcduAcu() {
|
||||
sensorTempAvailable = false;
|
||||
}
|
||||
if (sensorTempAvailable) {
|
||||
ctrlHeater(switchNr, redSwitchNr, pcduAcuLimits);
|
||||
checkLimitsAndCtrlHeater(switchNr, redSwitchNr, pcduAcuLimits);
|
||||
}
|
||||
}
|
||||
if (componentAboveUpperLimit and not pcduSystemTooHotFlag) {
|
||||
@ -1402,9 +1444,9 @@ void ThermalController::performThermalModuleCtrl() {
|
||||
ctrlTcsBoard();
|
||||
ctrlObc();
|
||||
ctrlObcIfBoard();
|
||||
// ctrlSBandTransceiver();
|
||||
ctrlSBandTransceiver();
|
||||
ctrlPcduP60Board();
|
||||
// ctrlPcduAcu();
|
||||
ctrlPcduAcu();
|
||||
ctrlPcduPdu();
|
||||
ctrlPlPcduBoard();
|
||||
ctrlPlocMissionBoard();
|
||||
@ -1424,15 +1466,16 @@ void ThermalController::ctrlComponentTemperature(heater::Switchers switchNr,
|
||||
TempLimits& tempLimit) {
|
||||
if (selectAndReadSensorTemp()) {
|
||||
if (chooseHeater(switchNr, redSwitchNr)) {
|
||||
ctrlHeater(switchNr, redSwitchNr, tempLimit);
|
||||
checkLimitsAndCtrlHeater(switchNr, redSwitchNr, tempLimit);
|
||||
}
|
||||
} else {
|
||||
if (chooseHeater(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" << static_cast<u_int8_t>(switchNr)
|
||||
<< " OFF" << std::endl; // TODO: printouts löschen
|
||||
sif::info << "ThermalController::checkLimitsAndCtrlHeater: Heater"
|
||||
<< static_cast<int>(thermalComponent) << " OFF"
|
||||
<< std::endl; // TODO: printouts löschen
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1476,17 +1519,19 @@ bool ThermalController::chooseHeater(heater::Switchers& switchNr, heater::Switch
|
||||
}
|
||||
return heaterAvailable;
|
||||
}
|
||||
void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers redSwitchNr,
|
||||
struct TempLimits& tempLimit) {
|
||||
void ThermalController::checkLimitsAndCtrlHeater(heater::Switchers switchNr,
|
||||
heater::Switchers redSwitchNr,
|
||||
struct TempLimits& tempLimit) {
|
||||
componentAboveCutOffLimit = false;
|
||||
componentAboveUpperLimit = false;
|
||||
// if Heater off
|
||||
if (not heaterStates[switchNr].switchTransition) {
|
||||
if (not heaterHandler.checkSwitchState(switchNr)) {
|
||||
// TODO: check NOP limit and maybe trigger fdir
|
||||
if (sensorTemp < tempLimit.opLowerLimit) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::ON);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater " << static_cast<int>(thermalComponent)
|
||||
<< " ON" << std::endl;
|
||||
sif::info << "ThermalController::checkLimitsAndCtrlHeater: Heater "
|
||||
<< static_cast<int>(thermalComponent) << " ON" << std::endl;
|
||||
heaterStates[switchNr].switchTransition = true;
|
||||
thermalStates[thermalComponent].heating = true;
|
||||
} else {
|
||||
@ -1498,7 +1543,7 @@ void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers
|
||||
if (thermalStates[thermalComponent].heating) {
|
||||
if (sensorTemp >= tempLimit.opLowerLimit + TEMP_OFFSET) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
||||
sif::info << "ThermalController::ctrlHeater: Heater "
|
||||
sif::info << "ThermalController::checkLimitsAndCtrlHeater: Heater "
|
||||
<< static_cast<int>(thermalComponent) << " OFF" << std::endl;
|
||||
heaterStates[switchNr].switchTransition = true;
|
||||
thermalStates[thermalComponent].heating = false;
|
||||
@ -1506,8 +1551,8 @@ void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers
|
||||
} else {
|
||||
auto tempTooHighHandler = [&](const char* whatLimit) {
|
||||
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
|
||||
sif::info << "ThermalController::ctrlHeater: Reached " << whatLimit << ": Heater "
|
||||
<< static_cast<int>(thermalComponent) << " OFF" << std::endl;
|
||||
sif::info << "ThermalController::checkLimitsAndCtrlHeater: Reached " << whatLimit
|
||||
<< ": Heater " << static_cast<int>(thermalComponent) << " OFF" << std::endl;
|
||||
heaterStates[switchNr].switchTransition = true;
|
||||
if (heaterHandler.checkSwitchState(redSwitchNr)) {
|
||||
heaterHandler.switchHeater(redSwitchNr, HeaterHandler::SwitchState::OFF);
|
||||
@ -1550,7 +1595,7 @@ void ThermalController::heaterTransitionControl() {
|
||||
}
|
||||
}
|
||||
}
|
||||
uint32_t ThermalController::tempFloatToU32() {
|
||||
uint32_t ThermalController::tempFloatToU32() const {
|
||||
auto sensorTempAsFloat = static_cast<float>(sensorTemp);
|
||||
uint32_t tempRaw = 0;
|
||||
size_t dummyLen = 0;
|
||||
|
Reference in New Issue
Block a user