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

View File

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