TCS improvements #735

Merged
muellerr merged 2 commits from tcs-tweaks into main 2023-07-11 09:38:00 +02:00
3 changed files with 16 additions and 30 deletions

View File

@ -18,6 +18,8 @@ will consitute of a breaking change warranting a new major release:
## Changed ## Changed
- TCS: Remove OBC IF board thermal module, which is exactly identical to OBC module and therefore
obsolete.
- Swapped PL and PS I2C, BPX battery and MGT are connected to PS I2C now for firmware versions - Swapped PL and PS I2C, BPX battery and MGT are connected to PS I2C now for firmware versions
equal or above v4. However, this software version is compatible to both v3 and v4 of the firmware. equal or above v4. However, this software version is compatible to both v3 and v4 of the firmware.
- The firmware version variables are global statics inititalized early during the program - The firmware version variables are global statics inititalized early during the program
@ -40,6 +42,8 @@ will consitute of a breaking change warranting a new major release:
- TMP1075: Devices did not go to OFF mode when being set faulty. - TMP1075: Devices did not go to OFF mode when being set faulty.
- Update PL PCDU 1 in TCS mode tree on the EM. - Update PL PCDU 1 in TCS mode tree on the EM.
- TMP1075: Possibly ignored health commands. - TMP1075: Possibly ignored health commands.
- TCS CTRL: Limit number of heater handler messages sent in case there are not sensors available
anymore.
# Added # Added

View File

@ -1247,25 +1247,6 @@ void ThermalController::ctrlObc() {
} }
} }
void ThermalController::ctrlObcIfBoard() {
currThermalComponent = OBCIF_BOARD;
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;
HeaterContext htrCtx(heater::HEATER_3_OBC_BRD, heater::HEATER_2_ACS_BRD, obcIfBoardLimits);
ctrlComponentTemperature(htrCtx);
if (componentAboveUpperLimit and not obcTooHotFlag) {
triggerEvent(tcsCtrl::OBC_OVERHEATING, tempFloatToU32());
obcTooHotFlag = true;
} else if (not componentAboveUpperLimit) {
obcTooHotFlag = false;
}
}
void ThermalController::ctrlSBandTransceiver() { void ThermalController::ctrlSBandTransceiver() {
currThermalComponent = SBAND_TRANSCEIVER; currThermalComponent = SBAND_TRANSCEIVER;
sensors[0].first = deviceTemperatures.syrlinksPowerAmplifier.isValid(); sensors[0].first = deviceTemperatures.syrlinksPowerAmplifier.isValid();
@ -1531,7 +1512,6 @@ void ThermalController::performThermalModuleCtrl(const HeaterSwitchStates& heate
ctrlIfBoard(); ctrlIfBoard();
ctrlTcsBoard(); ctrlTcsBoard();
ctrlObc(); ctrlObc();
ctrlObcIfBoard();
ctrlSBandTransceiver(); ctrlSBandTransceiver();
ctrlPcduP60Board(); ctrlPcduP60Board();
ctrlPcduAcu(); ctrlPcduAcu();
@ -1599,7 +1579,9 @@ void ThermalController::ctrlComponentTemperature(HeaterContext& htrCtx) {
// No sensors available, so switch the heater off. We can not perform control tasks if we // No sensors available, so switch the heater off. We can not perform control tasks if we
// are blind.. // are blind..
if (chooseHeater(htrCtx.switchNr, htrCtx.redSwitchNr)) { if (chooseHeater(htrCtx.switchNr, htrCtx.redSwitchNr)) {
if (heaterCtrlAllowed()) { // Also track the counter to prevent heater handler message spam. The heater handle can only
// process 2 messages per cycle.
if (heaterCtrlAllowed() and (thermalStates[currThermalComponent].noSensorAvailableCounter < 3)) {
heaterSwitchHelper(htrCtx.switchNr, HeaterHandler::SwitchState::OFF, currThermalComponent); heaterSwitchHelper(htrCtx.switchNr, HeaterHandler::SwitchState::OFF, currThermalComponent);
} }
} }
@ -1612,18 +1594,18 @@ bool ThermalController::selectAndReadSensorTemp(HeaterContext& htrCtx) {
sensors[i].second > SANITY_LIMIT_LOWER_TEMP and sensors[i].second > SANITY_LIMIT_LOWER_TEMP and
sensors[i].second < SANITY_LIMIT_UPPER_TEMP) { sensors[i].second < SANITY_LIMIT_UPPER_TEMP) {
sensorTemp = sensors[i].second; sensorTemp = sensors[i].second;
thermalStates[currThermalComponent].errorCounter = 0; thermalStates[currThermalComponent].noSensorAvailableCounter = 0;
return true; return true;
} }
} }
thermalStates[currThermalComponent].errorCounter++; thermalStates[currThermalComponent].noSensorAvailableCounter++;
if (currThermalComponent != RW and currThermalComponent != ACS_BOARD) { if (currThermalComponent != RW and currThermalComponent != ACS_BOARD) {
if (thermalStates[currThermalComponent].errorCounter <= 3) { if (thermalStates[currThermalComponent].noSensorAvailableCounter <= 3) {
triggerEvent(tcsCtrl::NO_VALID_SENSOR_TEMPERATURE, currThermalComponent); triggerEvent(tcsCtrl::NO_VALID_SENSOR_TEMPERATURE, currThermalComponent);
} }
} else { } else {
if (thermalStates[currThermalComponent].errorCounter <= 8) { if (thermalStates[currThermalComponent].noSensorAvailableCounter <= 8) {
triggerEvent(tcsCtrl::NO_VALID_SENSOR_TEMPERATURE, currThermalComponent); triggerEvent(tcsCtrl::NO_VALID_SENSOR_TEMPERATURE, currThermalComponent);
} }
} }

View File

@ -47,7 +47,7 @@ struct TempLimits {
}; };
struct ThermalState { struct ThermalState {
uint8_t errorCounter; uint8_t noSensorAvailableCounter;
// Is heating on for that thermal module? // Is heating on for that thermal module?
bool heating = false; bool heating = false;
heater::Switch heaterSwitch = heater::Switch::NUMBER_OF_SWITCHES; heater::Switch heaterSwitch = heater::Switch::NUMBER_OF_SWITCHES;
@ -74,7 +74,8 @@ enum ThermalComponents : uint8_t {
IF_BOARD = 5, IF_BOARD = 5,
TCS_BOARD = 6, TCS_BOARD = 6,
OBC = 7, OBC = 7,
OBCIF_BOARD = 8, // Not used anymore, was identical to OBC module.
LEGACY_OBCIF_BOARD = 8,
SBAND_TRANSCEIVER = 9, SBAND_TRANSCEIVER = 9,
PCDUP60_BOARD = 10, PCDUP60_BOARD = 10,
PCDUACU = 11, PCDUACU = 11,
@ -331,7 +332,6 @@ class ThermalController : public ExtendedControllerBase {
void ctrlIfBoard(); void ctrlIfBoard();
void ctrlTcsBoard(); void ctrlTcsBoard();
void ctrlObc(); void ctrlObc();
void ctrlObcIfBoard();
void ctrlSBandTransceiver(); void ctrlSBandTransceiver();
void ctrlPcduP60Board(); void ctrlPcduP60Board();
void ctrlPcduAcu(); void ctrlPcduAcu();