20#include <ns3/core-module.h>
21#include <ns3/energy-module.h>
22#include <ns3/gnuplot.h>
77 double cellVoltage = es->GetSupplyVoltage();
92 double cellVoltage = es->GetSupplyVoltage();
107 double cellVoltage = es->GetSupplyVoltage();
108 double dischargeCapacityAh = es->GetDrainedCapacity();
121 double cellVoltage = es->GetSupplyVoltage();
136 double cellVoltage = es->GetSupplyVoltage();
148main(
int argc,
char** argv)
151 cmd.Parse(argc, argv);
165 node = CreateObject<Node>();
166 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
167 batteryModel = CreateObject<GenericBatteryModel>();
169 batteryModel->SetAttribute(
"FullVoltage",
DoubleValue(1.39));
170 batteryModel->SetAttribute(
"MaxCapacity",
DoubleValue(7.0));
172 batteryModel->SetAttribute(
"NominalVoltage",
DoubleValue(1.18));
173 batteryModel->SetAttribute(
"NominalCapacity",
DoubleValue(6.25));
175 batteryModel->SetAttribute(
"ExponentialVoltage",
DoubleValue(1.28));
176 batteryModel->SetAttribute(
"ExponentialCapacity",
DoubleValue(1.3));
178 batteryModel->SetAttribute(
"InternalResistance",
DoubleValue(0.0046));
179 batteryModel->SetAttribute(
"TypicalDischargeCurrent",
DoubleValue(1.3));
180 batteryModel->SetAttribute(
"CutoffVoltage",
DoubleValue(1.0));
193 devicesEnergyModel->SetEnergySource(batteryModel);
194 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
195 devicesEnergyModel->SetNode(node);
197 devicesEnergyModel->SetCurrentA(6.5);
209 node = CreateObject<Node>();
213 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
214 devicesEnergyModel->SetEnergySource(batteryModel);
215 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
216 devicesEnergyModel->SetNode(node);
218 devicesEnergyModel->SetCurrentA(13);
229 node = CreateObject<Node>();
230 batteryModel = CreateObject<GenericBatteryModel>();
234 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
235 devicesEnergyModel->SetEnergySource(batteryModel);
236 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
237 devicesEnergyModel->SetNode(node);
239 devicesEnergyModel->SetCurrentA(32.5);
251 set yrange [0.8:1.8]\n\
255 set style line 1 linewidth 5\n\
256 set style line 2 linewidth 5\n\
257 set style line 3 linewidth 5\n\
258 set style line 4 linewidth 5\n\
259 set style line 5 linewidth 5\n\
260 set style line 6 linewidth 5\n\
261 set style line 7 linewidth 5\n\
262 set style line 8 linewidth 5\n\
263 set style increment user\n\
264 set key reverse Left");
268 std::cout <<
"The end, plotting now\n";
274 node = CreateObject<Node>();
278 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
279 devicesEnergyModel->SetEnergySource(batteryModel);
280 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
281 devicesEnergyModel->SetNode(node);
283 devicesEnergyModel->SetCurrentA(0.36);
294 node = CreateObject<Node>();
298 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
299 devicesEnergyModel->SetEnergySource(batteryModel);
300 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
301 devicesEnergyModel->SetNode(node);
303 devicesEnergyModel->SetCurrentA(0.648);
318 set xtics (1,2,3,5,10,20,30,60,120,180,300,600,1200,1800)\n\
319 set ytics (0,8,9,10,11,12,13,14)\n\
321 set style line 1 linewidth 5\n\
322 set style line 2 linewidth 5\n\
323 set style line 3 linewidth 5\n\
324 set style line 4 linewidth 5\n\
325 set style line 5 linewidth 5\n\
326 set style line 6 linewidth 5\n\
327 set style line 7 linewidth 5\n\
328 set style line 8 linewidth 5\n\
329 set style increment user\n\
330 set key reverse Left");
333 std::cout <<
"The end, plotting now\n";
339 node = CreateObject<Node>();
343 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
344 devicesEnergyModel->SetEnergySource(batteryModel);
345 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
346 devicesEnergyModel->SetNode(node);
348 devicesEnergyModel->SetCurrentA(0.466);
359 node = CreateObject<Node>();
363 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
364 devicesEnergyModel->SetEnergySource(batteryModel);
365 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
366 devicesEnergyModel->SetNode(node);
368 devicesEnergyModel->SetCurrentA(2.33);
379 node = CreateObject<Node>();
383 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
384 devicesEnergyModel->SetEnergySource(batteryModel);
385 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
386 devicesEnergyModel->SetNode(node);
388 devicesEnergyModel->SetCurrentA(4.66);
400 set yrange [2.6:4.4]\n\
404 set style line 1 linewidth 5\n\
405 set style line 2 linewidth 5\n\
406 set style line 3 linewidth 5\n\
407 set style line 4 linewidth 5\n\
408 set style line 5 linewidth 5\n\
409 set style line 6 linewidth 5\n\
410 set style line 7 linewidth 5\n\
411 set style line 8 linewidth 5\n\
412 set style increment user\n\
413 set key reverse Left");
416 std::cout <<
"The end, plotting now\n";
422 node = CreateObject<Node>();
426 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
427 devicesEnergyModel->SetEnergySource(batteryModel);
428 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
429 devicesEnergyModel->SetNode(node);
431 devicesEnergyModel->SetCurrentA(5);
442 node = CreateObject<Node>();
446 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
447 devicesEnergyModel->SetEnergySource(batteryModel);
448 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
449 devicesEnergyModel->SetNode(node);
451 devicesEnergyModel->SetCurrentA(100);
466 set xtics (1,2,4,6,8,10,20,40,60,120,240,360,480,600,1200)\n\
467 set ytics (7,8,9,10,11,12,13)\n\
469 set style line 1 linewidth 5\n\
470 set style line 2 linewidth 5\n\
471 set style line 3 linewidth 5\n\
472 set style line 4 linewidth 5\n\
473 set style line 5 linewidth 5\n\
474 set style line 6 linewidth 5\n\
475 set style line 7 linewidth 5\n\
476 set style line 8 linewidth 5\n\
477 set style increment user\n\
478 set key reverse Left");
481 std::cout <<
"The end, plotting now\n";
487 node = CreateObject<Node>();
491 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
492 devicesEnergyModel->SetEnergySource(batteryModel);
493 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
494 devicesEnergyModel->SetNode(node);
496 devicesEnergyModel->SetCurrentA(0.07);
507 node = CreateObject<Node>();
511 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
512 devicesEnergyModel->SetEnergySource(batteryModel);
513 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
514 devicesEnergyModel->SetNode(node);
516 devicesEnergyModel->SetCurrentA(0.14);
527 node = CreateObject<Node>();
531 devicesEnergyModel = CreateObject<SimpleDeviceEnergyModel>();
532 devicesEnergyModel->SetEnergySource(batteryModel);
533 batteryModel->AppendDeviceEnergyModel(devicesEnergyModel);
534 devicesEnergyModel->SetNode(node);
536 devicesEnergyModel->SetCurrentA(0.35);
548 set yrange [0.7:1.5]\n\
553 set style line 1 linewidth 5\n\
554 set style line 2 linewidth 5\n\
555 set style line 3 linewidth 5\n\
556 set style line 4 linewidth 5\n\
557 set style line 5 linewidth 5\n\
558 set style line 6 linewidth 5\n\
559 set style line 7 linewidth 5\n\
560 set style line 8 linewidth 5\n\
561 set style increment user\n\
562 set key reverse Left");
565 std::cout <<
"The end, plotting now\n";
Parse command-line arguments.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Hold variables of type enum.
Creates and assign an assortment of BatteryModels to Nodes.
Ptr< EnergySourceContainer > Install(NodeContainer c) const
This function installs energy sources in a group of nodes in a node container.
Class to represent a 2D points plot.
void Add(double x, double y)
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
void AddDataset(const GnuplotDataset &dataset)
void SetLegend(const std::string &xLegend, const std::string &yLegend)
void SetTerminal(const std::string &terminal)
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
void SetExtra(const std::string &extra)
Smart pointer class similar to boost::intrusive_ptr.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static bool IsFinished()
Check if the simulation should finish.
static Time Now()
Return the current simulation virtual time.
static void Run()
Run the simulation.
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Simulation virtual time values and global simulation resolution.
double GetMinutes() const
Get an approximation of the time stored in this instance in the indicated unit.
double GetHours() const
Get an approximation of the time stored in this instance in the indicated unit.
std::ofstream battDischFile1("BattDischCurve1.plt")
Gnuplot2dDataset battDischDataset2
void GraphBattery1(Ptr< GenericBatteryModel > es)
std::ofstream battDischFile3("BattDischCurve3.plt")
void GraphBattery4(Ptr< GenericBatteryModel > es)
std::ofstream battDischFile5("BattDischCurve5.plt")
void GraphBattery2(Ptr< GenericBatteryModel > es)
std::ofstream battDischFile4("BattDischCurve4.plt")
Gnuplot battDischPlot1
This example shows the use of batteries in ns-3.
Gnuplot2dDataset battDischDataset5
void GraphBattery5(Ptr< GenericBatteryModel > es)
Gnuplot2dDataset battDischDataset1
void GraphBattery3(Ptr< GenericBatteryModel > es)
Gnuplot2dDataset battDischDataset3
Gnuplot2dDataset battDischDataset4
std::ofstream battDischFile2("BattDischCurve2.plt")
@ NIMH_NICD
Nickel-metal hydride and Nickel cadmium batteries.
@ PANASONIC_CGR18650DA_LION
Panasonic CGR18650DA Li-Ion battery.
@ CSB_GP1272_LEADACID
CSB GP1272 Lead acid battery.
@ PANASONIC_HHR650D_NIMH
Panasonic HHR650D NiMh battery.
@ RSPRO_LGP12100_LEADACID
RS Pro LGP12100 Lead acid battery.
@ PANASONIC_N700AAC_NICD
Panasonic N700AAC NiCd battery.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void LogComponentEnable(const std::string &name, LogLevel level)
Enable the logging output associated with that log component.
@ LOG_LEVEL_DEBUG
LOG_DEBUG and above.