SoC Calculator #754

Merged
muellerr merged 74 commits from soc-calculator into main 2023-10-11 10:50:48 +02:00
2 changed files with 14 additions and 8 deletions
Showing only changes of commit 209e0c68fb - Show all commits

View File

@ -150,6 +150,8 @@ void PowerController::calculateStateOfCharge() {
pwrCtrlCoreHk.setValidity(false, true); pwrCtrlCoreHk.setValidity(false, true);
} }
} }
// store time for next run
oldTime = now;
return; return;
} }
@ -171,12 +173,12 @@ void PowerController::calculateStateOfCharge() {
pwrCtrlCoreHk.coulombCounterCharge.setValid(false); pwrCtrlCoreHk.coulombCounterCharge.setValid(false);
} }
} }
// store time for next run
oldTime = now;
return; return;
} }
result = calculateCoulombCounterCharge(); result = calculateCoulombCounterCharge();
// store time for next run
oldTime = now;
if (result != returnvalue::OK) { if (result != returnvalue::OK) {
// notifying events have already been triggered // notifying events have already been triggered
{ {
@ -191,6 +193,8 @@ void PowerController::calculateStateOfCharge() {
pwrCtrlCoreHk.coulombCounterCharge.setValid(false); pwrCtrlCoreHk.coulombCounterCharge.setValid(false);
} }
} }
// store time for next run
oldTime = now;
return; return;
} }
@ -204,6 +208,8 @@ void PowerController::calculateStateOfCharge() {
pwrCtrlCoreHk.setValidity(true, true); pwrCtrlCoreHk.setValidity(true, true);
} }
} }
// store time for next run
oldTime = now;
} }
void PowerController::watchStateOfCharge() { void PowerController::watchStateOfCharge() {
@ -231,13 +237,14 @@ ReturnValue_t PowerController::calculateCoulombCounterCharge() {
sif::error << "Power Controller::Time delta too large for Coulomb Counter" << std::endl; sif::error << "Power Controller::Time delta too large for Coulomb Counter" << std::endl;
return returnvalue::FAILED; return returnvalue::FAILED;
} }
if ((not pwrCtrlCoreHk.coulombCounterCharge.isValid()) or if (not pwrCtrlCoreHk.coulombCounterCharge.isValid()) {
(bpxBatteryHk.battVoltage.value > coulombCounterVoltageUpperThreshold and
pwrCtrlCoreHk.coulombCounterCharge.value >= coulombCounterChargeUpperThreshold)) {
coulombCounterCharge = openCircuitVoltageCharge; coulombCounterCharge = openCircuitVoltageCharge;
} else { } else {
coulombCounterCharge = coulombCounterCharge =
coulombCounterCharge + iBat * CONVERT_FROM_MILLI * timeDiff * SECONDS_TO_HOURS; coulombCounterCharge + iBat * CONVERT_FROM_MILLI * timeDiff * SECONDS_TO_HOURS;
if (coulombCounterCharge >= coulombCounterChargeUpperThreshold) {
coulombCounterCharge = coulombCounterChargeUpperThreshold;
}
} }
return returnvalue::OK; return returnvalue::OK;
} }
@ -261,7 +268,7 @@ ReturnValue_t PowerController::updateEpsData() {
} }
float PowerController::charge2stateOfCharge(float capacity) { float PowerController::charge2stateOfCharge(float capacity) {
return capacity / batteryMaximumCapacity; return capacity / coulombCounterChargeUpperThreshold;
} }
float PowerController::linearInterpolation(float x, float x0, float x1, float y0, float y1) { float PowerController::linearInterpolation(float x, float x0, float x1, float y0, float y1) {

View File

@ -54,8 +54,7 @@ static constexpr Event DATASET_READ_FAILED = event::makeEvent(SUBSYSTEM_ID, 4, s
//! P1: 1 too high, 0 too low //! P1: 1 too high, 0 too low
static constexpr Event VOLTAGE_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 5, severity::HIGH); static constexpr Event VOLTAGE_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 5, severity::HIGH);
//! [EXPORT] : [COMMENT] Time difference for Coulomb Counter was too large. //! [EXPORT] : [COMMENT] Time difference for Coulomb Counter was too large.
static constexpr Event TIMEDELTA_OUT_OF_BOUNDS = static constexpr Event TIMEDELTA_OUT_OF_BOUNDS = event::makeEvent(SUBSYSTEM_ID, 6, severity::LOW);
event::makeEvent(SUBSYSTEM_ID, 6, severity::MEDIUM);
enum class States { IDLE, SWITCHING_POWER, CHECKING_POWER, MODE_COMMANDING }; enum class States { IDLE, SWITCHING_POWER, CHECKING_POWER, MODE_COMMANDING };
enum class OpCodes { NONE, TO_OFF_DONE, TO_NOT_OFF_DONE, TIMEOUT_OCCURED }; enum class OpCodes { NONE, TO_OFF_DONE, TO_NOT_OFF_DONE, TIMEOUT_OCCURED };