Commit 39a4d256 authored by Elias Barbers's avatar Elias Barbers

version 2.23.0

parent 9f56fc15
Pipeline #336827 passed with stages
in 73 minutes and 18 seconds
......@@ -22,6 +22,7 @@ tags
CMakeFiles/
*.mexw*.pdb
*.mexw*
*.mexa*
/Debug
/DebugMatlab
/DebugArmadillo
......
Version 2.23.0
===========
- The aging model is available as an S-Function for Simulink
- Individual twoports can be added to the observer output by marking them as observable
- Updates to the documentation
Version 2.22.0
===========
- Output filenames for the thermal matlab filter can be set in the XML file
......
......@@ -5,9 +5,9 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
cmake_policy(SET CMP0009 NEW)
set(ISEAFrameVERSION_MAJOR 2)
set(ISEAFrameVERSION_MINOR 22)
set(ISEAFrameVERSION_MINOR 23)
set(ISEAFramePATCH_LEVEL 0)
set(ISEAFrameNAME "Refactor")
set(ISEAFrameNAME "docs")
set(ARCH_TYPE
"64"
CACHE STRING "")
......@@ -187,7 +187,7 @@ function(copy_windows_files_to_dir binary_dir)
endif()
endfunction(copy_windows_files_to_dir)
# copy files to the binary folder if CREATE_RELEASE_DIRS is set target is the
# copy files to the binary folder if CREATE_RELEASE_DIRS is set. target is the
# CMake target and must have RUNTIME_OUTPUT_DIRECTORY set
function(add_release_files target files_to_copy)
if(CREATE_RELEASE_DIRS)
......
......@@ -2,12 +2,12 @@
<pre>
<img src="misc/images/Logo_V3.jpg" />
<img src="misc/images/logo.jpg" />
</pre>
<div align=right>
<a href="http://www.isea.rwth-aachen.de/"> <img src="misc/images/logo.png" width="500" /> </a>
<a href="http://www.isea.rwth-aachen.de/"> <img src="misc/images/logo_isea.png" width="500" /> </a>
</div>
About ISEAFrame
......@@ -36,7 +36,7 @@ Linux Standalones: [Download](https://git.rwth-aachen.de/isea/framework/-/jobs/a
Windows Standalones: [Download](https://git.rwth-aachen.de/isea/framework/-/jobs/artifacts/master/download?job=windows_standalones)<br/>
Wndows Simulink Converter: [Download](https://git.rwth-aachen.de/isea/framework/-/jobs/artifacts/master/download?job=windows_simulink_converter)<br/>
<br/><br/>
Documentation: [View online](https://isea.pages.rwth-aachen.de/framework) | [Download](https://git.rwth-aachen.de/isea/framework/-/jobs/artifacts/master/download?job=documentation) | [Download Development Version](https://git.rwth-aachen.de/isea/framework/-/jobs/artifacts/master/download?job=documentation)
Documentation: [View online](https://isea.pages.rwth-aachen.de/framework) | [Download](https://git.rwth-aachen.de/isea/framework/-/jobs/artifacts/master/download?job=documentation) | [Download Development Version](https://git.rwth-aachen.de/isea/framework/-/jobs/artifacts/master/download?job=development_documentation)
Required Software:
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -96,19 +96,8 @@ The time constant \f$ \tau \f$ depens on the temperature \f$ T \f$ and is calcul
XML Format
==========
A detailed example for an aging simulation can be found at scenarions/aging/sanyo_18651_single_cell_aging.xml .
Global Options
--------------
These options for the aging simulation must be added in <Configuration><Options><Aging>.
XML Tag | Type | Unit | Explanation
----------------------------------------|---------------|-----------|----------------------------------------------------------------------------------------
CalculationCycles | int > 0 | | Number of times the current or power profile is simulated before each aging step. Optional, default = 1.
SteadyStateCycles | int >= 0 | | Number of cycles that are simulated without collecting data for aging before the cycles specified in CalculationCycles are simulated. Optional, default = 0.
AgingSteps | int > 0 | | Number of aging steps. Optional, default = 1.
AgingStepTime | double > 0 | day | Duration of each aging step
Global options for the aging simulation are described on the page [XML options](xmloption.html#aging).
A detailed example for an aging simulation can be found at scenarions/aging/sanyo_18651_single_cell_aging.xml.
Observer
--------
......@@ -118,10 +107,10 @@ Filters for the aging simulation can be added in <Configuration><Observer><Aging
Cell Aging
----------
The aging for each cell can be specified using the element <Aging> inside the cell's XML element.
The aging for each cell can be specified using the element <**Aging**> inside the cell's XML element.
The aging element contains a list of aging effects affecting the cell.
If the cell is not new at the beginnig of the simulation, the initial cell age and charge throughput can be set by adding an <AgingState> element with the following children:
If the cell is not new at the beginnig of the simulation, the initial cell age and charge throughput can be set by adding an <**AgingState**> element with the following children:
XML Tag | Type | Unit | Explanation
----------------------------------------|---------------|-----------|----------------------------------------------------------------------------------------
......@@ -131,7 +120,7 @@ ChargeThroughput | double | Ah | Charge thr
Halfcell Simulation
-------------------
The general XML format of a halfcell simulation is described [here](xmlhalfcell.html). Each element of the classes AnodeElement and CathodeElement con contain an <Aging> element and an <AgingState> element that work in the same way as those of a cell. An example for a halfcell simulation is given in scenarions/aging/sanyo_18651_single_cell_aging.
The general XML format of a halfcell simulation is described [here](xmlhalfcell.html). Each element of the classes AnodeElement and CathodeElement con contain an <**Aging**> element and an <**AgingState**> element that work in the same way as those of a cell. An example for a halfcell simulation is given in scenarions/aging/sanyo_18651_single_cell_aging.
Calendric Aging
---------------
......
Introduction {#einleitung}
Introduction {#introduction}
=====
\~German
Das ISEAFramework ist eine am Institut für Stromrichtertechnik und Elektrische Antriebe (ISEA) entwickelte Programmbibliothek zur generischen Simulation von Batterienetzwerken.
Basierend auf den charakteristischen Messergebnissen der Impedanzspektroskopie können beispielsweise Lithium-Ionen-Batterien oder Supercaps in der Simulation durch ein elektrisches Ersatzschaltbild angenähert werden.
Es ist möglich, ein solches Ersatzschaltbild durch eine Reihenschaltung einfacher Grundelemente zu approximieren.
Diese Grundelemente sind als Klassen im Framework hinterlegt und können in Reihen- und Parallelschaltungen zu einem Netzwerk verbunden werden.
Auf diese Weise können ganze Batteriepakete nachgebildet werden.
<br/><br/>
Zusätzlich kann ein thermisches Modell erstellt werden, welches es ermöglicht, die Temperaturverteilung und -Entwicklung in der Batterie bzw. im Batteriepack zu simulieren.
Dieses Modell kann gekoppelt mit dem elektrischen Modell laufen, so dass der Einfluss der Temperatur auf die elektrische Parametrierung simuliert werden kann.
<br/><br/>
Ablauf der Simulation
----
![Schematische Darstellung eines Simulationszyklus](Kreislauf.png)
Die Simulation läßt sich in drei Schritte unterteilen.
Initialisierungsphase:
----
- Aufstellen des elektrischen Ersatzschaltbildes
- Erstellen des thermischen Modells
Simulationszyklus:
-----
- 2. Setzen des geforderten Stroms
- 3. Update der Lookups
- 4. Setzen der algebraischen und differentiellen Gleichungen
- 5. Berechnung und Lösung des Statespaces
- 6. Berechnung der Ströme, Spannungen und thermischen Verlustleistungen
- 7. Übergabe der thermischen Verlustleistungen an das thermische Modell (Nicht eingezeichnet im Bild)
- 8. Berechnen und Weiterleiten der neuen Temperaturen (Nicht eingezeichnet im Bild)
Aufräumen:
----
- Freigabe des genutzten Speichers
Nach einer Simulation können die Ergebnisse visualisiert werden.
![Visualisierten Ergebnisse eines Packs](visualisierung2.png)
<!--
Introduction {#einleitung}
=====
-->
\~English
The ISEAFramework is a library for generic battery simulation and is developed at the Institute for Power Electronics and Electrical Drives (ISEA) .
The ISEAFramework is a library for generic battery simulation and is developed at the Institute for Power Electronics and Electrical Drives (ISEA).
Models are based on datasets gained through electrochemical impedance spectroscopy (EIS) and a variety of different storage technologies can be described with these measurements,
e.g. lithium-ion batteries and double layer capacitors.
Results gained by EIS can be used to approximate the system through an electrical equivalent circuit and can be connected in different ways (parallel and serial).
This allows to describe storage systems in a generic way and to not only describe a single battery, but whole packs.
<br/><br/>
<br/>
Additionally a thermal model can be simulated, which simulates temperature distributions and trends inside the battery and battery pack.
This model is coupled with the electrical model during runtime, so that the thermal heat, which is generated by the electrical model, is directly fed into the thermal simulation.
<br/><br/>
<br/>
The framework also includes an aging model that can be used to make aging and lifetime predictions. The results from this model influence the electrical equivalent circuit so that the aging has an effect on the electrical behaviour of the battery.
Simulation sequence
----
![Schematic of the simulation cycle](Kreislauf.png)
====
A detailed description of the simulation process including the thermal and aging simulation can be found [here](simulation_cycle.html)
Initialization:
Initialization
----
- Creation of the electrical model
- Creation of the thermal model
Simulation-cycle:
Simulation cycle
-----
- 2. Set requested current
- 3. Update of lookup tables
......@@ -82,7 +32,7 @@ Simulation-cycle:
- 7. Passing the thermal losses (head) to the thermal model (not depicted in the image)
- 8. Calculating new temperature distribution and closing the feedback loop through passing the temperature back to the electrical model (not depicted in the image)
Clean up:
Cleanup
----
- Release allocated memory
......
<Observer>
<Filter4 class="CSVFilter">
<filename>
sanyo.csv
</filename>
<printHeader> 1 </printHeader>
<Filename>sanyo.csv</Filename>
<printHeader>true</printHeader>
</Filter4>
</Observer>
</Observer>
\ No newline at end of file
<div class="fragment">
<!-- Generator: GNU source-highlight 3.1.8
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;Observer&gt;</font></b>
<b><font color="#0000FF">&lt;Filter4</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"CSVFilter"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;filename&gt;</font></b>
sanyo.csv
<b><font color="#0000FF">&lt;/filename&gt;</font></b>
<b><font color="#0000FF">&lt;printHeader&gt;</font></b> 1 <b><font color="#0000FF">&lt;/printHeader&gt;</font></b>
<b><font color="#0000FF">&lt;Filename&gt;</font></b>sanyo.csv<b><font color="#0000FF">&lt;/Filename&gt;</font></b>
<b><font color="#0000FF">&lt;printHeader&gt;</font></b>true<b><font color="#0000FF">&lt;/printHeader&gt;</font></b>
<b><font color="#0000FF">&lt;/Filter4&gt;</font></b>
<b><font color="#0000FF">&lt;/Observer&gt;</font></b>
</tt></pre>
<b><font color="#0000FF">&lt;/Observer&gt;</font></b></tt></pre>
</div>
<Object class="ExpressionObj">
<Expression>Soc / 2 + T / 3</Expression>
<Parameters>
<Param cacheref="Soc"/>
<Param cacheref="ThermalState" name="T"/>
</Parameters>
</Object>
\ No newline at end of file
<div class="fragment">
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;Object</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"ExpressionObj"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;Expression&gt;</font></b>Soc / 2 + T / 3<b><font color="#0000FF">&lt;/Expression&gt;</font></b>
<b><font color="#0000FF">&lt;Parameters&gt;</font></b>
<b><font color="#0000FF">&lt;Param</font></b> <font color="#009900">cacheref</font><font color="#990000">=</font><font color="#FF0000">"Soc"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;Param</font></b> <font color="#009900">cacheref</font><font color="#990000">=</font><font color="#FF0000">"ThermalState"</font> <font color="#009900">name</font><font color="#990000">=</font><font color="#FF0000">"T"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;/Parameters&gt;</font></b>
<b><font color="#0000FF">&lt;/Object&gt;</font></b></tt></pre>
</div>
<Observer>
<Filter1 class="MatlabFilter">
<filename>
<Filename>
sanyo.mat
</filename>
</Filename>
</Filter1>
<Filter2 class="DecimateFilter">
......@@ -11,13 +11,13 @@
</TimeDelay>
</Filter2>
<Filter3 class="StdOutFilter"/>
<Filter3 class="StdoutFilter"/>
<Filter4 class="CSVFilter">
<filename>
<Filename>
sanyo.csv
</filename>
<printHeader> 1 </printHeader>
</Filename>
<printHeader>true</printHeader>
</Filter4>
</Observer>
<div class="fragment">
<!-- Generator: GNU source-highlight 3.1.8
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;Observer&gt;</font></b>
<b><font color="#0000FF">&lt;Filter1</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"MatlabFilter"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;filename&gt;</font></b>
<b><font color="#0000FF">&lt;Filename&gt;</font></b>
sanyo.mat
<b><font color="#0000FF">&lt;/filename&gt;</font></b>
<b><font color="#0000FF">&lt;/Filename&gt;</font></b>
<b><font color="#0000FF">&lt;/Filter1&gt;</font></b>
<b><font color="#0000FF">&lt;Filter2</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"DecimateFilter"</font><b><font color="#0000FF">&gt;</font></b>
......@@ -16,13 +16,13 @@ http://www.gnu.org/software/src-highlite -->
<b><font color="#0000FF">&lt;/TimeDelay&gt;</font></b>
<b><font color="#0000FF">&lt;/Filter2&gt;</font></b>
<b><font color="#0000FF">&lt;Filter3</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"StdOutFilter"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;Filter3</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"StdoutFilter"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;Filter4</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"CSVFilter"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;filename&gt;</font></b>
<b><font color="#0000FF">&lt;Filename&gt;</font></b>
sanyo.csv
<b><font color="#0000FF">&lt;/filename&gt;</font></b>
<b><font color="#0000FF">&lt;printHeader&gt;</font></b> 1 <b><font color="#0000FF">&lt;/printHeader&gt;</font></b>
<b><font color="#0000FF">&lt;/Filename&gt;</font></b>
<b><font color="#0000FF">&lt;printHeader&gt;</font></b>true<b><font color="#0000FF">&lt;/printHeader&gt;</font></b>
<b><font color="#0000FF">&lt;/Filter4&gt;</font></b>
<b><font color="#0000FF">&lt;/Observer&gt;</font></b>
......
<Observer>
<Filter1 class="MatlabFilter">
<filename>
<Filename>
sanyo.mat
</filename>
<maxSampleSize>
</Filename>
<MaxSampleSize>
10000
</maxSampleSize>
</MaxSampleSize>
</Filter1>
</Observer>
<div class="fragment">
<!-- Generator: GNU source-highlight 3.1.8
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;Observer&gt;</font></b>
<b><font color="#0000FF">&lt;Filter1</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"MatlabFilter"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;filename&gt;</font></b>
<b><font color="#0000FF">&lt;Filename&gt;</font></b>
sanyo.mat
<b><font color="#0000FF">&lt;/filename&gt;</font></b>
<b><font color="#0000FF">&lt;maxSampleSize&gt;</font></b>
<b><font color="#0000FF">&lt;/Filename&gt;</font></b>
<b><font color="#0000FF">&lt;MaxSampleSize&gt;</font></b>
10000
<b><font color="#0000FF">&lt;/maxSampleSize&gt;</font></b>
<b><font color="#0000FF">&lt;/MaxSampleSize&gt;</font></b>
<b><font color="#0000FF">&lt;/Filter1&gt;</font></b>
<b><font color="#0000FF">&lt;/Observer&gt;</font></b>
......
<Cell class="CellElement">
<!-- Because the cache attribute is set to "true", the state object will be added to the cache under the name "Soc" -->
<Soc class="Soc" cache="true">
<InitialCapacity>10.0</InitialCapacity>
<InitialSoc>50.0</InitialSoc>
</Soc>
<!-- Similarly, this will be cached as "ThermalState" -->
<ThermalState cache="true">
<InitialTemperature>25.0</InitialTemperature>
</ThermalState>
<Children>
<!-- copy the Resistance element from below -->
<Resistance ref="Resistance"/>
</Children>
</Cell>
<Resistance class="OhmicResistance">
<Object class="LookupObj2dWithState">
<!-- Reference to the caced soc state of the cell -->
<RowState cacheref="Soc"/>
<!-- Reference to the caced thermal state of the cell -->
<ColState cacheref="ThermalState"/>
<LookupData>
1.0, 1.1, 1.0;
1.2, 1.1, 1.3;
</LookupData>
<!-- SOC values that the three columns were measured at -->
</MeasurementPointsRow>10, 50, 90</MeasurementPointsRow>
<!-- temperature values that the two rows were measured at -->
</MeasurementPointsColumn>20, 25</MeasurementPointsColumn>
</Object>
</Resistance>
\ No newline at end of file
<div class="fragment">
<!-- Generator: GNU source-highlight 3.1.8
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;Cell</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"CellElement"</font><b><font color="#0000FF">&gt;</font></b>
<i><font color="#9A1900">&lt;!-- Because the cache attribute is set to "true", the state object will be added to the cache under the name "Soc" --&gt;</font></i>
<b><font color="#0000FF">&lt;Soc</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"Soc"</font> <font color="#009900">cache</font><font color="#990000">=</font><font color="#FF0000">"true"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;InitialCapacity&gt;</font></b>10.0<b><font color="#0000FF">&lt;/InitialCapacity&gt;</font></b>
<b><font color="#0000FF">&lt;InitialSoc&gt;</font></b>50.0<b><font color="#0000FF">&lt;/InitialSoc&gt;</font></b>
<b><font color="#0000FF">&lt;/Soc&gt;</font></b>
<i><font color="#9A1900">&lt;!-- Similarly, this will be cached as "ThermalState" --&gt;</font></i>
<b><font color="#0000FF">&lt;ThermalState</font></b> <font color="#009900">cache</font><font color="#990000">=</font><font color="#FF0000">"true"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;InitialTemperature&gt;</font></b>25.0<b><font color="#0000FF">&lt;/InitialTemperature&gt;</font></b>
<b><font color="#0000FF">&lt;/ThermalState&gt;</font></b>
<b><font color="#0000FF">&lt;Children&gt;</font></b>
<i><font color="#9A1900">&lt;!-- copy the Resistance element from below --&gt;</font></i>
<b><font color="#0000FF">&lt;Resistance</font></b> <font color="#009900">ref</font><font color="#990000">=</font><font color="#FF0000">"Resistance"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;/Children&gt;</font></b>
<b><font color="#0000FF">&lt;/Cell&gt;</font></b>
<b><font color="#0000FF">&lt;Resistance</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"OhmicResistance"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;Object</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"LookupObj2dWithState"</font><b><font color="#0000FF">&gt;</font></b>
<i><font color="#9A1900">&lt;!-- Reference to the caced soc state of the cell --&gt;</font></i>
<b><font color="#0000FF">&lt;RowState</font></b> <font color="#009900">cacheref</font><font color="#990000">=</font><font color="#FF0000">"Soc"</font><b><font color="#0000FF">/&gt;</font></b>
<i><font color="#9A1900">&lt;!-- Reference to the caced thermal state of the cell --&gt;</font></i>
<b><font color="#0000FF">&lt;ColState</font></b> <font color="#009900">cacheref</font><font color="#990000">=</font><font color="#FF0000">"ThermalState"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;LookupData&gt;</font></b>
1.0, 1.1, 1.0;
1.2, 1.1, 1.3;
<b><font color="#0000FF">&lt;/LookupData&gt;</font></b>
<i><font color="#9A1900">&lt;!-- SOC values that the three columns were measured at --&gt;</font></i>
<b><font color="#0000FF">&lt;/MeasurementPointsRow&gt;</font></b>10, 50, 90<b><font color="#0000FF">&lt;/MeasurementPointsRow&gt;</font></b>
<i><font color="#9A1900">&lt;!-- temperature values that the two rows were measured at --&gt;</font></i>
<b><font color="#0000FF">&lt;/MeasurementPointsColumn&gt;</font></b>20, 25<b><font color="#0000FF">&lt;/MeasurementPointsColumn&gt;</font></b>
<b><font color="#0000FF">&lt;/Object&gt;</font></b>
<b><font color="#0000FF">&lt;/Resistance&gt;</font></b></tt></pre>
</div>
<Soc class="Soc" cache="True">
<InitialCapacity> ... </InitialCapacity>
<InitialSoc> ... </InitialSoc>
<MeasurementPoints> ... </MeasurementPoints>
</Soc>
......@@ -6,7 +6,6 @@ http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;Soc</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"Soc"</font> <font color="#009900">cache</font><font color="#990000">=</font><font color="#FF0000">"True"</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;InitialCapacity&gt;</font></b> ... <b><font color="#0000FF">&lt;/InitialCapacity&gt;</font></b>
<b><font color="#0000FF">&lt;InitialSoc&gt;</font></b> ... <b><font color="#0000FF">&lt;/InitialSoc&gt;</font></b>
<b><font color="#0000FF">&lt;MeasurementPoints&gt;</font></b> ... <b><font color="#0000FF">&lt;/MeasurementPoints&gt;</font></b>
<b><font color="#0000FF">&lt;/Soc&gt;</font></b>
</tt></pre>
</div>
<Observer>
<Filter3 class="StdOutFilter"/>
<Filter3 class="StdoutFilter"/>
</Observer>
<div class="fragment">
<!-- Generator: GNU source-highlight 3.1.8
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;Observer&gt;</font></b>
<b><font color="#0000FF">&lt;Filter3</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"StdOutFilter"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;Filter3</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">"StdoutFilter"</font><b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;/Observer&gt;</font></b>
</tt></pre>
</div>
This diff is collapsed.
This diff is collapsed.
<LookupObj1D class='LookupObj1dWithState'>\
<State class='ElectricalState' StateType='Current' />\
<LookupData>1,2,3,4,5,6,7,8,9</LookupData>\
<MeasurementPoints>1,2,3,4,5,6,7,8,9</MeasurementPoints>\
<LookupObj1D class='LookupObj1dWithState'>
<State class='ElectricalState' StateType='Current' />
<LookupData>1,2,3,4,5,6,7,8,9</LookupData>
</LookupObj1D>
......@@ -3,10 +3,9 @@
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#0000FF">&lt;LookupObj1D</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">'LookupObj1dWithState'</font><b><font color="#0000FF">&gt;</font></b>\
<b><font color="#0000FF">&lt;State</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">'ElectricalState'</font> <font color="#009900">StateType</font><font color="#990000">=</font><font color="#FF0000">'Current'</font> <b><font color="#0000FF">/&gt;</font></b>\
<b><font color="#0000FF">&lt;LookupData&gt;</font></b>1,2,3,4,5,6,7,8,9<b><font color="#0000FF">&lt;/LookupData&gt;</font></b>\
<b><font color="#0000FF">&lt;MeasurementPoints&gt;</font></b>1,2,3,4,5,6,7,8,9<b><font color="#0000FF">&lt;/MeasurementPoints&gt;</font></b>\
<pre><tt><b><font color="#0000FF">&lt;LookupObj1D</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">'LookupObj1dWithState'</font><b><font color="#0000FF">&gt;</font></b>
<b><font color="#0000FF">&lt;State</font></b> <font color="#009900">class</font><font color="#990000">=</font><font color="#FF0000">'ElectricalState'</font> <font color="#009900">StateType</font><font color="#990000">=</font><font color="#FF0000">'Current'</font> <b><font color="#0000FF">/&gt;</font></b>
<b><font color="#0000FF">&lt;LookupData&gt;</font></b>1,2,3,4,5,6,7,8,9<b><font color="#0000FF">&lt;/LookupData&gt;</font></b>
<b><font color="#0000FF">&lt;/LookupObj1D&gt;</font></b>
</tt></pre>
</div>
This diff is collapsed.
Kurzanleitung / Short introduction ISEAFramework {#mainpage}
ISEAFrame Documentation {#mainpage}
=======================
\~German
Das ISEAFramework ist eine Programmbibliothek zur generischen Simulation verschiedener Batterietypen und Supercaps.
Diese Anleitung gliedert sich in folgende Teile:
- [Einleitung](einleitung.html)
- [Getting Started](gettingStarted.html)
- [Kompilieren](compiling.html)
- [XML-Beschreibungssprache](xmlsprache.html)
- [Factory und Parser](factory.html)
- [Solversystem](system.html)
- [Executable mit elektrisch/thermischer Simulation](xmlexecutable.html)
- [Simulink](xmlcinterface.html)
- [Visualisierung der Simulationsdaten](visualization.html)
- [Halbzellensimulation](xmlhalfcell.html)
- [Alterungsimulation] (aging_simulation.html)
\~English
The ISEAFramework is a library for generic simulation of various battery types and double layer capacitor.
The ISEAFramework is a library for generic simulation of various battery types and double layer capacitors.
This short introduction can be divided into the following parts:
- [Introduction](einleitung.html)
- [Introduction](introduction.html)
- [Getting Started](gettingStarted.html)
- [Compiling](compiling.html)
- [XML-description language](xmlsprache.html)
- [Factory and Parser](factory.html)
- [Solver systems](system.html)
- [Standalone executable for electrical and thermal simulation ](xmlexecutable.html)
- [Simulink](xmlcinterface.html)
- [Simulink Converter](simulink_converter.html)
- [Visualization of simulation data](visualization.html)
- [Half cell simulation](xmlhalfcell.html)
- [Aging simulation](aging_simulation.html)
......
Simulation Cycle {#simulation_cycle}
====
Electrical Simulation
----
![Schematic of the electrical simulation cycle](Kreislauf.png)
The steps of the electrical simulation are pictured above.
### 1. Initialize the simulation
The circuit elements and their parameters are read from a [configuration file](xmlsprache.html). This file also determines the initial state of the system.
### 2. Set requested current
For each simulation, the current through the simulated system is given as a function of time. For the standalone version, this is done with a [current profile](xmlexecutable.html). For each timestep of the electrical model, the profile is evaluated at the current time and the current is set.
### 3. Update of lookup tables
Most elements in the electrical circuit change their values depending on system states like SoC or temperature. For each timestep, the values are updated by evaluating the respective lookup tables.
### 4. Calculation of differential and algebraic equations (DAE)
Since the values of the electrical system change each time the lookup tables are evaluated, the system equations have to be recalculated for every time step. Since there are both algebraic and differential equations, this results in an ODE system.
### 5. Solving the DAE system and calculating the state space vector
The system is turned into an ordinary differential equation system and solved.
### 6. Calculating current and voltage values
After the state space vector is calculated, the voltage and current values for each element in the electrical system can be easily calculated.
Thermal Simulation
----
If the thermal model is used, [thermal blocks](xmlthermalblock.html) are added to the configuration file. When the simulation is initialized, the thermal model is built as described [here](xmlthermalmodel.html). This results in a conductivity matrix that is used to calculate the flow of thermal energy between any two thermal elements. In contrast to the electrical model, the parameters of the thermal model stay constant for the duration of the simulation. After each electrical step, the ohmic heat generation during the timestep is passed from the electrical to the thermal model. The conductivity matrix as wall as the parameters given by additional cooling blocks are used to determine the temperature distribution inside the system. The temperature values are passed back to the electrical simulation and influence the electrical parameters for the next timestep.
Aging Simulation
----
![Calculation of the cell capacity](balancing_aging.svg)
To simulate the aging of cells, [aging effects](aging_simulation.html) are added to the cells. These effects are calculated independently from each other. The timespans of the aging model are much larger than those of the electrical and thermal models, so the aging is only calculated after a certain time has passed in the thermal-electrical model. During the thermal-electrical simulation, each aging effect is called regularly to collect data needed for the aging step. This data is used to calculate three values for every aging effect:
- The capacity factor \f$ C_{rel} \f$. The initial capacity of the cell is multiplied with this factor to get the capacity after the aging effect has been applied.
- The resistance factor \f$ R_{rel} \f$. The initial internal resistance of the cell is multiplied with this factor to get the resistance after the aging effect has been applied.
- The SOC offset \f$ \Delta Q \f$. The offset is added to the stored charge when the aging effect is applied.
The total aging for a cell with \f$ n \f$ aging effects are calculated in the following way:
\f{eqnarray*}{
C_{rel,total} & = && 1 - \sum_{n} ( 1 - C_{rel,n} ) \\
R_{rel,total} & = && 1 - \sum_{n} ( 1 - R_{rel,n} ) \\
\Delta Q_{total} & = && \sum_{n} \Delta Q_n \\
\f}
Complete Procedure
----
![Schematic of the simulation cycle](simulation_cycle.svg)