limit for error events thermalcontroller + dummy beta
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good

This commit is contained in:
2023-02-22 17:30:30 +01:00
parent 9b849d10e9
commit e13636167f
12 changed files with 106 additions and 50 deletions

View File

@ -91,22 +91,23 @@ void ThermalController::performControlOperation() {
break;
}
ReturnValue_t result = sensorTemperatures.read();
if (result == returnvalue::OK) {
copySensors();
sensorTemperatures.commit();
{
PoolReadGuard pg(&sensorTemperatures);
if (pg.getReadResult() == returnvalue::OK) {
copySensors();
}
}
result = susTemperatures.read();
if (result == returnvalue::OK) {
copySus();
susTemperatures.commit();
{
PoolReadGuard pg(&susTemperatures);
if (pg.getReadResult() == returnvalue::OK) {
copySus();
}
}
result = deviceTemperatures.read();
if (result == returnvalue::OK) {
copyDevices();
deviceTemperatures.commit();
{
PoolReadGuard pg(&deviceTemperatures);
if (pg.getReadResult() == returnvalue::OK) {
copyDevices();
}
}
performThermalModuleCtrl();
@ -1178,7 +1179,8 @@ void ThermalController::ctrlPcduAcu() {
if (chooseHeater(switchNr, redSwitchNr)) {
bool sensorTempAvailable = true;
if (deviceTemperatures.acu.value[0] != INVALID_TEMPERATURE) { //TODO: war invalid aber Wert 0 stat 999
if (deviceTemperatures.acu.value[0] !=
INVALID_TEMPERATURE) { // TODO: war invalid aber Wert 0 stat 999
sensorTemp = deviceTemperatures.acu.value[0];
} else if (deviceTemperatures.acu.value[1] != INVALID_TEMPERATURE) {
sensorTemp = deviceTemperatures.acu.value[1];
@ -1426,10 +1428,22 @@ bool ThermalController::selectAndReadSensorTemp() {
for (unsigned i = 0; i < numSensors; i++) {
if (sensors[i].first and sensors[i].second != INVALID_TEMPERATURE) {
sensorTemp = sensors[i].second;
errorCounters[thermalComponent] = 0;
return true;
}
}
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, thermalComponent);
errorCounters[thermalComponent] ++;
if(thermalComponent != rw and thermalComponent != acsBoard){
if (errorCounters[thermalComponent] <= 3){
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, thermalComponent);
}
}else{
if (errorCounters[thermalComponent] <= 8){
triggerEvent(NO_VALID_SENSOR_TEMPERATURE, thermalComponent);
}
}
return false;
}
@ -1458,5 +1472,5 @@ void ThermalController::resetSensorsArray() {
validValuePair.first = false;
validValuePair.second = INVALID_TEMPERATURE;
}
thermalComponent = none;
thermalComponent = NONE;
}

View File

@ -34,31 +34,33 @@ struct TempLimits {
float nopUpperLimit;
};
enum ThermalComponents {
none,
acsBoard,
mgt,
rw,
str,
ifBoard,
tcsBoard,
obc,
obcIfBoard,
sBandTransceiver,
pcduP60Board,
pcduAcu,
pcduPdu,
plPcduBoard,
plocMissionBoard,
plocProcessingBoard,
dac,
camera,
dro,
x8,
hpa,
tx,
mpa,
scexBoard
enum ThermalComponents: uint8_t {
//TODO: Großbuchstaben
NONE = 0,
acsBoard = 1,
mgt = 2,
rw = 3,
str = 4,
ifBoard = 5,
tcsBoard = 6,
obc = 7,
obcIfBoard = 8,
sBandTransceiver = 9,
pcduP60Board = 10,
pcduAcu = 11,
pcduPdu = 12,
plPcduBoard = 13,
plocMissionBoard = 14,
plocProcessingBoard = 15,
dac = 16,
camera = 17,
dro = 18,
x8 = 19,
hpa = 20,
tx = 21,
mpa = 22,
scexBoard = 23,
NUM_ENTRIES
};
class ThermalController : public ExtendedControllerBase {
@ -173,9 +175,10 @@ class ThermalController : public ExtendedControllerBase {
TempLimits scexBoardLimits = TempLimits(-60.0, -40.0, 80.0, 85.0, 150.0);
double sensorTemp = INVALID_TEMPERATURE;
ThermalComponents thermalComponent = none;
ThermalComponents thermalComponent = NONE;
bool redSwitchNrInUse = false;
bool componentAboveCutOffLimit = false;
uint8_t errorCounters[32];
// Initial delay to make sure all pool variables have been initialized their owners
Countdown initialCountdown = Countdown(DELAY);