Once upon a time Robin was made happy #800
@ -158,6 +158,11 @@ ReturnValue_t PowerController::checkModeCommand(Mode_t mode, Submode_t submode,
|
|||||||
void PowerController::calculateStateOfCharge() {
|
void PowerController::calculateStateOfCharge() {
|
||||||
// get time
|
// get time
|
||||||
Clock::getClockMonotonic(&now);
|
Clock::getClockMonotonic(&now);
|
||||||
|
double timeDelta = 0.0;
|
||||||
|
if (now.tv_sec != 0 and oldTime.tv_sec != 0) {
|
||||||
|
timeDelta = timevalOperations::toDouble(now - oldTime);
|
||||||
|
}
|
||||||
|
oldTime = now;
|
||||||
|
|
||||||
// update EPS HK values
|
// update EPS HK values
|
||||||
ReturnValue_t result = updateEpsData();
|
ReturnValue_t result = updateEpsData();
|
||||||
@ -173,8 +178,6 @@ void PowerController::calculateStateOfCharge() {
|
|||||||
pwrCtrlCoreHk.setValidity(false, true);
|
pwrCtrlCoreHk.setValidity(false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// store time for next run
|
|
||||||
oldTime = now;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,12 +198,10 @@ void PowerController::calculateStateOfCharge() {
|
|||||||
pwrCtrlCoreHk.coulombCounterCharge.setValid(false);
|
pwrCtrlCoreHk.coulombCounterCharge.setValid(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// store time for next run
|
|
||||||
oldTime = now;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = calculateCoulombCounterCharge();
|
result = calculateCoulombCounterCharge(timeDelta);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
// notifying events have already been triggered
|
// notifying events have already been triggered
|
||||||
{
|
{
|
||||||
@ -215,9 +216,6 @@ void PowerController::calculateStateOfCharge() {
|
|||||||
pwrCtrlCoreHk.coulombCounterCharge.setValid(false);
|
pwrCtrlCoreHk.coulombCounterCharge.setValid(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// store time for next run
|
|
||||||
oldTime = now;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// commit to dataset
|
// commit to dataset
|
||||||
@ -231,8 +229,6 @@ void PowerController::calculateStateOfCharge() {
|
|||||||
pwrCtrlCoreHk.setValidity(true, true);
|
pwrCtrlCoreHk.setValidity(true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// store time for next run
|
|
||||||
oldTime = now;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PowerController::watchStateOfCharge() {
|
void PowerController::watchStateOfCharge() {
|
||||||
@ -285,17 +281,14 @@ ReturnValue_t PowerController::calculateOpenCircuitVoltageCharge() {
|
|||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PowerController::calculateCoulombCounterCharge() {
|
ReturnValue_t PowerController::calculateCoulombCounterCharge(double timeDelta) {
|
||||||
double timeDiff = 0.0;
|
if (timeDelta == 0.0) {
|
||||||
if (oldTime.tv_sec != 0) {
|
|
||||||
timeDiff = timevalOperations::toDouble(now - oldTime);
|
|
||||||
} else {
|
|
||||||
return returnvalue::FAILED;
|
return returnvalue::FAILED;
|
||||||
}
|
}
|
||||||
if (timeDiff > maxAllowedTimeDiff) {
|
if (timeDelta > maxAllowedTimeDiff) {
|
||||||
// should not be a permanent state so no spam protection required
|
// should not be a permanent state so no spam protection required
|
||||||
triggerEvent(power::TIMEDELTA_OUT_OF_BOUNDS, static_cast<uint32_t>(timeDiff * 10));
|
triggerEvent(power::TIMEDELTA_OUT_OF_BOUNDS, static_cast<uint32_t>(timeDelta * 10));
|
||||||
sif::error << "Power Controller::Time delta too large for Coulomb Counter: " << timeDiff
|
sif::error << "Power Controller::Time delta too large for Coulomb Counter: " << timeDelta
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
return returnvalue::FAILED;
|
return returnvalue::FAILED;
|
||||||
}
|
}
|
||||||
@ -303,7 +296,7 @@ ReturnValue_t PowerController::calculateCoulombCounterCharge() {
|
|||||||
coulombCounterCharge = openCircuitVoltageCharge;
|
coulombCounterCharge = openCircuitVoltageCharge;
|
||||||
} else {
|
} else {
|
||||||
coulombCounterCharge =
|
coulombCounterCharge =
|
||||||
coulombCounterCharge + iBat * CONVERT_FROM_MILLI * timeDiff * SECONDS_TO_HOURS;
|
coulombCounterCharge + iBat * CONVERT_FROM_MILLI * timeDelta * SECONDS_TO_HOURS;
|
||||||
if (coulombCounterCharge >= coulombCounterChargeUpperThreshold) {
|
if (coulombCounterCharge >= coulombCounterChargeUpperThreshold) {
|
||||||
coulombCounterCharge = coulombCounterChargeUpperThreshold;
|
coulombCounterCharge = coulombCounterChargeUpperThreshold;
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ class PowerController : public ExtendedControllerBase, public ReceivesParameterM
|
|||||||
void calculateStateOfCharge();
|
void calculateStateOfCharge();
|
||||||
void watchStateOfCharge();
|
void watchStateOfCharge();
|
||||||
ReturnValue_t calculateOpenCircuitVoltageCharge();
|
ReturnValue_t calculateOpenCircuitVoltageCharge();
|
||||||
ReturnValue_t calculateCoulombCounterCharge();
|
ReturnValue_t calculateCoulombCounterCharge(double timeDelta);
|
||||||
ReturnValue_t updateEpsData();
|
ReturnValue_t updateEpsData();
|
||||||
float charge2stateOfCharge(float capacity, bool coulombCounter);
|
float charge2stateOfCharge(float capacity, bool coulombCounter);
|
||||||
ReturnValue_t lookUpTableOcvIdxFinder(float voltage, uint8_t& idx, bool paramCmd);
|
ReturnValue_t lookUpTableOcvIdxFinder(float voltage, uint8_t& idx, bool paramCmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user