ThermalController additions
Some checks failed
EIVE/eive-obsw/pipeline/pr-develop There was a failure building this commit

This commit is contained in:
Irini Kosmidou 2023-01-23 22:29:29 +01:00
parent 0e2ae50fc5
commit 95fe06a09b
2 changed files with 174 additions and 44 deletions

View File

@ -109,9 +109,9 @@ void ThermalController::performControlOperation() {
}
// TODO: Heater control
// ctrlCameraBody();
// ctrlAcsBoard();
/*ctrlMgt();
ctrlCameraBody();
ctrlAcsBoard();
ctrlMgt();
ctrlRw();
ctrlStr();
ctrlIfBoard();
@ -132,7 +132,7 @@ void ThermalController::performControlOperation() {
ctrlHpa();
ctrlTx();
ctrlMpa();
ctrlScexBoard();*/
ctrlScexBoard();
}
ReturnValue_t ThermalController::initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
@ -984,16 +984,23 @@ void ThermalController::copyDevices() {
}
void ThermalController::ctrlAcsBoard() {
// TODO: add red sensors, check sensor 4
// TODO: check sensor 4; A:MGM1(int); B: MGM3(int)
heater::Switchers switchNr = heater::HEATER_2_ACS_BRD;
heater::Switchers redSwitchNr = heater::HEATER_0_OBC_BRD;
chooseHeater(switchNr, redSwitchNr);
if (heaterAvailable) {
/*chooseOf5Sensors(switchNr, deviceTemperatures.gyro0SideA, deviceTemperatures.mgm0SideA,
deviceTemperatures.gyro1SideA, deviceTemperatures.mgt,
sensorTemperatures.sensor_tcs_board);*/
// A side
chooseOf5Sensors(switchNr, deviceTemperatures.gyro0SideA, deviceTemperatures.mgm0SideA,
deviceTemperatures.gyro1SideA, deviceTemperatures.mgm0SideA,
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);
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &acsBoardLimits);
}
@ -1001,18 +1008,129 @@ void ThermalController::ctrlAcsBoard() {
}
void ThermalController::ctrlMgt() {
// TODO: cast deviceTemperatures.mgt
// TODO: use heaterReq
PoolReadGuard pg(&imtqThermalSet);
ThermalComponentIF::StateRequest heaterReq =
static_cast<ThermalComponentIF::StateRequest>(imtqThermalSet.heaterRequest.value);
// ctrlComponentTemperature(heater::HEATER_2_ACS_BRD, heater::HEATER_3_PCDU_PDU,
// sensorTemperatures.sensor_magnettorquer, deviceTemperatures.mgt,
// sensorTemperatures.sensor_plpcdu_heatspreader, &mgtLimits);
if (heaterReq == ThermalComponentIF::STATE_REQUEST_OPERATIONAL) {
heater::Switchers switchNr = heater::HEATER_2_ACS_BRD;
heater::Switchers redSwitchNr = heater::HEATER_3_PCDU_PDU;
chooseHeater(switchNr, redSwitchNr);
if (heaterAvailable) {
sensorTempAvailable = true;
if (sensorTemperatures.sensor_magnettorquer.isValid()) {
sensorTemp = sensorTemperatures.sensor_magnettorquer.value;
} else if (deviceTemperatures.mgt.isValid()) {
sensorTemp = deviceTemperatures.mgt.value;
} else if (sensorTemperatures.sensor_plpcdu_heatspreader.isValid()) {
sensorTemp = sensorTemperatures.sensor_plpcdu_heatspreader.value;
} else {
if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
sensorTempAvailable = false;
}
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &mgtLimits);
}
}
}
}
void ThermalController::ctrlRw() {
// ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_6_DRO,
// sensorTemperatures.sensor_rw1, deviceTemperatures.rw1, deviceTemperatures.rw3, &rwLimits);
heater::Switchers switchNr = heater::HEATER_6_DRO;
heater::Switchers redSwitchNr = heater::HEATER_6_DRO;
redSwitchNrInUse = false;
if (heaterHandler.getHealth(switchNr) == HasHealthIF::HEALTHY) {
// RW1
sensorTempAvailable = true;
if (sensorTemperatures.sensor_rw1.isValid()) {
sensorTemp = sensorTemperatures.sensor_rw1.value;
} else if (deviceTemperatures.rw1.isValid()) {
sensorTemp = deviceTemperatures.rw1.value;
} else if (deviceTemperatures.rw4.isValid()) {
sensorTemp = deviceTemperatures.rw4.value;
} else if (sensorTemperatures.sensor_dro.isValid()) {
sensorTemp = sensorTemperatures.sensor_dro.value;
} else {
if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
sensorTempAvailable = false;
}
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &rwLimits);
}
// RW2
sensorTempAvailable = true;
if (deviceTemperatures.rw2.isValid()) {
sensorTemp = deviceTemperatures.rw2.value;
} else if (deviceTemperatures.rw3.isValid()) {
sensorTemp = deviceTemperatures.rw3.value;
} else if (sensorTemperatures.sensor_rw1.isValid()) {
sensorTemp = sensorTemperatures.sensor_rw1.value;
} else if (sensorTemperatures.sensor_dro.isValid()) {
sensorTemp = sensorTemperatures.sensor_dro.value;
} else {
if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
sensorTempAvailable = false;
}
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &rwLimits);
}
// RW3
sensorTempAvailable = true;
if (deviceTemperatures.rw3.isValid()) {
sensorTemp = deviceTemperatures.rw3.value;
} else if (deviceTemperatures.rw4.isValid()) {
sensorTemp = deviceTemperatures.rw4.value;
} else if (sensorTemperatures.sensor_rw1.isValid()) {
sensorTemp = sensorTemperatures.sensor_rw1.value;
} else if (sensorTemperatures.sensor_dro.isValid()) {
sensorTemp = sensorTemperatures.sensor_dro.value;
} else {
if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
sensorTempAvailable = false;
}
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &rwLimits);
}
// RW4
sensorTempAvailable = true;
if (deviceTemperatures.rw4.isValid()) {
sensorTemp = deviceTemperatures.rw4.value;
} else if (deviceTemperatures.rw1.isValid()) {
sensorTemp = deviceTemperatures.rw1.value;
} else if (sensorTemperatures.sensor_rw1.isValid()) {
sensorTemp = sensorTemperatures.sensor_rw1.value;
} else if (sensorTemperatures.sensor_dro.isValid()) {
sensorTemp = sensorTemperatures.sensor_dro.value;
} else {
if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
sensorTempAvailable = false;
}
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &rwLimits);
}
}
}
void ThermalController::ctrlStr() {
@ -1079,9 +1197,10 @@ void ThermalController::ctrlPcduAcu() {
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
sensorTempAvailable = false;
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &pcduAcuLimits);
}
}
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &pcduAcuLimits);
}
}
}
@ -1100,26 +1219,12 @@ void ThermalController::ctrlPlPcduBoard() {
chooseHeater(switchNr, redSwitchNr);
if (heaterAvailable) {
sensorTempAvailable = true;
if (sensorTemperatures.tmp1075PlPcdu0.isValid()) {
sensorTemp = sensorTemperatures.tmp1075PlPcdu0.value;
} else if (sensorTemperatures.tmp1075PlPcdu1.isValid()) {
sensorTemp = sensorTemperatures.tmp1075PlPcdu1.value;
} else if (deviceTemperatures.adcPayloadPcdu.isValid()) {
sensorTemp = deviceTemperatures.adcPayloadPcdu.value;
} else if (sensorTemperatures.sensor_plpcdu_heatspreader.isValid()) {
sensorTemp = sensorTemperatures.sensor_plpcdu_heatspreader.value;
} else {
if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, switchNr);
sensorTempAvailable = false;
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &plPcduBoardLimits);
}
}
chooseOf4Sensors(switchNr, sensorTemperatures.tmp1075PlPcdu0, sensorTemperatures.tmp1075PlPcdu1,
deviceTemperatures.adcPayloadPcdu,
sensorTemperatures.sensor_plpcdu_heatspreader);
if (sensorTempAvailable) {
ctrlHeater(switchNr, redSwitchNr, &plPcduBoardLimits);
}
}
}
@ -1258,6 +1363,27 @@ void ThermalController::ctrlComponentTemperature(heater::Switchers switchNr,
}
}
}
void ThermalController::chooseOf4Sensors(heater::Switchers switchNr, const lp_float_t& sensor1,
const lp_float_t& sensor2, const lp_float_t& sensor3,
const lp_float_t& sensor4) {
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 (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) {
@ -1270,9 +1396,9 @@ void ThermalController::chooseOf5Sensors(heater::Switchers switchNr, const lp_fl
} else if (sensor3.isValid()) {
sensorTemp = sensor3.value;
} else if (sensor4.isValid()) {
sensorTemp = sensor4.value;
sensorTemp = sensor4.value;
} else if (sensor5.isValid()) {
sensorTemp = sensor5.value;
sensorTemp = sensor5.value;
} else {
if (heaterHandler.checkSwitchState(switchNr)) {
heaterHandler.switchHeater(switchNr, HeaterHandler::SwitchState::OFF);

View File

@ -160,15 +160,19 @@ class ThermalController : public ExtendedControllerBase {
void copySus();
void copyDevices();
void ctrlComponentTemperature(
heater::Switchers switchNr, heater::Switchers redSwitchNr, const lp_float_t& sensor1,
const lp_float_t& sensor2, const lp_float_t& sensor3, TempLimits* tempLimit); // TODO sensor 4, 5 = default argument, if not available
void ctrlComponentTemperature(heater::Switchers switchNr, heater::Switchers redSwitchNr,
const lp_float_t& sensor1, const lp_float_t& sensor2,
const lp_float_t& sensor3, TempLimits* tempLimit);
void ctrlHeater(heater::Switchers switchNr, heater::Switchers redSwitchNr, TempLimits* tempLimit);
void chooseHeater(heater::Switchers& switchNr, heater::Switchers redSwitchNr);
void chooseSensor(heater::Switchers switchNr, const lp_float_t& sensor1,
const lp_float_t& sensor2, const lp_float_t& sensor3);
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);
const lp_float_t& sensor2, const lp_float_t& sensor3,
const lp_float_t& sensor4, const lp_float_t& sensor5);
void ctrlAcsBoard();
void ctrlMgt();