energy: Fixes for negative remaining energy and bug 2310

This commit is contained in:
Cristiano Tapparello
2016-03-11 15:04:49 -05:00
parent f572e80879
commit 17c80dc005
2 changed files with 20 additions and 12 deletions

View File

@@ -207,10 +207,6 @@ BasicEnergySource::HandleEnergyDrainedEvent (void)
NS_LOG_FUNCTION (this);
NS_LOG_DEBUG ("BasicEnergySource:Energy depleted!");
NotifyEnergyDrained (); // notify DeviceEnergyModel objects
if (m_remainingEnergyJ <= 0)
{
m_remainingEnergyJ = 0; // energy never goes below 0
}
}
void
@@ -230,7 +226,16 @@ BasicEnergySource::CalculateRemainingEnergy (void)
NS_ASSERT (duration.GetSeconds () >= 0);
// energy = current * voltage * time
double energyToDecreaseJ = totalCurrentA * m_supplyVoltageV * duration.GetSeconds ();
m_remainingEnergyJ -= energyToDecreaseJ;
if (m_remainingEnergyJ < energyToDecreaseJ)
{
m_remainingEnergyJ = 0; // energy never goes below 0
}
else
{
m_remainingEnergyJ -= energyToDecreaseJ;
}
NS_LOG_DEBUG ("BasicEnergySource:Remaining energy = " << m_remainingEnergyJ);
}

View File

@@ -253,8 +253,6 @@ void
LiIonEnergySource::DoDispose (void)
{
NS_LOG_FUNCTION (this);
// calculate remaining energy at the end of simulation
CalculateRemainingEnergy ();
BreakDeviceEnergyModelRefCycle (); // break reference cycle
}
@@ -266,10 +264,6 @@ LiIonEnergySource::HandleEnergyDrainedEvent (void)
NS_LOG_DEBUG ("LiIonEnergySource:Energy depleted at node #" <<
GetNode ()->GetId ());
NotifyEnergyDrained (); // notify DeviceEnergyModel objects
if (m_remainingEnergyJ <= 0)
{
m_remainingEnergyJ = 0; // energy never goes below 0
}
}
@@ -282,7 +276,16 @@ LiIonEnergySource::CalculateRemainingEnergy (void)
NS_ASSERT (duration.GetSeconds () >= 0);
// energy = current * voltage * time
double energyToDecreaseJ = totalCurrentA * m_supplyVoltageV * duration.GetSeconds ();
m_remainingEnergyJ -= energyToDecreaseJ;
if (m_remainingEnergyJ < energyToDecreaseJ)
{
m_remainingEnergyJ = 0; // energy never goes below 0
}
else
{
m_remainingEnergyJ -= energyToDecreaseJ;
}
m_drainedCapacity += (totalCurrentA * duration.GetSeconds () / 3600);
// update the supply voltage
m_supplyVoltageV = GetVoltage (totalCurrentA);