Model a generic Lithium Ion Battery basing on [1][2]. More...
#include "li-ion-energy-source.h"
Public Member Functions | |
LiIonEnergySource () | |
~LiIonEnergySource () override | |
virtual void | DecreaseRemainingEnergy (double energyJ) |
double | GetEnergyFraction () override |
Time | GetEnergyUpdateInterval () const |
double | GetInitialEnergy () const override |
double | GetRemainingEnergy () override |
double | GetSupplyVoltage () const override |
virtual void | IncreaseRemainingEnergy (double energyJ) |
void | SetEnergyUpdateInterval (Time interval) |
void | SetInitialEnergy (double initialEnergyJ) |
void | SetInitialSupplyVoltage (double supplyVoltageV) |
void | UpdateEnergySource () override |
Implements UpdateEnergySource. | |
Public Member Functions inherited from ns3::EnergySource | |
EnergySource () | |
~EnergySource () override | |
void | AppendDeviceEnergyModel (Ptr< DeviceEnergyModel > deviceEnergyModelPtr) |
void | ConnectEnergyHarvester (Ptr< EnergyHarvester > energyHarvesterPtr) |
void | DisposeDeviceModels () |
Calls Dispose () method of the device energy models. | |
DeviceEnergyModelContainer | FindDeviceEnergyModels (std::string name) |
DeviceEnergyModelContainer | FindDeviceEnergyModels (TypeId tid) |
virtual double | GetEnergyFraction ()=0 |
virtual double | GetInitialEnergy () const =0 |
Ptr< Node > | GetNode () const |
virtual double | GetRemainingEnergy ()=0 |
virtual double | GetSupplyVoltage () const =0 |
void | InitializeDeviceModels () |
Calls Start () method of the device energy models. | |
void | SetNode (Ptr< Node > node) |
Sets pointer to node containing this EnergySource. | |
virtual void | UpdateEnergySource ()=0 |
This function goes through the list of DeviceEnergyModels to obtain total current draw at the energy source and updates remaining energy. | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. | |
~Object () override | |
Destructor. | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. | |
void | Dispose () |
Dispose of this Object. | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. | |
bool | IsInitialized () const |
Check if the object has been initialized. | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
virtual TypeId | GetInstanceTypeId () const =0 |
Get the most derived TypeId for this Object. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::EnergySource | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. | |
Private Member Functions | |
void | CalculateRemainingEnergy () |
Calculates remaining energy. | |
void | DoDispose () override |
All child's implementation must call BreakDeviceEnergyModelRefCycle to ensure reference cycles to DeviceEnergyModel objects are broken. | |
void | DoInitialize () override |
Initialize() implementation. | |
double | GetVoltage (double current) const |
Get the cell voltage in function of the discharge current. | |
void | HandleEnergyDrainedEvent () |
Handles the remaining energy going to zero event. | |
Private Attributes | |
double | m_drainedCapacity |
capacity drained from the cell, in Ah | |
double | m_eExp |
cell voltage at the end of the exponential zone, in Volts | |
double | m_eFull |
initial voltage of the cell, in Volts | |
EventId | m_energyUpdateEvent |
energy update event | |
Time | m_energyUpdateInterval |
energy update interval | |
double | m_eNom |
nominal voltage of the cell, in Volts | |
double | m_initialEnergyJ |
initial energy, in Joules | |
double | m_internalResistance |
internal resistance of the cell, in Ohms | |
Time | m_lastUpdateTime |
last update time | |
double | m_lowBatteryTh |
low battery threshold, as a fraction of the initial energy | |
double | m_minVoltTh |
minimum threshold voltage to consider the battery depleted | |
double | m_qExp |
capacity value at the end of the exponential zone, in Ah | |
double | m_qNom |
cell capacity at the end of the nominal zone, in Ah | |
double | m_qRated |
rated capacity of the cell, in Ah | |
TracedValue< double > | m_remainingEnergyJ |
remaining energy, in Joules | |
double | m_supplyVoltageV |
actual voltage of the cell | |
double | m_typCurrent |
typical discharge current used to fit the curves | |
Additional Inherited Members | |
Protected Member Functions inherited from ns3::EnergySource | |
void | BreakDeviceEnergyModelRefCycle () |
This function is called to break reference cycle between EnergySource and DeviceEnergyModel. | |
double | CalculateTotalCurrent () |
void | NotifyEnergyChanged () |
This function notifies all DeviceEnergyModel of energy changed event. | |
void | NotifyEnergyDrained () |
This function notifies all DeviceEnergyModel of energy depletion event. | |
void | NotifyEnergyRecharged () |
This function notifies all DeviceEnergyModel of energy recharged event. | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. | |
virtual void | DoDispose () |
Destructor implementation. | |
virtual void | DoInitialize () |
Initialize() implementation. | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Model a generic Lithium Ion Battery basing on [1][2].
Introspection did not find any typical Config paths.
The model can be fitted to any type of Li-Ion Battery, simply changing the model parameters. The default values are fitted for the Panasonic CGR18650DA Li-Ion Battery [3].
The energy is drained as defined from the EnergySource interface but, this class consider the non-linear behaviour of Li-Ion cell. Each time energy is drained from the cell, the class evaluates the discharge curve to get the actual cell's voltage, accordingly to State of Charge (SOC) and current's drain.
If the actual voltage of the cell goes below the minimum threshold voltage, the cell is considered depleted and the energy drained event fired up.
The model requires several parameters to approximates the discharge curves:
For a complete reference of the energy source model and model's fitting please refer to UAN Framework page and Li-Ion model fitting page.
References: [1] C. M. Shepherd, "Design of Primary and Secondary Cells - Part 3. Battery discharge equation," U.S. Naval Research Laboratory, 1963 [2] Tremblay, O.; Dessaint, L.-A.; Dekkiche, A.-I., "A Generic Battery Model for the Dynamic Simulation of Hybrid Electric Vehicles," Ecole de Technologie Superieure, Universite du Quebec, 2007 [3] http://www.panasonic.com/industrial/includes/pdf/Panasonic_LiIon_CGR18650DA.pdf
Time
+9.22337e+18ns:+9.22337e+18ns Size of this type is 256 bytes (on a 64-bit architecture).
Definition at line 74 of file li-ion-energy-source.h.
ns3::LiIonEnergySource::LiIonEnergySource | ( | ) |
Definition at line 115 of file li-ion-energy-source.cc.
References NS_LOG_FUNCTION.
|
override |
Definition at line 122 of file li-ion-energy-source.cc.
References NS_LOG_FUNCTION.
|
private |
Calculates remaining energy.
This function uses the total current from all device models to calculate the amount of energy to decrease. The energy to decrease is given by: energy to decrease = total current * supply voltage * time duration This function subtracts the calculated energy to decrease from remaining energy.
Definition at line 267 of file li-ion-energy-source.cc.
References ns3::EnergySource::CalculateTotalCurrent(), ns3::Time::GetSeconds(), GetVoltage(), m_drainedCapacity, m_lastUpdateTime, m_remainingEnergyJ, m_supplyVoltageV, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by UpdateEnergySource().
|
virtual |
energyJ | Amount of energy (in Joules) to decrease from energy source. |
Implements DecreaseRemainingEnergy.
Definition at line 192 of file li-ion-energy-source.cc.
References HandleEnergyDrainedEvent(), m_minVoltTh, m_remainingEnergyJ, m_supplyVoltageV, NS_ASSERT, and NS_LOG_FUNCTION.
|
overrideprivatevirtual |
All child's implementation must call BreakDeviceEnergyModelRefCycle to ensure reference cycles to DeviceEnergyModel objects are broken.
Defined in ns3::Object
Reimplemented from ns3::EnergySource.
Definition at line 252 of file li-ion-energy-source.cc.
References ns3::EnergySource::BreakDeviceEnergyModelRefCycle(), and NS_LOG_FUNCTION.
|
overrideprivatevirtual |
Initialize() implementation.
This method is called only once by Initialize(). If the user calls Initialize() multiple times, DoInitialize() is called only the first time.
Subclasses are expected to override this method and chain up to their parent's implementation once they are done. It is safe to call GetObject() and AggregateObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 245 of file li-ion-energy-source.cc.
References NS_LOG_FUNCTION, and UpdateEnergySource().
|
overridevirtual |
Implements GetEnergyFraction.
Implements ns3::EnergySource.
Definition at line 183 of file li-ion-energy-source.cc.
References m_initialEnergyJ, m_remainingEnergyJ, NS_LOG_FUNCTION, and UpdateEnergySource().
Time ns3::LiIonEnergySource::GetEnergyUpdateInterval | ( | ) | const |
Definition at line 167 of file li-ion-energy-source.cc.
References m_energyUpdateInterval, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
|
overridevirtual |
Implements GetInitialEnergy.
Implements ns3::EnergySource.
Definition at line 138 of file li-ion-energy-source.cc.
References m_initialEnergyJ, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
|
overridevirtual |
Implements GetRemainingEnergy.
Implements ns3::EnergySource.
Definition at line 174 of file li-ion-energy-source.cc.
References m_remainingEnergyJ, NS_LOG_FUNCTION, and UpdateEnergySource().
|
overridevirtual |
Implements GetSupplyVoltage.
Implements ns3::EnergySource.
Definition at line 153 of file li-ion-energy-source.cc.
References m_supplyVoltageV, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
|
static |
Get the type ID.
Definition at line 38 of file li-ion-energy-source.cc.
References GetEnergyUpdateInterval(), GetInitialEnergy(), GetSupplyVoltage(), m_eExp, m_eNom, m_internalResistance, m_lowBatteryTh, m_minVoltTh, m_qExp, m_qNom, m_qRated, m_remainingEnergyJ, m_typCurrent, ns3::MakeDoubleAccessor(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeTraceSourceAccessor(), ns3::Seconds(), SetEnergyUpdateInterval(), SetInitialEnergy(), SetInitialSupplyVoltage(), and ns3::TypeId::SetParent().
Get the cell voltage in function of the discharge current.
It consider different discharge curves for different discharge currents and the remaining energy of the cell.
current | the actual discharge current value. |
Definition at line 292 of file li-ion-energy-source.cc.
References E, m_drainedCapacity, m_eExp, m_eFull, m_eNom, m_internalResistance, m_qExp, m_qNom, m_qRated, m_typCurrent, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by CalculateRemainingEnergy().
|
private |
Handles the remaining energy going to zero event.
This function notifies all the energy models aggregated to the node about the energy being depleted. Each energy model is then responsible for its own handler.
Definition at line 259 of file li-ion-energy-source.cc.
References ns3::EnergySource::GetNode(), ns3::EnergySource::NotifyEnergyDrained(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by DecreaseRemainingEnergy(), and UpdateEnergySource().
|
virtual |
energyJ | Amount of energy (in Joules) to increase from energy source. |
Implements IncreaseRemainingEnergy.
Definition at line 206 of file li-ion-energy-source.cc.
References m_remainingEnergyJ, NS_ASSERT, and NS_LOG_FUNCTION.
void ns3::LiIonEnergySource::SetEnergyUpdateInterval | ( | Time | interval | ) |
interval | Energy update interval. |
This function sets the interval between each energy update.
Definition at line 160 of file li-ion-energy-source.cc.
References m_energyUpdateInterval, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
void ns3::LiIonEnergySource::SetInitialEnergy | ( | double | initialEnergyJ | ) |
initialEnergyJ | Initial energy, in Joules |
Implements SetInitialEnergy. Note that initial energy is assumed to be set before simulation starts and is set only once per simulation.
Definition at line 128 of file li-ion-energy-source.cc.
References m_initialEnergyJ, m_remainingEnergyJ, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
void ns3::LiIonEnergySource::SetInitialSupplyVoltage | ( | double | supplyVoltageV | ) |
supplyVoltageV | Initial Supply voltage at the energy source, in Volts. |
Sets the initial supply voltage of the energy source. To be called only once.
Definition at line 145 of file li-ion-energy-source.cc.
References m_eFull, m_supplyVoltageV, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
|
overridevirtual |
Implements UpdateEnergySource.
Implements ns3::EnergySource.
Definition at line 214 of file li-ion-energy-source.cc.
References CalculateRemainingEnergy(), ns3::EventId::Cancel(), ns3::EnergySource::GetNode(), HandleEnergyDrainedEvent(), ns3::Simulator::IsFinished(), m_energyUpdateEvent, m_energyUpdateInterval, m_initialEnergyJ, m_lastUpdateTime, m_lowBatteryTh, m_remainingEnergyJ, ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Simulator::Schedule(), and UpdateEnergySource().
Referenced by DoInitialize(), GetEnergyFraction(), GetRemainingEnergy(), and UpdateEnergySource().
|
private |
capacity drained from the cell, in Ah
Definition at line 194 of file li-ion-energy-source.h.
Referenced by CalculateRemainingEnergy(), and GetVoltage().
|
private |
cell voltage at the end of the exponential zone, in Volts
Definition at line 202 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and GetVoltage().
|
private |
initial voltage of the cell, in Volts
Definition at line 200 of file li-ion-energy-source.h.
Referenced by GetVoltage(), and SetInitialSupplyVoltage().
|
private |
energy update event
Definition at line 197 of file li-ion-energy-source.h.
Referenced by UpdateEnergySource().
|
private |
energy update interval
Definition at line 199 of file li-ion-energy-source.h.
Referenced by GetEnergyUpdateInterval(), SetEnergyUpdateInterval(), and UpdateEnergySource().
|
private |
nominal voltage of the cell, in Volts
Definition at line 201 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and GetVoltage().
|
private |
initial energy, in Joules
Definition at line 192 of file li-ion-energy-source.h.
Referenced by GetEnergyFraction(), GetInitialEnergy(), SetInitialEnergy(), and UpdateEnergySource().
|
private |
internal resistance of the cell, in Ohms
Definition at line 203 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and GetVoltage().
|
private |
last update time
Definition at line 198 of file li-ion-energy-source.h.
Referenced by CalculateRemainingEnergy(), and UpdateEnergySource().
|
private |
low battery threshold, as a fraction of the initial energy
Definition at line 196 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and UpdateEnergySource().
|
private |
minimum threshold voltage to consider the battery depleted
Definition at line 208 of file li-ion-energy-source.h.
Referenced by DecreaseRemainingEnergy(), and GetTypeId().
|
private |
capacity value at the end of the exponential zone, in Ah
Definition at line 206 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and GetVoltage().
|
private |
cell capacity at the end of the nominal zone, in Ah
Definition at line 205 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and GetVoltage().
|
private |
rated capacity of the cell, in Ah
Definition at line 204 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and GetVoltage().
|
private |
remaining energy, in Joules
Definition at line 193 of file li-ion-energy-source.h.
Referenced by CalculateRemainingEnergy(), DecreaseRemainingEnergy(), GetEnergyFraction(), GetRemainingEnergy(), GetTypeId(), IncreaseRemainingEnergy(), SetInitialEnergy(), and UpdateEnergySource().
|
private |
actual voltage of the cell
Definition at line 195 of file li-ion-energy-source.h.
Referenced by CalculateRemainingEnergy(), DecreaseRemainingEnergy(), GetSupplyVoltage(), and SetInitialSupplyVoltage().
|
private |
typical discharge current used to fit the curves
Definition at line 207 of file li-ion-energy-source.h.
Referenced by GetTypeId(), and GetVoltage().