ISEAFrame
2.26.1
|
The electrical/thermal simulation is run with a variable step solver. The electrical and thermal simulations are run alternately. Firstly, the electrical model is simulated for a certain period. Afterwards, the thermal model is simulated for exactly the same period. If the change of any SoC or temperature exceeds a limit set in the XML options, a premature switch between the two models is forced.
The executable with the electrical/thermal simulation is called via the terminal. This call contains two input parameters:
A current profile contains specifications of externally applied current at specific times. The following example
A power profile specifies the power in watts in the same manner. For this, the header is changed to type=power. If no header is given, a current profile is assumed.
As an example for a xml file, following simulation scenario is given. This scenario could also been found at doxygen/examples/TestShowBattery.xml: This could be run via terminal:
Executable TestShowBattery.xml Stromprofil.txt
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Options> <SampleRate> 1000 </SampleRate> <AirTemperature> 25.0 </AirTemperature> <ConvectionActivated>true</ConvectionActivated> <RadiationActivated>true</RadiationActivated> <ArcPolygonizationForVisualzation>0.00, 8; 0.03, 16</ArcPolygonizationForVisualzation> <!-- Not yet implemented--> </Options> <!-- Hier werden die für das thermische Modell benutzten Materialien definiert und gecachet --> <ThermalMaterials> <Electrolyte class="Material" cache="true"> <Density>2000</Density> <Capacity>4000</Capacity> <Conductivity0>10</Conductivity0> <Conductivity1>10</Conductivity1> <Conductivity2>25</Conductivity2> </Electrolyte> <Rubber class="Material" cache="true"> <Density>900</Density> <Capacity>1500</Capacity> <Conductivity0>0.5</Conductivity0> <Conductivity1>0.5</Conductivity1> <Conductivity2>0.5</Conductivity2> </Rubber> </ThermalMaterials> <!-- Hier werden die für das thermische Modell benutzten Kühlungen neben Konvektion und Wärmestrahlung definiert und gecachet --> <Coolings> <WaterCooling class="CoolingHorizontalPlane" cache="true"> <Vertices>0.0, 0.0; 0.0, 0.075; 0.075, 0.075; 0.075, 0.0</Vertices> <ZCoordinate>0.215</ZCoordinate> <Cooling class="CoolingByConstantValue"> <Value>5000.0</Value> </Cooling> </WaterCooling>" </Coolings> <!-- Hier werden genutzte Bauelemente und Verschaltugen definiert Dieser Teil kann als Bibliothek angesehen werden in dem genutzte Elemente definiert und später verwendet werden --> <CustomDefinitions> <!-- Ein Ohmscher Widerstand, der von Temperatur und SOC abhängig ist. Dieser wird als 2D Lookup hinterlegt --> <MyOhmicResistance class="OhmicResistance"> <Object class="LookupObj2dWithState"> <RowState cacheref="ThermalState"/> <ColState cacheref="Soc"/> <LookupData desc="Rser">0.0288200000000001,0.0273753907300395,0.0264344729259093,0.0135127660821939;0.0288200000000001,0.0273753907300395,0.0270767085789135,0.0275280515729565;0.0290500142586083,0.0277525443197526,0.0275261486868454,0.0276368633915343;0.0288630838514731,0.0278576890117617,0.0275537618404411,0.0277933657755191;0.0286781206123875,0.0277738617773271,0.0275453220226692,0.0259269199477185;0.0285331061111646,0.0277867915477187,0.0268358840093433,0.0267808653711796;0.0286358289536196,0.0277803384908296,0.0257328031445100,0.0272959924289106</LookupData> <MeasurementPointsRow desc="MeasureTemp">0,10,23,50</MeasurementPointsRow> <MeasurementPointsColumn desc="StateOfCharge">5,20,35,50,65,80,90</MeasurementPointsColumn> </Object> </MyOhmicResistance> <!-- Eine OCV, die von Temperatur und SOC abhängig ist als 2D Lookup --> <MyVoltageSource class="VoltageSource"> <Object class="LookupObj2dWithState"> <RowState cacheref="Soc"/> <ColState cacheref="ThermalState"/> <LookupData desc="OCV">3.47980625000000,3.56020000000000,3.61080000000000,3.64033750000000,3.67903750000000,3.74791250000000,3.84935000000000,3.94420000000000,4.05327500000000,4.18230000000000;3.48386250000000,3.56396250000000,3.61388750000000,3.64350000000000,3.68183750000000,3.75231250000000,3.85146875000000,3.94563750000000,4.05550000000000,4.18410000000000;3.48390000000000,3.56456250000000,3.61843125000000,3.64930000000000,3.68808750000000,3.76500000000000,3.85450000000000,3.94680000000000,4.05477500000000,4.17770000000000;3.47570000000000,3.55060000000000,3.60896250000000,3.64975000000000,3.68677500000000,3.75358750000000,3.84280000000000,3.93626250000000,4.04295000000000,4.16480000000000</LookupData> <MeasurementPointsRow desc="StateOfChargeOCV">10,20,30,40,50,60,70,80,90,100</MeasurementPointsRow> <MeasurementPointsColumn desc="MeasureTemp">0,10,23,50</MeasurementPointsColumn> </Object> </MyVoltageSource> <!-- Eine Liste von Zarc Elementen die im elektrischen Ersatzschaltbild genutzt wird. R / ( 1 + (R*C)^phi) Die Parameter sind abhängig von Temperatur und Temperatur --> <MyZarcElement class="ZarcElement"> <ThermalState cacheref="ThermalState"/> <Soc cacheref="Soc"/> <LookupTau class="LookupObj2DWithState"> <RowState cacheref="ThermalState"/> <ColState cacheref="Soc"/> <LookupData> 1.12980227037822e-01, 1.71749789914134e-01, 4.27878577005388e-01, 4.70584769553997e-01; 2.88029269499999e-01, 2.03069924403468e-01, 7.59434298204209e-02, 5.38248547348156e-02; 1.80149147116020e-01, 1.12630469688383e-01, 3.52185854766679e-02, 2.98230802877780e-02; 1.47909096582298e-01, 8.33921914682953e-02, 2.57060565921076e-02, 2.22501291807582e-02; 1.32900242338032e-01, 7.22938740353130e-02, 2.05480235442034e-02, 9.95886997764575e-02; 1.19852623435413e-01, 6.56657395160509e-02, 2.36971844841798e-02, 1.02914420936082e-01; 1.18273000586515e-01, 6.60491071602289e-02, 3.25921294643322e-02, 1.09197268465146e-01 </LookupData> <MeasurementPointsRow>0, 10, 23, 50</MeasurementPointsRow> <MeasurementPointsColumn>5, 20, 35, 50, 65, 80, 90</MeasurementPointsColumn> </LookupTau> <LookupOhmicResistance class="LookupObj2DWithState"> <RowState cacheref="ThermalState"/> <ColState cacheref="Soc"/> <LookupData> 0.0264994082415437, 0.0264994082415437, 0.0264994082415437, 0.0299913094135788; 0.0675569999999998, 0.0313318160740531, 0.0127731516995969, 0.00404164451684630; 0.0536386688114087, 0.0248200664672378, 0.00989750001969683, 0.00303781463624295; 0.0478600636580172, 0.0219992555610513, 0.00877924658179266, 0.00234391473354453; 0.0441171340633137, 0.0206405039153971, 0.00794555485936455, 0.00454415109298745; 0.0418986584966986, 0.0203278573267527, 0.00866505912064747, 0.00344848953405180; 0.0421316495020664, 0.0207584663601899, 0.0102011087727835, 0.00296383805146105 </LookupData> <MeasurementPointsRow>0, 10, 23, 50</MeasurementPointsRow> <MeasurementPointsColumn>5, 20, 35, 50, 65, 80, 90</MeasurementPointsColumn> </LookupOhmicResistance> <LookupPhi class="LookupObj2DWithState"> <RowState cacheref="ThermalState"/> <ColState cacheref="Soc"/> <LookupData> 0.574590000000000, 0.516891694022437, 0.408379079339744, 0.110443124808620; 0.574590000000000, 0.516891694022437, 0.568073405078093, 0.566435038531618; 0.616859078283881, 0.579111165549142, 0.662374262351899, 0.620812008168125; 0.625502091112064, 0.610693210867254, 0.697319797270455, 0.671812046180353; 0.621586176902636, 0.620972340223097, 0.721715387830978, 0.323239015612757; 0.620607929391110, 0.630419920219851, 0.671002168217511, 0.371661290927877; 0.620534462894923, 0.628465004550853, 0.585312180039373, 0.410302314031108 </LookupData> <MeasurementPointsRow>0, 10, 23, 50</MeasurementPointsRow> <MeasurementPointsColumn>5, 20, 35, 50, 65, 80, 90</MeasurementPointsColumn> </LookupPhi> </MyZarcElement> <!-- Vordefiniertes Zellelement einer Lithium-Ionen Batterie. Standarmäßig besteht ein Zellelement aus einem ohmschen Serienwiderstand, einer OCV, und einer Liste von ZarcElementen. Die Elemente sind dabei jeweils von den States Temperatur und State of Charge abhängig. Temperatur stellt die anfängliche Temperatur in °C dar. SOC benötigt eine nominale Kapazität, einen anfänglichen SOC in % sowie die Diskretisierung. --> <BatteryCell class="CellElement" observable="True"> <ThermalState class="ThermalState" cache="True"> <InitialTemperature>25</InitialTemperature> </ThermalState> <Soc class="Soc" cache="True"> <InitialCapacity>120.0</InitialCapacity> <InitialSoc>5</InitialSoc> <MeasurementPoints>5,10,20,23,35,50,65,80,90</MeasurementPoints> </Soc> <Children> <OhmicResistance ref="MyOhmicResistance"/> <VoltageSource ref="MyVoltageSource"/> <ZarcElement ref="MyZarcElement"/> </Children> <ThermalBlock ref="PouchBagThermal"/> <UnheatedBlocks> <Block ref="UnheatedBlockTypeX" dy="0.075"/> <Block ref="UnheatedBlockTypeY" dx="-0.015"/> <Block ref="UnheatedBlockTypeBottom" dx="-0.015" dz="-0.015"/> </UnheatedBlocks> </BatteryCell> <!-- Definitionen von Block-Typen für das thermische Modell --> <PouchBagThermal class="RectangularBlock"> <Material cacheref="Electrolyte"/> <Dimensions>0.075, 0.075, 0.1</Dimensions> <SizeX>3</SizeX> <SizeY>4</SizeY> <SizeZ>5</SizeZ> <InitialTemperature>25</InitialTemperature> </PouchBagThermal> <UnheatedBlockTypeX class="RectangularBlock"> <Material cacheref="Rubber"/> <Dimensions>0.075, 0.015, 0.1</Dimensions> <SizeX>4</SizeX> <SizeY>1</SizeY> <SizeZ>4</SizeZ> <InitialTemperature>25</InitialTemperature> </UnheatedBlockTypeX> <UnheatedBlockTypeY class="RectangularBlock"> <Material cacheref="Rubber"/> <Dimensions>0.015, 0.09, 0.1</Dimensions> <SizeX>1</SizeX> <SizeY>4</SizeY> <SizeZ>4</SizeZ> <InitialTemperature>25</InitialTemperature> </UnheatedBlockTypeY> <UnheatedBlockTypeBottom class="RectangularBlock"> <Material cacheref="Rubber"/> <Dimensions>0.09, 0.09, 0.015</Dimensions> <SizeX>4</SizeX> <SizeY>4</SizeY> <SizeZ>1</SizeZ> <InitialTemperature>25</InitialTemperature> </UnheatedBlockTypeBottom> <!-- Weitere elektrische Verschaltungen, die von RootElement aufgerufen werden --> <BatteryString class="ParallelTwoPort"> <Children count="2" dx="0.18"> <BatteryCell ref="BatteryCell"/> <BatteryCell ref="BatteryCell" dx="0.09"/> </Children> </BatteryString> <BatteryPack class="SerialTwoPort"> <Children count="3" dy="0.09"> <BatteryString ref="BatteryString"/> </Children> </BatteryPack> </CustomDefinitions> <!-- Von diesem Knoten aus beginnt das Parsen sowohl des elektrischen, als auch des thermischen Modells --> <RootElement class="ParallelTwoPort"> <Children dz="0.115" count="2"> <ZLayer ref="BatteryPack"/> </Children> </RootElement> </Configuration>