Fixed some errors in the controller related to the temperature sensor component.

This commit is contained in:
2021-09-24 21:18:38 +02:00
parent 58a3cd34ed
commit ad8797f57a
17 changed files with 65 additions and 62 deletions

View File

@ -9,43 +9,42 @@ ArduinoTCSTemperatureSensor::ArduinoTCSTemperatureSensor(object_id_t setObjectid
float *inputTemperature, PoolVariableIF *poolVariable,
uint8_t vectorIndex, Parameters parameters, uint32_t datapoolId,
DataSet *outputSet, ThermalModuleIF *thermalModule) :
AbstractTemperatureSensor(setObjectid, thermalModule), parameters(
parameters), inputTemperature(inputTemperature), poolVariable(
poolVariable), outputTemperature(datapoolId, outputSet,
PoolVariableIF::VAR_WRITE) {
AbstractTemperatureSensor(setObjectid, thermalModule), parameters(parameters),
inputTemperature(*inputTemperature), poolVariable(poolVariable),
outputValidity(datapoolId, outputSet, PoolVariableIF::VAR_READ_WRITE)
/*DataPool::poolIdAndPositionToPid(poolVariable->getDataPoolId(), vectorIndex)*/
/*outputTemperature(datapoolId, outputSet, PoolVariableIF::VAR_WRITE)*/ {
}
ArduinoTCSTemperatureSensor::~ArduinoTCSTemperatureSensor() {}
void ArduinoTCSTemperatureSensor::setInvalid() {
outputTemperature = INVALID_TEMPERATURE;
outputTemperature.setValid(false);
}
float ArduinoTCSTemperatureSensor::calculateOutputTemperature(float inputTemperature) {
return inputTemperature; // [°C]
inputTemperature = INVALID_TEMPERATURE;
outputValidity.setValid(false);
}
void ArduinoTCSTemperatureSensor::doChildOperation() {
if (!poolVariable->isValid() || !healthHelper.healthTable->isHealthy(getObjectId())) {
getTemperature();
// Loop with isValid doesn't work
/*if (!poolVariable->isValid() || !healthHelper.healthTable->isHealthy(getObjectId())) {
setInvalid();
return;
}
outputTemperature = calculateOutputTemperature(*inputTemperature);
if (outputTemperature<parameters.lowerLimit || outputTemperature>parameters.upperLimit){
outputTemperature.setValid(PoolVariableIF::INVALID);
outputTemperature = INVALID_TEMPERATURE;
}*/
if (inputTemperature<parameters.lowerLimit || inputTemperature>parameters.upperLimit){
outputValidity.setValid(PoolVariableIF::INVALID);
inputTemperature = INVALID_TEMPERATURE;
} else {
outputTemperature.setValid(PoolVariableIF::VALID);
outputValidity.setValid(PoolVariableIF::VALID);
}
}
float ArduinoTCSTemperatureSensor::getTemperature() {
return outputTemperature;
return inputTemperature;
}
bool ArduinoTCSTemperatureSensor::isValid() {
return outputTemperature.isValid();
// To modify?
return outputValidity.isValid();
}
void ArduinoTCSTemperatureSensor::resetOldState() {}

View File

@ -19,12 +19,13 @@ private:
protected:
Parameters parameters;
float *inputTemperature;
float inputTemperature;
//PoolVariable<float> *inputTemperature;
PoolVariableIF *poolVariable;
PoolVariable<float> outputTemperature;
//float outputTemperature;
PoolVariable<uint8_t> outputValidity;
virtual float calculateOutputTemperature(float inputTemperature);
void doChildOperation() override;
void doChildOperation();
public:
ArduinoTCSTemperatureSensor(object_id_t setObjectid,

View File

@ -11,15 +11,15 @@
ThermalController::ThermalController(object_id_t objectId, object_id_t powerSwitcher, size_t commandQueueDepth):
ControllerBase(objectId, 0, commandQueueDepth),
powerSwitcherId(powerSwitcher), TempValueVec(datapool::Temperature_value, &SensorData, PoolVariableIF::VAR_READ),
TEMPERATURE_SENSOR_CH1(objects::TCS_SENSOR_CH1, &TempValueVec[0], &TempValueVec, 0, TEMPERATURE_SENSOR_CONFIG, datapool::TEMP_SENSOR_CH1, &SensorData, NULL),
TEMPERATURE_SENSOR_CH2(objects::TCS_SENSOR_CH2, &TempValueVec[1], &TempValueVec, 1, TEMPERATURE_SENSOR_CONFIG, datapool::TEMP_SENSOR_CH2, &SensorData, NULL),
TEMPERATURE_SENSOR_CH1(objects::TCS_SENSOR_CH1, &TempValueVec[0], &TempValueVec, 0, TEMPERATURE_SENSOR_CONFIG, datapool::TempValidity_SENSOR_CH1, &SensorData, NULL),
TEMPERATURE_SENSOR_CH2(objects::TCS_SENSOR_CH2, &TempValueVec[1], &TempValueVec, 1, TEMPERATURE_SENSOR_CONFIG, datapool::TempValidity_SENSOR_CH2, &SensorData, NULL),
HEATER_1(objects::TCS_HEATER_1, objects::TCS_SWITCH_1),
REDUNDANT_HEATER_1(objects::TCS_REDUNDANT_HEATER_1, objects::TCS_SWITCH_1R),
HEATER_2(objects::TCS_HEATER_2, objects::TCS_SWITCH_2),
REDUNDANT_HEATER_2(objects::TCS_REDUNDANT_HEATER_2, objects::TCS_SWITCH_2R),
TEMPERATURE_COMPONENT_1(objects::TCS_COMPONENT_1, COMPONENT_DOMAIN_ID, datapool::TEMP_SENSOR_CH1, datapool::TargetState_COMPONENT_1, datapool::CurrentState_COMPONENT_1,
TEMPERATURE_COMPONENT_1(objects::TCS_COMPONENT_1, COMPONENT_DOMAIN_ID, datapool::Temperature_COMPONENT_1, datapool::TargetState_COMPONENT_1, datapool::CurrentState_COMPONENT_1,
datapool::HeaterRequest_COMPONENT_1, &ComponentData, &TEMPERATURE_SENSOR_CH1, NULL, NULL, &HEATER_1, &REDUNDANT_HEATER_1, NULL, COMPONENT1_CONFIG, ThermalComponentIF::SAFE),
TEMPERATURE_COMPONENT_2(objects::TCS_COMPONENT_2, COMPONENT_DOMAIN_ID + 1, datapool::TEMP_SENSOR_CH2, datapool::TargetState_COMPONENT_2, datapool::CurrentState_COMPONENT_2,
TEMPERATURE_COMPONENT_2(objects::TCS_COMPONENT_2, COMPONENT_DOMAIN_ID + 1, datapool::Temperature_COMPONENT_2, datapool::TargetState_COMPONENT_2, datapool::CurrentState_COMPONENT_2,
datapool::HeaterRequest_COMPONENT_2, &ComponentData, &TEMPERATURE_SENSOR_CH2, NULL, NULL, &HEATER_2, &REDUNDANT_HEATER_2, NULL, COMPONENT2_CONFIG, ThermalComponentIF::SAFE)
{
sensors.push_back(TEMPERATURE_SENSOR_CH1);
@ -103,6 +103,8 @@ ReturnValue_t ThermalController::performOperation(uint8_t opCode) {
}
SensorData.read();
printf("\nTemperature: %f", TempValueVec[0]);
printf("\nTemperature: %f\n", TempValueVec[1]);
for (std::list<ArduinoTCSTemperatureSensor>::iterator iter = sensors.begin(); iter != sensors.end(); iter++) {
iter->performOperation(0);
}
@ -117,7 +119,7 @@ ReturnValue_t ThermalController::performOperation(uint8_t opCode) {
//request = iter->performOperation(0, ThermalComponentIF::SAFE, true, false);
}
ComponentData.commit();
sif::debug<<"DEBUG_TCS: Component ops"<<std::endl;
sif::debug<<"DEBUG_TCS: Component ops"<<std::endl;//*/
return HasReturnvaluesIF::RETURN_OK;
}

View File

@ -103,22 +103,21 @@ ReturnValue_t ArduinoDH::interpretDeviceReply(DeviceCommandId_t id,
memcpy(&TempValueVec[i], &Temp_ch.temperature, 4);
memcpy(&TempTimeVec[i], &Temp_ch.Timestamp, 4);
// The data are here printed (useful for tests).
printf("\n\nStart: %7s", Temp_ch.start_string);
/*printf("\n\nStart: %7s", Temp_ch.start_string);
printf("\nTyp: %u", Temp_ch.Typ);
printf("\nSPCChNumber: %u", Temp_ch.SPCChNumber);
printf("\nValue_Cnt: %u", Temp_ch.Value_Cnt);
printf("\nTemperature: %f", Temp_ch.temperature);
printf("\nTimestamp: %u", Temp_ch.Timestamp);
printf("\nEnd: %7s", Temp_ch.end_string);
vecTemp.emplace_back(Temp_ch);
vecTemp.emplace_back(Temp_ch);*/
}
ArduinoDataSet.commit(PoolVariableIF::VALID);
/* The environment and orientation data reading and printing
* are currently commented out because they are not needed.
* Anyway they are available and they can be used if necessary.
*/
printf(
/*printf(
"\n\n***********************************************************************************************\n");
printf("ENVIRONMENTAL parameters are: ");
for (int j = 0; j < 9; j++) {