From 4f8fdc973f5f96c5d4ebf117c99d429babb143f9 Mon Sep 17 00:00:00 2001 From: Irini Kosmidou Date: Mon, 6 Feb 2023 21:13:17 +0100 Subject: [PATCH] thermalController upgrade --- mission/controller/ThermalController.cpp | 236 ++++++++++++++--------- 1 file changed, 145 insertions(+), 91 deletions(-) diff --git a/mission/controller/ThermalController.cpp b/mission/controller/ThermalController.cpp index 9eee921f..aa49ecb5 100644 --- a/mission/controller/ThermalController.cpp +++ b/mission/controller/ThermalController.cpp @@ -984,6 +984,7 @@ void ThermalController::copyDevices() { } void ThermalController::ctrlAcsBoard() { + // TODO: fix heater::Switchers switchNr = heater::HEATER_2_ACS_BRD; heater::Switchers redSwitchNr = heater::HEATER_0_OBC_BRD; @@ -991,13 +992,13 @@ void ThermalController::ctrlAcsBoard() { // A side if (chooseOf4Sensors(switchNr, deviceTemperatures.gyro0SideA, deviceTemperatures.mgm0SideA, deviceTemperatures.gyro1SideA, sensorTemperatures.sensor_tcs_board)) { - ctrlHeater(switchNr, redSwitchNr, &acsBoardLimits); + ctrlHeater(switchNr, redSwitchNr, acsBoardLimits); return; } // B side if (chooseOf4Sensors(switchNr, deviceTemperatures.gyro2SideB, deviceTemperatures.mgm2SideB, deviceTemperatures.gyro3SideB, sensorTemperatures.sensor_tcs_board)) { - ctrlHeater(switchNr, redSwitchNr, &acsBoardLimits); + ctrlHeater(switchNr, redSwitchNr, acsBoardLimits); } } } @@ -1008,33 +1009,20 @@ void ThermalController::ctrlMgt() { static_cast(imtqThermalSet.heaterRequest.value); if (heaterReq == ThermalComponentIF::STATE_REQUEST_OPERATIONAL) { - heater::Switchers switchNr = heater::HEATER_2_ACS_BRD; - heater::Switchers redSwitchNr = heater::HEATER_3_PCDU_PDU; - - if (chooseHeater(switchNr, redSwitchNr)) { - bool 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); - } - } + sensors[0].first = sensorTemperatures.sensor_magnettorquer.isValid(); + sensors[0].second = sensorTemperatures.sensor_magnettorquer.value; + sensors[1].first = deviceTemperatures.mgt.isValid(); + sensors[1].second = deviceTemperatures.mgt.value; + sensors[2].first = sensorTemperatures.sensor_plpcdu_heatspreader.isValid(); + sensors[2].second = sensorTemperatures.sensor_plpcdu_heatspreader.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_2_ACS_BRD, heater::HEATER_3_PCDU_PDU, + mgtLimits); } } void ThermalController::ctrlRw() { + //TODO: better solution? heater::Switchers switchNr = heater::HEATER_6_DRO; heater::Switchers redSwitchNr = heater::HEATER_6_DRO; redSwitchNrInUse = false; @@ -1059,7 +1047,7 @@ void ThermalController::ctrlRw() { sensorTempAvailable = false; } if (sensorTempAvailable) { - ctrlHeater(switchNr, redSwitchNr, &rwLimits); + ctrlHeater(switchNr, redSwitchNr, rwLimits); } // RW2 sensorTempAvailable = true; @@ -1159,33 +1147,50 @@ void ThermalController::ctrlTcsBoard() { } void ThermalController::ctrlObc() { - ctrlComponentTemperature(heater::HEATER_0_OBC_BRD, heater::HEATER_2_ACS_BRD, - deviceTemperatures.q7s, sensorTemperatures.tmp1075Tcs1, - sensorTemperatures.tmp1075Tcs0, &obcLimits); + sensors[0].first = deviceTemperatures.q7s.isValid(); + sensors[0].second = deviceTemperatures.q7s.value; + sensors[1].first = sensorTemperatures.tmp1075Tcs1.isValid(); + sensors[1].second = sensorTemperatures.tmp1075Tcs1.value; + sensors[2].first = sensorTemperatures.tmp1075Tcs0.isValid(); + sensors[2].second = sensorTemperatures.tmp1075Tcs0.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_0_OBC_BRD, heater::HEATER_2_ACS_BRD, obcLimits); if (componentAboveCutOffLimit) { triggerEvent(OBC_OVERHEATING); } } void ThermalController::ctrlObcIfBoard() { - ctrlComponentTemperature(heater::HEATER_0_OBC_BRD, heater::HEATER_2_ACS_BRD, - deviceTemperatures.q7s, sensorTemperatures.tmp1075Tcs0, - sensorTemperatures.tmp1075Tcs1, &obcIfBoardLimits); + sensors[0].first = deviceTemperatures.q7s.isValid(); + sensors[0].second = deviceTemperatures.q7s.value; + sensors[1].first = sensorTemperatures.tmp1075Tcs0.isValid(); + sensors[1].second = sensorTemperatures.tmp1075Tcs0.value; + sensors[2].first = sensorTemperatures.tmp1075Tcs1.isValid(); + sensors[2].second = sensorTemperatures.tmp1075Tcs1.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_0_OBC_BRD, heater::HEATER_2_ACS_BRD, obcIfBoardLimits); } void ThermalController::ctrlSBandTransceiver() { - ctrlComponentTemperature(heater::HEATER_7_S_BAND, heater::HEATER_4_CAMERA, - deviceTemperatures.syrlinksPowerAmplifier, - deviceTemperatures.syrlinksBasebandBoard, - sensorTemperatures.sensor_4k_camera, sBandTransceiverLimits); + sensors[0].first = deviceTemperatures.syrlinksPowerAmplifier.isValid(); + sensors[0].second = deviceTemperatures.syrlinksPowerAmplifier.value; + sensors[1].first = deviceTemperatures.syrlinksBasebandBoard.isValid(); + sensors[1].second = deviceTemperatures.syrlinksBasebandBoard.value; + sensors[2].first = sensorTemperatures.sensor_4k_camera.isValid(); + sensors[2].second = sensorTemperatures.sensor_4k_camera.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_7_S_BAND, heater::HEATER_4_CAMERA, sBandTransceiverLimits); if (componentAboveCutOffLimit) { triggerEvent(SYRLINKS_OVERHEATING); } } void ThermalController::ctrlPcduP60Board() { - ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD, - deviceTemperatures.temp1P60dock, deviceTemperatures.temp2P60dock, - deviceTemperatures.temp2P60dock, pcduP60BoardLimits); + sensors[0].first = deviceTemperatures.temp1P60dock.isValid(); + sensors[0].second = deviceTemperatures.temp1P60dock.value; + sensors[1].first = deviceTemperatures.temp2P60dock.isValid(); + sensors[1].second = deviceTemperatures.temp2P60dock.value; + numSensors = 2; + ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD, pcduP60BoardLimits); } void ThermalController::ctrlPcduAcu() { @@ -1204,107 +1209,156 @@ void ThermalController::ctrlPcduAcu() { } else if (sensorTemperatures.sensor_acu.isValid()) { sensorTemp = sensorTemperatures.sensor_acu.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, &pcduAcuLimits); + ctrlHeater(switchNr, redSwitchNr, pcduAcuLimits); } } } void ThermalController::ctrlPcduPdu() { - ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD, - deviceTemperatures.pdu1, deviceTemperatures.pdu2, - deviceTemperatures.pdu2, &pcduPduLimits); + sensors[0].first = deviceTemperatures.pdu1.isValid(); + sensors[0].second = deviceTemperatures.pdu1.value; + sensors[1].first = deviceTemperatures.pdu2.isValid(); + sensors[1].second = deviceTemperatures.pdu2.value; + sensors[2].first = sensorTemperatures.tmp1075Tcs0.isValid(); + sensors[2].second = sensorTemperatures.tmp1075Tcs0.value; + numSensors = 2; + ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD, pcduPduLimits); } void ThermalController::ctrlPlPcduBoard() { - heater::Switchers switchNr = heater::HEATER_3_PCDU_PDU; - heater::Switchers redSwitchNr = heater::HEATER_2_ACS_BRD; - - if (chooseHeater(switchNr, redSwitchNr)) { - if (chooseOf4Sensors(switchNr, sensorTemperatures.tmp1075PlPcdu0, sensorTemperatures.tmp1075PlPcdu1, - deviceTemperatures.adcPayloadPcdu, - sensorTemperatures.sensor_plpcdu_heatspreader)) { - ctrlHeater(switchNr, redSwitchNr, &plPcduBoardLimits); - if (componentAboveCutOffLimit) { - triggerEvent(PLPCDU_OVERHEATING, switchNr); - } - } + sensors[0].first = sensorTemperatures.tmp1075PlPcdu0.isValid(); + sensors[0].second = sensorTemperatures.tmp1075PlPcdu0.value; + sensors[1].first = sensorTemperatures.tmp1075PlPcdu1.isValid(); + sensors[1].second = sensorTemperatures.tmp1075PlPcdu1.value; + sensors[2].first = deviceTemperatures.adcPayloadPcdu.isValid(); + sensors[2].second = deviceTemperatures.adcPayloadPcdu.value; + sensors[3].first = sensorTemperatures.sensor_plpcdu_heatspreader.isValid(); + sensors[3].second = sensorTemperatures.sensor_plpcdu_heatspreader.value; + numSensors = 4; + ctrlComponentTemperature(heater::HEATER_3_PCDU_PDU, heater::HEATER_2_ACS_BRD, plPcduBoardLimits); + if (componentAboveCutOffLimit) { + triggerEvent(PLPCDU_OVERHEATING); } } void ThermalController::ctrlPlocMissionBoard() { - ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, - sensorTemperatures.sensor_ploc_heatspreader, - sensorTemperatures.sensor_ploc_missionboard, - sensorTemperatures.sensor_dac_heatspreader, plocMissionBoardLimits); + sensors[0].first = sensorTemperatures.sensor_ploc_heatspreader.isValid(); + sensors[0].second = sensorTemperatures.sensor_ploc_heatspreader.value; + sensors[1].first = sensorTemperatures.sensor_ploc_missionboard.isValid(); + sensors[1].second = sensorTemperatures.sensor_ploc_missionboard.value; + sensors[2].first = sensorTemperatures.sensor_dac_heatspreader.isValid(); + sensors[2].second = sensorTemperatures.sensor_dac_heatspreader.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, plocMissionBoardLimits); if (componentAboveCutOffLimit) { triggerEvent(PLOC_OVERHEATING); } } void ThermalController::ctrlPlocProcessingBoard() { - ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, - sensorTemperatures.sensor_ploc_missionboard, - sensorTemperatures.sensor_ploc_heatspreader, - sensorTemperatures.sensor_dac_heatspreader, plocProcessingBoardLimits); + sensors[0].first = sensorTemperatures.sensor_ploc_missionboard.isValid(); + sensors[0].second = sensorTemperatures.sensor_ploc_missionboard.value; + sensors[1].first = sensorTemperatures.sensor_ploc_heatspreader.isValid(); + sensors[1].second = sensorTemperatures.sensor_ploc_heatspreader.value; + sensors[2].first = sensorTemperatures.sensor_dac_heatspreader.isValid(); + sensors[2].second = sensorTemperatures.sensor_dac_heatspreader.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, plocProcessingBoardLimits); } void ThermalController::ctrlDac() { - ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, - sensorTemperatures.sensor_dac_heatspreader, - sensorTemperatures.sensor_ploc_missionboard, - sensorTemperatures.sensor_ploc_heatspreader, &dacLimits); + sensors[0].first = sensorTemperatures.sensor_dac_heatspreader.isValid(); + sensors[0].second = sensorTemperatures.sensor_dac_heatspreader.value; + sensors[1].first = sensorTemperatures.sensor_ploc_missionboard.isValid(); + sensors[1].second = sensorTemperatures.sensor_ploc_missionboard.value; + sensors[2].first = sensorTemperatures.sensor_ploc_heatspreader.isValid(); + sensors[2].second = sensorTemperatures.sensor_ploc_heatspreader.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_1_PLOC_PROC_BRD, heater::HEATER_0_OBC_BRD, dacLimits); } void ThermalController::ctrlCameraBody() { - ctrlComponentTemperature(heater::HEATER_4_CAMERA, heater::HEATER_6_DRO, - sensorTemperatures.sensor_4k_camera, sensorTemperatures.sensor_dro, - sensorTemperatures.sensor_mpa, &cameraLimits); + sensors[0].first = sensorTemperatures.sensor_4k_camera.isValid(); + sensors[0].second = sensorTemperatures.sensor_4k_camera.value; + sensors[1].first = sensorTemperatures.sensor_dro.isValid(); + sensors[1].second = sensorTemperatures.sensor_dro.value; + sensors[2].first = sensorTemperatures.sensor_mpa.isValid(); + sensors[2].second = sensorTemperatures.sensor_mpa.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_4_CAMERA, heater::HEATER_6_DRO, cameraLimits); } void ThermalController::ctrlDro() { - ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, - sensorTemperatures.sensor_dro, sensorTemperatures.sensor_4k_camera, - sensorTemperatures.sensor_mpa, &droLimits); + sensors[0].first = sensorTemperatures.sensor_dro.isValid(); + sensors[0].second = sensorTemperatures.sensor_dro.value; + sensors[1].first = sensorTemperatures.sensor_4k_camera.isValid(); + sensors[1].second = sensorTemperatures.sensor_4k_camera.value; + sensors[2].first = sensorTemperatures.sensor_mpa.isValid(); + sensors[2].second = sensorTemperatures.sensor_mpa.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, droLimits); } void ThermalController::ctrlX8() { - ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, - sensorTemperatures.sensor_x8, sensorTemperatures.sensor_hpa, - sensorTemperatures.sensor_tx_modul, &x8Limits); + sensors[0].first = sensorTemperatures.sensor_x8.isValid(); + sensors[0].second = sensorTemperatures.sensor_x8.value; + sensors[1].first = sensorTemperatures.sensor_hpa.isValid(); + sensors[1].second = sensorTemperatures.sensor_hpa.value; + sensors[2].first = sensorTemperatures.sensor_tx_modul.isValid(); + sensors[2].second = sensorTemperatures.sensor_tx_modul.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, x8Limits); } void ThermalController::ctrlTx() { - ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, - sensorTemperatures.sensor_tx_modul, sensorTemperatures.sensor_x8, - sensorTemperatures.sensor_mpa, &txLimits); + sensors[0].first = sensorTemperatures.sensor_tx_modul.isValid(); + sensors[0].second = sensorTemperatures.sensor_tx_modul.value; + sensors[1].first = sensorTemperatures.sensor_x8.isValid(); + sensors[1].second = sensorTemperatures.sensor_x8.value; + sensors[2].first = sensorTemperatures.sensor_mpa.isValid(); + sensors[2].second = sensorTemperatures.sensor_mpa.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, txLimits); } void ThermalController::ctrlMpa() { - ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, - sensorTemperatures.sensor_mpa, sensorTemperatures.sensor_hpa, - sensorTemperatures.sensor_tx_modul, &mpaLimits); + sensors[0].first = sensorTemperatures.sensor_mpa.isValid(); + sensors[0].second = sensorTemperatures.sensor_mpa.value; + sensors[1].first = sensorTemperatures.sensor_hpa.isValid(); + sensors[1].second = sensorTemperatures.sensor_hpa.value; + sensors[2].first = sensorTemperatures.sensor_tx_modul.isValid(); + sensors[2].second = sensorTemperatures.sensor_tx_modul.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, mpaLimits); } void ThermalController::ctrlHpa() { - ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, - sensorTemperatures.sensor_hpa, sensorTemperatures.sensor_x8, - sensorTemperatures.sensor_mpa, &hpaLimits); + sensors[0].first = sensorTemperatures.sensor_hpa.isValid(); + sensors[0].second = sensorTemperatures.sensor_hpa.value; + sensors[1].first = sensorTemperatures.sensor_x8.isValid(); + sensors[1].second = sensorTemperatures.sensor_x8.value; + sensors[2].first = sensorTemperatures.sensor_mpa.isValid(); + sensors[2].second = sensorTemperatures.sensor_mpa.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_4_CAMERA, hpaLimits); if (componentAboveCutOffLimit) { triggerEvent(HPA_OVERHEATING); } } void ThermalController::ctrlScexBoard() { - ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_5_STR, - sensorTemperatures.sensor_scex, sensorTemperatures.sensor_x8, - sensorTemperatures.sensor_hpa, &scexBoardLimits); + sensors[0].first = sensorTemperatures.sensor_scex.isValid(); + sensors[0].second = sensorTemperatures.sensor_scex.value; + sensors[1].first = sensorTemperatures.sensor_x8.isValid(); + sensors[1].second = sensorTemperatures.sensor_x8.value; + sensors[2].first = sensorTemperatures.sensor_hpa.isValid(); + sensors[2].second = sensorTemperatures.sensor_hpa.value; + numSensors = 3; + ctrlComponentTemperature(heater::HEATER_6_DRO, heater::HEATER_5_STR, scexBoardLimits); } void ThermalController::ctrlHeater(heater::Switchers switchNr, heater::Switchers redSwitchNr,