From 86682c5155e4422a7859500c778919d36a65a977 Mon Sep 17 00:00:00 2001
From: "ankostis@host:STUW025" <ankostis@gmail.com>
Date: Fri, 14 Dec 2012 11:08:48 +0100
Subject: [PATCH] Added translate-comments scripts and txt-files - not finished
 yet.

---
 Tools/TranslateComments/Get-FileEncoding.ps1 |  111 +
 Tools/TranslateComments/comments.txt         | 4382 ++++++++++++++++++
 Tools/TranslateComments/comments2-trans.txt  | 2007 ++++++++
 Tools/TranslateComments/comments2.txt        | 2295 +++++++++
 Tools/TranslateComments/comments_trans.txt   | 2295 +++++++++
 Tools/TranslateComments/extract_comments.ps1 |  Bin 0 -> 9730 bytes
 Tools/TranslateComments/translate_from.txt   | 2295 +++++++++
 Tools/TranslateComments/translate_to.txt     | 2295 +++++++++
 8 files changed, 15680 insertions(+)
 create mode 100644 Tools/TranslateComments/Get-FileEncoding.ps1
 create mode 100644 Tools/TranslateComments/comments.txt
 create mode 100644 Tools/TranslateComments/comments2-trans.txt
 create mode 100644 Tools/TranslateComments/comments2.txt
 create mode 100644 Tools/TranslateComments/comments_trans.txt
 create mode 100644 Tools/TranslateComments/extract_comments.ps1
 create mode 100644 Tools/TranslateComments/translate_from.txt
 create mode 100644 Tools/TranslateComments/translate_to.txt

diff --git a/Tools/TranslateComments/Get-FileEncoding.ps1 b/Tools/TranslateComments/Get-FileEncoding.ps1
new file mode 100644
index 0000000000..537c3c0f71
--- /dev/null
+++ b/Tools/TranslateComments/Get-FileEncoding.ps1
@@ -0,0 +1,111 @@
+<#
+.SYNOPSIS
+Gets file encoding.
+.DESCRIPTION
+The Get-FileEncoding function determines encoding by looking at Byte Order Mark (BOM).
+Based on port of C# code from http://www.west-wind.com/Weblog/posts/197245.aspx
+.EXAMPLE
+Get-ChildItem  *.ps1 | select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} | where {$_.Encoding -ne 'ASCII'}
+This command gets ps1 files in current directory where encoding is not ASCII
+.EXAMPLE
+Get-ChildItem  *.ps1 | select FullName, @{n='Encoding';e={Get-FileEncoding $_.FullName}} | where {$_.Encoding -ne 'ASCII'} | foreach {(get-content $_.FullName) | set-content $_.FullName -Encoding ASCII}
+Same as previous example but fixes encoding using set-content
+.EXAMPLE 
+Do this next line before or add function in Profile.ps1
+    Import-Module .\Get-FileEncoding.ps1
+.NOTES  
+    File Name  : Get-FileEncoding.ps1  
+    Author     : <Unknwon>, F.RICHARD, ankostis
+    Requires   : PowerShell V2 CTP3   
+.LINK 
+    http://franckrichard.blogspot.it/2010/08/powershell-get-encoding-file-type.html
+    http://unicode.org/faq/utf_bom.html
+.LINK 
+    http://en.wikipedia.org/wiki/Byte_order_mark
+#>
+function Get-FileEncoding {
+
+ [CmdletBinding()] 
+ Param (
+   [Parameter(Position = 0, Mandatory = $True, ValueFromPipelineByPropertyName = $True)]
+   [alias(“PSPath”)]
+   [alias(“FullName”)]
+   [PSObject[]]$Path
+ )
+
+PROCESS {
+ 
+    $files = @();
+    if($path) {
+        $files += $path
+    } else {
+        $files += @($input | Foreach-Object { $_.FullName })
+    }
+
+    #echo "___: $_"
+    #echo "PTH: $path"
+    #echo "INP: $input"
+    #echo "INO: $InputObject"
+    #echo "FIL: $files"
+
+    foreach($file ile in $files) {
+         [byte[]]$byte = get-content -Encoding byte -ReadCount 4 -TotalCount 4 -Path $File
+         #Write-Host Bytes: $byte[0] $byte[1] $byte[2] $byte[3]
+         
+         # EF BB BF (UTF8)
+         if ( $byte[0] -eq 0xef -and $byte[1] -eq 0xbb -and $byte[2] -eq 0xbf )
+         { printout 'UTF8' }
+         
+         # FE FF  (UTF-16 Big-Endian)
+         elseif ($byte[0] -eq 0xfe -and $byte[1] -eq 0xff)
+         { printout 'Unicode UTF-16 Big-Endian' }
+         
+         # FF FE  (UTF-16 Little-Endian)
+         elseif ($byte[0] -eq 0xff -and $byte[1] -eq 0xfe)
+         { printout 'Unicode UTF-16 Little-Endian' }
+         
+         # 00 00 FE FF (UTF32 Big-Endian)
+         elseif ($byte[0] -eq 0 -and $byte[1] -eq 0 -and $byte[2] -eq 0xfe -and $byte[3] -eq 0xff)
+         { printout 'UTF32 Big-Endian' }
+         
+         # FE FF 00 00 (UTF32 Little-Endian)
+         elseif ($byte[0] -eq 0xfe -and $byte[1] -eq 0xff -and $byte[2] -eq 0 -and $byte[3] -eq 0)
+         { printout 'UTF32 Little-Endian' }
+         
+         # 2B 2F 76 (38 | 38 | 2B | 2F)
+         elseif ($byte[0] -eq 0x2b -and $byte[1] -eq 0x2f -and $byte[2] -eq 0x76 -and ($byte[3] -eq 0x38 -or $byte[3] -eq 0x39 -or $byte[3] -eq 0x2b -or $byte[3] -eq 0x2f) )
+         { printout 'UTF7'}
+         
+         # F7 64 4C (UTF-1)
+         elseif ( $byte[0] -eq 0xf7 -and $byte[1] -eq 0x64 -and $byte[2] -eq 0x4c )
+         { printout 'UTF-1' }
+         
+         # DD 73 66 73 (UTF-EBCDIC)
+         elseif ($byte[0] -eq 0xdd -and $byte[1] -eq 0x73 -and $byte[2] -eq 0x66 -and $byte[3] -eq 0x73)
+         { printout 'UTF-EBCDIC' }
+         
+         # 0E FE FF (SCSU)
+         elseif ( $byte[0] -eq 0x0e -and $byte[1] -eq 0xfe -and $byte[2] -eq 0xff )
+         { printout 'SCSU' }
+         
+         # FB EE 28  (BOCU-1)
+         elseif ( $byte[0] -eq 0xfb -and $byte[1] -eq 0xee -and $byte[2] -eq 0x28 )
+         { printout 'BOCU-1' }
+         
+         # 84 31 95 33 (GB-18030)
+         elseif ($byte[0] -eq 0x84 -and $byte[1] -eq 0x31 -and $byte[2] -eq 0x95 -and $byte[3] -eq 0x33)
+         { printout 'GB-18030' }
+         
+         else
+         { printout 'ASCII' }
+        }
+    } # End file-loop
+}    
+    function printout($str) {
+        if ($files.length > 1) {
+            echo "${file}:$str"
+        } else {
+            #echo "${file}:$str"
+            echo "$str"
+        }
+    }
diff --git a/Tools/TranslateComments/comments.txt b/Tools/TranslateComments/comments.txt
new file mode 100644
index 0000000000..dcc4c6fef1
--- /dev/null
+++ b/Tools/TranslateComments/comments.txt
@@ -0,0 +1,4382 @@
+>>> ApplicationEvents.vb
+5:    ' Für MyApplication sind folgende Ereignisse verfügbar:
+7:    ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
+8:    ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung nicht normal beendet wird.
+9:    ' UnhandledException: Wird ausgelöst, wenn in der Anwendung eine unbehandelte Ausnahme auftritt.
+10:    ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist. 
+11:    ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
+14:        'Initialisierung
+25:            'Pfade
+33:            'Falls Ordner nicht vorhanden: Erstellen!
+52:                    'Directories.txt vorkonfigurieren
+78:            'Trennzeichen!
+85:                    'MSGtoForm(8, "Set CurrentCulture to 'en-US'", True)
+91:            'Klassen initialisieren
+102:            'Config
+106:            'Log starten
+109:                'Dateigröße checken
+112:                'Falls Log zu groß: löschen
+139:            'Lizenz initialisieren
+>>> cConfig.vb
+49:        '*** Erste Zeile: Version
+52:            ' "V" entfernen => Zahl bleibt übrig
+55:                'Falls Version ungültig: Abbruch
+58:                'Version festgelegt
+133:        'Config.txt
+134:        'Zeile      Variable        Typ         Beschreibung
+135:        '(01)       WorkDPath       String      WorkDir
+136:        '(02)       LastMode        Short       Letzter verwendeter Modus (entspricht CBoxMODE.SelectedIndex)
+137:        '(03)       IntpV2          Boolean     Neuen Interpolator verwenden
+138:        '(04)       nnormEngStop    Single      Unter dieser Drehzahl Engine Stop
+139:        '(05)       TEMpath         String      TEM_Data Pfad
+140:        '(06)       LastTEM         String      Letzte TEM Datei   -nicht in Options Form!!!
+141:        '(07)       TEMexl          Boolean     Open TEM in Excel  -nicht in Options Form!!!
+142:        '(08)       EAAvInt         Short       Analyse intervals of seconds. Wenn 0: Wert abfragen
+143:        '(09)       ModOut          Boolean     Modale Ausgabe
+144:        '(10)       WegKorJa        Boolean     Wegkorrektur damit bei Geschw. Reduktion Zyklus nicht kürzer wird
+145:        '(11)       GnVorgab        Boolean     Gang- bzw. Drehzahl
+146:        '(12)       LogSize         Int16       Maximale Log-Größe [MiB]
+147:        '(13)       FZPsort         Boolean     FZP sortieren (früher Standard da VISSIM die .fzp nach Sekunden sortiert ausgibt)
+148:        '(14)       FZPsortExp      Boolean     Sortierte FZP exportieren
+149:        '(15)       BATCHoutpath    Boolean     Ausgabepfad für BATCH-Modus:   <WORKDIR>, <GENPATH> oder Pfad
+150:        '(16)       BATCHoutSubD    Boolean     BATCH-Ausgabe in Unterordner (je .gen Datei)
+151:        '(17)       AirDensity      Single      Luftdichte
+152:        '(18)       FinalEmOnly     Boolean     Nur Final-Emissions ausgeben
+153:        '(19)       FCcorrection    Boolean     FC-Korrektur im BATCH-Modus
+175:                    'Früher:  IntpV2 = CBool(line)
+254:        'Version
+>>> cCustomMap.vb
+85:        'Min/Max suchen
+105:        'Normieren
+125:            'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+>>> cCycleKin.vb
+9:    'Fahrzustände in Sekunden
+15:    'Fahrzustands-Anteile
+21:    'Beschl.-Parameter
+82:        '3s-Beschl
+89:        't_apos, t_aneg, t_cruise, t_stop
+91:            'Fahranteile Stop/Acc/Dec/Cruise
+106:            'Durchschnitts-Beschl
+110:        'a
+113:        'a-pos
+116:        'a-neg
+119:        'Acc.Noise
+>>> cDelaunayMap.vb
+35:        'XY-Triangulierung
+50:        'XZ-Triangulierung
+74:    'XY => Z Interpolation
+90:        'ERROR: Extrapolation
+97:    'XZ => Y Interpolation
+115:            'ERROR: Extrapolation
+121:            'ERROR: Extrapolation
+176:        'Quelle: http://www.blackpawn.com/texts/pointinpoly/default.html  (Barycentric Technique)
+178:        ' Compute vectors        
+188:        ' Compute dot products
+195:        ' Compute barycentric coordinates
+200:        ' Check if point is in triangle
+223:            'If DirectCast(left, Object) = DirectCast(right, Object) Then
+224:            '    Return True
+225:            'End If
+227:            'If (DirectCast(left, Object) Is Nothing) OrElse (DirectCast(right, Object) Is Nothing) Then
+228:            '    Return False
+229:            'End If
+231:            ' Just compare x and y here...
+326:            'If DirectCast(left, Object) = DirectCast(right, Object) Then
+327:            '    Return True
+328:            'End If
+330:            'If (DirectCast(left, Object) Is Nothing) Or (DirectCast(right, Object) Is Nothing) Then
+331:            '    Return False
+332:            'End If
+351:            ' The triangle list
+356:            ' The "supertriangle" which encompasses all triangulation points.
+357:            ' This triangle initializes the algorithm and will be removed later.
+361:            ' Include each point one at a time into the existing triangulation
+363:                ' Initialize the edge buffer.
+366:                ' If the actual vertex lies inside the circumcircle, then the three edges of the 
+367:                ' triangle are added to the edge buffer and the triangle is removed from list.                             
+378:                ' Remove duplicate edges. This leaves the convex hull of the edges.
+379:                ' The edges in this convex hull are oriented counterclockwise!
+391:                ' Generate new counterclockwise oriented triangles filling the "hole" in
+392:                ' the existing triangulation. These triangles all share the actual vertex.
+398:            ' We don't want the supertriangle in the triangulation, so
+399:            ' remove all triangles sharing a vertex with the supertriangle.
+406:            ' Return the triangles
+416:            ' get the extremal x and y coordinates
+428:            ' make a triangle
+>>> cDEV.vb
+13:    '********************************* Anleitung zur Einbindung neuer DEV-Options *********************************
+15:    '1. Eintrag in "Sub New()"
+17:    '   I) Neues cDEVoption Objekt definieren mit "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)"
+19:    '       ConfigType      <tDEVconfType>  ...definiert Typ: Boolean, Integer, Single, String, Menüauswahl (Integer) oder Verweis auf Funktion
+20:    '       Description     <String>        ...Beschreibung des Parameters
+21:    '       SaveInConfg     <Boolean>       ...Ob Einstellung für nächsten PHEM-Start gespeichert werden soll
+22:    '       Enabled         <Boolean>       ...Ob Einstellung im DEV-Tab geändert werden kann
+24:    '   II) Default-Wert definieren. Hier wird unterschieden welcher ConfigType verwendet wird:
+26:    '       a) ConfigType = tBoolean:
+28:    '           Conf0.BoolVal = ...             <Boolean> 
+30:    '       b) ConfigType = tSingleVal:  
+32:    '           Conf0.SingleVal = ...           <Single>
+34:    '       c) ConfigType = tStringVal:    
+36:    '           Conf0.StringVal = ...           <String>
+38:    '       d) ConfigType = tIntVal:    
+40:    '           Conf0.IntVal = ...              <Integer>
+42:    '       e) ConfigType = tAction:
+44:    '           Conf0.ActionDelegate = New cDEVoption.dActionDelegate(AddressOf NameDerFunktion)
+46:    '           Wobei NameDerFunktion die aufzurufende Funktion ist die einen <String> übergibt: "Public Function NameDerFunktion() As String"
+48:    '       f) ConfigType = tContMenIndex:
+50:    '           Verfügbare Auswahl-Möglichkeiten als <String> definieren:
+52:    '               Conf0.AddMode("Auswahl 1")
+53:    '               Conf0.AddMode("Auswahl 2")
+54:    '               usw...
+56:    '           Default-Wert definieren: Erste Auswahl = 0
+58:    '               Conf0.ModeIndex = ...       <Integer>
+73:        '**************************** START: Parameter konfigurieren '****************************
+77:        'Conf0 = New cDEVoption(tDEVconfType.tBoolean, "Kennfelderstellung mit Median")
+78:        'Conf0.BoolVal = False
+79:        'MyOptions.Add("KF-Median", Conf0)
+81:        'Conf0 = New cDEVoption(tDEVconfType.tAction, "Action Test")
+82:        'Conf0.ActionDelegate = New cDEVoption.dActionDelegate(AddressOf Me.TestFunction)
+83:        'MyOptions.Add("Action_Test", Conf0)
+85:        'Conf0 = New cDEVoption(tDEVconfType.tIntVal, "Integer Test", True, False)
+86:        'Conf0.IntVal = 666
+87:        'MyOptions.Add("Integer_Test", Conf0)
+89:        'Conf0 = New cDEVoption(tDEVconfType.tSingleVal, "Single Test")
+90:        'Conf0.SingleVal = 1.2345
+91:        'MyOptions.Add("Single_Test", Conf0)
+93:        'Conf0 = New cDEVoption(tDEVconfType.tStringVal, "String Test", False)
+94:        'Conf0.StringVal = "Hallo DU!"
+95:        'MyOptions.Add("String_Test", Conf0)
+97:        'Conf0 = New cDEVoption(tDEVconfType.tSelection, "Menu Test", False, False)
+98:        'Conf0.AddMode("Mode 0")
+99:        'Conf0.AddMode("Hugo")
+100:        'Conf0.AddMode("Charlie")
+101:        'Conf0.AddMode("Mode 3")
+102:        'Conf0.ModeIndex = 3
+103:        'MyOptions.Add("Menu_Test", Conf0)
+113:        '**************************** ENDE: Parameter konfigurieren '*****************************
+121:    'Initialisiert die tatsächlichen Config-Parameter aus der MyConfigs-Liste 
+126:    'Demo für Delegate Function
+327:                    '??? Darf nicht sein
+>>> cEmComp.vb
+5:    'IDstring:
+6:    '   Def-Komponente: IDstring = sKey (upper case)
+7:    '   Cstm-Komponente (tMapComp.Undefined): IDstring = Name (upper case)
+21:    'Transient Correction
+25:    'Komponente wird sekündlich ausgegeben
+28:    'ATVals definiert (EXS)
+31:    'Summen/DruchschnittsWerte
+109:        'Durchschnitt
+113:        'Summe (g/h umgerechnet in g)
+>>> cERG.vb
+47:        '********************** GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '**********************
+84:        '********************** Erg-Einträge erstellen '**********************
+90:        'Fahrzeugtyp-unabhängig
+94:        'Jede GEN-Datei auf Modus und Kennfeld checken
+115:                    'nix...
+136:            'Elektrofahrzeug / Hybrid
+139:                'EV & HEV
+158:                'Nur EV:
+171:            'Konventionell / Hybrid  (Alles außer EV)
+174:                'Konventionelles Fahrzeug...
+182:                    'Aus den Messdaten
+197:                            'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+212:                    'Aus dem Kennfeld
+240:                            'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+260:            'derzeit nix
+266:            'Fahrzeugbesogene Felder
+280:            'CylceKin
+288:        'ErgListe sortieren damit g/km und g/h nebeneinander liegen
+357:        'Fahrzeugtyp-unabhängig
+361:        'Länge, Geschw., Steigung
+364:            'Durchschnitts-Geschw. berechnen
+374:            'Durchschnitts-Steigung berechnen
+385:        'EV / Hybrid
+388:            'Positive effektive EM-Leistung
+399:            'Positive effektive Batterie-Leistung = innere EM-Leistung
+410:            'Positive innere Batterie-Leistung
+421:            'Verbrauchte Energie berechnen
+424:            'Negative effektive EM-Leistung
+435:            'Negative effektive Batterie-Leistung = innere EM-Leistung
+446:            'Negative innere Batterie-Leistung
+457:            'Geladene Energie berechnen
+460:            'Energie in/aus Batterie
+464:            'EtaEM
+478:            'EtaBat
+492:            'Delta SOC
+495:            'Nur EV:
+498:                'Energieverbrauch
+505:        'Konventionell d.h. alles mit ICE (nicht EV)
+508:            'Emissionen
+511:                'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+522:            'Leistung, Drehzahl
+535:            'Ppos
+542:            'Pneg
+551:        'Nur Gesamtfahrzeug (nicht EngOnly)
+554:            'Pbrake-norm
+561:            'Eair
+568:            'Eroll
+575:            'Egrad
+582:            'Eacc
+589:            'Eaux
+596:            'Ebrake
+603:            'Etransm
+610:            'Masse, Loading
+614:            'CylceKin
+620:                'EposICE
+627:                'EnegICE
+637:        'Ausgabe-String erstellen:
+655:        'Datei öffnen
+664:        '*** Header / Units
+668:        'Datei schließen (wird nach jedem Job neu geöffnet)
+687:        'Datei öffnen
+704:        'Datei schließen
+739:        'Ausgabepfad definieren
+753:        'Datei öffnen
+755:            'Datei öffnen
+763:        'Info
+769:        'Datei schließen (wird nach jedem Job neu geöffnet)
+787:        'If Cfg.FCcorrection Then
+788:        '    s.AppendLine("HDV FC Correction ON")
+789:        'Else
+790:        '    s.AppendLine("HDV FC Correction OFF")
+791:        'End If
+793:        'If DEV.Enabled Then s.AppendLine(DEV.DEVinfo)
+>>> cFile V3.vb
+43:        'If TxtFldParser.EndOfData Then Return False
+>>> cHEVctrl.vb
+61:        'Extrapolation für x < x(1)
+63:            ' ....Int1D_ERROR = True
+73:        'Extrapolation für x > x(imax)
+75:            ' ....Int1D_ERROR = True
+79:        'Interpolation
+>>> cRegression.vb
+117:        'calculate distances for each point (residual)
+>>> cVECTO.vb
+22:        'Missions
+32:            'Header
+50:        'Segment Table
+58:            'Header
+>>> cVSUM.vb
+46:        'Durchschnitts-Geschw. berechnen
+114:        'TODO: Mission nicht Zyklusname
+117:        'TODO: Test Setup
+>>> M_FCCor.vb
+3:    'C
+4:    'C
+5:    'C     Unterprogramm zur Korrektur der verbrauchswerte nach Motorgroesse (fuer HBEFA-Berechnungen, da dort
+6:    'C     alle LKW-Groessen mit gleichem *.mep gerechnet werden
+7:    'C
+8:    'C
+10:        'C
+11:        ' include "com.inc"<<<<<<<<<<<<<<<<<<<<<<<<<<
+12:        'c
+31:        'C
+32:        'c  Korrektur des Kraftstoffverbrauches
+33:        'c  nur für Handbuchrechnungen und LKW
+35:            'c        für Euro0 und früher werden größenabhängig 3 verschiedene KF verwendet
+36:            'c        daher hier keine Größenkorrektur
+39:            'c         Korrekturfunktion für Euro1 und Euro 2 1:1 von Stand ARTEMIS übernommen
+50:            'c        Korrekturfunktion Euro 3 gg. ARTEMIS geringfügig adaptiert (siehe FcCorr_Eu3ff.xls)
+55:            'c         Korrekturfunktion für Euro 4 ff analog zu Euro3
+56:            'c         lediglich adaptiert: Durchschnittsnennleistung der ins mep verwursteten Motoren
+61:            'c         Euro6ff
+66:        'c
+70:        'C
+>>> M_Lese.vb
+15:        '-----------------------------    ~GEN~    -----------------------------
+16:        'GEN einlesen
+35:        'VECTO: Defaultwerte für Parameter die nicht mehr in der .GEN/.VECTO sind werden beim Einlesen über SetDefault belegt.
+46:        'Fehlermeldung in Init()
+50:        '-----------------------------    ~VEH~    -----------------------------
+51:        'Einlesen der KFZ-Spezifikationen aus 'KFZspez'
+67:        '-----------------------------    ~ENG~    -----------------------------
+78:        '-----------------------------    ~GBX~    -----------------------------
+89:        '-----------------------------    VECTO    -----------------------------
+90:        'GEN => VEH
+107:        'ENG => VEH
+113:        'GBX => VEH
+130:        '-----------------------------    ~FLD~    -----------------------------
+131:        '   FLD muss jetzt vor MAP/MEP eingelesen werden falls dort <DRAG> Einträge sind!
+142:        'Normieren
+145:        '-----------------------------    ~MAP~    -----------------------------
+146:        '    Kennfeld: Spalten 1 und 2 sind die x- und y- Koordinaten (Pe,n), die
+147:        '    uebrigen sind Messwerte
+148:        '    Emissionen und Verbrauch in (g/(h*(kW_Nennleistung) bei SNF
+149:        '    Emissionen in (g/h) und Verbrauch in (g/(h*(kW_Nennleistung) bei PKW und LNF
+152:            'Kennfeld einlesen
+163:            'Normieren
+169:        '-----------------------------    ~DRI~    -----------------------------
+170:        '    Einlesen des KFZ-Fahrzyklus (Nicht in ADVANCE).
+171:        '       LUZ: 04.02.2011: Ab jetzt ausserhalb von LESE wegen neuer BATCH-Struktur
+173:        '-----------------------------    ~TRS~    -----------------------------
+174:        '    Dynamik-Korrekturparameter, falls dynamokkorrektur ausgewählt:
+175:        '    Parameter aus multipler Regressionsanalyse, Differenz zu stationär in
+176:        '      SNF: (g/h)/kW_Nennleistung fuer einzelne Parameter
+177:        '      PKW  (g/h) für Emissionen , (g/h)/kW fuer Verbrauch
+192:        'Einlesen der Daten fuer Hybridsimulation:
+195:            'TODO: EV/HEV Init hierher!
+>>> M_MAIN.vb
+31:        'Hauptprogramm für alle Modi
+48:        'Falls es zu "ungeplanten" Abbruch kommt
+51:        'Fehler zurücksetzen
+52:        ''ClearErrors()
+54:        'Modus festlegen und Meldung
+70:        'Lizenz checken
+93:        'BATCH-Ausgabeordner erstellen falls notwendig
+114:        'MOD-Daten Klasse initialisieren
+116:        'TEST: Schaun ob's auch ohne dem geht: MODdata.Init()
+118:        'ERG-Klasse initialisieren
+128:        'Warnung wenn ungültige/unrealistische Einstellungen
+131:        'Meldungen
+134:        'Progbar-Init
+139:        '       Schleife zur Berechnung fuer alle vorgegebenen Zyklen und Fahrzeuge:
+142:        '**************************************** Job-Schleife ****************************************
+166:                'Status
+174:                'Status/ProgBar
+192:            'Check ob Abbruch
+195:            'Falls Error beim GEN einlesen
+198:            'Einlesen der Inputfiles
+199:            '   BATCH: Zyklus aus DRI-Liste
+200:            '   ADVANCE: Zyklus wird nicht eingelesen
+206:            'Überprüfe ob alle Modi in der GEN Datei lizenziert sind
+229:            'Falls Optimierer aktiv werden hier die Parameter eingelesen
+232:            'BATCH: Sub-Dir Ausgabeordner erstellen
+255:            '************************************** Zylus-Schleife ****************************************
+264:                    'ProgBar
+268:                    'BATCH-Modus: Fahrzyklus nicht aus GEN-Datei sondern aus DRI-Liste
+272:                    'Status
+277:                    'Ausgabe-Name definieren
+296:                '********************************** VECTO-Zylus-Schleife **********************************
+304:                        'ProgBar
+321:                    'TODO: Loading Schleife
+322:                    '***************************** VECTO-Loading-Schleife *********************************
+326:                    'Einstiegspunkt für SOC-Start Iteration
+329:                    'Aufraumen
+332:                    'Zyklus einlesen
+335:                        'Einlesen
+344:                        'v(s) in v(t) konvertieren (optional)
+352:                        'In 1Hz konvertieren (optional)
+356:                                'Fehlermeldung in DRI.Convert()
+362:                        'Entnormieren
+370:                    'Zyklus-Vorgaben initialisieren (Geschw, Beschl, ...)
+377:                        'Rechne .npi-Leistung in Pe und P_clutch um
+385:                        'ACHTUNG: VehmodeInit benötigt Infos aus GEN und DRI!
+387:                            'Fehlermeldung innerhalb VehmodeInit()
+416:                                    'TODO: Meldung...
+444:                        'CycleKin (für erg/sum usw.) berechnen
+452:                    'Emissionen und Nachbehandlung - wird bei EV-Modus nicht ausgeführt
+457:                        'Sekündliche TC Parameter ermittlen
+460:                        'Kennfeld Erstellung
+476:                        'Rohemissionen berechnen
+479:                        'TC Parameter umrechnen in Differenz zu Kennfeld-TC-Parameter
+482:                        'Dynamik-Korrektur
+488:                        'Korrektur der Verbrauchswerte kleiner LKW-Motoren bei HBEFA
+494:                        'Exhaust System Simulation
+504:                        'Summen / Durchschnitte bilden
+507:                        'Engine Analysis
+520:                    '*** Sekündliche Ausgabe ***
+532:                    'VECTO Ausgabe
+533:                    'TODO: Loadings umschalten...
+540:                    'Ausgabe für BATCH und ADVANCE
+544:                        'In ADVANCE ist Zyklus-Abbruch = Job-Abbruch
+560:                        'Ausgabe in Erg (Erste Berechnung - Initialisieren & Header)
+567:                    'Daten aufräumen
+570:                    'Status-Update
+577:                    'TODO: Loading Schleife
+578:                    '******************** ENDE *** VECTO-Loading-Schleife *** ENDE ************************
+588:                '************************* ENDE *** VECTO-Zylus-Schleife *** ENDE *************************
+595:            '****************************** ENDE *** Zylus-Schleife *** ENDE ******************************
+621:                'If GEN.irechwahl = tCalcMode.cmHEV Then MsgStrBuilder.Append(" (dSOC = " & SOC(MODdata.tDim) - SOC(0) & ")")
+641:            'Check ob Abbruch
+647:        '******************************* ENDE *** Job-Schleife *** ENDE *******************************
+>>> M_OptInterface.vb
+21:    'Korrigierte Emissionen (wird von SOC-Iterations-Modul bestimmt)
+24:    '*** Opt_Interface Ein/Ausschalten
+32:                'Initialisierung
+40:    '*** Initialisierung
+44:        'Zähler null setzen
+47:        'Korr. Em. löschen 
+52:        'TODO: I/O-Verzeichnis festlegen
+56:        'Communication - Input
+72:        'Dim file As New cFile
+73:        'ReDim xA(Adim)
+74:        'ReDim yA(Adim)
+75:        'ReDim zA(Adim)
+76:        'file.OpenRead(OptDir & "XYZ_Punkte.csv")
+77:        'For x = 1 To Adim
+78:        '    file.Read(xA(x))
+79:        '    file.ReadTab(yA(x))
+80:        '    file.ReadTab(zA(x))
+81:        'Next
+82:        'file.Close()
+83:        'file = Nothing
+85:        'Timer initialisieren/starten
+92:    '*** Parameter einlesen
+98:        '**** Einlesen der Input-Datei mit Opt-Parameter
+108:    '*** Parameter ausgeben
+114:        '**** Ausgabe der Output-Datei mit Zielfunktion
+124:        'Ausgabe StatusString
+128:            'F_DEV.ButOptAbbr.Enabled = True
+133:        'Berechnung der Zielfunktion
+136:        'Ausgabe der Zielfunktion
+144:    '*** Opt Deaktivieren
+149:        'F_DEV.ButOptAbbr.Enabled = True
+153:    '*** Status-Meldung (darf nicht von BGWorker aufgerufen werden)
+155:        'F_DEV.LbOptStatus.Text = txt
+158:    '*** Starte PHEM - wird von F_MAINForm.ComMsgTimer aufgerufen wenn Start-Signal erhalten
+161:        'PHEM starten
+165:        'Timer anhalten
+167:        'Zähler + 1
+169:        'PHEM starten
+174:    '*** PHEM fertig - wird von BackgroundWorker1_RunWorkerCompleted aufgerufen wenn PHEM beendet
+177:        'Ausgabe der Zielfunktion
+180:        'PHEM_Launcher beenden
+183:        'Timer wieder starten
+190:    '*** Beendet PHEM_Launcher
+201:    '*** CommunicationService
+203:        'Inherits MarshalByRefObject
+204:        'Implements SharedInterfaces.ICommunicationService
+205:        'Public Sub MsgReceive(ByVal txt As String) Implements SharedInterfaces.ICommunicationService.SendMsg
+206:        '    OptMsgTxt = txt
+207:        'End Sub
+211:    ' ''*** Message Output
+212:    '' ''Public Sub OptSendMsg(ByVal txt As String)
+213:    '' ''    Try
+214:    '' ''        '      Dim ipcChS As New IpcChannel("ClientSender")
+215:    '' ''        '     ChannelServices.RegisterChannel(ipcChS, False)
+216:    '' ''        Dim ClientRemoteObj As SharedInterfaces.ICommunicationService = DirectCast(Activator.GetObject(GetType(SharedInterfaces.ICommunicationService), "ipc://IPC_Client/ClientReceiveObj"), SharedInterfaces.ICommunicationService)
+217:    '' ''        ClientRemoteObj.SendMsg(txt)
+218:    '' ''        '   ChannelServices.UnregisterChannel(ipcChS)
+219:    '' ''    Catch ex As Exception
+220:    '' ''        WorkerMSG(tMsgID.Err, "ClientRemoteObj.SendMsg failed!!")
+221:    '' ''    End Try
+222:    '' ''End Sub
+>>> M_SOC_Iter.vb
+5:    '-----------SOC Neutral Iteration------------
+20:    'TODO: Dummies
+31:    '-------------------------------- ~SOC - Neutral Iteration~ ---------------------------------
+39:        ''Dim SOCnMiCheck As Boolean
+40:        ''Dim SOCnMaCheck As Boolean
+82:            'Return
+97:        'Check ob Vorzeichen von Delta-SOC sich ändert
+102:                'Vorzeichenwechsel...
+105:                    '...Limit erreicht => Abbruch
+126:                'Falls die letzte Iteration die Beste war (SOCnAbbr = True): Abbruch
+131:                'Falls eine andere Iteration besser war (SOCnAbbr = False): Wiederholen
+168:        'Check ob LinReg möglich: Mind. 2 Berechnungen; Mind. 1 dSOC-Vorzeichenwechsel
+271:            'Unkorrigierte Em verwenden wenn SOC-Iteration OK
+276:            'Unkorrigierte Em verwenden
+284:        'Korrigierte Emissionen für Optimierer
+286:            'Falls SOC-Iteration erfolgreich (oder Lin.Reg. nicht möglich) dann Emissionen der letzten Berechnung (unkorrigiert) verwenden
+>>> VECTO_Global.vb
+10:    'BackgroundWorker
+13:    'Log/Msg
+17:    'Config-------------------------------------------------------
+20:    'TODO: Weg damit! SOC-Iteration gehört in die Leistungsschleife oder nach Em-Berechnung für LinReg
+27:    'Dateiformat
+346:        'Log starten
+>>> cADV.vb
+84:        'Zeile 1: FZP-Datei
+87:        'Zeile 2: FLT-Datei
+90:        'Zeile 3: TEM-Datei
+93:        'Zeile 4: RndSeed
+96:        'Zeile 5: MISKAMout True/False
+99:        'Zeile 6: STRfilter True/False
+102:        'Zeile 7: Distance filter für SUM.STR
+105:        'Zeile 8+: STR Dateien
+>>> cADVANCE.vb
+11:    'TEM (TODO)
+17:    'ADV
+23:    'FLT-Collection
+71:    'Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien 
+80:    'STR.SUM
+103:    'Berechnung
+113:    'ADVANCE Initialisierung
+126:        'ADV Datei einlesen
+129:        'Check ob FLT vorhanden
+135:        'Check ob sortierte FZP vorhanden
+151:                        'GO!
+159:        'FLT einlesen (muss vor STR sein wegen cSTRerg)
+164:        'EMlist erstellen
+183:        'STR einlesen
+204:        'Listen erstellen
+209:        'FZP einlesen
+213:        'FZP sortieren (und exportieren)
+223:        'FZP Check
+226:        'TEM (TODO)
+229:        'Random-Init
+233:        'Für AusgVis
+236:        'Ausgabe-Initialisierung
+238:        '   Dateinamen
+241:        ' Modale Ausgabe
+246:        'Startwerte
+260:    'ADVANCE Speicher frei geben
+270:        'Ausgabe
+273:        'Speicher freigeben
+291:        'ReDim vX(-1)
+292:        'ReDim vY(-1)
+293:        'ReDim vNr(-1)
+294:        'ReDim vNrSub(-1)
+295:        'ReDim vVm(-1)
+296:        'ReDim vStg(-1)
+297:        'ReDim vID(-1)
+298:        'ReDim vSID(-1)
+299:        'ReDim sStr(-1)
+300:        'ReDim sSIDlist(-1)
+301:        'ReDim sSp(-1)
+302:        'ReDim sSegAnX(-1)
+303:        'ReDim sSegEnX(-1)
+304:        'ReDim sSegAnY(-1)
+305:        'ReDim sSegEnY(-1)
+319:            'ReDim sFC(-1)
+320:            'ReDim sNOx(-1)
+321:            'ReDim sCO(-1)
+322:            'ReDim sHC(-1)
+323:            'ReDim sPM(-1)
+324:            'ReDim sBe(-1)
+325:            'ReDim sRu(-1)
+326:            'ReDim sSO2(-1)
+327:            'ReDim ala(-1)
+328:            'ReDim vDTV(-1)
+329:            'ReDim ALKW(-1)
+333:        'Listen löschen
+340:        'Garbage Collection - Soll "System Out of Memory" Exception verhindern (tut's aber nicht!)
+346:    'ADVANCE Fahrzeugberechnung
+361:        'Check ob Fertig
+368:        'Zyklus-Klasse initialisieren
+374:        'Fahzeugnummer und Typ definieren (bleibt hier konstant)
+375:        '   Altes Fahrzeug ist VehStrAlt, Aktuelles ist VehStr
+380:        'Listen erstellen
+385:        't0
+388:        'Definiere Felder für Fahrzeug-Berechnung
+391:            'Check ob neues Fahrzeug 
+396:            'Allgemeiner Fahrzyklus
+400:            'ADVANCE
+401:            '   Strecken-Auswertung (MISKAM)
+408:                ''StatusMSG(7, "Calculation running... " & CInt(zFZP / FZPlen * 100).ToString("00") & "%", False)
+415:        '   Fahrzeug-Identifizierung
+419:        'Check ob Zyklus zu kurz => Ãœberspringen
+422:        'Fahrzeuganzahl je Typ erhöhen
+427:        'Check ob letzte Gen-Datei neu zu verwenden ist, sonst Belegung durch FLT
+440:        'VehStr ist ab jetzt ALT
+449:    'Abschnittsweise Berechnung
+469:        'Zyklus durchschleifen
+472:            'Nr. der STR-Datei
+475:            'Falls Wechsel in STR-Nr:
+476:            '   Alte STR-Nr abschließen
+485:                        'Distanz (gefahrene km)
+488:                        'Reisezeit in h
+491:                        'Kfz-Anz
+494:                        'Summen-Emissionen
+513:            'Aufsummieren
+527:        'Letzte STR abschließen
+534:                'Distanz (gefahrene km)
+537:                'Reisezeit in h
+540:                'Kfz-Anz
+543:                'Summen-Emissionen
+565:    'FLT einlesen
+667:    'FZP einlesen
+696:        'Dateilänge bestimmen
+730:        'Arrays dimensionieren
+750:        'Datei einlesen
+755:        'Kommentare überspringen
+765:            'Strecken die nicht in der STR Datei aufgeführt sind werden hier entfernt
+783:            'Arrays belegen
+794:            'Progress-Ausgabe
+804:        'Speicher freigeben
+814:            'Arrays neu dimensionieren
+830:    'FZP sortiren
+833:        'Dim x0 As Int32
+872:            'Aktuelles Fahrzeug ist vNr1
+874:            'Zähle Fahrzeuge mit vNr = vNr1
+883:            'vNrAnz = Anzahl der Fahrzeuge mit vNr = vNr1
+884:            'Sortiere alle Fahrzeuge mit vNr = vNr1 nach Fahrzeugnummer
+892:                        'Zwischenspeicher = Zeile x1
+901:                        'Zeile x1 = Zeile x2
+910:                        'Zeile x2 = Zwischenspeicher
+924:            'vNr1 nach Zeit sortieren
+931:                            'Zwischenspeicher = Zeile xx1
+938:                            'Zeile xx1 = Zeile xx2
+946:                            'Zeile x2 = Zwischenspeicher
+960:            'Status-Ausgabe
+963:                '' StatusMSG(7, "Sorting FZP..." & CInt(x1 / FZPlen * 100).ToString("00") & "%", False)
+974:    'FZP exportieren
+1013:        'Header
+1016:        'Daten
+1031:            'f.WriteLine(vt(x) & ";" & vX(x) & ";" & vY(x) & ";" & vNr(x) & ";" & vVm(x) & ";" & vStg(x) & ";" & vID(x) & ";" & vSID(x))
+1042:    'STR einlesen
+1133:        'SID-Liste erstellen
+1161:    'FZP Check:
+1162:    '   ...Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben
+1194:    'ADV einlesen
+1208:        '********** .ADV Datei einlesen ********
+1217:        'Zeile 1: FZP-Datei
+1220:        'Zeile 2: FLT-Datei
+1223:        'Zeile 3: TEM-Datei
+1226:        'Zeile 4: RndSeed
+1229:        'Zeile 5: MISKAMout True/False
+1232:        'Zeile 6: STRfilter True/False
+1235:        'Zeile 7: STR.SUM Streckenfilter
+1238:        'Zeile 8+: STR Dateien
+1258:            'Ausgabepfad definieren
+1265:            'Header:
+1285:        ' *********************************** .sum *************************************
+1286:        'File mit Summen Ergebnissen ueber alle Kfz:
+1295:        'Header
+1308:    'Ausgabe Schließen
+1330:            'C
+1331:            'C      Umrechnung auf g Emissionen je Sekunde sowie Kfz/Tag
+1343:                'C
+1345:            'C
+1346:            'C      Umrechnung auf mg Emissionen je Meter
+1347:            'C     Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet:
+1348:            'C
+1362:            'C
+1363:            'C      Ausgabe der Ergebnisse
+1364:            'C
+1365:            'C      Filename fuer Ergebnisfile = Name Eingabefile aber mit *.sd3:
+1366:            'C
+1368:            'C
+1369:            'C       File mit Summen Ergebnissen ueber alle Streckenstuecke:
+1371:            'C
+1378:            'C
+1439:        'C     Unterprogramm zu PHEM/Advance zur Ausgabe der Ergebnisse an MISKAM Luftguetemodell von Lohmeyer
+1440:        'C     Daten jeweils durch Semikolon getrennt ausgegeben
+1441:        'C
+1442:        'C
+1443:        'C
+1444:        ' include "com.inc"<<<<<<<<<<<<<<<<<<<<<<<<<<
+1450:        'C     -------------------------------------------------------------------------------------------------
+1451:        'C
+1452:        'C     Aufaddieren der Emissionsdaten nach Streckenabschnitten, ueber jede Sekunde fuer jedes Fahrzeug
+1453:        'C     Achtung: jeweils 2 Richtungen je Abschnitt moeglich aber nur StrId in *.fzp uebergeben -> auf "naechstgelegene"
+1454:        'C     Richtung zugewiesen
+1455:        'C
+1459:            'C
+1462:                'C
+1464:                    'C      Suche nach naechstgelegenem Strassenteilstueck
+1465:                    'C      Koordinaten Kfz:
+1468:                    'C      Koordinaten Strecke: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) aus Eingabe
+1469:                    'C      Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j
+1479:            'C      Falls Streckennummer auf *.fzp File in *.str File nicht existiert, wird auf naechstgelegenes Stueck zugewiesen (gleiches System wie oben):
+1495:            'C     Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten:
+1496:            'C     berechnung sekuendlich in (g/h)/3600 -> g/Strecke ueber gesamte Zeit
+1503:            'C      Zaehlen der Kfz fuer DTV (nur wenn nicht in voriger Sekunde auch schon auf der Strecke
+1510:            'C    ,
+1511:            'C     Grobe Rechnung Benzol nach GLOBEMI (HBEFA):
+1512:            'C      Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+1513:            'C     Otto:
+1520:                        'Continue For
+1525:                'C     Diesel
+1533:            'C
+1534:            'C     Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!:
+1535:            'C      Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+1536:            'C     Diesel:
+1553:                'C     Otto
+1561:            'C
+1562:            'C     SO2-Emissionen aus dem  im Kraftstoff enthaltenen
+1563:            'C     Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2
+1564:            'C     Diesel_
+1567:                'C     Otto:
+1571:            'C
+1573:            'C
+1596:        '******** Ausgabe der einzelnen STR-Ergebnisse '*********
+1601:        '********* Ausgabe Summen über alle STR's '*********
+1611:        '** Datei-Header
+1618:        '*************************** Em je km ***************************
+1620:        'Header            
+1632:        'Untits
+1648:        '** Em je Segment
+1653:            'Segment-Name
+1656:            'Anzahl Fahrzeuge
+1659:            'Reisezeit
+1663:            'km
+1667:            'Speed
+1674:            'Em je km
+1683:            'Schreiben
+1688:        '** Em je Vehicle Type
+1693:            'Type
+1696:            'Anzahl Fahrzeuge
+1699:            'Reisezeit, Strecke, Avg.Speed
+1714:            'Em
+1727:            'Schreiben
+1732:        '** Summe
+1735:        'Segment
+1738:        'Anzahl Fahrzeuge wird nicht aus STRerg berechnet (macht keinen Sinn) sondern aus cFLTfleet-Aufzeichnung
+1745:        'Reisezeit
+1752:        'km
+1759:        'Speed
+1766:        'Em je km
+1779:        'Schreiben
+1783:        '**************************** Em abs ****************************
+1787:        'Header            
+1799:        'Untits
+1815:        '** Em je Segment
+1820:            'Segment-Name
+1823:            'Em abs
+1828:            'Schreiben
+1833:        '** Em je Vehicle Type
+1838:            'Type
+1841:            'Em
+1850:            'Schreiben
+1855:        '** Summe
+1858:        'Segment
+1861:        'Em abs
+1870:        'Schreiben
+1879:    '.mod-Datei zerlegen
+1895:        'InFile öffnen
+1910:        'Anzahl VehNummern
+1915:        'Schleife durch alle VehNummern in Liste
+1918:            'Abbruch falls Userabbruch
+1924:            'Abbruch falls Datei fertig
+1931:            'Ausgabedatei öffnen / Abbruch wenn Fehler beim Öffnen
+1937:            'Schleife durch Datei
+1940:                'Falls String schon eine VehNr enthält wird Zeile nicht nochmal eingelesen (siehe unten)
+1944:                    'Zeile einlesen
+1948:                'Falls Zeile mit VehNr gefunden: VehNr rausholen
+1952:                    'Falls VehNr die gesuchte ist: Ausgabedatei schreiben
+1955:                        'Erste Zeile schreiben ("VehNr: ...")
+1958:                        'Nächste Zeile lesen (sonst wird Do While übersprungen)
+1961:                        'Schleife bis nächste VehNr / Dateiende
+1964:                            'Wenn nächstes Fahrzeug:
+1967:                                    'Wenn gleiche Fahrzeugnummer: Datei weiter schreiben
+1968:                                    'Header und Units überspringen
+1973:                                    'Sonst: Raus aus Schleife
+1978:                            'Zeile schreiben
+1981:                            'Zeile lesen
+1986:                        'Falls nicht EndOfStream Flag setzen damit nächste VehNr nicht übersprungen wird
+1989:                        'Ausgabedatei schließen
+1992:                        'Aus der VehNr-Such-Schleife raus springen
+2001:            'ProgBar
+2026:    'FLT Klasse
+2036:        'New
+2042:        'Initialisieren
+2075:        'GenDatei Zufallsgenerator
+2125:    'Klasse für abschnittsweise Auswertung
+2191:            'Datei-Header
+2202:            '*************************** Em je km ***************************
+2204:            'Header
+2216:            'Untits
+2232:            '** Ergebnisse je Veh-Type
+2237:                'Type
+2240:                'Anzahl Fahrzeuge
+2243:                'Reisezeit
+2247:                'km
+2251:                'Speed
+2258:                'Em
+2267:                'Schreiben
+2272:            '** Summe
+2275:            'Type
+2278:            'Anzahl Fahrzeuge
+2281:            'Reisezeit
+2285:            'km
+2289:            'Speed
+2296:            'Em
+2309:            'Schreiben
+2315:            '*************************** Em absolut *************************
+2317:            'Header
+2329:            'Untits
+2345:            '** Ergebnisse je Veh-Type
+2350:                'Type
+2353:                'Em
+2358:                'Schreiben
+2363:            '** Summe
+2366:            'Type
+2369:            'Em
+2378:            'Schreiben
+2381:            'Datei schließen
+>>> cFileBrowser.vb
+2:'Imports System.Windows.Forms
+4:'V1.0 10.12.2010
+5:'V1.1 12.01.2011
+6:'V1.2 08.03.2011
+7:'V1.3 17.03.2011
+8:'V1.4 30.03.2011
+9:'V1.5 10.06.2011
+10:'V2.0 23.11.2011
+11:'   - Dir-Favorites
+12:'V2.0.1 01.12.2011
+13:'   - Fav-Dlog: "Abbrechen" => "Cancel"
+14:'   - Fav-Dlog: Statt leeren Items in Fav-Liste "<undefined>"
+18:'**Anwendung
+19:'Dim fbTXT As cFileBrowser
+20:'fbTXT = New cFileBrowser("TXT")
+21:'fbTXT.Extensions = New String() {"txt,log", "csv"}
+23:'fbTXT.Close()
+25:'**Benötigte Globale Variablen (Default):
+26:'Public FB_Drives() As String
+27:'Public FB_Init As Boolean = False
+28:'Public FB_FilHisDir As String
+29:'Public FB_FolderHistory(9) As String
+30:'Public FB_WorkDir As String
+49:    'Neue Instanz - ID definieren, umschalten auf FolderBrowser
+58:    'OpenDialog - Öffnen Dialog - Übergibt True wenn Dialog mit OK beendet wurde
+63:    'SaveDialog - Speichern Dialog - Ãœbergibt True wenn Dialog mit OK beendet wurde
+74:    'Dialog öffnen - Übergibt True wenn Dialog mit OK beendet wurde
+80:    'File-History manuell updaten
+86:    'File / Folder History speichen und Speicher freigeben
+104:    'Dateiendungen definieren
+115:    'Dateien abfragen
+>>> FB_Dialog.designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+58:        'SplitContainer1
+67:        'SplitContainer1.Panel1
+78:        'SplitContainer1.Panel2
+91:        'ButtonNewDir
+102:        'ButtonDesktop
+113:        'ButtonWorkDir
+124:        'ButtonHisFolder
+135:        'ButtonFolderBack
+145:        'TextBoxSearchFolder
+154:        'ListViewFolder
+171:        'ColumnHeader3
+175:        'ComboBoxDrive
+184:        'ButtonAll
+194:        'LabelFileAnz
+203:        'ComboBoxExt
+212:        'ButtonHisFile
+223:        'TextBoxSearchFile
+232:        'ListViewFiles
+249:        'ColumnHeader1
+254:        'ContextMenuFile
+260:        'RenameFileToolStripMenuItem
+266:        'DeleteFileToolStripMenuItem
+272:        'TextBoxPath
+281:        'ContextMenuHisFolder
+286:        'ContextMenuHisFile
+291:        'ButtonOK
+303:        'ButtonCancel
+315:        'TextBoxCurrent
+327:        'FB_Dialog
+>>> FB_Dialog.vb
+27:    ''<SORTER>
+28:    ''Private lvwColumnSorter As ListViewColumnSorter
+30:    'New
+32:        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+34:        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+50:    'Resize
+55:    'Shown
+62:    'Resized ListView Format
+68:    'SplitterMoved
+73:    'Closing (Overwrite-Check etc)
+83:                'Wenn leerer Pfad: Aktuellen Ordner (MyFolder) nehmen
+98:                'Abbruch wenn leerer Pfad
+104:                'Dateien in Array übernehmen
+106:                    'Mehrere Dateien ausgewählt 
+117:                    'Einzelne Datei
+119:                    'Primäre Extension (u.a. für bForceExt)
+121:                    'Falls Datei ohne Pfad angegeben dann Pfad hinzufügen
+123:                    'Falls statt Datei ein Ordner eingegeben wurde: Auf Ordner wechseln und Abbruch
+129:                    'Force Extension
+134:                        'Check ob Datei mit Ext angegeben
+137:                    'Falls Datei ohne Endung (nach bForceExt-Abfrage) und nicht existiert dann primäre Endung hinzufügen
+143:                    'Check ob Datei existiert
+145:                        'Ja: Check ob Overwrite wenn bOverwriteCheck
+153:                        'Nein: Abbruch wenn bFileMustExist
+160:                    'MyFiles definieren
+169:    'Browse - Custom Dialog
+175:        'FolderHistory ContextMenu laden
+183:        'Options
+188:        'Form Config
+193:        'Ext-Combobox
+221:        'Pfad definieren
+222:        '   Falls kein Pfad angegeben wird: Letzter Ordner, kein Dateiname
+225:        '   Falls Pfadlänge zu klein (Pfad ungültig): Letzte Datei
+228:        'Ordner öffnen - Falls kein Ordner im Pfad: Letzter Ordner
+230:            'Falls Datei ohne Pfad angegeben
+237:            '...sonst: 
+247:        'Form anzeigen----------------------------------------------------
+250:            'File / Folder History
+259:            'Globale Folder History updaten
+272:    'Schließen und File/Folder History speichern
+276:        'Folder History
+289:        'File History
+305:        'Close
+309:    'Umschalten auf FolderBrowser
+321:    'Initialisieren
+329:        'Globale FileBrowser Initialisierung
+332:        'Laufwerk-ComboBox laden
+337:        'FolderHistory ContextMenu
+349:        'FileHistory ContextMenu
+370:        'Extension-ComboBox
+395:        'Laufwerk-Liste erstellen
+403:        'FolderHistory einlesen
+423:    'ComboBoxDrive_SelectedIndexChanged
+429:    'ButtonFolderBack_Click
+434:    'TextBoxPath_KeyDown (ENTER)
+453:    'ListViewFolder_SelectedIndexChanged
+464:    'ListViewFolder_MouseDoubleClick
+470:    'ListViewFolder_KeyDown
+478:    ''<SORTER>
+479:    ''Private Sub ListViewFiles_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListViewFiles.ColumnClick
+480:    ''    ' Determine if the clicked column is already the column that is 
+481:    ''    ' being sorted.
+482:    ''    If (e.Column = lvwColumnSorter.SortColumn) Then
+483:    ''        ' Reverse the current sort direction for this column.
+484:    ''        If (lvwColumnSorter.Order = SortOrder.Ascending) Then
+485:    ''            lvwColumnSorter.Order = SortOrder.Descending
+486:    ''        Else
+487:    ''            lvwColumnSorter.Order = SortOrder.Ascending
+488:    ''        End If
+489:    ''    Else
+490:    ''        ' Set the column number that is to be sorted; default to ascending.
+491:    ''        lvwColumnSorter.SortColumn = e.Column
+492:    ''        lvwColumnSorter.Order = SortOrder.Ascending
+493:    ''    End If
+495:    ''    ' Perform the sort with these new sort options.
+496:    ''    Me.ListViewFiles.Sort()
+498:    ''End Sub
+500:    'ListViewFiles_SelectedIndexChanged
+516:    'ListViewFiles_MouseDoubleClick
+523:    'ListViewFiles_KeyDown
+532:    'TextBoxSearchFolder_KeyDown
+572:    'TextBoxSearchFolder_TextChanged
+577:    'TextBoxSearchFile_KeyDown
+616:    'TextBoxSearchFile_TextChanged
+621:    'ComboBoxExt_TextChanged
+626:    'ButtonHisFolder_Click
+631:    'ButtonHisFile_Click
+636:    'Select All - Click
+646:    'ContextMenuHisFile_ItemClicked
+660:    'ContextMenuHisFolder_ItemClicked
+689:    'TextBoxCurrent_MouseClick
+706:            'path = Microsoft.VisualBasic.Left(path, x1 - 1)
+713:    'ButtonWorkDir_Click
+718:    'ButtonDesktop_Click
+723:    'Context Menu Update
+728:        'Context Menu sortieren
+741:        'Context Menu sortieren
+754:    'Manuelles History-Update
+758:        'Init
+760:        'Dateien
+762:        'Ordner
+773:    'Ordner wechseln
+776:        'Abbruch wenn keine Laufwerk-Angabe
+781:        'Suchfelder löschen
+785:        'Laufwerk setzen
+791:        'Ordner setzen
+801:        'Me.TextBoxPath.SelectionStart = Me.TextBoxPath.Text.Length
+806:    'Ordner Eine Ebene hinauf
+817:    'FolderListe laden
+820:        'FolderListe löschen
+824:            'Ordner hinzufügen
+837:    'Dateiliste laden
+845:        'Abbruch wenn bBrowseFolder
+849:        'Extension-Filter definieren
+856:        'FileListe löschen
+863:            'Ordner hinzufügen
+889:    'Rename File
+913:    'Delete File
+934:    'Neuer Ordner
+954:    ''Private Function fTimeString(ByVal T As Date) As String
+955:    ''    Return T.Year & "-" & T.Month.ToString("00") & "-" & T.Day.ToString("00") & " " & T.Hour.ToString("00") & ":" & T.Minute.ToString("00") & ":" & T.Second.ToString("00")
+956:    ''End Function
+>>> FB_FavDlog.designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+33:        'TableLayoutPanel1
+48:        'OK_Button
+57:        'Cancel_Button
+67:        'ListBox1
+75:        'Label1
+84:        'FB_FavDlog
+>>> F_AboutBox.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+60:        'Label1
+70:        'Label3
+80:        'Label5
+90:        'Label6
+100:        'Label7
+110:        'Label9
+120:        'LinkHAUS
+131:        'LinkREX
+142:        'LinkLUZ
+153:        'LabelTelHAUS
+163:        'LabelTelREX
+173:        'LabelTelLUZ
+183:        'Label10
+193:        'LabelLic
+203:        'LabelLicDate
+214:        'Label2
+224:        'Label8
+234:        'Panel1
+244:        'PictureBoxJRC
+254:        'PictureBox1
+263:        'PictureBoxTUG
+273:        'PictureBoxFVT
+283:        'Label4
+293:        'Label11
+303:        'LinkJRC1
+314:        'LinkJRC2
+325:        'Label12
+335:        'Label13
+345:        'F_AboutBox
+>>> F_AboutBox.vb
+4:    'Initialisieren
+11:    'e-mail links----------------------------------------------------------------
+33:    'Bild Links------------------------------------------------------------------
+>>> F_ADV.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+61:        'TextBoxTEM
+69:        'TextBoxFLT
+76:        'ButtonTEM
+86:        'ButtonFLT
+95:        'TextBoxFZP
+102:        'ButtonFZP
+111:        'StatusStrip1
+121:        'ToolStripStatusLabelADV
+127:        'Label2
+136:        'TBseed
+143:        'CheckBoxMISKAM
+155:        'Label1
+164:        'Label3
+173:        'Label4
+182:        'Label5
+191:        'CheckBoxSTRfilter
+201:        'ButOK
+211:        'ButCancel
+222:        'LbSTR
+232:        'ButSTRadd
+241:        'ButSTRrem
+250:        'LbFilter0
+259:        'TbFilter
+266:        'LbFilter1
+275:        'ToolStrip1
+285:        'ToolStripBtNew
+295:        'ToolStripBtOpen
+305:        'ToolStripBtSave
+315:        'ToolStripBtSaveAs
+325:        'ToolStripSeparator1
+330:        'ToolStripBtSendTo
+340:        'F_ADV
+>>> F_ADV.vb
+7:    'Initialisieren
+12:    'Schließen
+19:    'Inputfile- Steuerelemente------------------------------------------
+21:    'Browse Button-Click Events
+58:    'New
+63:    'Open
+68:    'Save
+73:    'Save As
+78:    'Send to ADV List
+91:    'ADV speichern
+108:    'Neue leere ADV
+126:    'ADV in Form laden
+149:        'Zeile 1: FZP-Datei
+152:        'Zeile 2: FLT-Datei
+155:        'Zeile 3: TEM-Datei
+158:        'Zeile 4: RndSeed
+161:        'Zeile 5: MISKAMout True/False
+164:        'Zeile 6: STRfilter True/False
+167:        'Zeile 7: Distance filter für SUM.STR
+170:        'Zeile 8+: STR Dateien
+181:    'ADV aus Form speichern
+204:        'ADV.STRpathsClear()    '<= Nicht notwendig da neues lokales cADV-Objekt
+229:    'TEMformCreator
+234:    'Formular Änderungen (Kontrolle ob GEN gespeichert)---------------------------------
+235:    'Event Handler für Formänderungen
+237:    'Change Status ändern
+243:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+311:    'OK (Save & Close)
+317:    'Cancel
+>>> F_ADVfzp.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+38:        'TableLayoutPanel1
+53:        'OK_Button
+62:        'Cancel_Button
+72:        'RbUseSFZP
+84:        'RbUseFZP
+94:        'RBAbort
+104:        'LbTimer
+115:        'LbMsg
+125:        'Timer1
+129:        'F_ADVfzp
+>>> F_ENG.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+71:        'TbNleerl
+78:        'Label11
+87:        'TbNnenn
+94:        'Label10
+103:        'TbInertia
+110:        'Label41
+119:        'Label40
+128:        'Label39
+137:        'Label36
+146:        'Label5
+155:        'TbPnenn
+162:        'Label9
+171:        'ButCancel
+182:        'ButOK
+192:        'ToolStrip1
+202:        'ToolStripBtNew
+212:        'ToolStripBtOpen
+222:        'ToolStripBtSave
+232:        'ToolStripBtSaveAs
+242:        'ToolStripSeparator3
+247:        'ToolStripBtSendTo
+257:        'StatusStrip1
+267:        'LbStatus
+273:        'Label1
+282:        'Label2
+291:        'TbDispl
+298:        'TbName
+305:        'Label3
+314:        'Label4
+323:        'TbFLD
+330:        'BtFLD
+340:        'TbMAP
+347:        'Label6
+356:        'BtMAP
+366:        'TbWHTC
+373:        'Label7
+382:        'BtWHTC
+392:        'PictureBox1
+402:        'ToolStripSeparator1
+407:        'ToolStripButton1
+416:        'F_ENG
+>>> F_ENG.vb
+127:    'Speichern oder Speichern als Function = true wenn Datei gespeichert
+139:    'ENG speichern
+180:    'Change Status ändern
+188:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+>>> F_GBX.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+58:        'ToolStrip1
+68:        'ToolStripBtNew
+78:        'ToolStripBtOpen
+88:        'ToolStripBtSave
+98:        'ToolStripBtSaveAs
+108:        'ToolStripSeparator3
+113:        'ToolStripBtSendTo
+123:        'StatusStrip1
+133:        'LbStatus
+139:        'ButCancel
+150:        'ButOK
+160:        'TbTracInt
+167:        'LvGears
+182:        'ColumnHeader1
+187:        'ColumnHeader2
+191:        'ColumnHeader3
+196:        'TBI_getr
+203:        'Label49
+212:        'Label33
+221:        'Label48
+230:        'Label6
+239:        'Label3
+248:        'TbName
+255:        'PictureBox1
+265:        'BtClearGear
+274:        'ToolStripSeparator1
+279:        'ToolStripButton1
+288:        'F_GBX
+>>> F_GBX.vb
+81:    'Help
+154:    'Speichern oder Speichern als Function = true wenn Datei gespeichert
+206:    'Change Status ändern
+214:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+261:    'Gear-DoubleClick
+266:    'Gear-KeyDown
+276:    'Clear Gear Button
+281:    'Edit Gear
+311:    'Clear Gear
+>>> F_GEN.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+191:        'ButOpenEXS
+201:        'ButtonEXS
+211:        'TabPgHEV
+242:        'CbSOCnIter
+253:        'Label10
+262:        'TbSOCstart
+269:        'TextBoxEKF
+278:        'TextBoxSTE
+287:        'TextBoxGET
+296:        'TextBoxEAN
+305:        'TextBoxEMO
+314:        'TextBoxBAT
+323:        'ButOpenEKF
+333:        'ButOpenSTE
+343:        'ButOpenGET
+353:        'ButOpenEAN
+363:        'ButOpenEMO
+373:        'ButOpenBAT
+383:        'ButtonBAT
+394:        'ButtonEKF
+405:        'ButtonSTE
+416:        'ButtonGET
+427:        'ButtonEMO
+438:        'ButtonEAN
+449:        'TabPgColdSt
+478:        'TextBoxATC
+487:        'TextBoxCDW
+496:        'TextBoxWUC
+505:        'TextBoxWUA
+514:        'TextBoxMAC
+523:        'TextBoxMAA
+532:        'ButOpenATC
+542:        'ButOpenCDW
+552:        'ButOpenWUC
+562:        'ButOpenWUA
+572:        'GroupBox3
+590:        'Label6
+599:        'TextBoxTofSt
+606:        'TextBoxTKW
+613:        'TextBoxTKat
+620:        'Label5
+629:        'Label4
+638:        'ButOpenMAC
+648:        'ButOpenMAA
+658:        'ButtonMAA
+669:        'ButtonATC
+680:        'ButtonCDW
+691:        'ButtonWUC
+702:        'ButtonMAC
+713:        'ButtonWUA
+724:        'TabPgGen
+745:        'GroupBox5
+757:        'LvCycles
+774:        'ColumnHeader1
+779:        'BtDRIrem
+789:        'BtDRIadd
+799:        'GroupBox4
+811:        'LvAux
+828:        'ColumnHeader4
+833:        'ColumnHeader5
+838:        'ColumnHeader6
+843:        'ButAuxRem
+853:        'ButAuxAdd
+863:        'TbGBX
+872:        'TbENG
+881:        'TextBoxVEH
+890:        'ButOpenGBX
+900:        'ButOpenENG
+910:        'ButOpenVEH
+920:        'ButtonVEH
+931:        'ButtonFLD
+942:        'ButtonMAP
+953:        'Label11
+962:        'CbTransLossModel
+972:        'TextBoxEXS
+979:        'TextBoxTRS
+986:        'CheckBoxDynKor
+998:        'CheckBoxSCR
+1010:        'ChBStartStop
+1022:        'CheckBoxColdSt
+1035:        'ButOpenTRS
+1045:        'ButtonTRS
+1055:        'ComboBoxGearShift
+1065:        'TabControl1
+1083:        'TabPgDriver
+1097:        'GroupBox1
+1120:        'TBpfast
+1127:        'TBpspar
+1134:        'Label19
+1143:        'Label18
+1152:        'Label44
+1161:        'Label43
+1170:        'Label42
+1179:        'Label17
+1188:        'TBlhinunter
+1195:        'TBlhinauf
+1202:        'TBhinunter
+1209:        'Label16
+1218:        'Label15
+1227:        'TBhinauf
+1234:        'Label1
+1243:        'BtDesMaxBr
+1252:        'TbDesMaxFile
+1259:        'TabPgKF
+1270:        'GroupBox2
+1294:        'Label12
+1303:        'CbDragIntp
+1313:        'ChInsertDrag
+1323:        'ChCutDrag
+1333:        'ChCutFull
+1343:        'CheckBoxGS
+1356:        'Label9
+1366:        'TextBoxAvPerofModVal
+1373:        'TextBoxIncn
+1380:        'Label8
+1389:        'Label7
+1398:        'TextBoxIncPe
+1405:        'TabPgStartStop
+1416:        'GroupBoxStartStop
+1432:        'LabelSStime
+1441:        'LabelSSspeed
+1450:        'TBSStime
+1457:        'TBSSspeed
+1464:        'TabPgTEST
+1495:        'Label3
+1504:        'ChbDesMax
+1516:        'CbVehMode
+1526:        'ChCreateMap
+1536:        'ChEngAnalysis
+1546:        'ComboBoxEngType
+1556:        'ComboBoxEclass
+1566:        'ComboBoxVehType
+1576:        'StatusStrip1
+1586:        'ToolStripStatusLabelGEN
+1592:        'ButOK
+1602:        'ButCancel
+1613:        'ToolStrip1
+1623:        'ToolStripBtNew
+1633:        'ToolStripBtOpen
+1643:        'ToolStripBtSave
+1653:        'ToolStripBtSaveAs
+1663:        'ToolStripSeparator1
+1668:        'ToolStripBtSendTo
+1678:        'ToolStripSeparator2
+1683:        'ToolStripButton1
+1692:        'PictureBox1
+1702:        'F_GEN
+>>> F_GEN.vb
+23:    'Coolant System Simulation Zwischenspeicher
+31:    'Initialisiere Form (Lade Verlauf, Combobox-Listen,...)
+45:        'Damit Combobox-Inhalte aktuell sind
+59:    'Schließen
+66:    'Shown
+75:    'Änderung der DynKor Checkbox
+83:    'Änderung der Kaltstart Checkbox
+89:    'Änderund der SCR Checkbox
+280:    'General
+298:    'Cold Start
+318:    'HEV
+338:    'a_DesMax
+347:    'General
+352:        'Damit Veh-Datei übergeben wird
+378:        'Damit Veh-Datei übergeben wird
+404:        'Damit Veh-Datei übergeben wird
+432:    'Cold Start
+451:    'HEV
+474:    'New
+479:    'Open
+484:    'Save
+489:    'Save As
+495:    'Send to GEN List
+502:            'Me.ToolStripStatusLabelGEN.Text = fFILE(Genfile, True) & " sent to GEN List."
+506:    'Help
+520:    'Speichern ("Save" bzw. "Save As" falls neue Datei)
+532:    'GEN in Form laden
+544:        'GEN einlesen
+559:        'Form updaten
+587:        'Kennfeld Erstellung-----------------
+601:        'Kalt Start--------------------------
+608:        'Dateien-----------------------------
+617:        'Kalt Start
+625:        'HEV
+632:        'EXS
+636:        'Start/Stop
+641:        'SOC Start/Iteration
+645:        'Transm.Loss Model
+653:        'Coolant Sim
+657:        'a_DesMax
+699:    'GEN aus Form speichern
+720:        'Kennfeld Erstellung------------------------------------------------------
+730:        'Kalt Start---------------------------------------------------------------
+736:        'Dateien------------------------------------------------------------------
+750:        'Kalt Start
+758:        'HEV
+766:        'EXS
+770:        'Start/Stop
+775:        'SOC
+779:        'Transm.Loss Model
+787:        'Coolant Sim
+791:        'a_DesMax
+811:        'SAVE
+833:    'Neue leere GEN
+838:        'General-----------------------------
+848:        'Kennfeld Erstellung-----------------
+858:        'Kalt Start--------------------------
+864:        'Dateien-----------------------------
+865:        'Kalt Start
+867:        'HEV
+871:        'SCR
+893:        'Start/Stop
+898:        'Transm.Loss Model
+901:        'Coolant Sim
+905:        'a_Desmax
+933:    'Event Handler für Formänderungen
+949:    'Start/Stop - Checkbox Änderung
+955:    'Start/Stop - Textbox Änderung
+960:    'TextBox.TextChanged Events => Change()
+1072:    'Change Status ändern
+1080:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+1211:    'OK (Save & Close)
+1217:    'Cancel
+>>> F_MAINForm.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+139:        'StatusBAR
+148:        'ToolStripLbStatus
+156:        'ToolStripProgBarJob
+166:        'ToolStripProgBarOverall
+176:        'TabControl1
+191:        'TabPageGEN
+211:        'PictureBox1
+220:        'BtGENdown
+230:        'BtGENup
+240:        'LbAutoShDown
+253:        'ChBoxAllGEN
+264:        'LvGEN
+284:        'ColGENpath
+289:        'ColGENstatus
+294:        'ButtonGENopt
+304:        'ButtonGENremove
+315:        'Button1
+326:        'ButtonGENadd
+337:        'TabPageDRI
+354:        'BtDRIdown
+364:        'BtDRIup
+374:        'ChBoxAllDRI
+385:        'LvDRI
+405:        'ColDRIpath
+410:        'ColDRIstatus
+415:        'ButtonDRIedit
+425:        'ButtonDRIremove
+436:        'ButtonDRIadd
+447:        'TabPgOptions
+463:        'GrbxTest
+476:        'ChBoxFCkor
+486:        'ChBoxFinalEm
+496:        'GrBoxADV
+510:        'ChBoxFzpSort
+522:        'ChBoxFzpExport
+532:        'GrBoxSTD
+544:        'GrBoxBATCH
+561:        'ChBoxBatchSubD
+571:        'Label2
+580:        'ButBObrowse
+590:        'CbBOmode
+600:        'TbBOpath
+609:        'ChBoxAutoSD
+619:        'PanelOptAllg
+631:        'Label1
+640:        'ChBoxCyclDistCor
+650:        'ChBoxUseGears
+660:        'CBoxMODE
+671:        'ChBoxModOut
+683:        'TabPageDEV
+694:        'LvDEVoptions
+710:        'ColumnHeader4
+715:        'ColumnHeader7
+720:        'ColumnHeader5
+725:        'ColumnHeader6
+730:        'ConMenFilelist
+736:        'SaveListToolStripMenuItem
+742:        'LoadListToolStripMenuItem
+748:        'LoadDefaultListToolStripMenuItem
+754:        'ClearListToolStripMenuItem
+760:        'ToolStripSeparator5
+765:        'RemovePathsToolStripMenuItem2
+771:        'BackgroundWorker1
+774:        'ComMsgTimer
+777:        'LvMsg
+796:        'ColumnHeader1
+801:        'ColumnHeader2
+806:        'ColumnHeader3
+811:        'SplitContainer1
+821:        'SplitContainer1.Panel1
+825:        'SplitContainer1.Panel2
+832:        'ToolStrip1
+842:        'ToolStripBtNew
+852:        'ToolStripBtOpen
+862:        'ToolStripSeparator2
+867:        'ToolStripDrDnBtTools
+876:        'GENEditorToolStripMenuItem1
+882:        'VEHEditorToolStripMenuItem
+888:        'EngineEditorToolStripMenuItem
+894:        'GearboxEditorToolStripMenuItem
+900:        'ADVEditorToolStripMenuItem1
+907:        'ToolStripSeparator1
+912:        'CreateTEMFileToolStripMenuItem
+919:        'SplitMODFilesToolStripMenuItem
+926:        'ToolStripSeparator4
+932:        'OpenLogToolStripMenuItem
+938:        'ChangeWorkingDirectoryToolStripMenuItem1
+944:        'SettingsToolStripMenuItem
+950:        'ToolStripDrDnBtInfo
+959:        'UserManualToolStripMenuItem
+965:        'QuickStartGuideToolStripMenuItem
+971:        'ToolStripSeparator3
+976:        'CreateActivationFileToolStripMenuItem
+982:        'AboutPHEMToolStripMenuItem1
+988:        'CmDEV
+993:        'TmProgSec
+997:        'F_MAINForm
+>>> F_MAINForm.vb
+51:        ''' Informs the system that the state being set should remain in effect until the next call that uses ES_CONTINUOUS and one of the other state flags is cleared.
+53:        ''' Forces the display to be on by resetting the display idle timer.
+55:        ''' Forces the system to be in the working state by resetting the system idle timer.
+176:    'PHEM-Launcher
+180:        'Falls Aufruf während PHEM schon läuft
+186:        'GENlist-Selection löschen
+189:        'Modus festlegen
+199:        'Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe
+210:        'Status
+214:        'Job-Liste definieren
+216:        'File- / Zylus- Liste definieren
+219:        'Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt)
+222:        'Check ob Overall-Progbar benötigt
+225:        'Launch über Job_Launcher
+259:    'Datei-Listen definieren
+291:    'Job-Launcher
+296:        'Options aus Options-Tab laden
+299:        'Config speichern
+304:        'Msg-Ausgabe zurück setzen
+307:        'Button umschalten
+311:        'Options disablen
+314:        'ProgBars Start
+323:        'BG-Worker starten
+328:    'Abort Job
+339:    'Beginne Arbeit
+342:        'SLEEP verhindern
+363:    'Progress Report
+377:                'Bei x.ProgSec = -1 kein Update von ProgBarSec
+404:    'Arbeit fertig
+409:        'Progbar Reset
+415:        'Damit ListView-Item Farben (Warnung = Gelb, etc..) richtig sichtbar
+424:                'Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface
+436:        'ShutDown wenn Unexpected Error
+443:        'Options enablen / GUI Reset
+450:        'CommandLine Shutdown
+453:        'Auto Shutdown
+464:        'SLEEP reaktivieren
+477:    'Initialisieren
+490:        'Tabs richtig laden (sonst Problem mit Listviews)
+511:        'FileLists
+521:        'GUI Options laden (hier werden die GEN/ADV/DRI Listen geladen)
+524:        'Spalten skalieren... erst nach dem Laden der Dateilisten
+529:        'BackgroundWorker initialisieren
+534:        'Lizenz überprüfen
+559:    'Shown Event (Form-Load abgeschlossen)  ...hier werden StartUp-Forms geladen (DEV, GEN/ADV- Editor..)
+562:        'DEV Form
+567:        'VECTO Init
+568:        ' VEC.Init()
+570:        'Command Line Args
+587:    'Datei mit PHEM öffnen
+599:        'ComLineArgs auslesen
+614:        'Modus umschalten
+621:        'Falls Datei angegeben
+626:    'Schließen
+629:        'FileLists speichern
+632:        'Log schließen
+641:        'Config speichern
+646:        'FileBrowser-Instanzen schließen
+705:        'Gesperrte Funktionen ein/ausblenden
+791:    'Datei aus Liste entfernen
+830:    'Datei zu Liste hinzufügen
+838:            'ADVANCE
+844:            'STANDARD/BATCH
+855:    'Datei öffnen
+880:    'GEN/ADV Liste: Datei hinzufügen
+889:        'Falls PHEM läuft: Vorgang abbrechen (weil Modusänderung während Berechnung nix gscheit)
+895:        'Modus umschalten falls nötig
+903:        '******************************************* Begin Update '*******************************************
+923:                    'Wenn Datei schon in Liste vorhanden: Nicht hinzufügen (nur wenn einzelne Datei)
+926:                        'Status reset
+931:                        'Element auswählen und anhaken
+942:            'Sonst: Datei hinzufügen (ohne WorkDir)
+954:        '******************************************* End Update '*******************************************
+956:        'Anzahl updaten
+974:        'Me.TabPageGEN.Text = "Job Files (" & c & ")"
+1013:        'If e.CurrentValue = e.NewValue Then Exit Sub
+1015:        'If e.NewValue = CheckState.Checked Then
+1016:        '    DRIchecked += 1
+1017:        'Else
+1018:        '    DRIchecked -= 1
+1019:        'End If
+1021:        'If CheckLock Then Exit Sub
+1022:        'UpdateDRITabText()
+1081:    'Drag n' Drop
+1160:    'DRI Liste: Datei hinzufügen
+1171:        'Modus umschalten falls nötig
+1185:        'Anzahl updaten
+1202:        'Me.TabPageDRI.Text = "Driving Cycles (" & c & ")"
+1222:    'New GEN/ADV
+1231:    'Open GEN/ADV
+1293:        'Worker starten
+1363:        'Selected Items zwischenspeichern
+1384:        'Selected Items löschen
+1389:        'Items einfügen und auswählen
+1390:        'For y = y1 To 0 Step -1
+1405:    'Save List
+1416:    'Load List
+1428:                'Modus ggf. umschalten (auf BATCH)
+1439:    'Load Default
+1462:    'Clear List
+1464:        'Dim ListViewItem0 As ListViewItem
+1465:        'For Each ListViewItem0 In ConMenTarget.SelectedItems
+1466:        '    ListViewItem0.Remove()
+1467:        'Next
+1480:    'Remove Paths
+1494:    'PHEM Start
+1497:        'PHEM Start/Stop
+1499:            'Falls PHEM schon rennt: STOP
+1503:            '...Sonst: START
+1505:            'Listen speichern falls Crash
+1508:            'Start
+1515:    'Modus Change
+1521:        'Alte Liste speichern
+1543:        'Neue Liste laden
+1549:                'Me.GrBoxSTD.BringToFront()
+1566:                'Me.GrBoxBATCH.BringToFront()
+1573:                    'Me.TabControl1.Controls.Add(DRIpage)
+1581:                'Me.GrBoxADV.BringToFront()
+1617:            'If LVbox.Items.Count = 0 Then Exit Sub
+1730:    'GEN Editor öffnen und Datei laden
+1750:    'ADV Editor öffnen und Datei laden
+1761:    'FileLists speichern
+1774:    '*** ComMsgTimer_Tick Tick - Check ob neue Nachricht
+1856:        'Modus einstellen
+1875:        'Allgemein
+1880:        'ADVANCE
+1884:        'BATCH
+2057:                'Log
+2065:                'Log
+2073:                'Log
+2102:    'Private Sub LvMsg_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles LvMsg.SelectedIndexChanged
+2103:    '    If LvMsg.SelectedItems.Count > 0 Then LvMsg.SelectedItems.Clear()
+2104:    'End Sub
+2106:    'Falls Link => Öffnen
+2119:    'Hand-Cursor für Links
+>>> F_ModSplit.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+37:        'TableLayoutPanel1
+52:        'OK_Button
+61:        'Cancel_Button
+71:        'RichTextBox1
+80:        'TextBoxPath
+87:        'ButBrowse
+96:        'Label1
+105:        'Label2
+114:        'ButClear
+123:        'F_ModSplit
+>>> F_ModSplit.vb
+11:        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+14:        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+19:    'Load
+24:    'Browse
+59:        '   Split
+62:        '   Zu Int32 convertieren
+71:        '   Sort
+76:        'Ende
+>>> F_Options.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+72:        'TextBoxWorDir
+79:        'ButtonWorDir
+89:        'GroupBoxWorDir
+100:        'ButtonOK
+110:        'ButtonCancel
+121:        'GroupBox3
+134:        'TbOpenCmd
+141:        'Label7
+150:        'TextBoxLogSize
+157:        'Label16
+166:        'TabControl1
+179:        'TabPage2
+192:        'GroupBox4
+210:        'Label11
+219:        'Label9
+228:        'Label3
+237:        'TbCO2toFC
+244:        'Label10
+253:        'TbFuelDens
+260:        'Label8
+269:        'TbAirDensity
+276:        'Label2
+285:        'TabPgTest
+301:        'Label6
+310:        'TbnnormEngStop
+317:        'Label5
+326:        'Label4
+335:        'GroupBox1
+347:        'ButtonTD
+356:        'ButTDdefault
+365:        'TextBoxTD
+372:        'GroupBox2
+384:        'Label1
+393:        'LabelEAVal
+402:        'TextBoxEAVal
+409:        'ButReset
+419:        'BtHelp
+429:        'F_Options
+>>> F_Options.vb
+5:    'Initialisiere - Lade Config
+14:    'Config laden
+28:    'Reset Button
+37:    'OK
+56:    'Cancel
+61:    'Optionen-----------------------------------
+>>> F_ShutDown.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+32:        'Cancel_Button
+42:        'Label1
+51:        'LbTime
+60:        'Timer1
+64:        'F_ShutDown
+>>> F_StrInpBox.designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+33:        'TableLayoutPanel1
+48:        'OK_Button
+57:        'Cancel_Button
+67:        'Label1
+76:        'TextBox1
+83:        'F_StrInpBox
+>>> F_TEM_Creator.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+38:        'TextBoxTemp
+45:        'ComboBoxDrCyc
+54:        'TextBoxPath
+61:        'ButtonBrowse
+70:        'ButtonOK
+79:        'ButtonCancel
+88:        'Label1
+97:        'Label2
+106:        'Label3
+115:        'Label4
+124:        'CheckBoxEXL
+134:        'F04_TEM_Creator
+>>> F_TEM_Creator.vb
+3:    'Initialisierung
+14:    'Cancel
+19:    'OK
+42:    'Browse
+>>> F_VEH.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+107:        'Label1
+116:        'TbMass
+123:        'Label2
+132:        'TbLoad
+139:        'Label3
+148:        'TBcw
+155:        'Label4
+164:        'TBAquers
+171:        'Label7
+180:        'TbI_wheels
+187:        'Label13
+196:        'TBDreifen
+203:        'ButOK
+213:        'ButCancel
+224:        'Label14
+233:        'Label31
+242:        'Label32
+251:        'Label35
+260:        'Label37
+269:        'Label38
+278:        'CbCdMode
+288:        'TbCdFile
+296:        'BtCdFileBrowse
+306:        'GroupBox6
+319:        'LbCdMode
+328:        'ToolStrip1
+338:        'ToolStripBtNew
+348:        'ToolStripBtOpen
+358:        'ToolStripBtSave
+368:        'ToolStripBtSaveAs
+378:        'ToolStripSeparator3
+383:        'ToolStripBtSendTo
+393:        'GroupBox7
+407:        'PnRt
+417:        'Label45
+427:        'LbRtRatio
+436:        'TbRtRatio
+444:        'BtRtBrowse
+454:        'TbRtPath
+463:        'CbRtType
+473:        'Label12
+482:        'Label46
+491:        'Label50
+500:        'TbMassExtra
+507:        'GroupBox8
+525:        'ButAxlRem
+535:        'LvRRC
+553:        'ColumnHeader7
+558:        'ColumnHeader8
+563:        'ColumnHeader9
+568:        'ButAxlAdd
+578:        'Label23
+587:        'CbAxleConfig
+598:        'Label21
+607:        'CbCat
+617:        'Label5
+626:        'Label9
+635:        'TbMassMax
+642:        'Label10
+651:        'StatusStrip1
+661:        'LbStatus
+667:        'TbHDVclass
+676:        'Label11
+685:        'TbLoadingMax
+694:        'Label22
+703:        'GroupBox1
+727:        'GroupBox4
+742:        'PictureBox1
+752:        'ToolStripSeparator1
+757:        'ToolStripButton1
+766:        'F_VEH
+>>> F_VEH.vb
+19:    'Init
+30:    'New
+35:    'Open
+40:    'Save
+45:    'Save As
+50:    'Send to GEN Editor
+76:    'Help
+87:    'Save and Close
+92:    'Cancel
+99:    'Speichern oder Speichern als Function = true wenn Datei gespeichert
+111:    'Neue VEH
+124:        'Me.TBlhinauf.Text = ""
+125:        'Me.TBlhinunter.Text = ""
+126:        'Me.TBhinauf.Text = ""
+127:        'Me.TBhinunter.Text = ""
+128:        'Me.TBpspar.Text = ""
+129:        'Me.TBpfast.Text = ""
+152:        'TODO: AUTO: Me.TbHDVclass.Text
+153:        'AUTO: Me.TbLoadingMax.Text
+164:    'VEH öffnen
+190:        'Me.TBhinauf.Text = VEH0.hinauf
+191:        'Me.TBhinunter.Text = VEH0.hinunter
+192:        'Me.TBlhinauf.Text = VEH0.lhinauf
+193:        'Me.TBlhinunter.Text = VEH0.lhinunter
+194:        'Me.TBpspar.Text = VEH0.pspar
+195:        'Me.TBpfast.Text = 1 - VEH0.pmodell - VEH0.pspar
+221:        'TODO: AUTO: Me.TbHDVclass.Text
+222:        'AUTO: Me.TbLoadingMax.Text
+234:    'VEH speichern
+249:        'VEH0.I_mot = CSng(fTextboxToNumString(Me.TBI_mot.Text))
+251:        'VEH0.I_Getriebe = CSng(fTextboxToNumString(Me.TBI_getr.Text))
+252:        'VEH0.Paux0 = CSng(fTextboxToNumString(Me.TbPaux0.Text))
+253:        'VEH0.Pnenn = CSng(fTextboxToNumString(Me.TBPnenn.Text))
+254:        'VEH0.nNenn = CSng(fTextboxToNumString(Me.TBnnenn.Text))
+255:        'VEH0.nLeerl = CSng(fTextboxToNumString(Me.TBnleerl.Text))
+257:        'VEH0.fGetr = CSng(fTextboxToNumString(Me.TBfGetr.Text))
+259:        'VEH0.AchsI = CSng(Me.LvGears.Items(0).SubItems(1).Text)
+260:        'VEH0.AchsMap = Me.LvGears.Items(0).SubItems(2).Text
+264:        'For i = 1 To 16
+265:        '    VEH0.Igetr(i) = CSng(Me.LvGears.Items(i).SubItems(1).Text)
+266:        '    VEH0.GetrMap(i) = Me.LvGears.Items(i).SubItems(2).Text
+267:        'Next
+269:        'VEH0.hinauf = CSng(fTextboxToNumString(Me.TBhinauf.Text))
+270:        'VEH0.hinunter = CSng(fTextboxToNumString(Me.TBhinunter.Text))
+271:        'VEH0.lhinauf = CSng(fTextboxToNumString(Me.TBlhinauf.Text))
+272:        'VEH0.lhinunter = CSng(fTextboxToNumString(Me.TBlhinunter.Text))
+273:        'VEH0.pspar = CSng(fTextboxToNumString(Me.TBpspar.Text))
+274:        'VEH0.pmodell = CSng(1 - CSng(fTextboxToNumString(Me.TBpfast.Text)) - CSng(fTextboxToNumString(Me.TBpspar.Text)))
+276:        'VEH0.TracIntrSi = fTextboxToNumString(Me.TbTracInt.Text)
+321:    'Cd Mode Change
+347:    'Cd File Browse
+368:    'Rt Type Change
+392:    'Rt File Browse
+405:    'Change Status ändern
+413:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+>>> F_VEH_AuxDlog.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+39:        'TableLayoutPanel1
+54:        'OK_Button
+63:        'Cancel_Button
+73:        'Label1
+82:        'Label2
+91:        'Label3
+100:        'TbID
+107:        'TbPath
+114:        'BtBrowse
+123:        'CbType
+132:        'LbIDhelp
+141:        'F_VEH_AuxDlog
+>>> F_VEH_AuxDlog.vb
+7:    'Private Sub F_VEH_AuxDlog_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
+8:    '    Stop
+10:    'End Sub
+>>> F_VEH_Axle.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+37:        'TableLayoutPanel1
+52:        'OK_Button
+61:        'Cancel_Button
+71:        'Label1
+80:        'TbWeight
+87:        'Label2
+96:        'Label3
+105:        'Label4
+114:        'TbRRC
+121:        'F_VEH_Axle
+>>> F_VEH_GearDlog.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+39:        'TableLayoutPanel1
+54:        'OK_Button
+63:        'Cancel_Button
+73:        'TbGear
+82:        'Label1
+91:        'TbRatio
+99:        'Label2
+109:        'TbMapPath
+116:        'Label3
+125:        'BtBrowse
+134:        'BtNext
+144:        'F_VEH_GearDlog
+>>> GUI_Subs.vb
+6:    'Status Message => Msg-Listview
+26:    'Status => Statusbar
+33:    'Job-Status => Jobliste Status-Spalte
+43:    'Zyklus-Status => Zyklusliste Status-Spalte
+52:    'Worker Progress => Progbar (ProgBarSec Update wenn ProgSec > -1; ProgBarSec-Reset bei ProgSec = 0)
+59:    'Progbar auf Continuous setzen
+65:    'Abbruch
+77:    'Status Message direkt an GUI - darf nicht durch den Backgroundworker geschehen!
+82:    'Statusbar  - Aufruf durch WorkerMSG oder direkt über Form, NIEMALS über Worker
+87:    'Status Form zurück setzen - Aufruf NUR durch Events, NIEMALS über Worker
+94:    'Klasse zum Ãœbergeben von Nachrichten vom Backgroundworker
+176:    'Falls String nicht Zahl dann Null
+179:            'GUImsg(tMsgID.Err, "'" & txt & "' is no numeric expression!")
+202:    'Datei in Excel öffnen
+216:    'WorkDir oder MainDir einfügen falls kein Pfad angegeben. Spezial-Ordner einfügen
+221:        'Pfad trimmen
+224:        'Falls leere Datei => Abbruch
+227:        'sKeys ersetzen
+232:        'Replace - Ordner bestimmen
+239:        ' "..\" => Eine Ordner-Ebene hoch
+246:        'Pfad ergänzen falls nicht vorhanden
+257:    'Pfad eine Ebene nach oben      "C:\temp\ordner1\"  >>  "C:\temp\"
+271:    'Dateiname ohne Pfad    "C:\temp\TEST.txt"  >>  "TEST.txt" oder "TEST"
+283:    'Dateiname ohne Extension   "C:\temp\TEST.txt" >> "C:\temp\TEST"
+288:    'Dateiname ohne Pfad falls Pfad = WorkDir oder MainDir
+305:    'Pfad allein        "C:\temp\TEST.txt"  >>  "C:\temp\"
+306:    '                   "TEST.txt"          >>  ""
+314:    'Endung allein      "C:\temp\TEST.txt" >> ".txt"
+>>> cAux.vb
+21:        'Abbruch wenn's Datei nicht gibt
+27:        'Datei öffnen
+35:        'Kennfeld zurück setzen
+42:            'Transmission ration to engine rpm [-]
+47:            'Efficiency to engine [-]
+52:            'Efficiency auxiliary to supply [-]
+57:            'Efficiency Map
+60:            'Spalte 1 = Auxiliary speed [rpm]   => X-Achse
+61:            'Spalte 2 = Mechanical power [kW]   => Z-Achse (!)
+62:            'Spalte 3 = Output power [kW]       => Y-Achse (!)
+>>> cDRI.vb
+5:    'Private Const FormatVersion As Integer = 1
+6:    'Private FileVersion As Integer
+30:    'Vorgabe für EXS
+34:    'Parameter für KF-Erstellung
+39:    'Vorgabe für AUX
+88:        'Values.Add(tDriComp.t, New List(Of Single))            '<= brauchen wir erst wenn bei ADVANCE > 1Hz unterstützt wird
+123:        'Reset
+126:        'Abbruch wenn's Datei nicht gibt
+132:        'EmComp Init
+133:        '...jetzt in New()
+135:        'Datei öffnen
+157:        ''*** Erste Zeile: Version
+158:        'line = file.ReadLine
+159:        'txt = Trim(UCase(line(0)))
+160:        'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then
+161:        '    ' "V" entfernen => Zahl bleibt übrig
+162:        '    txt = txt.Replace("V", "")
+163:        '    If Not IsNumeric(txt) Then
+164:        '        'Falls Version ungültig: Abbruch
+165:        '        WorkerMsg(tMsgID.Err, "File Version invalid!", MsgSrc)
+166:        '        GoTo lbEr
+167:        '    Else
+168:        '        'Version festgelegt
+169:        '        FileVersion = CInt(txt)
+170:        '    End If
+171:        'Else
+172:        '    'Falls keine Versionsangabe: Altes Format
+173:        '    file.Close()
+174:        '    Return ReadOldFormat()
+175:        'End If
+177:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+178:        'If FileVersion > FormatVersion Then
+179:        '    WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc)
+180:        '    GoTo lbEr
+181:        'End If
+183:        ''Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+184:        'If UBound(line) > 0 Then
+185:        '    If Trim(line(1)) = "+" Then
+186:        '        bCreateMapParDef = True
+187:        '        WorkerMsg(tMsgID.Normal, "MAP-Creation settings found.", MsgSrc)
+188:        '    End If
+189:        'End If
+200:        '*** Zweite Zeile: Namen/Identifizierung der Komponenten
+203:        'Spaltenanzahl/Komponenten checken
+210:            'Falls DRIcomp = Undefined dann wirds als EXS-Comp oder als Emission für KF-Erstellung / Eng-Analysis verwendet
+245:                        'ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+275:                    'Falls erste EXS-Spalte dann Dictionary erstellen
+281:                    'Falls EXS-Componenten noch nicht in Dictionary dann erstellen
+293:                    'Check ob ExsComp/Modul-Kombination schon vorhanden => ERROR
+321:        'Gvorg / Nvorg setzen:
+333:        '*** Dritte Zeile: Einheiten/Normierung
+334:        'VECTO: nix einlesen. Fixe Units (line = file.ReadLine)
+336:        'Normierungs-Unterstützte DRI-Komponenten
+338:            'PeNormed = (UCase(Trim(line(Spalten(tDriComp.Pe)))) = sKey.Normed)
+343:            'nNormed = (UCase(Trim(line(Spalten(tDriComp.nn)))) = sKey.Normed)
+348:            'PaddNormed = (UCase(Trim(line(Spalten(tDriComp.Padd)))) = sKey.Normed)
+352:        'MAP-Komponenten VECTO: Immer [g/h]!  
+355:            ''Unit in String für weitere Checks speichern
+356:            'txt = Trim(line(Em0.Col))
+358:            ''Klammern entfernen
+359:            'txt = txt.Replace("[", "")
+360:            'txt = txt.Replace("]", "")
+362:            ''Normierung und Unit festlegen
+363:            'If txt.Contains("/") Then
+366:            '    Select Case UCase(Right(txt, txt.Length - txt.IndexOf("/") - 1))
+367:            '        Case "KWH", "H" & sKey.Normed
+368:            '            WorkerMsg(tMsgID.Warn, "Unit of component " & line(s) & " is not valid! Check Output!", MsgSrc)
+369:            '            Em0.NormID = tEmNorm.x
+370:            '            Em0.Unit = "Unit-ERROR!"
+372:            '        Case "H"
+373:            '            Em0.NormID = tEmNorm.x_h
+374:            '            Em0.Unit = "[" & Left(txt, txt.IndexOf("/")) & "/h]"
+376:            '        Case Else
+377:            '            Em0.NormID = tEmNorm.x
+378:            '            Em0.Unit = "[" & txt & "]"
+380:            '    End Select
+382:            'Else
+383:            '    Em0.NormID = tEmNorm.x
+384:            '    Em0.Unit = "[" & txt & "]"
+385:            'End If
+393:        '*** Zeile 4, 5: (optional, wenn oben "+"): Einstellungen für KF-Erstellung
+395:        'Falls "+" aktiviert
+398:            'Instanzen erstellen
+402:            '1. Option "Kennfeld normieren durch Pnenn"
+408:            '2. Option "Pfak anwenden"
+429:        '*** Ab 4.Zeile bzw. Ab 6.Zeile: Werte (derzeit keine unterschiedlichen Einheiten/Normierungen unterstützt)
+490:        'Datei öffnen
+517:                        'TODO...
+552:        'Nvorg / Gvorg wird in ResetMe zurück gesetzt
+607:        'Geschw. umrechnen in m/s
+615:        'Normieren, falls notwendig
+625:        'Padd entnormieren, falls notwendig
+635:        'Pe normieren, falls notwendig
+647:        '!!!!!!!! Emissionen werden nur in x/h oder x akzeptiert (siehe ReadFile) !!!!!!!!
+759:        '*********************************** Verzögerung limitieren ********************************
+786:        '*********************************** Zeitreihe erstellen '***********************************
+891:        '*********************************** Umrechnen in 1Hz '***********************************
+1009:        'Check ob Zeit nicht rückwärts 
+1017:        'Zeitgrenzen definieren
+1021:        'Ausgabe-, Summen- und Anz- Dictionaries erstellen
+1060:        'Startwerte
+1077:            'Nächster Zeitschritt
+1082:            'Falls Zeitschritt > tMax:
+1085:                'Sekunde abschließen
+1088:                'Falls keine Werte in Summe: Interpolieren
+1140:                        'Falls nur ein Wert: Inter- / Extrapolieren
+1223:                    'Neuen Bereich festlegen
+1228:                    'Check ob letzte Sekunde
+1234:                    'Neue Summe/Anz beginnen
+1291:        'Neue Felder übernehmen
+>>> cEMO.vb
+17:    'TODO...
+40:        'Abbruch wenn's Datei nicht gibt
+44:        'Datei öffnen
+51:        'Kennfeld-Konfig
+54:        'FLD und MAP einlesen
+76:        'Kennfeld normieren
+83:    'Übergibt aktuell mögliche Antriebsleistung für geg. Drehzahl
+87:        'Extrapolation für x < x(1)
+99:        'Extrapolation für x > x(imax)
+105:        'Interpolation
+114:    'Übergibt aktuell mögliche Generatorleistung für geg. Drehzahl
+118:        'Extrapolation für x < x(1)
+130:        'Extrapolation für x > x(imax)
+136:        'Interpolation
+>>> cFLD.vb
+5:    'Private Const FormatVersion As Integer = 1
+6:    'Private FileVersion As Integer
+46:        'Dim txt As String
+48:        'Dim s As Integer
+49:        'Dim ID As tFldComp
+64:        'Reset
+67:        'Abbruch wenn's Datei nicht gibt
+73:        'Datei öffnen
+81:        'Listen initialisieren
+91:        ''*** Erste Zeile: Version
+92:        'line = file.ReadLine
+93:        'txt = Trim(UCase(line(0)))
+94:        'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then
+95:        '    ' "V" entfernen => Zahl bleibt übrig
+96:        '    txt = txt.Replace("V", "")
+97:        '    If Not IsNumeric(txt) Then
+98:        '        'Falls Version ungültig: Abbruch
+99:        '        WorkerMsg(tMsgID.Err, "File Version invalid!", MsgSrc)
+100:        '        GoTo lbEr
+101:        '    Else
+102:        '        'Version festgelegt
+103:        '        FileVersion = CInt(txt)
+104:        '    End If
+106:        'Else
+107:        '    'Falls keine Versionsangabe: Altes Format
+108:        '    file.Close()
+109:        '    Return ReadOldFormat()
+110:        'End If
+112:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+113:        'If FileVersion > FormatVersion Then
+114:        '    WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc)
+115:        '    GoTo lbEr
+116:        'End If
+121:        '*** Zweite Zeile: Namen/Identifizierung der Komponenten (Schlepp-Emissionen f. KF-Erstellung)
+122:        'line = file.ReadLine
+124:        ''Spaltenanzahl checken
+125:        's1 = UBound(line)
+127:        ''Abbruch falls weniger als 3 Spalten
+128:        'If s1 < 3 Then
+129:        '    WorkerMsg(tMsgID.Err, "Format invalid!", MsgSrc)
+130:        '    GoTo lbEr
+131:        'End If
+133:        'If s1 > 3 Then
+134:        '    For s = 4 To s1
+136:        '        txt = Trim(UCase(line(s)))
+137:        '        ID = fFldComp(txt)
+139:        '        Select Case ID
+141:        '            Case tFldComp.PeTarget
+143:        '                sTarget = s
+144:        '                PtargetDef = True
+146:        '                'Case tFldComp.PT1
+148:        '                '    sPT1 = s
+150:        '            Case Else 'tFldComp.Undefined
+152:        '                bEmDef = True
+154:        '                If EmDragD.ContainsKey(txt) Then
+155:        '                    WorkerMsg(tMsgID.Err, "Em-Component '" & txt & "' already defined!", MsgSrc)
+156:        '                    GoTo lbEr
+157:        '                Else
+158:        '                    EmDragD.Add(txt, New List(Of Single))
+159:        '                    EmDragNormed.Add(txt, False)
+160:        '                    sEmDrag.Add(txt, s)
+161:        '                End If
+163:        '        End Select
+165:        '    Next
+166:        'End If
+168:        'VECTO: Keine Header/Unit-Spalte. Immer PT1!
+174:        '*** Dritte Zeile: Normierung/Einheit
+175:        'line = file.ReadLine
+177:        ''Abbruch falls weniger Spalten als in zweiter Zeile
+178:        'If UBound(line) < s1 Then
+179:        '    WorkerMsg(tMsgID.Err, "Format invalid!", MsgSrc)
+180:        '    GoTo lbEr
+181:        'End If
+183:        'nNormed = (Trim(UCase(line(0))) = sKey.Normed)
+186:        'If Not nNormed Then
+187:        '    Select Case Trim(UCase(line(0)))
+188:        '        Case "[U/MIN]", "RPM", "[1/MIN]", "[MIN^-1]"
+189:        '            'Alles okay
+190:        '        Case Else
+191:        '            WorkerMsg(tMsgID.Err, "Engine Speed Unit '" & line(0) & "' unknown! '[U/min]' expected.", MsgSrc)
+192:        '    End Select
+193:        'Else
+194:        '    WorkerMsg(tMsgID.Err, "Engine Speed Unit '" & line(0) & "' unknown! '[U/min]' expected.", MsgSrc)
+195:        'End If
+197:        'PfullNormed = (Trim(UCase(line(1))) = sKey.Normed)
+200:        'If Not PfullNormed Then
+201:        '    If Trim(UCase(line(1))) <> "[NM]" Then
+202:        '        WorkerMsg(tMsgID.Err, "Engine Torque Unit '" & line(1) & "' unknown! '[Nm]' expected.", MsgSrc)
+203:        '    End If
+204:        'Else
+205:        '    WorkerMsg(tMsgID.Err, "Engine Torque Unit '" & line(1) & "' unknown! '[Nm]' expected.", MsgSrc)
+206:        'End If
+208:        'PdragNormed = (Trim(UCase(line(2))) = sKey.Normed)
+211:        'If Not PdragNormed Then
+212:        '    If Trim(UCase(line(1))) <> "[NM]" Then
+213:        '        WorkerMsg(tMsgID.Err, "Engine Torque Unit '" & line(2) & "' unknown! '[Nm]' expected.", MsgSrc)
+214:        '    End If
+215:        'Else
+216:        '    WorkerMsg(tMsgID.Err, "Engine Torque Unit '" & line(2) & "' unknown! '[Nm]' expected.", MsgSrc)
+217:        'End If
+219:        'If PtargetDef Then
+220:        '    LPtarget = New System.Collections.Generic.List(Of Single)
+221:        '    PtargetNormed = (Trim(UCase(line(sTarget))) = sKey.Normed)
+223:        '    If Not PtargetNormed Then
+224:        '        If Trim(UCase(line(1))) <> "[KW]" Then
+225:        '            WorkerMsg(tMsgID.Err, "Engine Power Unit '" & line(sTarget) & "' unknown! '[kW]' or '" & sKey.Normed & "' expected.", MsgSrc)
+226:        '        End If
+227:        '    End If
+229:        'End If
+231:        ''Zusatzkomponenten
+232:        'If bEmDef Then
+233:        '    For Each EmKV In sEmDrag
+235:        '        txt = line(EmKV.Value)
+237:        '        'Klammern entfernen
+238:        '        txt = txt.Replace("[", "")
+239:        '        txt = txt.Replace("]", "")
+241:        '        'Normierung und Unit festlegen
+242:        '        If txt.Contains("/") Then
+243:        '            Select Case UCase(Right(txt, txt.Length - txt.IndexOf("/") - 1))
+244:        '                Case "H"
+245:        '                    EmDragNormed(EmKV.Key) = False
+246:        '                Case "KWH"
+247:        '                    WorkerMsg(tMsgID.Err, "Unit '" & line(EmKV.Value) & "' is not supported in this file!", MsgSrc)
+248:        '                    GoTo lbEr
+249:        '                Case "H" & sKey.Normed
+250:        '                    EmDragNormed(EmKV.Key) = True
+251:        '            End Select
+252:        '        Else
+253:        '            EmDragNormed(EmKV.Key) = False
+254:        '        End If
+256:        '    Next
+257:        'End If
+260:        'Ab Zeile 4: Werte
+265:                'Zeile einlesen
+268:                'VECTO: M => Pe
+276:                'Falls PT1 nicht vorgegeben wird Defaultwert verwendet (siehe oben)
+296:                'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+309:        'Datei schließen
+315:        'ERROR-Label für sauberen Abbruch
+328:        'Datei öffnen
+348:            'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+353:        'Datei schließen
+371:        'Drehzahl normieren
+378:        'Leistung normieren
+385:        'Leistung normieren
+392:        'Pe-Target normieren
+399:        'Em ent-normieren
+415:        'Extrapolation für x < x(1)
+427:        'Extrapolation für x > x(imax)
+433:        'Interpolation
+444:        'Extrapolation für x < x(1)
+456:        'Extrapolation für x > x(imax)
+462:        'Interpolation
+466:        'Dynamische Volllast
+475:        'Extrapolation für x < x(1)
+487:        'Extrapolation für x > x(imax)
+493:        'Interpolation
+500:        'Extrapolation für x < x(1)
+512:        'Extrapolation für x > x(imax)
+518:        'Interpolation
+530:        'Extrapolation für x < x(1)
+542:        'Extrapolation für x > x(imax)
+548:        'Interpolation
+>>> cGEN.vb
+5:    'Private Const FormatVersion As Integer = 1
+6:    'Private FileVersion As Integer
+12:    'Modus
+133:        'Dim txt As String
+154:        ''*** Erste Zeile: Version
+155:        'line = file.ReadLine
+156:        'txt = Trim(UCase(line(0)))
+157:        'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then
+158:        '    ' "V" entfernen => Zahl bleibt übrig
+159:        '    txt = txt.Replace("V", "")
+160:        '    If Not IsNumeric(txt) Then
+161:        '        'Falls Version ungültig: Abbruch
+162:        '        GoTo lbEr
+163:        '    Else
+164:        '        'Version festgelegt
+165:        '        FileVersion = CInt(txt)
+166:        '    End If
+167:        'Else
+168:        '    file.Close()
+169:        '    Return ReadOldFormat()
+170:        'End If
+172:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+173:        'If FileVersion > FormatVersion Then
+174:        '    WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc)
+175:        '    GoTo lbEr
+176:        'End If
+178:        '**** GEN Datei einlesen ****
+180:        'Allgemein
+181:        'boPKWja = CBool(file.ReadLine(0))
+182:        'bodynkorja = CBool(file.ReadLine(0))
+183:        'ineklasse = CShort(file.ReadLine(0))
+184:        'inizykwael = CShort(file.ReadLine(0))
+186:        'line = file.ReadLine
+187:        'If UBound(line) < 2 Then
+188:        '    WorkerMsg(tMsgID.Err, "File Format invalid (" & sFilePath & ")!", MsgSrc)
+189:        '    GoTo lbEr
+190:        'End If
+192:        'Select Case CShort(line(0))
+193:        '    Case 0
+194:        '        VehMode = tVehMode.StandardMode
+195:        '    Case 1
+196:        '        VehMode = tVehMode.EngineOnly
+197:        '    Case 2
+198:        '        VehMode = tVehMode.HEV
+199:        '    Case Else '3    
+200:        '        VehMode = tVehMode.EV
+201:        'End Select
+203:        'EngAnalysis = CBool(line(1))
+204:        'CreateMap = CBool(line(2))
+205:        'ModeHorEV = (VehMode = tVehMode.HEV Or VehMode = tVehMode.EV)
+208:        'KF Erstellung
+209:        'line = file.ReadLine
+210:        'inPschrit = CShort(line(0))
+211:        'innschrit = CShort(line(1))
+213:        'line = file.ReadLine
+214:        'bKFcutFull = CBool(line(0))
+215:        'bKFcutDrag = CBool(line(1))
+216:        'bKFinsertDrag = CBool(line(2))
+217:        'bKFDragIntp = CBool(line(3))
+219:        'boMapSchaltja = CBool(file.ReadLine(0))
+221:        'iniMsek = CShort(file.ReadLine(0))
+223:        'boottoJa = CBool(file.ReadLine(0))
+225:        'bokaltst1 = CBool(file.ReadLine(0))
+227:        'sitkat1 = CSng(file.ReadLine(0))
+228:        'sitkw1 = CSng(file.ReadLine(0))
+229:        'sihsstart = CSng(file.ReadLine(0))
+251:        'stdynspez.Init(MyPath, file.ReadLine(0))
+253:        'Kaltstart
+254:        'stkatmap.Init(MyPath, file.ReadLine(0))
+255:        'stkwmap.Init(MyPath, file.ReadLine(0))
+256:        'stkatkurv.Init(MyPath, file.ReadLine(0))
+257:        'stkwkurv.Init(MyPath, file.ReadLine(0))
+258:        'stcooldown.Init(MyPath, file.ReadLine(0))
+259:        'sttumgebung.Init(MyPath, file.ReadLine(0))
+261:        'If file.EndOfFile Then GoTo lbClose
+263:        'HEV
+264:        'stBatfile.Init(MyPath, file.ReadLine(0))
+265:        'stEmospez.Init(MyPath, file.ReadLine(0))
+266:        'stEANfile.Init(MyPath, file.ReadLine(0))
+267:        'stGetspez.Init(MyPath, file.ReadLine(0))
+268:        'stSTEnam.Init(MyPath, file.ReadLine(0))
+269:        'stEKFnam.Init(MyPath, file.ReadLine(0))
+271:        'If file.EndOfFile Then GoTo lbClose
+273:        'EXS
+274:        'boEXSja = CBool(file.ReadLine(0))
+275:        'stPathExs.Init(MyPath, file.ReadLine(0))
+277:        'If file.EndOfFile Then GoTo lbClose
+279:        'boStartStop = CBool(file.ReadLine(0))
+280:        'siStStV = CSng(file.ReadLine(0))
+281:        'siStStT = CSng(file.ReadLine(0))
+283:        'boSOCnJa = CBool(file.ReadLine(0))
+284:        'siSOCstart = CSng(file.ReadLine(0))
+286:        'If file.EndOfFile Then GoTo lbClose
+288:        'GetrMod = CShort(file.ReadLine(0))
+290:        'If file.EndOfFile Then GoTo lbClose
+292:        'CoolantsimJa = CBool(file.ReadLine(0))
+293:        'stCoolantSimPath.Init(MyPath, file.ReadLine(0))
+295:        'If file.EndOfFile Then GoTo lbClose
+297:        'Einzelne Nebenverbraucher
+323:        'DesMaxJa = CBool(file.ReadLine(0))
+333:        'Schaltmodell-Verteilung
+357:        'ERROR-Label für sauberen Abbruch
+380:        '**** GEN Datei einlesen ****
+390:        'Alten Rechenmodus in neue Modus-Schalter umwandeln
+438:        'stCycleFile.Init(MyPath, file.ReadLine(0))
+509:        'Dim s As String
+514:        'fGEN.WriteLine("V" & FormatVersion)
+520:        'fGEN.WriteLine("c Heavy Duty (0) or Passenger Car (1)")
+521:        'fGEN.WriteLine(Math.Abs(CInt(boPKWja)))
+523:        'fGEN.WriteLine("c Transient emission correction (1/0)")
+524:        'fGEN.WriteLine(Math.Abs(CInt(bodynkorja)))
+526:        'fGEN.WriteLine("c Emission Class (EURO ..)")
+527:        'fGEN.WriteLine(ineklasse)
+529:        'fGEN.WriteLine("c Gear Shift Mode: NEDC (0), FTP (1), Model - MT (2)")
+530:        'fGEN.WriteLine(inizykwael)
+532:        'fGEN.WriteLine("c Calculation Mode, EngAnalysis, CreateMap")
+533:        'Select Case VehMode
+534:        '    Case tVehMode.StandardMode
+535:        '        s = "0"
+536:        '    Case tVehMode.EngineOnly
+537:        '        s = "1"
+538:        '    Case tVehMode.HEV
+539:        '        s = "2"
+540:        '    Case Else   'tVehMode.EV
+541:        '        s = "3"
+542:        'End Select
+543:        's &= "," & Math.Abs(CInt(EngAnalysis))
+544:        's &= "," & Math.Abs(CInt(CreateMap))
+545:        'fGEN.WriteLine(s)
+547:        'Kennfeld Erstellung------------------------------------------------------
+548:        'fGEN.WriteLine("c Settings for Emission Map Creation Mode:")
+549:        'fGEN.WriteLine("c Increment Pe, n:")
+550:        'fGEN.WriteLine(inPschrit & "," & innschrit)
+552:        'fGEN.WriteLine("c CutFull,CutDrag,InsertDrag,DragIntp:")
+553:        'fGEN.WriteLine(Math.Abs(CInt(bKFcutFull)) & "," & Math.Abs(CInt(bKFcutDrag)) & "," & Math.Abs(CInt(bKFinsertDrag)) & "," & Math.Abs(CInt(bKFDragIntp)))
+555:        'fGEN.WriteLine("c Include Gear Shifts (1/0, Standard = 1)")
+556:        'fGEN.WriteLine(Math.Abs(CInt(boMapSchaltja)))
+558:        'fGEN.WriteLine("c Averageing Period for Modal Values")
+559:        'fGEN.WriteLine(iniMsek)
+561:        'fGEN.WriteLine("c ICE Type (Otto = 1, Diesel = 0")
+562:        'fGEN.WriteLine(Math.Abs(CInt(boottoJa)))
+564:        'Kalt Start---------------------------------------------------------------
+565:        'fGEN.WriteLine("c Cold Start (1/0)")
+566:        'fGEN.WriteLine(Math.Abs(CInt(bokaltst1)))
+568:        'fGEN.WriteLine("c t cat start [°C]")
+569:        'fGEN.WriteLine(sitkat1)
+571:        'fGEN.WriteLine("c t coolant start [°C]")
+572:        'fGEN.WriteLine(sitkw1)
+574:        'fGEN.WriteLine("c time of start [h.sec]")
+575:        'fGEN.WriteLine(sihsstart)
+577:        'Dateien------------------------------------------------------------------
+593:        'fGEN.WriteLine("c ")
+594:        'fGEN.WriteLine("c File containing transient correction parameters (*.trs):")
+595:        'fGEN.WriteLine(stdynspez.PathOrDummy)
+597:        'Kalt Start
+598:        'fGEN.WriteLine("c ")
+599:        'fGEN.WriteLine("c File containing the catalyst map (*.maa):")
+600:        'fGEN.WriteLine(stkatmap.PathOrDummy)
+602:        'fGEN.WriteLine("c ")
+603:        'fGEN.WriteLine("c File containing the map of cooling water (*.mac):")
+604:        'fGEN.WriteLine(stkwmap.PathOrDummy)
+606:        'fGEN.WriteLine("c ")
+607:        'fGEN.WriteLine("c File containing the catalyst warm-up (*.wua):")
+608:        'fGEN.WriteLine(stkatkurv.PathOrDummy)
+610:        'fGEN.WriteLine("c ")
+611:        'fGEN.WriteLine("c File containing the engine coolant warm-up (*.wuc):")
+612:        'fGEN.WriteLine(stkwkurv.PathOrDummy)
+614:        'fGEN.WriteLine("c ")
+615:        'fGEN.WriteLine("c File containing the cooling parameters for catalyst and engine coolant (*.cdw):")
+616:        'fGEN.WriteLine(stcooldown.PathOrDummy)
+618:        'fGEN.WriteLine("c ")
+619:        'fGEN.WriteLine("c File containing the ambient parameters (*.atc)")
+620:        'fGEN.WriteLine(sttumgebung.PathOrDummy)
+622:        'HEV
+623:        'fGEN.WriteLine("c ")
+624:        'fGEN.WriteLine("c File containing battery specifications for HEV (*.bat)")
+625:        'fGEN.WriteLine(stBatfile.PathOrDummy)
+627:        'fGEN.WriteLine("c ")
+628:        'fGEN.WriteLine("c File containing specifications of the E-motor for HEV (*emo)")
+629:        'fGEN.WriteLine(stEmospez.PathOrDummy)
+631:        'fGEN.WriteLine("c ")
+632:        'fGEN.WriteLine("c File containing the pattern of E-motor on/off for HEV  (*ean)")
+633:        'fGEN.WriteLine(stEANfile.PathOrDummy)
+635:        'fGEN.WriteLine("c ")
+636:        'fGEN.WriteLine("c File containing the efficiency of additional gearbox for HEV (*get)")
+637:        'fGEN.WriteLine(stGetspez.PathOrDummy)
+639:        'fGEN.WriteLine("c ")
+640:        'fGEN.WriteLine("c File containing the control efficiency-File for HEV (*.ste)")
+641:        'fGEN.WriteLine(stSTEnam.PathOrDummy)
+643:        'fGEN.WriteLine("c ")
+644:        'fGEN.WriteLine("c File containing the efficiency-maps for HEV-strategy control (*.ekf)")
+645:        'fGEN.WriteLine(stEKFnam.PathOrDummy)
+647:        'EXS
+648:        'fGEN.WriteLine("c ")
+649:        'fGEN.WriteLine("c Exhaust System Simulation (1/0)")
+650:        'fGEN.WriteLine(Math.Abs(CInt(boEXSja)))
+652:        'fGEN.WriteLine("c Exhaust System Simulation Configuration File")
+653:        'fGEN.WriteLine(stPathExs.PathOrDummy)
+655:        'Start/Stop
+656:        'fGEN.WriteLine("c ICE Auto-Start/Stop (1/0) - Non HEV only")
+657:        'fGEN.WriteLine(Math.Abs(CInt(boStartStop)))
+658:        'fGEN.WriteLine("c Start/Stop Max Speed [km/h]")
+659:        'fGEN.WriteLine(siStStV)
+660:        'fGEN.WriteLine("c Start/Stop Min ICE-On Time [s]")
+661:        'fGEN.WriteLine(siStStT)
+663:        'SOC-Start Iteration
+664:        'fGEN.WriteLine("c SOC Start Iteration (1/0) - HEV only")
+665:        'fGEN.WriteLine(Math.Abs(CInt(boSOCnJa)))
+667:        ''SOC-Start
+668:        'fGEN.WriteLine("c SOC Start - (H)EV only")
+669:        'fGEN.WriteLine(siSOCstart)
+671:        ''Getriebe-Verluste-Modell
+672:        'fGEN.WriteLine("c Transmission Loss Model")
+673:        'fGEN.WriteLine(CStr(GetrMod))
+675:        'Coolantsim
+676:        'fGEN.WriteLine("c Coolant System Simulation (1/0)")
+677:        'fGEN.WriteLine(Math.Abs(CInt(CoolantsimJa)))
+678:        'fGEN.WriteLine("c Coolant System Simulation Configuration File")
+679:        'fGEN.WriteLine(stCoolantSimPath.PathOrDummy)
+687:        'a_DesMax
+689:        'fGEN.WriteLine(Math.Abs(CInt(DesMaxJa)))
+740:        'FileVersion = 0
+790:    'Liest Sub Input Files ein die keine eigene Klasse haben, etc.
+1327:        'Extrapolation für x < x(1)
+1339:        'Extrapolation für x > x(imax)
+1345:        'Interpolation
+1353:        'Extrapolation für x < x(1)
+1365:        'Extrapolation für x > x(imax)
+1371:        'Interpolation
+>>> cMAP.vb
+5:    'Private Const FormatVersion As Integer = 1
+6:    'Private FileVersion As Integer
+34:        'FileVersion = 0
+127:        'Dim txt As String
+137:        'Reset
+140:        'Abbruch wenn's Datei nicht gibt
+146:        'Datei öffnen
+154:        'Listen initialisieren (vor Version-Check damit ReadOldFormat funktioniert)
+163:        'Check ob MEP oder MAP
+164:        '...wird jetzt weiter unten gecheckt beim Einlesen.
+167:        ''*** Erste Zeile: Version
+168:        'line = file.ReadLine
+169:        'txt = Trim(UCase(line(0)))
+170:        'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then
+171:        '    ' "V" entfernen => Zahl bleibt übrig
+172:        '    txt = txt.Replace("V", "")
+173:        '    If Not IsNumeric(txt) Then
+174:        '        WorkerMsg(tMsgID.Err, "File Version invalid!", MsgSrc)
+175:        '        GoTo lbEr
+176:        '    Else
+177:        '        'Version festgelegt
+178:        '        FileVersion = CInt(txt)
+179:        '    End If
+180:        'Else
+181:        '    file.Close()
+182:        '    Return ReadOldFormat()
+183:        'End If
+185:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+186:        'If FileVersion > FormatVersion Then
+187:        '    WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc)
+188:        '    GoTo lbEr
+189:        'End If
+191:        ''Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+192:        'If UBound(line) > 0 Then
+193:        '    If Trim(line(1)) = "+" Then
+194:        '        SwitchOn = True
+195:        '        If MsgOutput Then WorkerMsg(tMsgID.Normal, "Advanced settings found.", MsgSrc)
+196:        '    End If
+197:        'End If
+200:        '*** Zweite Zeile: Namen/Identifizierung der Komponenten (Nur Em. Leistung, Drehzahl ist fix!)
+201:        'line = file.ReadLine
+203:        ''Spaltenanzahl checken
+204:        's1 = UBound(line)
+207:        ''Abbruch falls weniger als 3 Spalten
+208:        'If s1 < 2 Then GoTo lbEr
+210:        ' ''Check ob Leistung/Drehzahl vertauscht
+211:        ''If UCase(line(0)).Contains("PE") Then
+212:        ''    If MsgOutput Then WorkerMsg(tMsgID.Warn, "Expected Emission Map format: 1st column = Engine Speed, 2nd column = Engine Power (Header Check failed)", MsgSrc)
+213:        ''End If
+215:        ''Em-Komponenten initialisieren
+216:        'For s = 3 To s1
+218:        '    Em0 = New cEmComp
+219:        '    Em0.Col = s
+220:        '    Em0.Name = line(s)  'wird bei Default-Komponenten noch geändert
+221:        '    Em0.IDstring = Trim(UCase(line(s)))
+222:        '    Em0.MapCompID = fMapComp(Em0.Name)
+223:        '    Em0.NormID = tEmNorm.x  'wird ggf. weiter unten korrigiert!
+224:        '    'Default-Interpolator definiert in Em0 = New cEmComp
+225:        '    'Default Pe-Correction definiert in Em0 = New cEmComp
+227:        '    If EmComponents.ContainsKey(UCase(Em0.Name)) Then
+229:        '        'Abbruch falls schon definiert
+230:        '        WorkerMsg(tMsgID.Err, "Component '" & Em0.Name & "' already defined! Col. " & s + 1, MsgSrc)
+231:        '        GoTo lbEr
+233:        '    Else
+235:        '        'Dictionary füllen....
+236:        '        If Em0.MapCompID = tMapComp.Undefined Then
+238:        '            'ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+239:        '            If Em0.IDstring.Length > 1 Then
+240:        '                If Left(Em0.IDstring, 1) = "<" And Right(Em0.IDstring, 1) = ">" Then
+241:        '                    If MsgOutput Then WorkerMsg(tMsgID.Err, "'" & Em0.Name & "' is no valid Default Map Component!", MsgSrc)
+242:        '                End If
+243:        '            End If
+245:        '            'Custom Em-Komponenten Dictionary:
+246:        '            EmComponents.Add(Em0.IDstring, Em0)
+247:        '            MyEmList.Add(Em0.IDstring)
+249:        '        Else
+251:        '            '*** Default Em-Komponenten ***
+253:        '            'Default-Interpolator
+254:        '            Em0.IntpolV2 = fDefIntpV2(Em0.MapCompID)
+256:        '            'Default Pe-Correction
+257:        '            Em0.PeCorMode = fDefPeCorMode(Em0.MapCompID)
+259:        '            'Default-Name
+260:        '            Em0.Name = fMapCompName(Em0.MapCompID)
+262:        '            'TC-Komponenten werden nicht ausgegeben
+263:        '            If fMapCompIsTC(Em0.MapCompID) Then
+264:        '                TransMap = True
+265:        '                Em0.WriteOutput = False
+266:        '            End If
+268:        '            'Custom Em-Komponenten Dictionary:
+269:        '            EmComponents.Add(Em0.IDstring, Em0)
+270:        '            MyEmList.Add(Em0.IDstring)
+272:        '            'Eintrag in Referenz-Dictionary
+273:        '            EmDefRef.Add(Em0.MapCompID, Em0)
+275:        '        End If
+276:        '    End If
+277:        'Next
+279:        'VECTO: Spalte 3 immer Verbrauch
+289:            'Abbruch falls schon definiert
+302:        '*** Dritte Zeile: Normierung/Einheit
+303:        'line = file.ReadLine
+305:        ''Abbruch falls weniger Spalten als in zweiter Zeile
+306:        'If UBound(line) < s1 Then GoTo lbEr
+308:        ''Normierung/Einheit einlesen
+309:        'For Each EmKV In EmComponents
+311:        '    'EM-Komp Referenz
+312:        '    Em0 = EmKV.Value
+314:        '    'Unit in String für weitere Checks speichern
+315:        '    txt = Trim(line(Em0.Col))
+317:        '    'Klammern entfernen
+318:        '    txt = txt.Replace("[", "")
+319:        '    txt = txt.Replace("]", "")
+321:        '    'Normierung und Unit festlegen
+322:        '    If txt.Contains("/") Then
+323:        '        Select Case UCase(Right(txt, txt.Length - txt.IndexOf("/") - 1))
+325:        '            Case "H"
+326:        '                Em0.NormID = tEmNorm.x_h
+327:        '                Em0.Unit = "[" & Left(txt, txt.IndexOf("/")) & "/h]"
+329:        '            Case "KWH"
+330:        '                Em0.NormID = tEmNorm.x_kWh
+331:        '                Em0.Unit = "[" & Left(txt, txt.IndexOf("/")) & "/h]"
+333:        '            Case "H" & sKey.Normed
+334:        '                Em0.NormID = tEmNorm.x_hPnenn
+335:        '                Em0.Unit = "[" & Left(txt, txt.IndexOf("/")) & "/h]"
+337:        '            Case Else
+338:        '                Em0.NormID = tEmNorm.x
+339:        '                Em0.Unit = "[" & txt & "]"
+341:        '        End Select
+342:        '    Else
+343:        '        Em0.NormID = tEmNorm.x
+344:        '        Em0.Unit = "[" & txt & "]"
+345:        '    End If
+347:        'Next
+348:        'nNormed = Trim(UCase(line(0))) = sKey.Normed
+349:        'PeNormed = Trim(UCase(line(1))) = sKey.Normed
+353:        ''Check ob n/Pe Einheiten OK:
+354:        'If Not nNormed Then
+355:        '    Select Case Trim(UCase(line(0)))
+356:        '        Case "[U/MIN]", "RPM", "[1/MIN]", "[MIN^-1]"
+357:        '            'Alles okay
+358:        '        Case Else
+359:        '            If MsgOutput Then WorkerMsg(tMsgID.Err, "Engine Speed Unit '" & line(0) & "' unknown! '[U/min]' expected.", MsgSrc)
+360:        '    End Select
+361:        'Else
+362:        '    If MsgOutput Then WorkerMsg(tMsgID.Err, "Engine Speed Unit '" & line(0) & "' unknown! '[U/min]' expected.", MsgSrc)
+363:        'End If
+365:        'If Not PeNormed Then
+366:        '    If Trim(UCase(line(1))) <> "[NM]" Then
+367:        '        If MsgOutput Then WorkerMsg(tMsgID.Err, "Engine Torque Unit '" & line(1) & "' unknown! '[Nm]' expected.", MsgSrc)
+368:        '    End If
+369:        'Else
+370:        '    If MsgOutput Then WorkerMsg(tMsgID.Err, "Engine Torque Unit '" & line(1) & "' unknown! '[Nm]' expected.", MsgSrc)
+371:        'End If
+375:        '*** Zeile 4,5: (optional, wenn oben "+"): Einstellungen für Pe-Cor (altes Pfak)
+376:        '   Falls nicht "+" werden Default Interpolatoren verwendet (s.o.)
+379:            'Zeile 4 einlesen
+382:            'Schleife über Em-Komponenten
+408:            'Zeile 5 einlesen
+411:            'Schleife über Em-Komponenten
+436:        'Ab Zeile 4 (bzw. 6): Werte
+440:                'Zeile einlesen
+443:                'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+446:                'Drehzahl
+451:                'Leistung
+452:                'If Trim(UCase(line(1))) = sKey.MAP.Drag Then
+453:                '    If PeNormed Then
+454:                '        LPe.Add(FLD.Pdrag(Lnn(iMapDim)) / VEH.Pnenn)
+455:                '    Else
+456:                '        LPe.Add(FLD.Pdrag(Lnn(iMapDim)))
+457:                '    End If
+458:                'Else
+460:                'End If
+462:                'Emissionen
+474:        'Shep-Init
+477:        'Datei schließen
+487:        'ERROR-Label für sauberen Abbruch
+506:        'Datei öffnen
+513:        'Alte Kennfelder haben immer TC-Faktoren (sind halt evtl. Null)
+776:        'Werte
+778:            'Zeile einlesen
+781:            'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+784:            'Drehzahl
+787:            'Leistung
+792:            'Emissionen
+803:        'Shep-Init
+806:        'Datei schließen
+821:        'Abbruch falls Em-Komponente nicht in MAP
+828:        'Abbruch falls TC-Faktoren für die Komponente schon definiert
+859:        'Drehzahl normieren
+866:        ' "anders" normierte Drehzahl berechnen
+871:        'Leistung normieren
+878:        'Emissionen entnormieren
+879:        '   ACHTUNG: Selbst wenn x_kWh bzw. x_hPnenn in x_h umgewandelt werden muss Normed gleich bleiben weil sonst die DynKor nicht stimmt!
+891:                    'Werte sind bereits absolut angegeben
+892:                    'Unterscheidung in [x] und [x/h] derzeit nicht verwendet/unterstützt
+896:        'Check ob Drehzahl/Leistung vertauscht
+926:        'FC Delauney
+958:    'Kennfeld-Erstellung
+1016:        'Reset
+1025:        '***************** Initialisiere Em-Komponenten *******************
+1052:        'FileVersion = FormatVersion
+1067:            'PeCorMode: Falls nicht in MES/NPI vorgegeben gilt bei Nicht-Default-Em was in cEmComp.New() eingestellt ist
+1078:                    'Falls TC angegeben dann Abbruch
+1084:                    'Interpolator auswählen
+1087:                    'Eintrag in Referenz-Dictionary (Es wird nicht überprüft ob Em-Comp. doppelt vorkommt weil das schon in DRI.ReadFile passiert)
+1097:            'Infos ausgeben
+1102:        'Dynamikparameter und Extrapol kommen noch dazu
+1247:        '************* Mittelwert-Dictionary initialisieren ***************
+1271:        '********************* Mittelwerte berechnen **********************
+1273:        'Haupt-Schleife
+1276:            'Listen erstellen
+1291:            'Schleife über Messwerte
+1296:                    'Bereich unter iMsek mit Messwert belegen
+1310:                    'Bereich über iMsek mit Mittelwerten der Messwerte belegen
+1331:            'Keine Mittelwertbildung
+1347:        'EmCheck: False = Wert noch nicht verwendet, True = Wert wurde bereits in Kennfeld verwurschtet
+1353:        '*************************** Rasterung ****************************
+1418:        'Schlepp hinzufügen mit halber nn-Schrittweite. Wird für Pfak benötigt. Falls GEN.KFinsertDrag deaktiviert wird sie später wieder gelöscht.
+1428:        'Leerlaufpunkt hinzufügen
+1435:        '**************** NrUsed Erstellung / Null setzen *****************
+1442:        '**************** Messwerte in Raster reinrechnen *****************
+1444:        'Basis Schrittweite zwischenspeichern
+1448:        'Schleife über Rasterpunkte (i)
+1451:            'Summen/Anzahl/Flags zurücksetzen
+1456:            'Schlepp-Leistung
+1459:            'Schleife bis genug Werte im Radius gefunden
+1462:                'Zähler/Summen zurück setzen
+1469:                'Schleife über Messwerte    (j)
+1472:                    'Falls innerhalb von Radius...
+1475:                        'Anz + 1
+1478:                        'Schleife über alle Em-Komp.
+1481:                            'Summe +
+1484:                            'Min/Max belegen (für Log-Ausgabe)
+1495:                        'Interpolierte Leistung aufsummieren (wird dann durch Anz dividiert)
+1498:                        'Zählen wieviel Messwerte für Rasterpunkt verwendet werden (Log-Ausgabe)
+1509:                'Falls keine Messwerte im Radius (Anz=0) dann Radius vergrößern und Extra-Flag setzen
+1518:            'NrUsed belegen
+1523:            'Interpolierte Leistung = Summe / Anz
+1526:            'Pfak berechnen:
+1527:            '   Falls oberhalb Pschlepp dann Pfak laut Formel oder 1 falls Abstand zw. Pe-Interpol und Pschlepp zu gering
+1528:            '   Unterhalb von Pschlepp Pfak=0 => Em-Wert=Null
+1539:            'Extrapol-Flag in Extrapol-Spalte (1/0) übernehmen
+1546:            'Für Log-Ausgabe
+1550:            'Schleife über Em-Comp (innerhalb Rasterpunkt Schleife)
+1553:                'Falls Option 'Schlepp-Em aus .FLD' belegen und Rasterpunkt-Leistung <= Schleppleistung
+1556:                    'Falls Schlepp-Em in .FLD vorhanden dann nehmen sonst mit Null belegen
+1565:                    'Em-Belegung ohne Pfak (=> Pfak wird später gemacht)
+1570:                'Für Log-Ausgabe
+1576:            'TC-Faktoren ohne Pfak übernehmen
+1584:        '*****************************  Pfak ******************************
+1586:        '!!! WICHTIG !!!
+1587:        'Schleife geht über alle Rasterpunkt (auch über die Pe <= PeSchlepp bzw. PeIntpol nahe an Pschlepp).
+1588:        '   Das ist OK weil Pfak dort sowieso mit Eins beleget.
+1590:        'Schleife über Em-Comp
+1593:            'Falls keine Create Map Einstellungen (in .NPI/.MES) oder Pfak explizit aktiviert => Pfak verwenden
+1596:                'Schleife über Rasterpunkte (i)
+1601:                        'Altes Pfak mit Extrapolation von Null weg
+1606:                        'Schlepp-Emission raus suchen
+1607:                        '   Schlepp-Em aus nächstgelegenen Rasterpunkt nehmen. Das geht weil Schleppkurve 
+1608:                        '   immer ins Map kommt (auch wenn sie dann später raus gelöscht wird) !!
+1609:                        '   Option 'Schlepp-Em aus .FLD' spielt keine Rolle weil das nur die Belegungs-Methode der Schleppkurve betrifft (s.o.) 
+1623:                    'Pfak anwenden
+1633:        '******************* Normieren (Wert und Unit) ********************
+1636:            'Falls Vorgabe in MES/NPI-Datei dann verwenden
+1641:                    'Werte normieren
+1652:                'Sonst Standard-Normierung verwenden
+1657:                        'Werte normieren
+1673:        '****************** EmComponents zusammenfassen *******************
+1688:        '*********** Schleppkurve wieder raus nehmen (optional) ***********
+1691:            'Schleife über Rasterpunkte (i). Keine For-Schleife weil iMapDim reduziert wird
+1713:        '************************** Ausgabe Map '**************************
+1726:        'file.WriteLine("V" & FormatVersion)
+1728:        'Header
+1732:            'ACHTUNG: Nicht Name sondern sKey !!!
+1740:        'Unit
+1751:        'Werte
+1765:        '********************** Ausgabe Zusatzinfo '***********************
+1794:        'Header (MAP)
+1804:        'Werte
+1831:        'Header (MES/NPI)
+1857:        'Shep-Init
+1864:    'Default Shepard wie in intpshep()
+1873:        'Interpolator V1
+1879:        'Interpolator V2
+1905:            '********************************  V1 & V2  **********************************
+1918:            '***********************************  V1  ************************************
+1924:            'Abstand berechnen und korrigieren.
+1928:                    'Um Nullleistung werden Kennfeldpunkte um Pe=0 hoeher gewichtet und Drehzahlabstand geringer,
+1929:                    ' da Interpolation aus Punkten mit hoeherer last dort schlecht passt:
+1935:                    'Quadrat des Abstandes:             
+1938:                    'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+1945:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+1962:            'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+1974:            'Berechnung von wisum
+1980:            'Interpolierte Leistung berechnen
+1986:            '***********************************  V2  ************************************
+1992:            'Abstand berechnen und korrigieren.
+1995:                'Quadrat des Abstandes:                 
+2000:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+2017:            'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+2029:            'Berechnung von wisumV2
+2035:            'Interpolierte Leistung berechnen
+2112:        'Berechnet Emission an Schleppkurve
+2129:            'Es wird an Schleppkurve gesucht
+2131:            'n0 ist schon in Init definiert worden
+2133:            'Abstand berechnen und korrigieren.
+2136:                'Quadrat des Abstandes:
+2139:                'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+2146:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+2163:            'Abstand-Array erstellen
+2173:            'Berechnung von wisum
+2179:            'Emission berechnen
+>>> cTRS.vb
+29:        'Reset
+32:        'Abbruch wenn's Datei nicht gibt
+38:        'Datei öffnen
+47:        '*** Erste Zeile: Version
+51:            ' "V" entfernen => Zahl bleibt übrig
+54:                'Falls Version ungültig: Abbruch
+58:                'Version festgelegt
+62:            'Falls keine Versionsangabe: Altes Format
+67:        'Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+79:        '*** Zweite Zeile: Check welche TC-Faktoren in welcher Spalte stehen (ab Spalte 1!!)
+83:        'Abbruch falls weniger als 2 Spalen:
+91:            'Abbruch wenn unbekannter TC-Faktor
+96:            'Zu Dict hinzufügen
+101:        '*** Ab Zeile 3: TC-Faktoren für die einzelnen Em-Komponeten 
+102:        '   l ist nur für Fehlerausgabe
+163:        'Datei öffnen
+207:            'Abbruch falls weniger als 11 Spalen:
+>>> cVEH.vb
+11:    'Private siDelta As Single
+175:        'siI_mot = CSng(file.ReadLine(0))
+177:        'siI_Getriebe = CSng(file.ReadLine(0))
+178:        'siPaux0 = CSng(file.ReadLine(0))
+179:        'siPnenn = CSng(file.ReadLine(0))
+180:        'sinNenn = CSng(file.ReadLine(0))
+181:        'sinLeerl = CSng(file.ReadLine(0))
+182:        'file.ReadLine()     'Früher: Getr-Verl Kennfeld
+183:        'siFr0 = CSng(file.ReadLine(0))
+184:        'file.ReadLine()     'Früher: Getr-Verl Kennfeld verwenden Ja/Nein
+185:        'sifGetr = CSng(file.ReadLine(0))
+186:        'Achs-Ãœbersetzung-TransLoss Parameter
+187:        'line = file.ReadLine
+188:        'siGetrI(0) = CSng(line(0))
+189:        'If UBound(line) > 0 Then sGetrMaps(0).Init(MyPath, line(1))
+192:        'iganganz = 0
+193:        'For i = 1 To 16
+194:        '    line = file.ReadLine
+195:        '    siGetrI(i) = CSng(line(0))
+196:        '    'Falls keine GetrModell-Parameter vorhanden Dummy-Belegung durch SetDefault
+197:        '    If UBound(line) > 0 Then sGetrMaps(i).Init(MyPath, line(1))
+198:        '    If Igetr(i) > 0.0001 Then iganganz = i
+199:        'Next
+200:        'sihinauf = CSng(file.ReadLine(0))
+201:        'sihinunter = CSng(file.ReadLine(0))
+202:        'silhinauf = CSng(file.ReadLine(0))
+203:        'silhinunter = CSng(file.ReadLine(0))
+204:        'sipspar = CSng(file.ReadLine(0))
+205:        'sipmodell = CSng(file.ReadLine(0))
+207:        ''Schaltmodell-Verteilung
+208:        'If (sipspar > 1) Then
+209:        '    sipspar = 1
+210:        'ElseIf (sipspar < 0) Then
+211:        '    sipspar = 0
+212:        'End If
+213:        'If (sipmodell > 1) Then
+214:        '    sipmodell = 1
+215:        'ElseIf (sipmodell < 0) Then
+216:        '    sipmodell = 0
+217:        'End If
+218:        'If ((sipspar + sipmodell) > 1.0) Then sipmodell = 1.0 - sipspar
+220:        'Update 07.08.2012 (CO2 Demo)
+221:        'Einzelne Nebenverbraucher
+222:        'Do While Not file.EndOfFile
+224:        '    line = file.ReadLine
+226:        '    If line(0) = sKey.Break Then Exit Do
+228:        '    AuxID = UCase(Trim(line(0)))
+230:        '    If AuxPaths.ContainsKey(AuxID) Then
+231:        '        WorkerMsg(tMsgID.Err, "Multiple definitions of the same auxiliary type (" & line(0) & ")!", MsgSrc)
+232:        '        file.Close()
+233:        '        Return False
+234:        '    End If
+236:        '    AuxEntry = New cAuxEntry
+238:        '    AuxEntry.Type = line(1)
+239:        '    AuxEntry.Path.Init(MyPath, line(2))
+241:        '    AuxPaths.Add(AuxID, AuxEntry)
+243:        '    AuxDef = True
+245:        'Loop
+249:        'Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo)
+250:        'Try
+251:        '    TracIntrSi = CSng(file.ReadLine(0))
+252:        'Catch ex As Exception
+253:        '    WorkerMsg(tMsgID.Err, ex.Message, MsgSrc)
+254:        '    file.Close()
+255:        '    Return False
+256:        'End Try
+260:        'Cd Modus / Input Datei - Update 14.08.2012 (CO2 Demo)
+273:        'Retarder - Update 02.10.2012 (CO2 Demo)
+284:        'Axle configuration - Update 16.10.2012
+316:        '************************ Ende Einlesen ****************************
+353:        'file.WriteLine("c Engine rotational inertia [kg*m^2]")
+354:        'file.WriteLine(CStr(siI_mot))
+357:        'file.WriteLine("c Gearbox rotational inertia [kg*m^2]")
+358:        'file.WriteLine(CStr(siI_Getriebe))
+359:        'file.WriteLine("c Auxiliaries base power demand (normalized) [-]")
+360:        'file.WriteLine(CStr(siPaux0))
+361:        'file.WriteLine("c Engine rated power [kW]")
+362:        'file.WriteLine(CStr(siPnenn))
+363:        'file.WriteLine("c Engine rated speed [rpm]")
+364:        'file.WriteLine(CStr(sinNenn))
+365:        'file.WriteLine("c Engine idling speed [rpm]")
+366:        'file.WriteLine(CStr(sinLeerl))
+367:        'file.WriteLine("c Transmission loss factor")
+368:        'file.WriteLine(CStr(sifGetr))
+369:        'file.WriteLine("c Transmission")
+370:        'file.WriteLine("c Axle ratio [-], path to efficiency map file (optional)")
+371:        'file.WriteLine(CStr(siGetrI(0)), sGetrMaps(0).PathOrDummy)
+374:        'file.WriteLine("c Transmission gears: Ratio [-], path to efficiency map file (optional)")
+375:        'For i = 1 To 16
+376:        '    file.WriteLine("c Gear " & i)
+377:        '    file.WriteLine(CStr(siGetrI(i)), sGetrMaps(i).PathOrDummy)
+378:        'Next
+379:        'file.WriteLine("c Gear shift behaviour:")
+380:        'file.WriteLine("c Gearshift model (Version fast driver)")
+381:        'file.WriteLine("c shift up at ratio rpm/rated rpm in actual gear greater than")
+382:        'file.WriteLine(CStr(sihinauf))
+383:        'file.WriteLine("c shift down when rpm/rated rpm in lower gear is higher than")
+384:        'file.WriteLine(CStr(sihinunter))
+385:        'file.WriteLine("c Gearshift model (Version economic driver)")
+386:        'file.WriteLine("c shift up at ratio rpm/rated rpm in higher gear greater than")
+387:        'file.WriteLine(CStr(silhinauf))
+388:        'file.WriteLine("c Shift down when ratio rpm/rated rpm in actual gear is lower than")
+389:        'file.WriteLine(CStr(silhinunter))
+390:        'file.WriteLine("c Share of version economic driver (0 to 1)")
+391:        'file.WriteLine(CStr(sipspar))
+392:        'file.WriteLine("c Share of version mixed model (0 to 1)")
+393:        'file.WriteLine(CStr(sipmodell))
+395:        'file.WriteLine("c Auxiliaries")
+396:        'For Each AuxEntryKV In AuxPaths
+397:        '    file.WriteLine(Trim(UCase(AuxEntryKV.Key)) & "," & AuxEntryKV.Value.Type & "," & AuxEntryKV.Value.Path.PathOrDummy)
+398:        'Next
+399:        'file.WriteLine(sKey.Break)
+401:        'Zugkraftunterbrechung (Update 09.08.2012 - CO2 Demo)
+402:        'file.WriteLine("c Traction Interruption")
+403:        'file.WriteLine(CStr(TracIntrSi))
+405:        'Cd Modus / Input Datei (Update 14.08.2012 - CO2 Demo)
+409:        'Retarder (Update 02.10.2012 - CO2 Demo)
+417:        'Axle configuration - Update 16.10.2012
+451:        'Fehlermeldung innerhalb AuxInit
+454:        'Cd-Init
+457:        'Transmission Loss Maps
+465:        'Retarder
+468:        'Fr0
+492:        'Dim n_norm As Double
+493:        'Dim Pe_norm As Double
+531:                'Getriebe-Nenndrehzahl
+532:                'n_norm = CSng(file.ReadLine(0))
+534:                'Getriebe-Nennleistung
+535:                'Pe_norm = CSng(file.ReadLine(0))
+537:                'Wenn nix angegeben: Motor-Nennleistung und Nenndrehzahl zur Normierung
+538:                'If n_norm < 0.0001 Then
+539:                '    n_norm = sinNenn
+540:                '    Pe_norm = siPnenn
+541:                'End If
+551:                        'PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn
+552:                        'PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm)
+553:                        'VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn
+619:                'Interpolieren mit Original Werten
+624:                'Falls Fehler: Extrapolation versuchen
+626:                'Suche nach nächstgelegenen Kennfeldpunkt
+640:                'Wirkungsgrad
+644:                        'Antrieb => Antrieb
+651:                        'Schlepp => Antrieb: ERROR!
+661:                        'Antrieb => Schlepp: ERROR!
+668:                        'Schlepp => Schlepp
+677:                'Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+720:                'Interpolieren mit Original Werten
+725:                'Falls Fehler: Extrapolation versuchen
+727:                'Suche nach nächstgelegenen Kennfeldpunkt
+741:                'Wirkungsgrad
+745:                        'Antrieb => Antrieb
+750:                        'Schlepp => Antrieb: ERROR!
+760:                        'Antrieb => Schlepp: ERROR!
+767:                        'Schlepp => Schlepp
+774:                'Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+838:                'Meldung in Readfile()
+934:        'Falls Vair-Vorgabe in DRI aber nicht CdType= CdOfBeta dann Warnung
+946:        'Falls konstanter Cd-Wert dann is nix zu tun
+949:        'Inputdatei einlesen
+996:        'Extrapolation für x < x(1)
+1014:        'Extrapolation für x > x(imax)
+1024:        'Interpolation
+1042:        'Inputdatei einlesen
+1104:        'Extrapolation für x < x(1)
+1116:        'Extrapolation für x > x(imax)
+1120:        'Interpolation
+>>> cBatModel.vb
+21:    'Aktuelle Daten (d.h. zum aktuellen (zuletzt berechneten) Zeitschritt)
+47:        'TODO...
+55:    'Maximal zulässige Leistung zum Antreiben (Batterie entladen) [kW]    Vorzeichen positiv (PHEM Standard)
+62:    'Maximal zulässige Leistung zum Generieren/Rekuperiren (Batterie laden) [kW]    Vorzeichen negativ (PHEM Standard)
+72:    '--------------------------------- ~Batteriemodell Renhart~ ---------------------------------
+74:    'Methode zur Initialisierung - wird einmal aufgerufen
+82:        'Abbruch wenn's Datei nicht gibt
+91:        'Einlesen der Parameter:
+132:        ' Berechnung der Batteriespannung bei TempBat und SOC(0), Entladekurve
+138:        ' Berechnung der Batteriespannung bei TempBat und SOC(0), Ladekurve
+148:    'Methode zur Berechnung der zulässigen Leistung - sekündlicher Aufruf
+168:        'PmaxEntl = -SOC_Kap * 3600 * (SOC(jz - 1) - SOC_MIN)
+169:        'PmaxLad = SOC_Kap * 3600 * (SOC_MAX - SOC(jz - 1))
+174:    'Methode zur Berechnung der Batterieveluste und SOC für geg. Leistung - sekündlicher Aufruf
+190:                ' MsgBox("negativ" + Str(Perf))
+193:                'MsgBox("positiv" + Str(Perf))
+196:                'MsgBox(Str(jz) + ": Betrag von " + Str(Perf) + " ist kleiner gleich " + Str(epsilon))
+201:        'Input:
+202:        '   Perf ...geforderte Leistung. Bedingung: PgMAX < Perf < PaMAX [kW]
+203:        '   alle Paramer die in Bat_Init bestimmt/eingelesen wurden
+204:        '   jz ...Aktueller Zeitschritt
+205:        '   Alle Arrays von Zeitschritt 1 bis jz-1
+207:        'Output:
+208:        '   SOC(jz)
+209:        '   Ubat(jz)
+210:        '   Ibat(jz)
+211:        '   PbatV(jz)
+213:        '-------------TEST-------------
+214:        'PbatV(jz) = 0.2 * Math.Abs(Perf)
+215:        'SOC(jz) = SOC(jz - 1) + Perf / 5000
+216:        'Ubat(jz) = (SOC(jz) - SOC_MIN) / (SOC_MAX - SOC_MIN) * 80 + 120
+217:        'Ibat(jz) = Perf / Ubat(jz)
+218:        '-------------TEST-------------
+225:    'Übergibt PeBat für geg. PiBat (Vorzeichen nach PHEM)
+247:    '----------------------------------------- PRIVATE ------------------------------------------
+250:    'Batterie entladen
+256:        'Temperaturfunktion
+259:        'Ri bestimmen abhängig von Temperatur
+262:        'Spannung bestimmen aus SOC und Spannungskurve
+265:        'Strom berechnen
+268:        'Batterieverluste
+271:        'Batterietemperatur
+277:        'SOC berechnen
+280:        'Korrektur für den aktuellen Zeitschritt
+287:    'Batterie laden
+294:        'Temperaturfunktion
+297:        'Ri bestimmen abhängig von Temperatur
+300:        'Spannung bestimmen aus SOC und Spannungskurve
+303:        'Strom berechnen
+306:        'Batterieverluste
+309:        'Batterietemperatur
+315:        'SOC berechnen
+318:        'Korrektur für den aktuellen Zeitschritt
+325:    'Batterie nix tun
+327:        'Dim SocProz As Single   ' lokal, SOC in Prozent
+328:        'Dim FunkTemp As Single  ' Temp-Funktion für Ri(Temp)
+329:        'Dim U0_L As Single      ' Ubatt(SOC(T), Ibatt=0), Entladekurve
+330:        'Dim Ri_T As Single      ' Ri bei Temperatur T, lokal
+336:        ' ALT: Ubat(jz) = Ubat(jz - 1)
+340:    'Ãœbergibt PeBat beim Laden mit PEmot (Vorzeichen nach Renhart)
+362:    'Ãœbergibt PeBat beim Entladen mit PEmot (Vorzeichen nach Renhart)
+>>> cMOD.vb
+19:    'Leistungen
+36:    'Fahrzeug
+192:        'Zykluslänge definieren (Um 1s kürzer als Original weil Zwischensekunden)
+195:        'Hier wird der eigentliche Zyklus eingelesen:
+198:        'Drehzahl-Vorgabe
+206:            'Drehzahl
+211:            'Winkelbeschleunigung
+218:        'Em-Komponenten mitteln (Zwischensekunden) für KF-Erstellung oder Eng-Analysis
+227:        'EXS Vorgaben mitteln
+238:        'Aux Vorgaben mitteln und Aux-Listen falls Aux in Dri und Veh vorhanden
+258:        'Zykluslänge definieren: Gleiche Länge wie Zyklus (nicht reduziert weil keine "Zwischensekunden")
+261:        'Hier wird der eigentliche Zyklus eingelesen:
+264:        'Drehzahl-Vorgabe
+272:            'Drehzahl
+277:            'Winkelbeschleunigung
+308:        'Dim TC0 As List(Of Single)
+315:        '*********** Initialisierung / Datei öffnen **************
+343:        '*********** Settings **************
+353:        '********** Key-Listen ************
+370:        '*** ID-Zeile (Nur ADVANCE)
+385:        '*** Header & Units ****************************************************************************
+421:            'Auxiliaries
+431:        'ADVANCE-spezifisch
+479:        'Berechnete Dynamikparameter (Diff zu Kennfeld)
+480:        'If TC.Calculated Then
+481:        '    For Each TcKey In TcList
+482:        '        s.Append(Sepp & fMapCompName(TcKey))
+483:        '        sU.Append(Sepp & "-")
+484:        '    Next
+485:        'End If
+488:        'In Datei schreiben
+489:        '   Header
+491:        '   Units
+497:        '*** Werte *************************************************************************************
+505:                'Zeit
+510:                    'Strecke
+514:                    'Ist-Geschw.
+517:                    'Soll-Geschw.
+520:                    'Beschl.
+523:                    'Steigung
+532:                        'Drehzahl
+535:                        'Leistung 
+538:                        'Drehzahl normiert
+541:                        'Leistung normiert
+546:                    'Drehzahl in U/min
+549:                    'EM-Leistung in kW
+552:                    'Effektive Batterieleistung
+555:                    'Innere Batterieleistung
+558:                    'Batteriespannung
+561:                    'Batteriestrom
+564:                    'SOC
+569:                    'Drehzahl
+572:                    'Leistung 
+575:                    'Drehzahl normiert
+578:                    'Leistung normiert
+581:                    'Volllast und Schlepp
+592:                    'Leistung an Kupplung
+600:                    'Gang
+603:                    'Getriebeverluste
+606:                    'Diff-Verluste
+609:                    'Retarder-Verluste
+612:                    'PaEng
+615:                    'PaGB
+618:                    'Pa Veh
+621:                    'Roll..
+624:                    'Luft..
+627:                    'Steigung..
+630:                    'Aux..
+633:                    'Radleistung
+636:                    'Bremse
+639:                    'Auxiliaries
+646:                'ADVANCE-spezifisch
+649:                    'X
+652:                    'Y
+655:                    'StrId
+662:                    'Final-Emissionen (Tailpipe)
+680:                            'Roh-Emissionen
+683:                            'TC-Emissionen
+686:                            'AT-Emissionen (EXS)
+694:                'Berechnete Dynamikparameter (Diff zu Kennfeld)
+695:                'If TC.Calculated Then
+696:                '    For Each TcKey In TcList
+697:                '        TC0 = MODdata.TC.TCcomponents(TcKey)
+698:                '        s.Append(Sepp & TC0(t))
+699:                '    Next
+700:                'End If
+702:                'In Datei schreiben
+716:    'Errors/Warnings die sekündlich auftreten können
+731:        'Reset-Hierarchie:
+732:        ' ResetAll
+733:        '   DesMaxExtr
+734:        '   -GeschRedReset
+735:        '       CdExtrapol        
+736:        '       -PxReset
+737:        '           TrLossMapExtr 
+738:        '           AuxMapExtr 
+739:        '           AuxNegative
+740:        '           FLDextrapol
+742:        'Kompletter Reset (am Beginn jedes Sekundenschritts)
+748:        'Reset von Errors nach Geschw.-Reduktion (innerhalb Iteration)
+755:        'Reset von Errors die mit der Leistungsberechnung zu tun haben (nach Schaltmodell durchzuführen)
+763:        'Errors ausgeben
+>>> cPower.vb
+11:    'Settings
+21:    'Sekündliche Daten
+33:    'Zugkraftunterbrechung
+87:    'Rekuperation
+88:    '   Projekt HERO - BMW Mini Hybrid
+89:    '   Standard Mini One D Radstand 2467 mm
+92:    'Annahme für Schwerpunkthöhe
+93:    '   nach http://www.colliseum.net/wiki/Schwerpunkth%C3%B6he
+94:    '   X = 0.2 * m / 1000 = h/R
+95:    '       mit R = 2.467 [m] und m = 1335 [kg]
+174:        'BAT
+177:        'STE
+181:        'EMO
+189:    'Bat einlesen
+196:    'Maximale effektive EM-Leistung beim Antreiben abhängig von Überlast und Batteriezustand
+201:        'Basis: Volllastkurve
+204:        'Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+207:        '=> PeFLD = maximale EM-Leistung nach FLD und ÃœL
+209:        'PeMax aus PeBatMax berechnen
+212:        '=> PeBAT = maximale EM-Leistung nach Batterie
+214:        'Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+219:    'Maximale effektive EM-Leistung beim Laden abhängig von Überlast und Batteriezustand
+224:        'Basis: Schleppkurve
+227:        'Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+230:        '=> PeFLD = maximale EM-Leistung nach FLD und ÃœL
+232:        'PeMax aus PeBatMax berechnen
+235:        '=> PeBAT = maximale EM-Leistung nach Batterie
+237:        'Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+244:    'Umrechnung von PeBat(=PiEM) auf PeEM
+256:            'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+281:    'Umrechnung von PeEM auf PeBat(=PiEM)
+293:            'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+318:    'Maximale Rekup-Leistung
+324:        'Falls unter V-Untergrenze dann gleich Null übergeben
+327:        'Radaufstandskraft
+334:        'Vorzeichen "sollte" immer + sein
+337:        'Längskraft am Reifen
+340:        'Sicherheitsfaktor mitnehmen
+343:        'Leistung 
+346:        'Falls unter V-Obergrenze dann linear runter skalieren
+353:    ''PeEM-Max reduzieren bis es die Batterie aushaltet
+354:    'Private Function RedPiToPbatMax(ByVal PeEM As Single) As Single
+356:    '    Dim PiEM As Single
+358:    '    PiEM = EMO.PiEM(PeEM)
+360:    '    Do While PiEM > PeBatMax
+362:    '        PeEM *= 0.99
+363:    '        PiEM = EMO.PiEM(PeEM)
+365:    '    Loop
+367:    '    Return PiEM
+369:    'End Function
+371:    ''PeEM-Min reduzieren bis es die Batterie aushaltet
+372:    'Private Function RedPiToPbatMin(ByVal PeEM As Single) As Single
+374:    '    Dim PiEM As Single
+376:    '    PiEM = EMO.PiEM(PeEM)
+378:    '    Do While PiEM < PeBatMin
+380:    '        PeEM *= 0.99
+381:    '        PiEM = EMO.PiEM(PeEM)
+383:    '    Loop
+385:    '    Return PiEM
+387:    'End Function
+406:        'Start/Stop Steuerung
+444:        'Abbruch wenn keine Geschw. gegeben
+450:        '   Initialisieren
+486:        'Schaltpunkte für NEDC/FTP Schaltung
+521:                'Schaltparameter initialisieren
+523:                'Standard
+533:        'Theoretische Höchstgeschwindigkeit [m/s] - gesetzt auf Geschw. bei 1.2 x NennDrehzahl im höchsten Gang
+539:        '***********************************    Zeitschleife    ****************************************
+550:            'Sekundäre Progressbar
+553:            '   Zustand bestimmen
+556:            'Reset der sekündlichen Errors 
+559:            'Geschw. / Beschl. berechnen-------------------
+560:            'Jetzt durch DRI-Klasse
+564:            'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+571:            'a_DesMax
+574:                'Check ob Beschleunigung zu hoch
+593:                    '- Verzögerung limitieren ---------------------------
+594:                    'Else
+595:                    '    'Check ob Verzögerung zu hoch
+596:                    '    amax = GEN.aDesMin(Vist)
+597:                    '    If amax > -0.001 Then
+598:                    '        WorkerMsg(tMsgID.Err, "aDesMax(dec) invalid! v= " & Vist & ", aDesMax(dec) =" & amax, MsgSrc)
+599:                    '        Return False
+600:                    '    End If
+601:                    '    If aist < amax - 0.0001 Then
+602:                    '        Vh.SetSpeed0(jz, Vh.V0(jz) + amax)
+603:                    '        GoTo lbGschw
+604:                    '    End If
+614:            'Aus Leistg-----
+617:                    'Vh.SetSpeed(jz, 0)
+618:                    'GoTo lbGschw
+624:            'Fahrzustand bestimmen-------------------------
+649:            'Schneller Check ob Leistung viel zu hoch
+656:            '************************************ Gangwahl ************************************
+675:                'Checken ob Kupplung schleift (wichtig für Schaltmodell):
+683:                    'Gang-Vorgabe
+686:                    'Drehzahlvorgabe
+692:                        'Gang nach Geschwindigkeit
+696:                        'Schaltmodell
+703:                        'Muss hier nochmal zurück gesetzt werden weil im Schaltmodell kann (und darf) das passieren
+709:                'Schaltmodell/Vorgabe kann Clutch öffnen 
+720:            ' Wichtige Checks
+723:            'Checken ob Geschwindigkeit reduzieren
+724:            ''If GeschwRed Then GoTo lbGeschwRed    <= stattdessen neues Konzept: Leistung wird "normal" berechnet und erst später überprüft ob Pe > Pmax... ?
+726:            'Checken ob Kupplung offen:
+727:            ''bKupplOffen = (bStehen Or Gang(jz) = 0) <= bereits durch Clutch bekannt
+729:            'Falls konventionell dann ICE-Kupplung = Hauptkupplung
+730:            ''bICEKupOffen = bKupplOffen <= Brauch i nix mehr
+732:            'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+737:            'Checken ob Leerlauf obwohl Leistung > 0
+738:            '   wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+759:            '************************************ Drehzahl ************************************
+761:            '*** Wenn Drehzahl vorgegeben dann wird der nächste Block übersprungen ***
+766:                'Falls Start/Stop dann wird gleich bei nn < -0.05 auf nU = 0 gesetzt
+784:            'Drehzahlabfall beim Auskuppeln
+806:                        'Leistungsabfall limitieren auf Pe(t-1) minus 75% von (Pe(t-1) - Pschlepp)
+807:                        '   aus Auswertung ETC des Motors mit dem dynamische Volllast parametriert wurde
+808:                        '   Einfluss auf Beschleunigungsvermögen gering (Einfluss durch Pe(t-1) bei dynamischer Volllast mit PT1)
+809:                        '   Luz/Rexeis 21.08.2012
+810:                        '   Iterations-Schleife: 01.10.2012    
+813:                        'original: M = -Pmin * 1000 * 60 / (2 * Math.PI * ((nU + nUx) / 2))
+818:                        '01.10.12 Luz: Drehzahl darf nicht höher werden als zuvor 
+825:                    'TODO: Auschalten?!
+838:                '*** Beginn: Drehzahl-Check
+840:                'Checken ob Drehzahl zu hoch! =>  Hochschalten
+846:                'Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+863:            '************************************ Motor-Zustand bestimmen ************************************
+864:            ' nn ist ab hier fix!
+867:            'Nebenverbrauch bestimmen (aus VEH und DRI)
+870:            'ICE-Trägheit
+875:                    'Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+880:                    'Drehzahlvorgabe
+887:            'Gesamt-Motorleistung
+888:            '   => Pantr
+889:            '   => P
+890:            '   => Pkup
+915:            'EngState
+957:            '*************** Leistungsverteilung usw. ******************
+959:            'Volllast- / Schleppkurve
+965:                'Drehzahl korrigieren
+979:                'Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+990:            '   => Pbrake
+1009:                        'VKM an Schleppkurve
+1012:                        'Forwärtsrechnung bis Rad (PvorD)
+1028:            'Check ob Abbruch (vor Geschw.Red-Iteration sonst kann sichs aufhängen)
+1031:            'Check ob P über Volllast => Geschw.-Reduktion
+1046:                        'FEHLER: Geschw.-Red. bringt nix?!...
+1051:                    'FEHLER: Motor nicht in Antrieb ...kann nicht sein?!
+1059:            'Zugkraftunterbrechung
+1091:            '------------------------- PNR --------------------------------------------------------------------
+1093:            '   Sekunde abschließen
+1095:            'Start / Stop - Aktivierung-Geschw. Steuerung
+1110:            'Modalwerte-Felder schreiben
+1141:            'Zugkraftunterbrechung
+1172:            'Meldungen (Abbruch falls Error)
+1185:        '***********************************    Zeitschleife ENDE    ***********************************
+1188:        'Meldungen (wenn nicht ADVANCE)
+1199:        'CleanUp
+1225:        'Abbruch falls Leistung/Drehzahl nicht gegeben
+1236:        'Drehzahlen vorher weil sonst scheitert die Pmr-Berechnung bei MODdata.nU(t + 1)
+1238:            'Modalwerte-Felder schreiben
+1239:            '   MODdata.Pe wird unten belegt
+1244:        'Leistung berechnen
+1247:            'Sekundäre Progressbar
+1250:            'Reset der sekündlichen Errors 
+1253:            'ALT und falsch weil Zeit nicht verschoben: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnenn) * nnenn * (n(jz) - n(jz - 1))) / Pnenn
+1260:            'Leistung aus Zyklus korrigiert um P_clutch
+1263:            'Drehzhal aus Zyklus => Durch CycleInit bestimmt
+1264:            'Falls Drehzahl unter Leerlauf wir Motor als abgestellt angenommen
+1276:                'Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+1285:                'FLD Check
+1314:            'Meldungen
+1336:        'Start/Stop Steuerung
+1367:        'WegKorrektur
+1381:        'Abbruch wenn keine Geschw. gegeben
+1387:        '   Initialisieren
+1415:        'WG-Kennfeld aus MAP übernehmen und Pi-Liste berechnen
+1432:        'Schaltpunkte für NEDC/FTP Schaltung
+1449:        'Theoretische Höchstgeschwindigkeit [m/s]
+1457:        '***********************************    Zeitschleife    ****************************************
+1465:            'Sekundäre Progressbar
+1468:            '   Zustand bestimmen
+1472:            'Geschw. / Beschl. berechnen-------------------
+1473:            'Jetzt durch DRI-Klasse
+1477:            'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+1484:            'Aus Leistg-----
+1494:            'Fahrzustand bestimmen-------------------------
+1519:            'Maximal zulässige Batterieleistung
+1524:            '************************************ Gangwahl ************************************
+1529:                'Checken ob Kupplung schleift (wichtig für Schaltmodell):
+1537:                    'Gang-Vorgabe
+1540:                    'Drehzahlvorgabe
+1546:                        'Gang nach Geschwindigkeit wird hier nicht unterstützt
+1550:                        'Schaltmodell
+1553:                        'EV: Kein Leerlauf wegen Rekuperation
+1566:            'Falls Rekuperation laut Radleistung möglich: PrekupMax berechnen
+1568:                'Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+1573:            'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+1578:            'Checken ob Leerlauf obwohl Leistung > 0
+1579:            '   wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+1591:            '************************************ Drehzahl ************************************
+1593:            '*** Wenn Drehzahl vorgegeben (Gemess = 2) dann wird der nächste Block übersprungen ***
+1601:            'Drehzahlabfall beim Auskuppeln
+1622:                '*** Beginn: Drehzahl-Check wenn keine Vorgabe
+1624:                'Checken ob Drehzahl zu hoch! =>  Hochschalten
+1630:                'Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+1642:            '************************************ Motor-Zustand bestimmen ************************************
+1643:            ' nn ist ab hier fix!
+1646:            'Nebenverbrauch bestimmen (aus VEH und DRI)
+1649:            'MotorTrägheit
+1654:                    'Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+1659:                    'Drehzahlvorgabe
+1666:            'Gesamt-Motorleistung
+1667:            '   => Pantr
+1668:            '   => P
+1669:            '   => Pkup
+1694:            'EngState      
+1707:            '*************** Leistungsverteilung usw. ******************
+1709:            'Volllast- / Schleppkurve
+1722:            '   => Pbrake
+1729:                    'Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+1730:                    'PrekupMax = fPrekupMax()
+1732:                    'Falls RekupMax überschritten muss Pe neu berechnet werden
+1735:                        'PbrakeRek = Leistung die zusätzlich mechanisch gebremst werden muss wegen Überschreitung von RekupMax
+1736:                        'wird schon oben nach Gangwahl erledigt: PbrakeRek = Pantr - PrekupMax
+1738:                        'Neue EM-Leistung
+1743:                    'Check ob Leistung aufgenommen werden kann (abh. von FLD und Batterie). Bremsleistung berechnen.
+1752:                    'RekupMax-Bremsleistung dazu addieren
+1764:            'Check ob P über Volllast => Geschw.-Reduktion
+1768:                    'Falls Pmax=0 muss Batterie leer sein
+1782:                        'FEHLER: Geschw.-Red. bringt nix?!...
+1790:            '------------------------- PNR -------------------------
+1792:            '   Sekunde abschließen
+1797:            '******************** EM **************************
+1805:            '***************** Batterie ***********************
+1817:            '****** Modalwerte-Felder schreiben **************
+1859:            'Meldungen
+1865:        '*********************************    Zeitschleife ENDE    *************************************
+1869:        'Meldungen (nicht ADV)
+1887:        'TODO.... Fehlermeldung etc
+1893:        'CleanUp
+1933:        'WegKorrektur
+1941:        'HEV
+2033:        'Abbruch wenn keine Geschw. gegeben
+2039:        '   Initialisieren
+2062:        'Schaltpunkte für NEDC/FTP Schaltung
+2097:                'Schaltparameter initialisieren
+2106:        'Theoretische Höchstgeschwindigkeit [m/s]
+2109:        'HEV
+2127:        '***********************************    Zeitschleife    ****************************************
+2134:            'Sekundäre Progressbar
+2137:            '   Zustand bestimmen
+2141:            'Geschw. / Beschl. berechnen-------------------
+2142:            'Jetzt durch DRI-Klasse
+2146:            'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+2153:            'Aus Leistg-----
+2156:                    'Vh.SetSpeed(jz, 0)
+2157:                    'GoTo lbGschw
+2164:            '*************************** Fahrzustand bestimmen *****************************
+2166:            'Fahrzustand bestimmen-------------------------
+2184:            '************************************* HEV *************************************
+2238:            '********************* PvorD = PanRad ************************
+2249:            '************************************ Gangwahl ************************************
+2254:                'Checken ob Kupplung schleift (wichtig für Schaltmodell):
+2262:                    'Gang-Vorgabe
+2265:                    'Drehzahlvorgabe
+2271:                        'Gang nach Geschwindigkeit
+2274:                        'Schaltmodell
+2289:            'Nebenverbrauch bestimmen (aus VEH und DRI)
+2292:            'HEV-Teil kommt erst nach Gangwahl weil Getr./Diff-Loss den benötigt und EM zwischen ICE und GB liegt
+2300:                'Nebenverbrauch bestimmen (aus VEH und DRI)
+2306:                    'Wenn Drehzahl vorgegeben
+2309:                    'Sonst aus Vist und Gear
+2313:                'Normierte Drehzahl
+2316:                'Maximale Leistung der ICE
+2325:                'Nebenverbrauch bestimmen (aus VEH und DRI)
+2328:                'Maximal zulässige Batterieleistung
+2333:                'Maximale EM-Leistung. (Batterieleistung limitiert EM-Leistung)
+2344:                'Leistung bis ICE/EM (= an Kupplung) berechnen
+2350:                'Leistung an Kupplung
+2353:                'PaMot
+2355:                    'Drehzahlvorgabe
+2363:                '***** Notwendige Leistung im EV-Betrieb
+2364:                '   Leistung an Kupplung plus EM-Trägheit
+2366:                '! ACHTUNG: Wenn ICE eingekuppelt dann muss PaICE auch noch dazu ! => Später bei Leistungsverteilung
+2368:                '***** Notwendige Leistung im ICE+EM-Betrieb
+2371:                '***** Notwendige Leistung im ICE-Betrieb
+2374:                '***** Check ob EV möglich
+2375:                '   => Bat <> Low
+2376:                '   => EM-Leistung >= Antriebsleistung
+2377:                '   => v < vEVo
+2380:                '***** Falls EV möglich: Check ob kritisch
+2383:                '***** Check ob Assist / LPI / ICEonly möglich und ob Boost erforderlich
+2384:                '   => ICE-Ein muss möglich sein (ICElock)
+2387:                    'Assist / Boost
+2388:                    '   => SOC > MIN
+2391:                        'Boost
+2392:                        '   => ICE an Volllast
+2396:                    'LPI
+2397:                    '   => Bat <> High
+2400:                    'ICEonly
+2405:                '***** Check ob Rekup möglich
+2411:                '********************************* Fahrzustands-Unterscheidung *********************************
+2417:                    '***************************** Betriebsmodus Vor-Auswahl ********************************
+2421:                        'Wenn Boost notwendig (und möglich), dann keine Wahl
+2426:                        'EV Mode wenn...
+2435:                        'Wenn EV & ICE nicht möglich dann EV-Modus bis ICE wieder startet.... sollte nie vorkommen weil keine ICE-Abschaltung wenn wenig SOC
+2445:                    'Falls Einsatz von HEV-Strategie:
+2446:                    '   Ke's berechnen
+2449:                        '************** Optimale Ke's berechnen und Leistungen dazu ************
+2451:                        'Emission/Verbrauch in g/h
+2455:                        '******************************* KeSTE *********************************
+2458:                        'KeSTE aus STE-Kurve...
+2463:                        '******************************** KeA **********************************
+2476:                                'Unter Max-Pe bleiben
+2479:                                'Wenn Pvkm negativ: Berechnung für reinen EM-Betrieb
+2482:                                    '    ...nicht gültig falls Batlvl <= Low oder ICEonLock
+2485:                                    'EM-Leistung = P-Antrieb
+2489:                                    'Verbrauchseinsparung in g/h 
+2492:                                    'Abbruch nach dieser Berechnung (mehr EM-Leistung macht keinen Sinn da hier schon rein elektrischer Antrieb)
+2497:                                    'Verbrauchseinsparung in g/h 
+2502:                                'Leistung nach E-Motor in kW
+2513:                                'Leistung in Batterie
+2518:                                'Div/0 und Vorzeichen-Check
+2521:                                    'KeA berechnen in kWh/kg
+2524:                                    'Check ob Optimum
+2532:                                'Abbruch falls reiner EM-Betrieb schon erreicht
+2551:                        '******************************** KeG **********************************
+2565:                                'Falls Pvkm an Volllast:
+2568:                                    'Pvkm auf Volllast setzen
+2571:                                    'Elektromotor in Generatorbetrieb (Pges1 - Pvkm < 0)
+2574:                                    'Abbruch nach diesem Durchgang weil mehr Generieren nicht möglich
+2579:                                'Zusatzverbrauch in g/h 
+2582:                                'Leistung nach E-Motor in kW
+2593:                                'Leistung in Batterie
+2598:                                'Div/0 und Vorzeichen-Check
+2601:                                    'KeG berechnen in kWh/kg
+2604:                                    'Check ob Optimum
+2613:                                'Abbruch falls VKM-Volllast schon erreicht
+2622:                            'Abstand Eta zu Kurve berechnen
+2632:                        '********************** KeSTE, Deltas auswerten ************************
+2661:                        '************************* Betriebsstrategie ***************************
+2664:                        'LastHEVmode-Check
+2690:                        '** Ke-Modus einsetzen wenn...
+2693:                            '...Gleicher Modus wie vorher, Fahrzustands-Änderung oder Letzter Modus unmöglich
+2698:                            '...wenn Motor nicht läuft
+2703:                                '...wenn PeICE-Leistungsänderung mit neuen Modus am geringsten
+2728:                    '****************************** Leistungen je nach Modus verteilen **************************
+2735:                            'EM übernimmt gesamte Leistung
+2738:                            'Geschw. reduzieren falls Leistung zu hoch für EM oder Bat
+2744:                            'Falls ICElock oder EVcrit dann ICE ein (aber ausgekuppelt)
+2758:                            'ICE übernimmt gesamten Antrieb
+2826:                    'ACHTUNG: ICEclutch ist standardmäßig 'False' deshalb hier keine weiteren Statements mehr
+2828:                    'Maximale Rekup-Leistung berechnen
+2833:                        'Mit PrekupMax auf EM/ICE zurück rechnen
+2842:                        'Den Rest gleich auf die Bremse 
+2847:                    'Default für ICE (damit man sich die "Else"-Statements spart)
+2855:                            'EM-Leistung berechnen
+2860:                                'EM-Leistung neu
+2863:                                'Restliche Leistung an ICE
+2867:                                'Falls ICE über Schleppkurve
+2870:                                    'ICE-Leistung neu
+2873:                                    'Rest an Bremse
+2880:                                'ICE in Leerlauf (weil On-Lock)
+2889:                            'EM-Leistung berechnen
+2894:                                'EM-Leistung neu
+2899:                                    'ICE im Schubbetrieb
+2903:                                    'Falls ICE über Schleppkurve
+2906:                                        'ICE-Leistung neu
+2909:                                        'Rest an Bremse
+2932:                            'ICE im Schubbetrieb
+2936:                            'Falls ICE über Schleppkurve
+2939:                                'ICE-Leistung neu
+2942:                                'Rest an Bremse
+2962:                    'Leistung Null
+2973:            '****************************** Clutch und Drehzahlen *******************************
+2976:            'Haupt-Kupplung => muss hier schon bekannt sein!
+2977:            'If ICEclutch Then
+2978:            '    If PeICE > 0 And fnn(Vist, Gear, False) < Kuppln_norm Then
+2979:            '        Clutch = tEngClutch.Slipping
+2980:            '    Else
+2981:            '        Clutch = tEngClutch.Closed
+2982:            '    End If
+2983:            'ElseIf EMclutch Then
+2984:            '    Clutch = tEngClutch.Closed
+2985:            'Else
+2986:            '    Clutch = tEngClutch.Opened
+2987:            'End If
+2989:            '************************************ Drehzahl ICE ************************************
+3034:            '************************************ Drehzahl EM *************************************
+3042:            '********************************* EM => Batterie *************************************
+3055:            '------------------------- PNR -------------------------
+3060:            '   Sekunde abschließen
+3064:            'ICE-Lock
+3065:            '   ACHTUNG: Die beiden If-Schleifen nicht verbinden weil LockCount sich sonst verzählt
+3082:            'Modalwerte-Felder schreiben
+3130:            'Meldungen
+3136:        '*********************************    Zeitschleife ENDE   **************************************
+3139:        'Meldungen (Nicht ADVANCE)
+3150:        'CleanUp
+3255:        '-----------------------------------Sekunde 1--------------------------------------
+3256:        'Erste Sekunde: Gang finden / Initialisierung
+3283:        '--------------------------------Ab Sekunde 2--------------------------------------
+3285:        '---------Startwerte---------
+3286:        'gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+3293:        'Kuppelschleif-check  << Schon passiert in Power.Calc
+3294:        ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True
+3296:        '-------------------Gang für die nächsten 6 Sekunden berechnen---------------------
+3303:            '-----------Schaltfunktion----------
+3330:                'Gelöscht LUZ 13.07.10: If (Pjetzt > 1) Then Pjetzt = 1.0
+3331:                'If ix = jpm Then Pvorher = Pjetzt
+3341:            'Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3344:            'Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3346:            'Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85
+3347:            'Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+3350:            'Drehzahl mit letzten Gang (gangX)
+3351:            'nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn
+3354:            ' ''Schalten Maximal alle 2 Sekunden schalten zulaessig:
+3357:            'Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+3366:            'Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+3374:            'Gangwahl korrigieren
+3383:            'Kein Leerlauf wenn Leistung > 0
+3388:            'Drehzahl neu
+3389:            ''nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping)
+3392:            'Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+3406:            'Speichere Gänge in Feld für spätere Checks
+3418:        'Gang wird übernommen
+3426:        'Gang-Verlauf hinzufügen
+3430:        '--------------------------------Checks Teil 1-------------------------------------
+3431:        'Checks zur Saeuberung unsinniger Schlatmanoever:
+3433:        ''Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+3434:        'iphase = 0
+3435:        'Select Case (beschl(jz - 2) + beschl(jz - 1) + beschl(jz)) / 3
+3436:        '    Case Is >= 0.125
+3437:        '        iphase = 1
+3438:        '    Case Is <= -0.125
+3439:        '        iphase = 2
+3440:        '    Case Else
+3441:        '        iphase = 3
+3442:        'End Select
+3443:        '   ============>> Schon bestimmt durch VehState0
+3445:        'Suche nach letztem Gangwechsel
+3456:        'Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+3462:            'Cruise-Phasen:
+3463:            'Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+3464:            'Verzoegerungsphasen: Hochschalten wird unterdrückt
+3465:            'Beschleunigungsphasen: Zurückschalten wird unterdrückt
+3486:                'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+3487:                'durchgehend beibehalten
+3499:                    'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+3500:                    'geschaltet wird, wird voriger Gang durchgehend beibehalten
+3517:        '--------------------------------Checks Teil 2-------------------------------------
+3518:        'Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+3519:        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+3524:        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+3538:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+3545:        'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+3552:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+3553:        'sonst fehlt die leistung!
+3562:    'EV-Schaltmodell (auf Basis PKW)
+3592:        '-----------------------------------Sekunde 1--------------------------------------
+3593:        'Erste Sekunde: Gang finden / Initialisierung
+3620:        '--------------------------------Ab Sekunde 2--------------------------------------
+3622:        '---------Startwerte---------
+3623:        'gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+3630:        'Kuppelschleif-check  << Schon passiert in Power.Calc
+3631:        ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True
+3633:        '-------------------Gang für die nächsten 6 Sekunden berechnen---------------------
+3640:            '-----------Schaltfunktion----------
+3667:                'Gelöscht LUZ 13.07.10: If (Pjetzt > 1) Then Pjetzt = 1.0
+3668:                'If ix = jpm Then Pvorher = Pjetzt
+3678:            'Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3681:            'Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3683:            'Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85
+3684:            'Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+3687:            'Drehzahl mit letzten Gang (gangX)
+3688:            'nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn
+3691:            ' ''Schalten Maximal alle 2 Sekunden schalten zulaessig:
+3694:            'Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+3703:            'Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+3711:            'Gangwahl korrigieren
+3720:            'Kein Leerlauf wenn Leistung > 0
+3725:            'Drehzahl neu
+3726:            ''nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping)
+3729:            'Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+3743:            'Speichere Gänge in Feld für spätere Checks
+3755:        'Gang wird übernommen
+3763:        'Gang-Verlauf hinzufügen
+3767:        '--------------------------------Checks Teil 1-------------------------------------
+3768:        'Checks zur Saeuberung unsinniger Schlatmanoever:
+3770:        ''Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+3771:        'iphase = 0
+3772:        'Select Case (beschl(jz - 2) + beschl(jz - 1) + beschl(jz)) / 3
+3773:        '    Case Is >= 0.125
+3774:        '        iphase = 1
+3775:        '    Case Is <= -0.125
+3776:        '        iphase = 2
+3777:        '    Case Else
+3778:        '        iphase = 3
+3779:        'End Select
+3780:        '   ============>> Schon bestimmt durch VehState0
+3782:        'Suche nach letztem Gangwechsel
+3793:        'Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+3799:            'Cruise-Phasen:
+3800:            'Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+3801:            'Verzoegerungsphasen: Hochschalten wird unterdrückt
+3802:            'Beschleunigungsphasen: Zurückschalten wird unterdrückt
+3823:                'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+3824:                'durchgehend beibehalten
+3836:                    'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+3837:                    'geschaltet wird, wird voriger Gang durchgehend beibehalten
+3854:        '--------------------------------Checks Teil 2-------------------------------------
+3855:        'Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+3856:        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+3861:        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+3875:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+3882:        'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+3889:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+3890:        'sonst fehlt die leistung!
+3919:        'Dim avchek As Single
+3944:        '-----------------------------------Sekunde 1--------------------------------------
+3945:        'Erste Sekunde: Gang finden / Initialisierung
+3982:        '--------------------------------Ab Sekunde 2--------------------------------------
+3984:        '---------Startwerte---------
+4014:        'Leistung berechnen von jz bis jz + 6-----------------
+4027:            '     Berechnung nach Drehzahl/Leistung-Modell
+4030:            '(1) Nach Variante "schnelle Fahrweise"
+4032:            'Schaltmanoever erfolgt nur, wenn v-aenderung 5% seit letztem Gangwechsel,
+4033:            'VECTO: Auskommentiert START
+4034:            'achek = 1
+4035:            'If (MODdata.Vh.V(itgangwH) <> 0) Then
+4036:            '    avchek = Math.Abs(Vist0 / MODdata.Vh.V(itgangwH) - 1)
+4037:            'Else
+4038:            '    avchek = Math.Abs(Vist0 - MODdata.Vh.V(itgangwH))
+4039:            'End If
+4040:            'If (avchek >= 0.05) Then
+4041:            '    achek = -1
+4042:            'Else
+4043:            '    achek = 1
+4044:            'End If
+4045:            'VECTO: Auskommentiert ENDE
+4047:            'in ersten 10 Zyklussekunden kann zum Einregulieren immer geschlatet werden:
+4050:            'Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+4054:            'Hinunterschalten:
+4061:            'Hochschalten:
+4062:            ' bei Steigungszyklen mit zu hohen Geschwindigkeiten wird geschw. i+1 erst nach gangwahl berechnet
+4063:            ' dabei manchmal zu hoher gang -> Drehzahl und P_max viel zu nieder, daher nu bei niederen leistungen
+4064:            ' hochschalten erlaubt:
+4083:            '(2) Nach Variante "sparsame Fahrweise"
+4085:            '   Zurueckschalten erfolgt nur, wenn Geschwindigkeitsaenderung > 6%
+4086:            '   Hochschalten geht immer
+4087:            'VECTO: Auskommentiert START
+4088:            'achek = 1
+4089:            'If (MODdata.Vh.V(itgangwL) <> 0) Then
+4090:            '    avchek = Math.Abs(Vist0 / MODdata.Vh.V(itgangwL) - 1)
+4091:            'Else
+4092:            '    avchek = Math.Abs(Vist0 - MODdata.Vh.V(itgangwL))
+4093:            'End If
+4094:            'If (avchek >= 0.06) Then
+4095:            '    achek = -1
+4096:            'Else
+4097:            '    achek = 1
+4098:            'End If
+4099:            'VECTO: Auskommentiert ENDE
+4101:            '       in ersten 10 Zyklussekunden kann zum einregulieren immer geschlatet werden:
+4103:            '       Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+4107:            '    Hinunterschalten:
+4117:            'Hinaufschalten, nur ueberprueft wenn nicht schon hoechster Gang:
+4119:                'C
+4125:                'C
+4126:                'C     relevante Drehzahlen:
+4137:            ' Auswahl des Drehzahlverhaeltnisses aus der "schnellen (..h)" und
+4138:            ' der "sparsamen (..l)" Variante:
+4140:            '   Drehzahlverhhealtnisse nach "Modellmix":
+4141:            '   anhand der erforderlichen maximalen Motorleistung ueber die
+4142:            '   naechsten 6 Sekunden
+4150:            '     Festlegung der Anteile von schneller und sparsamer Fahrweise
+4151:            '      (Modell Hausberger):
+4158:            '     Mix der berechneten Gaenge gemaess Vorgabe in Eingabefile:
+4159:            '     (pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl
+4160:            '      nach "reales Modell" bestehen soll)
+4165:            '      Ermittlung des "virtuellen" aktuellen Ganges nach Modell
+4170:            '    ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+4171:            '    sonst fehlt die leistung!
+4181:            '    ueberpruefung, ob erforderliche leistung ueber P_max(n) liegt
+4182:            '    dann wird zurueckgeschaltet:
+4208:            '    Eigentliche Ueberpruefung ob ueber P_max(n)
+4214:            'falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert:
+4217:            '    Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh
+4218:            '     dann wird zurueckgeschaltet:
+4248:        ''Pjetzt = fPantr(Gang(jz)) / (fGPvoll(fn(Gang(jz))) + 0.00000001)
+4250:        ''If Pjetzt > 1 Then
+4251:        ''    GeschwRed = True
+4252:        ''    GeschwRedPC = Pjetzt
+4253:        ''    Exit Function
+4254:        ''End If
+4256:        'c     Ende "Modell"-Basisgangwahl
+4260:        'Kuppelschleif-check
+4261:        ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True
+4263:        '--------------------------------Checks Teil 1-------------------------------------
+4264:        'Checks zur Saeuberung unsinniger Schlatmanoever:
+4265:        'Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+4290:        'Suche nach letztem Gangwechsel
+4299:        'Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+4304:        'Cruise-Phasen:
+4305:        'Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+4306:        'Verzoegerungsphasen: Hochschalten wird unterdrückt
+4307:        'Beschleunigungsphasen: Zurückschalten wird unterdrückt
+4326:        'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+4327:        'durchgehend beibehalten
+4328:        'VECTO: Ausnahme: Ãœber Volllastkurve
+4339:        'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+4340:        'geschaltet wird, wird voriger Gang durchgehend beibehalten
+4356:        '--------------------------------Checks Teil 2-------------------------------------
+4357:        'Schalten von 2. in 1. Gang wird bei v > 1.5 m/s unterdrueckt
+4358:        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+4363:        'bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet
+4375:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+4383:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+4384:        'sonst fehlt die leistung!
+4424:        'Geschwindigkeit vorausschauen
+4437:        'Checks aus PKWgear....
+4438:        'Schalten von 2. in 1. Gang wird bei v>2,5 m/s unterdrueckt
+4447:        'Bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+4456:        'Wenn v mehr als 1 Sek. <0.1 m/s wird auf Gang=0 geschaltet
+4461:        'Bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+4488:    'Funktion zur einfachen Leistungsberechnung für Schaltmodelle
+4493:    'Funktion zur einfachen Leistungsberechnung für EV-Schaltmodell
+4508:            'Drehzahlvorgabe
+4552:    '--------------Leistung vor Diff = Am Rad-------------
+4561:    '----------------Rollwiderstand----------------
+4566:    '----------------Luftwiderstand----------------
+4591:    '--------Beschleunigungsleistung Fahrzeug--------
+4593:        'Früher (PHEM 10.4.2 und älter) wurde statt m_raeder Massered verwendet, mit Massered = m_raeder + I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2
+4594:        '   Der fehlende Teil (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) wird jetzt durch fPaG(V,a) mit berücksichtigt
+4598:    '----------------Steigungswiderstand----------------
+4603:    '----------------Nebenaggregate----------------
+4608:    '-------------------Getriebe-------------------
+4624:        'Pdiff
+4633:                'Leistung nach Getriebe (Getriebeausgang)
+4636:                'Verluste berechnet (eignet sich nur für Schaltgetriebe)
+4637:                '       Interpolation der Getriebeverlustleistung
+4638:                '       Zwischen 1. und 8. gang sowie 9. und 16. Gang:
+4662:                '***Differenzial
+4663:                '   Leistung nach Diff (vor Getriebe)
+4682:                'Pdiff
+4691:                '***Differenzial
+4692:                '   Leistung vor Diff
+4744:    '----------------Getriebe Trägheit----------------
+>>> cVh.vb
+5:    'Aus DRI-Datei
+15:    'Berechnet
+18:    'WegKor
+58:        'Geschwindigkeit
+69:            'Original-Geschwindigkeit ist um 1 länger
+79:            'Strecke (aus Zwischensekunden sonst passiert Fehler)
+87:        'Steigung
+99:        'Gang - nicht Mittelwert sondern Gang(t) = DRI.Gang(t)
+103:                'lGears.Add(Math.Round((DRI.Values(tDriComp.Gears)(s + 1) + DRI.Values(tDriComp.Gears)(s)) / 2, 0, MidpointRounding.AwayFromZero))
+112:        'Padd
+124:        'Beschl. berechnen
+132:        'Vair-Vorgaben: Nicht in Zwischensekunden!!
+157:        'Geschwindigkeit
+169:            'Strecke 
+177:        'Steigung
+189:        'Gang - nicht Mittelwert sonder Gang(t) = DRI.Gang(t)
+193:                'lGears.Add(Math.Round((DRI.Values(tDriComp.Gears)(s + 1) + DRI.Values(tDriComp.Gears)(s)) / 2, 0, MidpointRounding.AwayFromZero))
+202:        'Padd
+214:        'Beschl. berechnen
+257:        'TODO: Wenn Fzg schneller als Zyklus...
+273:            'Falls Zeitschritt wiederholen näher an Wegvorgabe als aktueller Weg => Zeitschritt wiederholen
+279:                'Falls nächsten Zeitschritt löschen näher an Wegvorgabe als aktueller Weg => Nächsten Zeitschritt löschen
+280:                'ElseIf WegX < MODdata.tDimOgl - 1 AndAlso t < MODdata.tDim - 1 AndAlso WegIst > Weg(WegX + 1) AndAlso Math.Abs(WegIst - Weg(WegX + 1)) <= Math.Abs(WegIst - Weg(WegX)) Then
+282:                '    Do
+283:                '        Cut(t + 1)
+284:                '        MODdata.tDim -= 1
+285:                '        WegX += 1
+286:                '    Loop While WegX < MODdata.tDimOgl - 1 AndAlso t < MODdata.tDim - 1 AndAlso WegIst > Weg(WegX + 1) AndAlso Math.Abs(WegIst - Weg(WegX + 1)) <= Math.Abs(WegIst - Weg(WegX))
+287:                '    WegX += 1
+291:                'Keine Korrektur
+>>> Em Calc.vb
+51:                            'Delaunay
+54:                            'Normale Interpolation
+101:                'Ersten zwei sekunden keine Korrektur:
+185:        'Dictionaries erstellen
+192:                'Unit-Check
+208:        'Summen ermitteln
+220:        'Mittelwerte
+228:        '***************************************** 'Header '******************************************
+243:        '************************************ 'Zyklus-Mittelwerte '************************************
+248:            '***** Name
+251:            '***** Unit
+258:            '***** Messwert
+261:            '***** PHEM-Wert
+264:            '***** Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+267:            '***** Delta
+274:            '***** R2
+279:            'Ãœber x Sekunden gemittelte Werte berechnen und sofort au
+282:                'Null setzen
+286:                'Aufsummieren
+292:                'Messwert
+295:                'PHEM-Wert
+311:        '************************************ Modale Ausgabe '************************************
+315:        'Header/Units
+324:            'Messwert
+328:            'PHEM-Wert
+332:            'Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+340:            'Delta
+351:        'Header und Units schreiben
+355:        'Ãœber x Sekunden gemittelte Werte berechnen und sofort au
+358:            'Null setzen
+371:            'Aufsummieren
+388:            'Ausgabe
+393:            'Pe/nn
+399:                'Messwert
+402:                'PHEM-Wert
+405:                'Diff
+412:                'Delta
+422:            'TC
+563:            'C      Lastwechsel (allgemeine Bedingung ausser bei Intervallen mit
+564:            'C      Konstantfahrt:
+565:            'C
+571:            'C
+572:            'C       Damit werden Trapezfoermige Zyklen nicht als lastwechsel erkannt
+573:            'C       da LWje = 0. In diesem fall wird voraus der naechste Wert gesucht,
+574:            'C       der nicht gleich Pe(jz) ist. Dieser wird anstelle von Pe(jz+1)
+575:            'C       gesetzt:
+602:            'C
+603:            'C      lastwechsel werden nur als solche gezaehlt, wenn sie mehr als 0.05% von
+604:            'C      Pnenn betragen (sonst ist Ergebnis viel zu wackelig):
+605:            'C       (Lastwechsel wird gezaehlt, wenn LWja < 0)
+606:            'C
+608:            'C
+609:            'C     (1) Mittlere Amplitude vom Pe-Verlauf ("Ampl")
+610:            'C         Zwischenrechnung fue Zyklusmittelwert:
+611:            'C
+616:            'C
+617:            'C       Berechnung der mittleren Amplitude in 3 Sekunden vor Emission (Ampl3s)
+618:            'C       und der Anzahl der Pe-Sekundenschritten ueber 3% der Nennleistung
+619:            'C       (LW3p3s):
+649:            'C
+650:            'C     (2) Aenderung der aktuellen Motorleistung (dP_2s):
+651:            'C
+664:            'C     Mittelwert 3 sec. vor Emission:
+672:            'C    Gezaehlt nur bei dynamischem betrieb:
+679:            'C
+680:            'C
+681:            'C     (4) Mittelwert der negativen Motorleistung ("PnegMW"):
+682:            'C
+687:            'C     Mittelwert 3 sec. vor Emission:
+695:            'C    Gezaehlt nur bei dynamischem betrieb:
+705:        'C
+706:        'C
+707:        'C     Berechnung der absoluten Dynamikkenngroessen:
+708:        'C      Addition der Amplituden von Pe (1. Pe-Wert
+709:        'C      wird fuer Amplitude auch als Maxima bzw. Minima gezaehlt)
+710:        'C    1. Sekunde:
+713:            'C
+714:            'C     2. Sekunde bis Ende:
+717:                'C        Absolutwert:
+723:            'C
+727:        'C
+729:            'C
+730:            'C
+731:            'C     (8) WM_n10sn**3 * MW_P_10s:
+732:            'c
+744:                'c
+752:                'c
+754:            'C
+761:            'c
+762:            'C     (9) MW_P40sABS:
+763:            'c
+778:            'C
+780:            'c
+781:            'C     (9) MW_abs_dn2s:
+782:            'c
+792:        'Geschw./Beschl.-abhängige Parameter nur wenn nicht Eng-Only
+805:        'Dynamikparameter als Differenz zu Dynamik in Kennfeld
+806:        '   ...war früher hier. Jetzt eigene Methode weil bei KF-Erstellung ungültig
+812:    'Dynamikparameter als Differenz zu Dynamik in Kennfeld:
+837:''' <summary>
+838:''' Klasse zur Berchnung der Abgastemperaturen
+839:''' </summary>
+840:''' <remarks></remarks>
+846:    '! Felder für Größen aus PHEM Hauptprogramm
+867:    'variables for coolant simulation
+895:    '**** Einlesen von tgas aus .npi (Projekt HERO) ****
+896:    ' => überschreibt tgas(jz) aus HtMass()
+897:    ' Luz/Rexeis 16.05.2011
+911:    ''' <summary>
+912:    ''' Hauptroutine für EXS Modul
+913:    ''' </summary>
+914:    ''' <remarks></remarks>
+916:        '! Aufruf von Exs_Main(true) -> Developer Version ohne PHEM Hauptprogramm
+921:        '! Felder für Größen aus exs-File
+951:        'Allgemeine Konstanten
+955:        '!Stoffwerte Abgas:
+956:        '!unempfindlich gg. lambda, siehe "Stoffwerte_vollständigeVerbrennung_neu.xls"
+958:        'cp_exh = 1054.0 '!Wärmekapazität Abgas [J/(kg*K)], wird nicht mehr verwendet weil jetzt direkt in Abh. von T und Lambda berechnet
+964:        '!Anmerkung: Mittelwertwert aus Internetrecherche, in Literatur keine Angaben gefunden
+965:        '!kalibriert anhand Test an Thermoelement unter Annahme von Schichtdicke 0.1mm
+967:        'Reaktionsenthalpien in J/mol
+972:        'Molmassen
+977:        'Kompatibilität mit alter EXS-Strkutur. Bevor neues Konzept für Em-Komponenten mit cMAP-Klasse, tMapComp, etc. eingeführt wurde
+985:        'Verweise auf Emissionen: Gegebene falls vorhanden sonst die berechneten
+1006:        'Dimensionieren:
+1025:        'Übergabe der relevanten Größen aus dem PHEM Hauptprogramm
+1026:        'In DEV direkt aus der Datei *.phe eingelesen
+1045:        'Lambda
+1051:            'Wird weiter unten belegt weil mpexh vorhanden sein muss
+1056:        'Anfang exs-File einlesen
+1072:        'dummy = DatExs.ReadLine(0) 'alte dummy zeilen: auf exs-file kompatibilität achten
+1073:        'dummy = DatExs.ReadLine(0)
+1074:        'dummy = DatExs.ReadLine(0)
+1079:        'Initialisieren der entsprechenden Anzahl an Modulen
+1085:        'Lesen der Datenblöcke je Modul
+1088:                'Fehlermelderung in TempMod(iMod).Read(DatExs)
+1096:        'Ende exs-File einlesen
+1100:            'Anfang csy-File einlesen
+1106:            't_amb_coolant = ...
+1121:            'Ende csy-File einlesen
+1133:        'Berechnungsschleife: je Zeitschritt /je Modul: 1. Temperaturen, 2.Konvertierungen
+1135:            'Sekündliche Ergebnisse werden in jeder Iteration ausgegeben
+1139:                    ' Header *.ter schreiben
+1159:                    ' Header der KonvMods schreiben
+1169:            'startwerte für kühlersimulation:
+1174:            'Wärmeeintrag ins Kühlsystem (Kennfeld)
+1189:                'Kühlsystem Simulation
+1191:                    'Wärmeeinträge in Massen 1 und 2
+1195:                    'Wärmeübergang Masse 1 und 2 ins Kühlsystem
+1199:                    'Massentemperaturen für nächsten Zeitschritt
+1205:                    'Wärmeverlust nach außen
+1208:                    'Gesamtwärmeeintrag ins Kühlsystem (Ausgabewert der Kühlersimulation)
+1213:                'EXS Simulation
+1218:                        'Berechnung Abgasmassenstrom aus gegebenem Kraftstoffverbrauch und Lambda
+1219:                        'nur zulässig bei Motoren ohne AGR
+1220:                        'Einheit mpexh.......[kg/s]
+1221:                        'Einheit Vpexh.......[m3/s]
+1222:                        'Fall 1: Berechnung aus Verbrauch und lambda
+1224:                        '!Fall 2: Berechnung aus durch Motor gepumpter Luftmenge
+1231:                        'Es fehlt: Methodik Massenstromberechnung für AGR Motoren BMW HERO Projekt
+1239:                'Lambda berechnen falls nicht explizit gegeben
+1252:                'Erstes Modul im Abgasstrang kann kein katalytisch aktives Element sein,
+1253:                'daher sind die Emissionen immer gleich der Rohemissionen aus dem PHEM-Hauptprogramm
+1269:                            'Qp_reak berechnen: massenstrom * konvertierungsrate * reaktionsenthalpie / molmasse
+1273:                            'Schadstoffkomponente berechnen
+1277:                            'Konvertierung von NOx, CO, HC -> alter Wert * (1-Konvertierungsrate)
+1291:                        'Falls Modul kein Konv-Element hat ändert sich nix (Anmerkung: Modul 1 hat immer ModTyp0)
+1304:                'Zeile in *.ter schreiben
+1323:            'Ende Berechnungsschleife
+1326:            'Alle sekündlichen Ergebnisfiles zumachen
+1338:            '---------- Abfrage Rücksprung im iterativen Berechnungsmodus für Starttemp -------------------
+1340:                'Abbruchbedingung: Temperatur des Massenelementes "t_m" des in "iter_pos" spezifizierten Moduls
+1341:                'am Beginn und am Ende des Zyklus innerhalb vorzugebender Bandbreite "iter_tol"
+1417:        '--- Ausgabefile *.ter schreiben ----------------------------------------------------------
+1419:        '--- Ende Ausgabefile *.ter schreiben -----------------------------------------------------
+1422:        'Aufräumen
+1430:    ''' <summary>
+1431:    ''' Klasse für Temperaturmodule
+1432:    ''' </summary>
+1433:    ''' <remarks>Art des Moduls wird mit ModTyp definiert</remarks>
+1491:        ''' <summary>
+1492:        ''' Einlesen der EXS-Datei
+1493:        ''' </summary>
+1494:        ''' <param name="Datei">Dateihandler</param>
+1495:        ''' <remarks></remarks>
+1512:            'Pfad für Konvertierungsraten bei Modulen mit Konvertierung
+1520:            'Initialisieren der Module & Einlesen des Parameterfiles je nach Modul
+1561:                    'Wärmeübergangsfaktor
+1563:                    'Oberfläche außen
+1565:                    'Emissivität
+1567:                    'Faktoren für Wärmeübergänge nach außen
+1571:                    'Faktoren für Temperaturzusammenhang t_katsubstrat <-> t_kat_außen
+1574:                    'Abkühlkurve Masse
+1576:                    'normierte Querschnittsfläche
+1578:                    'durchschnittlicher Gegendruck
+1580:                    'Durchmesser Thermoelement
+1583:                    'Abkühlkurve Thermoelement
+1595:                    'Faktoren für Wärmeübergänge nach außen
+1621:            'Check ob Tgas in Zyklus gegeben:
+1629:            'Entnormierungen und Berechnung weiterer Größen
+1638:                'Zusätzlich berechnete Parameter für Rohrmodule:
+1650:            'Für Strömungsberechnungen in SI-Einheiten wird Querschnittsfäche in m2 umgerechnet
+1653:            'Geometrische Größen berechnen
+1654:            'Anmerkung: es wird davon ausgegangen, dass Temperatursensoren
+1655:            'mittig ins Rohr stehen
+1660:            ' Anmerkung: Kugelkalotte an t-sensor spitze wird in der Betrachtung als
+1661:            ' umströmter Zylinder vernachlässigt
+1663:            'Abkühlkurven einlesen
+1690:        ''' <summary>
+1691:        ''' Wärmeübergang Masse
+1692:        ''' </summary>
+1693:        ''' <param name="jz">Zeit</param>
+1694:        ''' <remarks></remarks>
+1708:            'Festlegung Schwellwert für Genauigkeit der Temperaturberechnung (wird wegen iterativem Berechnungsmodus benötigt)
+1711:            'Ãœbergabe Eintrittstemperatur des Abgases aus oberhalb liegendem Modul bzw. dem Motor
+1730:            'Berechnung der aktuellen Massentemperatur
+1733:                '! bei n_iter > 0 ist bereits der Endwert der letzten Iteration zugewiesen
+1739:            'Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+1761:                'Wärmekapazität (vgl. Bogdanic)
+1780:                'Schleife für Iteration Wärmeübergang
+1788:                    '                                     Abbruchkriterium siehe unten
+1794:                    'Ermittlung der Temperatur des Abgases in der Mitte der Masse ("t_gas_mid") aus einem nichtlinearem (logaritmisch) Temperaturverlauf 
+1803:                        'Wärmeübergang Konvektion innen für alle Module (außer Rohr)
+1807:                        'für Rohrmodule:
+1809:                        'Nusselt Zahl: Dichte = 345/t_gas_mid, Term in Klammer: mu_Rohr / mu_Mitte
+1811:                        'Wärmeübergang (Konvektion innen), d_pipe in m: char. Länge
+1815:                    'Wärmekapazität (vgl. Bogdanic)
+1820:                    'Abbruchkriterium: Änderung der Abgas-Austrittstemperatur im Vergleich zum letzten Iterationsschritt kleiner Schwellwert
+1838:            'Berechnung der Wärmeverluste der "thermischen Masse" nach außen
+1840:                'Parameter werden aus EXS-Datei eingelesen:
+1841:                'Daten für MuD:
+1842:                '   Oberfl_Kat = 0.12 'Oberfläche für Wärmeübergang in m^2
+1843:                '   Emiss = 0.5 'Emissivität
+1844:                '   A = 7, B = 0.21, C = 8, k = 1, d = -340
+1846:                'Empirische Formel, passt für alle Rollentests recht gut
+1848:                'Anm.: Versuch mit direkter Abhängigkeit von t_m -> funktioniert nicht gut
+1850:                'Wärmeverlust durch Strahlung
+1852:                'Wärmeverlust durch Konvektion
+1856:                'Parameter werden aus EXS-Datei eingelesen:
+1857:                'Daten für MuD:
+1858:                '   Modul Nr. 3:
+1859:                '       Oberfl_Mod3 = 0.169457508 'Oberfläche für Wärmeübergang in m^2
+1860:                '       Emiss = 0.5 'Emissivität
+1861:                '       A = 7
+1862:                '       B = 0.42
+1863:                '   Modul Nr. 4:
+1864:                '       Oberfl_Mod4 = 0.103596481 'Oberfläche für Wärmeübergang in m^2
+1865:                '       Emiss = 0.9 'Emissivität
+1866:                '       A = 7
+1867:                '       B = 0
+1869:                'Wärmeverlust durch Strahlung = Sichtfaktor * Emissivität * St.-Boltzm.-Konst * Oberfläche * (T_Rohr^4 - T_Umgebung^4)
+1871:                'Wärmeverlust durch Konvektion = Wärmeübergangskoeffizient * Oberfläche * (T_Rohr - T_Umgebung)
+1874:                'Standard: Crad konstant, keine Verluste durch Konvektion
+1879:            'Gesamtwärmeverlust
+1885:        ''' <summary>
+1886:        ''' Wärmeübergang Thermoelement
+1887:        ''' </summary>
+1888:        ''' <param name="jz">Zeit</param>
+1889:        ''' <remarks></remarks>
+1899:                'Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+1912:                '!Formelwerk Berechnung Wärmeübergang am umströmten Zylinder
+1921:                'Vereinfachte Lösung der Wärmeflussgleichung für den t-sensor
+1922:                'entspricht einer Diffgl. für ein PT1 glied
+1924:                'Zeitdiskrete Lösung der PT1-Diffgl
+1991:                ''Extrapolation für LastTemp > TempAr(0)
+1992:                'If TempAr(0) < LastTemp Then
+1993:                '    'TODO: StatusMSG(8, "Extrapolation of Cool Down Temperature! t = " & jz & ", Temp(t-1) = " & LastTemp)
+1994:                '    i = 1
+1995:                '    GoTo lbInt
+1996:                'End If
+1998:                'i = 0
+1999:                'Do While TempAr(i) > LastTemp And i < Adim
+2000:                '    i += 1
+2001:                'Loop
+2003:                'Extrapolation für LastTemp < TempAr(Adim)
+2005:                'lbInt:
+2006:                'Interpolation
+2013:                'Einen Zeitschritt vor ( = 1 Sekunde)
+2033:    ''' <summary>
+2034:    ''' SCR Modell
+2035:    ''' </summary>
+2036:    ''' <remarks></remarks>
+2041:        'Klasse initialisiert als Unterelement von TempMod
+2047:        'c     Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+2049:        'c     Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+2053:        'Filename sekündliches Ausgabefile spezifizieren
+2105:            'Abbruch wenn kein NOx gegeben
+2126:            't-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+2149:            ' Programm zur Simulation SCR-Flottendurchschnitt
+2150:            ' Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+2151:            '            dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+2162:            '     1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+2164:            '     a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+2165:            '     SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+2166:            '     Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+2172:            '     b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+2173:            '         Formel gilt auch für die ersten 20 Sekunden
+2187:            '     c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+2188:            '         Formel gilt auch für die ersten 60 Sekunden
+2194:            '        Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+2201:            '     Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2213:            '     2.) Berechnung deNOx
+2215:            '        a.) deNOx aus Kennlinie:
+2225:            'c        b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+2227:                'c
+2228:                'c           t_up aus Kennlinie:
+2237:                'c
+2238:                'c           NOx_raw aus Kennlinie:
+2247:                'c
+2248:                'c           Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+2257:                'c
+2258:                'c           Raumgeschwindigkeit aus Kennlinie:
+2267:                'c
+2269:                'c
+2271:                'c
+2276:            'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+2311:    ''' <summary>
+2312:    ''' SCR Modell
+2313:    ''' </summary>
+2314:    ''' <remarks></remarks>
+2319:        'Klasse initialisiert als Unterelement von TempMod
+2325:        'c     Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+2327:        'c     Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+2331:        'Filename sekündliches Ausgabefile spezifizieren
+2385:            'Abbruch wenn kein NOx gegeben
+2405:            't-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+2429:            ' Programm zur Simulation SCR-Flottendurchschnitt
+2430:            ' Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+2431:            '            dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+2443:            '     1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+2445:            '     a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+2446:            '     SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+2447:            '     Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+2453:            '     b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+2454:            '         Formel gilt auch für die ersten 20 Sekunden
+2470:            '     c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+2471:            '         Formel gilt auch für die ersten 60 Sekunden
+2479:            '        Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+2486:            '     Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2498:            '     2.) Berechnung deNOx
+2500:            '        a.) deNOx aus Kennlinie:
+2510:            'c        b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+2512:                'c
+2513:                'c           t_up aus Kennlinie:
+2522:                'c
+2523:                'c           NOx_raw aus Kennlinie:
+2532:                'c
+2533:                'c           Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+2542:                'c
+2543:                'c           Raumgeschwindigkeit aus Kennlinie:
+2552:                'c
+2554:                'c
+2556:                'c
+2561:            'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+2592:    ''' <summary>
+2593:    ''' KAT-Modell
+2594:    ''' </summary>
+2595:    ''' <remarks></remarks>
+2600:        'Klasse initialisiert als Unterelement von TempMod
+2606:        'Kennfelddaten
+2607:        'Private Massflow As List(Of Single)
+2608:        'Private Temp_KAT As List(Of Single)
+2609:        'Private Massflow_Norm As List(Of Single)
+2610:        'Private Temp_KAT_Norm As List(Of Single)
+2611:        'Private Massflow_Min As Single
+2612:        'Private Massflow_Max As Single
+2613:        'Private Temp_KAT_Min As Single
+2614:        'Private Temp_KAT_Max As Single
+2615:        'Private ListDim As Integer
+2618:        'Public KonvRate As Dictionary(Of tMapComp, List(Of Single))
+2626:        ''' <summary>
+2627:        ''' Erstellen eines neuen KAT-Moduls
+2628:        ''' </summary>
+2629:        ''' <param name="i">ID</param>
+2630:        ''' <param name="EXSref">EXS-Klasse</param>
+2631:        ''' <remarks></remarks>
+2641:        ''' <summary>
+2642:        ''' Interpolationsfunktion
+2643:        ''' </summary>
+2644:        ''' <param name="x">Massenstrom</param>
+2645:        ''' <param name="y">Temperatur vor KAT</param>
+2646:        ''' <param name="MapID">MapID der entsprechenden Abgaskomponente</param>
+2647:        ''' <returns>interpolierten Wert für x und y aus Kennfeld</returns>
+2648:        ''' <remarks>Aus Massenstrom-Temperatur Kennfeld wird Konvertierungsrate für entsprechende Abgaskomponente berechnet</remarks>
+2659:        ''' <summary>
+2660:        ''' Einlesen der Kennfelder für Konvertierungsraten
+2661:        ''' </summary>
+2662:        ''' <param name="Name">Dateiname</param>
+2663:        ''' <remarks></remarks>
+2694:            'Header
+2716:            'Units (wird nicht ausgewertet)
+2719:            'Werte
+2731:                'KonvRaten Null setzen wenn Komponente nicht gegeben
+2742:            'Triangulieren
+2750:            'Dic. für modale Konvrate definieren
+2762:        ''' <summary>
+2763:        ''' Berechnung der Konvertierungsrate aus Kennfeld
+2764:        ''' </summary>
+2765:        ''' <param name="jz">Zeit</param>
+2766:        ''' <remarks>Für die Berechnung wird die Temperatur des Thermoelements am Kateingang (entspricht Modulnummer i-1) verwendet!!!</remarks>
+2768:            'Konvertierungsrate aus Kennfeld berechnen
+2783:        ''' <summary>
+2784:        ''' Header für Ausgabedatei
+2785:        ''' </summary>
+2786:        ''' <remarks></remarks>
+2795:        ''' <summary>
+2796:        ''' Daten für Ausgabedatei
+2797:        ''' </summary>
+2798:        ''' <param name="jz">Zeit</param>
+2799:        ''' <remarks></remarks>
+2818:    ''' <summary>
+2819:    ''' Interface zur Konverter-Klasse cScrMod, cDocMod , usw...
+2820:    ''' </summary>
+2821:    ''' <remarks></remarks>
+2823:        'Sub NewI(ByVal i As Int16)
+2834:        ''C
+2835:        'C     Unterprogramm zu PHEM zur linearen INterpolation aus einem Polygonzug (z.B. in Vissimzs.for aufgerufen)
+2836:        'C     uebergeben wid "such" als X-Wert, der dann als berechneter Y-Wert wieder zurueck gegeben wird
+2837:        'C     Zu Belegen sind vorher:
+2838:        'C     Xis(j) und Yis(j)
+2839:        'c     Zu uebergeben der gesuchte Wert (such) und die Anzahl an vorhandenen Polyginpunkten (izpl)
+2840:        'c
+2841:        'C
+2842:        ' INCLUDE "com.inc"<<<<<<<<<<<<<<<<<<<<<<<<<<
+2848:        'C
+2849:        'c
+2850:        'C    Suche der naechstgelegenen Drehzahlpunkte aus eingegebener Vollastkurve:
+2851:        'c     Abstand zu Eingabepunkten und Suche des Punktes mit geringstem Abstand:
+2861:        'c
+2862:        'C      Festlegung des zweiten INterpolationspunktes (nur interpolieren, nicht extrapolieren)
+2863:        'C
+2868:                '!Extrapolation nach oben
+2874:                '!Extrapolation nach unten
+2878:        'c
+2879:        'c      Sortieren der 2 Werte nach aufsteigendem n:
+2880:        'c
+2886:        'c
+2887:        'c     Interpolation der zugehoerigen Maximalleistung (P/Pnenn)
+2888:        'c
+2893:        'C
+>>> Application.Designer.vb
+2:' <auto-generated>
+3:'     Dieser Code wurde von einem Tool generiert.
+4:'     Laufzeitversion:4.0.30319.269
+6:'     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+7:'     der Code erneut generiert wird.
+8:' </auto-generated>
+17:    'HINWEIS: Diese Datei wird automatisch generiert. Ändern Sie sie nicht direkt. Zum Ändern
+18:    ' oder bei in dieser Datei auftretenden Buildfehlern wechseln Sie zum Projekt-Designer.
+19:    ' (Wechseln Sie dazu zu den Projekteigenschaften, oder doppelklicken Sie auf den Knoten "Mein Projekt" im
+20:    ' Projektmappen-Explorer). Nehmen Sie auf der Registerkarte "Anwendung" entsprechende Änderungen vor.
+>>> AssemblyInfo.vb
+5:' Allgemeine Informationen über eine Assembly werden über die folgenden 
+6:' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+7:' die mit einer Assembly verknüpft sind.
+9:' Die Werte der Assemblyattribute überprüfen
+20:'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+23:' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+25:'      Hauptversion
+26:'      Nebenversion 
+27:'      Buildnummer
+28:'      Revision
+30:' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 
+31:' übernehmen, indem Sie "*" eingeben:
+32:' <Assembly: AssemblyVersion("1.0.*")> 
+>>> Resources.Designer.vb
+2:' <auto-generated>
+3:'     Dieser Code wurde von einem Tool generiert.
+4:'     Laufzeitversion:4.0.30319.269
+6:'     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+7:'     der Code erneut generiert wird.
+8:' </auto-generated>
+18:    'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+19:    '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+20:    'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+21:    'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+22:    '''<summary>
+23:    '''  Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+24:    '''</summary>
+35:        '''<summary>
+36:        '''  Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+37:        '''</summary>
+49:        '''<summary>
+50:        '''  Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+51:        '''  Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+52:        '''</summary>
+>>> Settings.Designer.vb
+2:' <auto-generated>
+3:'     Dieser Code wurde von einem Tool generiert.
+4:'     Laufzeitversion:4.0.30319.269
+6:'     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+7:'     der Code erneut generiert wird.
+8:' </auto-generated>
diff --git a/Tools/TranslateComments/comments2-trans.txt b/Tools/TranslateComments/comments2-trans.txt
new file mode 100644
index 0000000000..bf1b692483
--- /dev/null
+++ b/Tools/TranslateComments/comments2-trans.txt
@@ -0,0 +1,2007 @@
+>>> ApplicationEvents.vb
+5:    ' The following events are available for MyApplication:
+7:    ' Startup: Raised when the application starts even before the creation of the Startup-forms.
+8:    ' Shutdown: Raised after closing all the application forms. This event is not raised if the application terminates abnormally.
+9:    ' UnhandledException: Raised if the application encounters an unhandled exception.
+10:    ' StartupNextInstance: Raised when launching a single-instance application, and one is already active.
+11:    ' NetworkAvailabilityChanged: Occurs when connecting or disconnecting to the network.
+14:        'Initialization
+25:            'Paths
+33:            'If folder does not exist: Create!
+52:                    'Preconfigure Directories.txt
+78:            'Separator!
+91:            'Initialize Classes
+106:            'Start Log
+109:                'File size check
+112:                'If Log too large: Delete
+139:            'License initialization
+>>> cConfig.vb
+49:        '*** First line: Version
+52:            ' "Remove V'' => It remains the number
+55:                'If invalid version: Abort
+58:                'Version settled
+134:        'Line      Variable        Type         Description
+135:        '(01)       WorkDPath       String      WorkDir
+136:        '(02)       LastMode        Short      Last used mode (equivalent CBoxMODE.SelectedIndex)
+137:        '(03)       IntpV2          Boolean     New interpolator to use
+138:        '(04)       nnormEngStop    Single      Stop engine if under this Revolutions
+139:        '(05)       TEMpath         String      TEM_Data path
+140:        '(06)       LastTEM         String      Last TEM file -not in Options Form!!!!
+141:        '(07)       TEMexl          Boolean     Open TEM in Excel  -not in Options Form!!!
+142:        '(08)       EAAvInt         Short       Analysis intervals in seconds. If 0: Ask for Value
+143:        '(09)       ModOut          Boolean     Dump Modal
+144:        '(10)       WegKorJa        Boolean     Wegkorrektur damit bei Geschw. Reduktion Zyklus nicht kürzer wird |@@| 10)       WegKorJa        Boolean     Path-correction in so speed. Reduction cycle is not shorter
+145:        '(11)       GnVorgab        Boolean     Gear-per- Revolutions
+146:        '(12)       LogSize         Int16       Maximum Log-size [MiB]
+147:        '(13)       FZPsort         Boolean     FZP sortieren (früher Standard da VISSIM die .fzp nach Sekunden sortiert ausgibt) |@@| 13)       FZPsort         Boolean     FZP sort (formerly standard since the VISSIM. Fzp sorted according seconds) outputs
+148:        '(14)       FZPsortExp      Boolean     Export FZP Sorted
+149:        '(15)       BATCHoutpath    Boolean     Output path for BATCH mode:   <WORKDIR>, <GENPATH> or path
+150:        '(16)       BATCHoutSubD    Boolean     Dump-BATCH in Subfolders (per .gen File)
+151:        '(17)       AirDensity      Single      Air-density
+152:        '(18)       FinalEmOnly     Boolean     Dump only Final Emission
+153:        '(19)       FCcorrection    Boolean     FC-Correction in BATCH-mode
+175:                    'Previously: IntpV2 = CBool(line)
+>>> cCustomMap.vb
+85:        'Search Min/Max
+105:        'Normalize
+125:            'When sign of x and y is not equal to the sign of xA(i) and yA(i) respectively, then skip Row i
+>>> cCycleKin.vb
+9:    'Fahrzustände in Sekunden |@@| Driving-states in seconds
+15:    'Fahrzustands-Anteile |@@| Driving-state ratios
+21:    'Acceleration parameters
+82:        '3s-Accel
+91:            'Driving-state ratios:  Stop/Acc/Dec/Cruise
+106:            'Average-Accel
+>>> cDelaunayMap.vb
+35:        'XY-triangulation
+50:        'XZ-triangulation
+>>> cDEV.vb
+13:    '********************************* Instructions for integrating new DEV-Options *********************************
+15:    '1. Entry in "Sub New()"
+17:    '   I) Define new cDEVoption Object with "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)"
+19:    '       ConfigType      <tDEVconfType>  ...Type definition: Boolean, Integer, Single, String, menu selection (Integer) or Reference to Function
+20:    '       Description     <String>        ...Description of the parameters
+21:    '       SaveInConfg     <Boolean>       ...Whether you want to save settings for next PHEM-startup
+22:    '       Enabled         <Boolean>       ...Whether settings in the DEV-tab can be changed
+24:    '   II) default value definition. Distinguish which ConfigType to use:
+46:    '           Where NameDerFunktion is a function to call returning a <String>: "Public Function NameDerFunktion() As String"
+50:    '           Definition of Available selection options as <String>:
+52:    '               Conf0.AddMode ("select 1")
+53:    '               Conf0.AddMode ("Option 2")
+54:    '               and so forth.
+56:    '           Default value definition: First choice = 0
+73:        '**************************** START: Parameters Configuration '****************************
+113:        '**************************** END: Parameters Configuration '*****************************
+121:    'Initialize the actual Config-Parameters from MyConfigs list
+126:    'Demo for Delegate Function
+327:                    '??? Darf nicht sein |@@| May not be
+>>> cEmComp.vb
+21:    'Transient Correction
+25:    'Component is dumped every one second
+28:    'Define ATVals (EXS)
+31:    'Totals/Average Values
+109:        'Averaged
+113:        'Total (g/h converted into g)
+>>> cERG.vb
+47:        '********************** GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '********************** |@@| Select GEN-list for ADVANCE either from Fleet or from Job-list '**********************
+84:        '********************** Create Erg-entries '**********************
+90:        'Vehicle type-independent
+94:        'For each GEN-file check Mode and Map
+115:                    'nothing...
+136:            'Electric-Vehicle / Hybrid
+158:                'Only EV:
+171:            'Conventional / Hybrid (Everything except EV)
+174:                'Conventional vehicles ...
+182:                    'From the measured data
+197:                            'Dump x/h if in ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into  x/km is not possible
+212:                    'From the Engine-Map
+240:                            'Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible
+260:            'currently nothing
+266:            'Vehicle-related fields
+288:        'ErgListe sortieren damit g/km und g/h nebeneinander liegen |@@| Sort ErgListe so that g/km and g/h are side-by-side
+357:        'Vehicle type-independent
+361:        'Length, Speed, Slope
+364:            'Average-Speed. calculation
+374:            'Average-Slope calculation
+388:            'Positive effective EM-Power
+399:            'Positive effective Battery-Power = internal EM-Power
+410:            'Positive internal Battery-Power
+421:            'Calculate Energy consumed
+424:            'Negative effective EM-Power
+435:            'Negative effective Battery-Power = internal EM-Power
+446:            'Negative internal Battery-Power
+457:            'Charged-energy calculation
+460:            'Battery in/out Energy
+495:            'Only EV:
+498:                'Energy-consumption
+505:        'Conventional means everything with ICE (not EV)
+508:            'Emissions
+511:                'Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible
+522:            'Power, Revolutions
+551:        'Nur Gesamtfahrzeug (nicht EngOnly) |@@| Only Entire-vehicle (not EngOnly)
+637:        'Create Output-string:
+655:        'Open file
+668:        'Close file (will open after each job)
+687:        'Open file
+704:        'Close file
+739:        'Define Output-path
+753:        'Open file
+755:            'Open file
+769:        'Close file (will open after each job)
+>>> cVSUM.vb
+46:        'Average Speed calculation
+114:        'TODO: Mission without Cycle-name
+>>> M_FCCor.vb
+5:    'C     Subroutine to correct the Consumption-values from Engine-size (HBEFA-calculations because
+6:    'C     all HDV(LKW)-sizes are calculated from the same *. mep
+32:        'c  Correction of the Fuel-consumption
+33:        'c  only for manual calculations and HDV(LKW)
+35:            'c        for Euro0 and earlier, 3 different KF used depending on the size
+36:            'c        therefore no Size-correction here
+39:            'c         Correction-function for EUR1 and EUR 2 adopted 1:1 from ARTEMIS standard
+50:            'c        Korrekturfunktion Euro 3 gg. ARTEMIS geringfügig adaptiert (siehe FcCorr_Eu3ff.xls) |@@| Correction-function for Euro 3 like  ARTEMIS slightly adapted (see FcCorr_Eu3ff.xls)
+55:            'c         Correction function for Euro 4 similar to Euro3
+56:            'c         but lightly adapted: Average Nominal-Power of the engines into mep verwursteten
+>>> M_Lese.vb
+16:        'Read GEN
+35:        'VECTO: Defaultwerte für Parameter die nicht mehr in der .GEN/.VECTO sind werden beim Einlesen über SetDefault belegt. |@@| VECTO: Default values for the parameters are no longer in GEN/.VECTO are to be occupied in reading about SetDefault.
+46:        'Error message in init()
+51:        'Einlesen der KFZ-Spezifikationen aus 'KFZspez' |@@| Read the Vehicle(KFZ)-specifications from 'KFZspez'
+131:        '   FLD muss jetzt vor MAP/MEP eingelesen werden falls dort <DRAG> Einträge sind! |@@| if there are <DRAG> entries, then read FLD before MAP/MEP!
+142:        'Normalize
+146:        '    Map: Columns 1 and 2 are the x-and y-coordinates (Pe, n)
+147:        '    the rest are Measurement-values
+148:        '    Emissions and Consumption in (g/(h*kW_NominalPower) at HDV(SNF)
+149:        '    Emissions (g/h) and consumption in (g/(h*kW_NominalPower) in cars(PKW) and LCV(LNF)
+152:            'Kennfeld read
+163:            'Normalize
+170:        '    Reading the Vehicle Driving-cycle (Not in ADVANCE).
+171:        '       LUZ: 04.02.2011: From now outside of READING because of new BATCH structure
+174:        '    Dynamik-Korrekturparameter, falls dynamokkorrektur ausgewählt: |@@| Dynamic correction parameter, if exclusively Dynamic-correction(dynamokkorrektur):
+175:        '    Parameter aus multipler Regressionsanalyse, Differenz zu stationär in |@@| Parameters of multiple regression analysis, Difference with stationary
+176:        '      HDV(SNF): (g/h) / kW_Nominal-power for individual parameters
+177:        '      Cars(PKW) (g/h) for emissions (g/h)/kW for consumption
+192:        'Reading data for hybrid simulation:
+195:            'TODO: Init EV/HEV here!
+>>> M_MAIN.vb
+31:        'Main program for all modes
+48:        'If there are any "unplanned" Aborts
+51:        'Reset the fault
+54:        'Specify Mode and Notification-msg
+70:        'License check
+93:        'Create BATCH Output-folder if necessary
+114:        'MOD-Data class initialization
+116:        'TEST: Schaun ob's auch ohne dem geht: MODdata.Init() |@@| TEST: Just look whether it's even without the: MODdata.Init()
+118:        'ERG-class initialization
+128:        'Warning on invalid/unrealistic settings
+131:        'Notify
+139:        '       Calculation Loop for all Preset-cycles and Vehicles:
+142:        '**************************************** Job loop ****************************************
+192:            'Check if Abort
+195:            'If error when read GEN
+198:            'Reading the input files
+199:            '   BATCH: Cycle from DRI list
+200:            '   ADVANCE: Cycle is not read
+206:            'Check if all the modes are licensed in the GEN file
+229:            'If optimizer is active, then read parameters here
+232:            'BATCH: Create Output-sub-folder
+255:            '************************************** Cycle-loop ****************************************
+268:                    'BATCH mode: Cycle from GEN-file but not from DRI list
+277:                    'Output name definition
+296:                '********************************** VECTO-Cycle-loop **********************************
+321:                    'TODO: Loading-loop
+322:                    '***************************** VECTO-loading-loop *********************************
+326:                    'Entry point for SOC-start iteration
+329:                    'Clean up
+332:                    'Read cycle
+335:                        'Read in
+344:                        'convert v(s) into v(t) (optional)
+352:                        'Convert to 1Hz (optional)
+356:                                'Error-notification in DRI.Convert()
+362:                        'Unnormalised
+370:                    'Initialize Cycle-specs (Speed, Accel, ...)
+377:                        'Rechne .npi-Leistung in Pe und P_clutch um |@@| Expect Npi-Power into Pe and P_clutch
+385:                        'CAUTION: VehmodeInit() requires information from GEN and DRI!
+387:                            'Error-notification within VehmodeInit()
+416:                                    'TODO: notification...
+444:                        'Calculate CycleKin (for erg/sum, etc.)
+452:                    'Emissionen und Nachbehandlung - wird bei EV-Modus nicht ausgeführt |@@| Emissions and After-treatment - it will not run in EV mode
+457:                        'Determine TC parameters per second
+460:                        'Map creation
+476:                        'Calculate Raw emissions
+479:                        'TC Parameter umrechnen in Differenz zu Kennfeld-TC-Parameter |@@| Convert TC parameters to differences with Map-TC-parameters
+482:                        'Dynamic correction
+488:                        'Korrektur der Verbrauchswerte kleiner LKW-Motoren bei HBEFA |@@| Correction of consumption values smaller HDV(LKW) engines by HBEFA
+494:                        'Exhaust system simulation
+504:                        'Totals / Averages form
+520:                    '*** Output Every second ***
+532:                    'VECTO Output
+533:                    'TODO: Loadings umschalten... |@@| TODO: Loadings Gear-shift ...
+540:                    'Output for BATCH and ADVANCE
+544:                        'In ADVANCE, Cycle-cancel = Job-cancel
+560:                        'Output in Erg (first Calculation - Initialization & Header)
+567:                    'Data Cleanup
+577:                    'TODO: Loading Loop
+578:                    '******************** END *** VECTO-loading loop *** END ************************
+588:                '************************* END *** VECTO Cycle-loop *** END *************************
+595:            '****************************** END *** Cycle-loop *** END ******************************
+641:            'Check whether Abort
+647:        '******************************* END *** Job loop *** END *******************************
+>>> M_OptInterface.vb
+21:    'Corrected Emissions (determined by SOC-iteration-module)
+24:    '*** Opt_Interface On/Off
+32:                'Initialization
+40:    '*** Initialization
+44:        'Count to Zero
+47:        'Delete Corr. Em.
+52:        'TODO: I/O-Verzeichnis festlegen |@@| TODO: Specify I/O-directory
+85:        'Timer Initialization/Start
+92:    '*** Read Parameters
+98:        '**** Reading the Input-file with Opt-parameter
+108:    '*** Dump parameters
+114:        '**** Ausgabe der Output-Datei mit Zielfunktion |@@| Dump the output file along with the Objective-function(Zielfunktion)
+124:        'Dump the StatusString
+133:        'Berechnung der Zielfunktion |@@| Calculation of the Objective-function(Zielfunktion)
+136:        'Ausgabe der Zielfunktion |@@| Dump the Objective-function(Zielfunktion)
+144:    '*** Opt Deactivation
+153:    '*** Status-notification (must not be called by BGWorker)
+158:    '*** Start PHEM - Called from F_MAINForm.ComMsgTimer when the Start-signal is received
+161:        'PHEM start
+165:        'Stop the timer
+167:        'Count + 1
+169:        'PHEM start
+174:    '*** PHEM ready - called by BackgroundWorker1_RunWorkerCompleted when PHEM finished
+177:        'Ausgabe der Zielfunktion |@@| Dump of the Objective-function(Zielfunktion)
+180:        'Finish PHEM_Launcher
+183:        'Start the Timer again
+190:    '*** Finished PHEM_Launcher
+>>> M_SOC_Iter.vb
+97:        'Check whether the Sign of Delta-SOC changes
+102:                'Sign changes ...
+105:                    '...Limit reached => Abort
+126:                'If the last iteration was the best (SOCnAbbr = True): Exit
+131:                'If another iteration was better (SOCnAbbr = False): Repeat
+168:        'Check whether LinReg possible: Mind. 2 calculations; Mind. dSOC-1 sign-changes
+271:            'Uncorrected Em use if SOC-iteration OK
+276:            'Uncorrected Em used
+284:        'Corrected Emissions for Optimizer
+286:            'If SOC-iteration was successful (or Lin.Reg not possible) then use Emissions from the last (uncorrected) calculation
+>>> VECTO_Global.vb
+20:    'TODO: Get rid of it! SOC-iteration belongs either in the Power-loop or Em-calculation for LinReg
+27:    'File format
+346:        'Log start
+>>> ADVANCE\cADV.vb
+84:        'Line 1: FZP file
+87:        'Line 2: FLT file
+90:        'Line 3: TEM file
+93:        'Line 4: RndSeed
+96:        'Line 5: MISKAMout True/False|
+99:        'Line 6: STRfilter True/False
+102:        'Line 7: Distance filters for SUM.STR
+105:        'Line 8 +: STR files
+>>> ADVANCE\cADVANCE.vb
+71:    'Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien  |@@| Fields for Route-number, Track and Coordinates for all STR files
+103:    'Calculation
+113:    'ADVANCE initialization
+126:        'Read ADV-File
+129:        'Check whether FLT is available
+135:        'Check whether FZP is sorted
+159:        'FLT einlesen (muss vor STR sein wegen cSTRerg) |@@| Read FLT  (must be done before STR because of cSTRerg)
+164:        'Create EMlist
+183:        'STR read
+204:        'Create Lists
+209:        'Read FZP
+213:        'FZP sort (and export)
+233:        'For Output-Vis
+236:        'Dump-initialization
+238:        '   Filename
+241:        ' Dump Modal
+246:        'Start-values
+260:    'ADVANCE memory release
+270:        'Dump
+273:        'Free memory
+333:        'Delete Lists
+340:        'Garbage Collection - Soll "System Out of Memory" Exception verhindern (tut's aber nicht!) |@@| Garbage Collection - If "System Out of Memory" Exception prevents it (but does not do it!)
+346:    'ADVANCE Vehicle calculation
+361:        'Check whether finished
+368:        'Initialize Cycle-class
+374:        'Fahzeugnummer und Typ definieren (bleibt hier konstant) |@@| Vehicle-number and Type definition (here remains constant)
+375:        '   Old Vehicle is VehStrAlt, New is VehStr
+380:        'Create Lists
+388:        'Define Fields for Vehicle-calculations
+391:            'Check whether it is a new Vehicle
+396:            'General(Allgemeiner) Vehicle-Cycle
+401:            '   Strecken-Auswertung (MISKAM) |@@| Road-Distance evaluation (MISKAM)
+415:        '   Vehicle identification
+419:        'Check whether Cycle too short => skip
+422:        'Increase number of Vehicles per each Type
+427:        'Check whethert last GEN-file to use is new, otherwise occupied(Belegung ) by FLT
+440:        'VehStr is now ALT
+449:    'Section by section calculation
+469:        'Zyklus durchschleifen |@@| through Cycle-loop
+472:            'No. of STR-file
+475:            'If STR-No has changed:
+476:            '   Finish with Old STR-No.
+485:                        'Distance (km driven)
+488:                        'Travel-Time in h
+491:                        'Vehicle(KFZ) No.
+494:                        'Cumulative emissions
+513:            'Add up
+527:        'Last STR completed
+534:                'Distance (km driven)
+537:                'Time in h
+540:                'Vehicle(KFZ) No.
+543:                'Cumulative emissions
+565:    'Read FLT
+667:    'Read FZP
+696:        'Determine File-length
+730:        'Dimension arrays
+750:        'Import File
+755:        'Skip Comments
+765:            'Strecken die nicht in der STR Datei aufgeführt sind werden hier entfernt |@@| Routes that are not listed in the STR file, are ignoted(?) here
+783:            'Show Arrays
+794:            'Display Progress
+804:        'Free memory
+814:            'Newly dimensioned arrays
+830:    'Sort FZP
+872:            'Current Vehicle is vNr1
+874:            'Count vehicles with vNr = vNr1
+883:            'vNrAnz = Number of Vehicles with vNr = vNr1
+884:            'Sort all vehicles with vNr = vNr1 by Vehicle-number
+892:                        'Cache = line x1
+901:                        'Linex1 = line x2
+910:                        'Line x2 = cache
+924:            'vNr1 sorted by time
+931:                            'Cache = line xx1
+938:                            'Line xx1 = Line xx2
+946:                            'Line x2 = Cache
+960:            'Display Status
+974:    'FZP export
+1016:        'Data
+1042:    'Read STR
+1133:        'Create SID-List
+1162:    '   ...Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben |@@| Vehicles divisions, have the bridge the gap over time
+1194:    'Read ADV
+1208:        '********** .Read ADV-file ********
+1217:        'Line 1: FZP file
+1220:        'Line 2: FLT file
+1223:        'Line 3: TEM file
+1226:        'Line 4: RndSeed
+1229:        'Line 5: MISKAMout True/False
+1232:        'Line 6: strFilter True/False
+1235:        'Zeile 7: STR.SUM Streckenfilter |@@| Line 7: STR.SUM Route-filter
+1238:        'Line 8+: STR files
+1258:            'Define Output-path
+1286:        'File results with sums over all Vehicles(KFZs):
+1308:    'Close Output
+1331:            'C      Convert Emissions to g per second and Vehicle(KFZ)/day
+1346:            'C      Convert Emissions to mg per Meter
+1347:            'C     Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet: |@@| Route-length [m] is calculated from straight line between start and end points:
+1363:            'C      Dump Results
+1365:            'C      Filename for ResultFile = Input-filename but with *.sd3:
+1369:            'C       File mit Summen Ergebnissen ueber alle Streckenstuecke: |@@| File with sums over all results Route-sections:
+1439:        'C     Subroutine of PHEM/Advance for dumping the results of MISKAM Air-Quality-Model of Lohmeyer
+1440:        'C     Dump Data separated by Semicolons
+1452:        'C     Adding up the Emission-data for Route-segments, for every Vehicle over each second
+1453:        'C     Caution: There are 2 possible Directions(Richtungen) for each section but only the StrId is given to *.fzp -> the "Closest" assigned Direction(Richtungen)
+1454:        'C     Richtung zugewiesen |@@| Direction assigned
+1464:                    'C      Suche nach naechstgelegenem Strassenteilstueck |@@| Find nearest Road-section
+1465:                    'C      Koordinaten Kfz: |@@| Coordinate vehicle(KFZ):
+1468:                    'C      Koordinaten Strecke: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) aus Eingabe |@@| Route Coordinates: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) from Input
+1469:                    'C      Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j |@@| Total distance to the beginning and end of the Route-section j
+1479:            'C      Falls Streckennummer auf *.fzp File in *.str File nicht existiert, wird auf naechstgelegenes Stueck zugewiesen (gleiches System wie oben): |@@| If the Route number in *.fzp file not exist in *.str file, it is assigned the nearest section (same method as above):
+1495:            'C     Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten: |@@| Summation of the emissions to the respective associated sections:
+1496:            'C     berechnung sekuendlich in (g/h)/3600 -> g/Strecke ueber gesamte Zeit |@@| calculation in every second (g/h) / 3600 - by> g / haul all the time
+1503:            'C      Zaehlen der Kfz fuer DTV (nur wenn nicht in voriger Sekunde auch schon auf der Strecke |@@| Counting the Vehicle for DTV (only if not already in previous second on the track
+1511:            'C     Grobe Rechnung Benzol nach GLOBEMI (HBEFA): |@@| Rough calculation for benzene GLOBEMI (HBEFA):
+1512:            'C      Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1
+1534:            'C     Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!: |@@| Rough calculation of Soot, Soot shares of PM currently only Schaetz-values!!:
+1535:            'C      Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1
+1562:            'C     SO2-Emissionen aus dem  im Kraftstoff enthaltenen |@@| SO2-Emissions as contained in the Fuel
+1563:            'C     Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2 |@@| Sulfur expected. With SO2 mass = (mass% S / 100) * 2
+1596:        '******** Dump each STR results ' *********
+1601:        '********* Dump Totals of all STR's ' *********
+1611:        '** File Header
+1618:        '*************************** Em per km ***************************
+1648:        '** Em per segment
+1656:            'Number of Vehicles
+1659:            'Travel time
+1674:            'Em per km
+1683:            'Writing
+1688:        '** Em per Vehicle Type
+1696:            'Number of Vehicles
+1699:            'Reisezeit, Strecke, Avg.Speed |@@| Travel time, Route-Distance, Avg. Speed
+1727:            'Writing
+1732:        '** Total
+1738:        'Number of Vehicles is not calculated from STRerg (makes no sense) but from cFLTfleet-recording
+1745:        'Travelling time
+1766:        'Em per km
+1779:        'Writing
+1815:        '** Em per segment
+1828:            'Writing
+1833:        '** Em per Vehicle Type
+1850:            'Writing
+1855:        '** Total
+1870:        'Writing
+1879:    '.Analyze Mod-file
+1895:        'Open Infile
+1910:        'Anzahl VehNummern |@@| Number of VehNummern
+1915:        'Loop through all VehNummern in list
+1918:            'Abort when User-abort
+1924:            'Abort when File finished
+1931:            'Open Output-File / Abort if Error on Opening
+1937:            'Loop through file
+1940:                'If string already contains a VehNr do not read again Line (see below)
+1944:                    'Read Line
+1948:                'If Line with VehNr found: extract VehNr
+1952:                    'If VehNr is the required one: write the Output-file
+1955:                        'First line write ("VehNr: ...")
+1958:                        'Read next Line (otherwise Do-While skipped)
+1961:                        'Loop until next VehNr / end_of_file
+1964:                            'If next Vehicle:
+1967:                                    'If Vehicle-number is the same: Continue writing File
+1968:                                    'Skip header and Units
+1973:                                    'Otherwise: Get out of loop
+1978:                            'Write Line
+1981:                            'Read line
+1986:                        'If not EndOfStream Set flag so next VehNr is not skipped
+1989:                        'Close Output-file
+1992:                        'Jump out of the VehNr-search-loop
+2026:    'FLT-class
+2042:        'Initialize
+2075:        'GenFile Random-generator
+2125:    'Klasse für abschnittsweise Auswertung |@@| Class for sections evaluation
+2191:            'File Header
+2202:            '*************************** Em per km ***************************
+2232:            '** Results per Veh-Type
+2240:                'Number of Vehicles
+2243:                'Travellingtime
+2267:                'Writing
+2272:            '** Total
+2278:            'Number of Vehicles
+2281:            'Travelling-time
+2309:            'Writing
+2345:            '** Results per Veh-Type
+2358:                'Writing
+2363:            '** Total
+2378:            'Writing
+2381:            'Close file
+>>> File Browser\cFileBrowser.vb
+14:'   - Fav-Dlog: Statt leeren Items in Fav-Liste "<undefined>" |@@| Fav-Dlog: Empty Items in Fav list Instead "<undefined>"
+18:'**Application
+25:'**Required Global variables (default):
+49:    'New Instance - define ID, switch to FolderBrowser
+58:    'OpenDialog Return True when Dialog ended with OK
+63:    'SaveDialog - Returns True when Dialog ended with OK
+74:    'Open dialogue - Return True if Dialogue ended with OK
+80:    'Manually update File History
+86:    'File / Folder History speichen und Speicher freigeben |@@| File / Folder History spokes and Release memory
+104:    'Define File-Extensions
+115:    'Ask for Files
+>>> File Browser\FB_Dialog.vb
+32:        ' This call is required by the Windows Form Designer.
+34:        ' Append any initialization after the InitializeComponent() call.
+83:                'If empty path: use the Current-folder(MyFolder)
+98:                'Stop if empty path
+104:                'Assume Files in array
+106:                    'Multiple files selected
+117:                    'Single File
+119:                    'Primary extension (eg for bForceExt)
+121:                    'If file without path then append path
+123:                    'If instead of File a Folder is entered: Switch to Folder and Abort
+134:                        'Check whether specified a File with Ext
+137:                    'If File without Extension (after bForceExt question) and it does not exist, then add primary Extension
+143:                    'Check that File exists
+145:                        'Yes: when bOverwriteCheck, check for Overwrite
+153:                        'No: abort if bFileMustExist
+160:                    'Define MyFiles
+175:        'Load Folder History ContextMenu
+221:        'Define Path
+222:        '   If no path is specified: Last folder, no file name
+225:        '   If path-length too small  (Path is invalid): Last File
+228:        'Open Folder - If no folder in the path: Last folder
+230:            'If given a file without path
+237:            '...Otherwise:
+247:        'Show form ------------------------------------------------ ----
+259:            'Update Global History Folder
+272:    'Close and save File / Folder History
+309:    'Switching to FolderBrowser
+321:    'Initialize
+329:        'Initialization for Global File Browser
+332:        'Load Drive ComboBox
+395:        'Create Drive List
+403:        'Read Folder History
+728:        'Sort Context Menu
+741:        'Sort Context Menu
+760:        'Files
+762:        'Folder
+773:    'Change folder
+776:        'Abort if no drive specified
+781:        'Delete Search-fields
+785:        'Set Drive
+791:        'Set Folder
+806:    'Folder one level up
+817:    'Load Folder-List
+820:        'Delete Folder-List
+824:            'Add Folder
+837:    'Load File-list
+845:        'Abort if bBrowseFolder
+849:        'Define Extension-filter
+856:        'Delete File-List
+863:            'Add Folder
+>>> GUI/F_AboutBox.vb
+4:    'Initialize
+33:    'Picture Links------------------------------------------------------------------
+>>> GUI/F_ADV.vb
+7:    'Initialize
+12:    'Close
+19:    'InputFile controls ------------------------------------------
+91:    'Save ADV
+108:    'New empty ADV
+126:    'Load ADV in Form
+149:        'Line 1: FZP file
+152:        'Line 2: FLT file
+155:        'Line 3: TEM file
+158:        'Line 4: RndSeed
+161:        'Line 5: MISKAMout True/False
+164:        'Line 6: strFilter True/False
+167:        'Line 7: Distance filter for SUM.STR
+170:        'Line 8 +: STR files
+181:    'Save ADV from Form
+204:        'ADV.STRpathsClear()    '<= Nicht notwendig da neues lokales cADV-Objekt |@@| ADV.STRpathsClear()     '<= Not necessary because new local cADV object
+234:    'Form changes (control whether GEN saved) ---------------------------------
+235:    'Event handler for the Form changes
+237:    'Change Status ändern |@@| Change Status change
+243:    ' "Save changes? "... Return True if user aborts
+>>> GUI/F_ENG.vb
+127:    'Save or Save As function = true if file is saved
+139:    'Save ENG
+180:    'Change Status ändern |@@| Change Status change
+188:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Return True if User aborts
+>>> GUI/F_GBX.vb
+154:    'Save or Save As function = true if file is saved
+206:    'Change Status ändern |@@| Change Status change
+214:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Returns True if user aborts
+>>> GUI/F_GEN.vb
+23:    'Cache Coolant System Simulation
+31:    'Initialize form (Load Drives, Combo-lists, ...)
+45:        'Damit Combobox-Inhalte aktuell sind |@@| So Combo-content is current
+59:    'Close
+75:    'Change the DynKor checkbox
+83:    'Change the Cold-start checkbox
+89:    'Change the SCR checkbox
+352:        'Thus Veh-file is returned
+378:        'Thus Veh-file is returned
+404:        'Thus Veh-file is returned
+520:    'Save ("Save" or "Save As" when new file)
+532:    'Load GEN in the form
+544:        'Read GEN
+559:        'Update Form
+587:        'Map creation -----------------
+601:        'Cold start --------------------------
+608:        'Files -----------------------------
+617:        'Cold start
+699:    'GEN save from form
+720:        'Map creation ------------------------------------------------ ------
+730:        'Cold start ------------------------------------------------ ---------------
+736:        'Files ------------------------------------------------- -----------------
+750:        'Cold start
+833:    'New BlankGEN
+848:        'Map creation -----------------
+858:        'Cold start --------------------------
+864:        'Files -----------------------------
+865:        'Cold start
+933:    'Event handler for the form changes
+949:    'Start/Stop - checkbox change
+955:    'Start / Stop - Textbox change
+960:    'TextBox.TextChanged Events => Change()
+1072:    'Change Status Change
+1080:    ' "Save changes? "... Returns True if User aborts
+>>> GUI/F_MAINForm.vb
+180:        'Called when PHEM already running
+186:        'Delete GENlist-Selection
+189:        'Set Mode
+199:        'Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe |@@| When Batch resulting in more than 100 combinations per second, ask whether to dump-output  per second
+214:        'Define Job-0list
+216:        'Define File / Cycle list
+219:        'Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt) |@@| Define Cycle-list (if not BATCH mode in SetCycleList deleted only the list and not reassigned)
+222:        'Check whether Overall-progbar is needed
+225:        'Launch through Job_Launcher
+259:    'Define File-lists
+291:    'Job Launcher
+296:        'Load Options from Options Tab
+299:        'Save Config
+304:        'Reset Msg-output
+307:        'Button switch
+311:        'Disable Options
+314:        'ProgBars start
+323:        'BG-Worker start
+339:    'Begin work
+342:        'Prevent SLEEP
+377:                'At x.ProgSec = -1 no update of ProgBarSec
+404:    'Work completed
+409:        'Progbar reset
+415:        'So ListView-Item Colors (Warning = Yellow, etc..) are correctly visible
+424:                'Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface |@@| If Optimizers(Optimierer ) are active here, then dump the Objective-function(Zielfunktion ) and Signal to interface
+436:        'ShutDown when Unexpected Error
+443:        'Options enable / GUI reset
+450:        'Command Line Shutdown
+464:        'SLEEP reactivate
+477:    'Initialize
+490:        'Load Tabs properly (otherwise problem with ListViews)
+521:        'Load GUI Options (here, the GEN/ADV/DRI lists are loaded)
+524:        'Resize columns ... after Loading the @file-lists
+529:        'Initialize BackgroundWorker
+534:        'License check
+559:    'Shown Event (Form-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- Editor ..)
+587:    'Open file with PHEM
+599:        'Read Command-Line Args
+614:        'Mode switch
+621:        'If file is specified
+626:    'Close
+629:        'Save File-Lists
+632:        'Login close
+641:        'Config save
+646:        'File browser instances close
+705:        'Locked functions show/hide
+791:    'Remove File from list
+830:    'Append File to List
+855:    'Open file
+880:    'GEN/ADV list: Add File
+889:        'If PHEM runs: Cancel operation (because Mode-change during calculation is not very clever)
+895:        'Mode-switch if necessary
+923:                    'If file already exists in the list: Do not append (only when a single file)
+931:                        'Element auswählen und anhaken |@@| Element selection and hook
+942:            'Otherwise: Add File (without WorkDir)
+956:        'Number update
+1160:    'DRI list: Add File
+1171:        'Mode switch if necessary
+1185:        'Number update
+1293:        'Worker start
+1363:        'Cache Selected Items
+1384:        'Delete Selected Items
+1389:        'Items select and Insert
+1428:                'Mode toggle (from(auf) BATCH)
+1499:            'If PHEM already running: STOP
+1503:            '...Otherwise: START
+1505:            'Save Lists if Crash
+1515:    'Mode Change
+1521:        'Save Old list
+1543:        'Load New List
+1730:    'Open GEN-editor and load File
+1750:    'Open ADV-editor and load file
+1761:    'Save File-Lists
+1774:    '*** ComMsgTimer_Tick Tick - Check whether new Message
+1856:        'Set Mode
+1875:        'General(Allgemein)
+2106:    'If it is a Link => Open it
+2119:    'Hand cursor for links
+>>> GUI/F_ModSplit.vb
+11:        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. |@@| This call is required by the Windows Form Designer.
+14:        ' Add any initialization after the InitializeComponent() invocation.
+62:        '   Convert to Int32
+76:        'End
+>>> GUI/F_Options.vb
+5:    'Initialize - load config
+14:    'Load Config
+61:    'Options-----------------------------------
+>>> GUI/F_TEM_Creator.vb
+3:    'Initialization
+>>> GUI/F_VEH.vb
+99:    'Save or Save As function = true if file is saved
+111:    'New VEH
+164:    'Open VEH
+234:    'Save VEH
+405:    'Change Status ändern |@@| Change Status change
+413:    ' "Save changes? "... Returns True if user aborts
+>>> GUI/GUI_Subs.vb
+33:    'Job status => Job-list Status-column
+43:    'Cycle status => Cycle-list Status-column
+52:    'Worker Progress => Progbar (ProgBarSec Update when ProgSec > -1; ProgBarSec-Reset at ProgSec = 0)
+59:    'Progbar set to Continuous
+65:    'Abort
+77:    'Status message directly to GUI - can not be called by the BackgroundWorker!
+82:    'Statusbar - called either by WorkerMSG or directly by the form, NEVER by the Worker
+87:    'Status form reset - ONLY called by Events, NEVER by Worker
+94:    'Class used to pass Messages from BackgroundWorker
+176:    'If string not a number, then Zero
+202:    'Open File in Excel
+216:    'When no path is specified, then insert either WorkDir or MainDir   Special-folders
+221:        'Trim Path
+224:        'If empty file => Abort
+227:        'Replace sKeys
+232:        'Replace - Determine folder
+239:        ' "..\" => One folder-level up
+246:        'Supplement Path, if not available
+257:    'Path one-level-up      "C:\temp\ordner1\"  >>  "C:\temp\"
+271:    'File name without the path    "C:\temp\TEST.txt"  >>  "TEST.txt" oder "TEST"
+283:    'Filename without extension   "C:\temp\TEST.txt" >> "C:\temp\TEST"
+288:    'Filename without path if Path = WorkDir or MainDir
+305:    'Path alone        "C:\temp\TEST.txt"  >>  "C:\temp\"
+314:    'Extension alone      "C:\temp\TEST.txt" >> ".txt"
+>>> Input Files\cAux.vb
+21:        'Abort if there's no file
+27:        'Open file
+35:        'Map reset
+60:            'Column 1 = Auxiliary speed [rpm] => X-axis
+61:            'Column 2 = Mechanical power [kW] => Z-Axis (!)
+62:            'Column 3 = Output power [kW] => Y-Axis (!)
+>>> Input Files\cDRI.vb
+30:    'Defaults(Vorgabe) for EXS
+34:    'Parameters for KF-creation
+39:    'Defaults(Vorgabe) for AUX
+88:        'Values.Add(tDriComp.t, New List (Of Single))             '<= Needed only if ADVANCE > 1 Hz supported
+126:        'Abort if there's no file
+133:        '...now in New()
+135:        'Open file
+157:        ''*** First line: Version
+164:        '        'If invalid Version: Abort
+168:        '        'Version specified
+172:        '    'If no version information: Old Format
+177:        ''Version Check: Abort if input file format is newer than PHEM-version
+183:        ''Column 2: added option "+" = parameter for KF-creation
+200:        '*** Second row: Name/Identification of the Components
+203:        'Check Number of Columns/Components
+210:            'Falls DRIcomp = Undefined dann wirds als EXS-Comp oder als Emission für KF-Erstellung / Eng-Analysis verwendet |@@| If used DRIcomp = Undefined it will get as EXS-Comp or Emission for KF-Creation / Eng-Analysis
+245:                        'ERROR when component in angle brackets is unknown
+275:                    'if first EXS-column, then create Dictionary
+281:                    'If EXS-Component not yet in Dictionary, create
+293:                    'Check whether ExsComp/Module-combination already exists => ERROR
+321:        'Set Gvorg/Nvorg:
+333:        '*** Third row: Units/Normalization
+334:        'VECTO: nothing read. Fixed Units (line = file.ReadLine)
+336:        'Normalization-compatible DRI-components
+352:        'VECTO MAP-components: Always [g/h]!
+355:            ''Store Unit in String for further checks
+358:            ''Remove brackets
+362:            ''Set Scaling and Unit
+393:        '*** Line 4, 5: (optional when "+"): Settings for KF-creation
+395:        'If "+" enabled
+398:            'Creating instances
+402:            '1. Option "Map normalized by Pnom"
+408:            '2. Option "PfAK apply"
+429:        '*** Ab 4.Zeile bzw. Ab 6.Zeile: Werte (derzeit keine unterschiedlichen Einheiten/Normierungen unterstützt) |@@| From 4th line or From 6th line: values (no different units/normalizations support)
+490:        'Open file
+552:        'ResetMe resets Nvorg / Gvorg
+607:        'Convert Speed to m/s
+615:        'Normalize, if necessary
+625:        'Padd unnormalised, if neccesary
+635:        'Pe normalize, if necessary
+647:        '!!!!!!!! Emissions are only accepted in x/h or x (see ReadFile)!!!!!!!!
+759:        '*********************************** Deceleration(Verzögerung) limit ********************************
+786:        '*********************************** Create Time-sequence '***********************************
+891:        '*********************************** Convert to 1Hz '***********************************
+1009:        'Check whether Time is not reversed
+1017:        'Define Time-range
+1021:        'Create Output, Total and Num-of-Dictionaries
+1060:        'Start-values
+1077:            'Next Time-step
+1082:            'If Time-step > tMax:
+1085:                'Conclude Second
+1088:                'If no values ​​in Sum: Interpolate
+1140:                        'If only one Value: Inter- /Extrapolate
+1223:                    'Set New Area(Bereich)
+1228:                    'Check whether last second
+1234:                    'New Sum /Num no start
+1291:        'Accept New fields
+>>> Input Files\cEMO.vb
+40:        'Abort if there's no file
+44:        'Open file
+51:        'Map-Config
+54:        'Read FLD and MAP
+76:        'Normalize Map
+83:    'Returns the maximum available Drivetrain-power for given  Revolutions
+87:        'Extrapolation for x < x(1)
+99:        'Extrapolation for x > x(imax)
+114:    'Returns the maximum available Generator-power for the given  Revolutions
+118:        'Extrapolation for x < x(1)
+130:        'Extrapolation for x > x(imax)
+136:        'Interpolation
+>>> Input Files\cFLD.vb
+67:        'Stop if there's no file
+73:        'Open file
+81:        'Initialize Lists
+91:        ''*** First line: Version
+98:        '        'If invalid version: Abort
+102:        '        'Set Version
+107:        '    'If no version information: Old format
+112:        ''Version Check: Abort if input file format is newer than PHEM-version
+121:        '*** Second Line: Name/Identification of components (Drag-Emissions  create-KF)
+124:        ''Column count check,
+127:        ''Abort if less than 3 columns
+168:        'VECTO: No Header/Unit column. Always PT1!
+174:        '*** Third Line: Normalized/Measured
+177:        ''Abort when fewer Columns than in the second Line
+189:        '            'Everything is okay
+231:        ''Additional Components
+237:        '        'Remove brackets
+241:        '        'Set Scaling and Unit
+260:        'From Line 4: Values
+265:                'Read Line
+276:                'If PT1 not given, use default value (see above)
+296:                'Line-counter up (was reset in ResetMe)
+309:        'Close file
+315:        'ERROR-label for clean Abort
+328:        'Open file
+348:            'Line counter up (was reset in ResetMe)
+353:        'Close file
+371:        'Normalized Revolutions
+378:        'Normalized Power
+385:        'Normalized Power
+392:        'Normalized Pe-Target
+399:        'Em ent-normalize
+415:        'Extrapolation for x < x(1)
+427:        'Extrapolation for x > x(imax)
+444:        'Extrapolation for x < x(1)
+456:        'Extrapolation for x > x(imax)
+466:        'Dynamic Full-load
+475:        'Extrapolation for x < x(1)
+487:        'Extrapolation for x > x(imax)
+493:        'Interpolation
+500:        'Extrapolation for x < x(1)
+512:        'Extrapolation for x > x(imax)
+530:        'Extrapolation for x <x(1)
+542:        'Extrapolation for x > x(imax)
+>>> Input Files\cGEN.vb
+12:    'Mode
+154:        ''*** First line: Version
+172:        ''Version Check: abort if Input-file's format is newer than PHEM-version
+178:        '**** GEN Datei einlesen **** |@@| Read GEN file ****
+180:        'Allgemein |@@| Common
+208:        'KF creation
+253:        'Cold start
+297:        'Einzelne Nebenverbraucher |@@| Individual next consumer
+333:        'Schaltmodell-Verteilung |@@| Gear-shifting Model Distribution
+357:        'ERROR-label for clean Abort
+380:        '**** Read GEN file ****
+390:        'Convert Old Calculation-mode into New-one
+547:        'Map creation ------------------------------------------------ ------
+790:    'This Sub reads those Input-files that do not have their own class, etc.
+1327:        'Extrapolation for x < x(1)
+1339:        'Extrapolation for x > x(imax)
+1353:        'Extrapolation for x < x(1)
+1365:        'Extrapolation for x > x(imax)
+>>> Input Files\cMAP.vb
+140:        'Stop if there's no file
+146:        'Open file
+154:        'Initi Lists (before version check so ReadOldFormat works)
+163:        'Now checking whether MIP or MAP
+164:        '...is Read.
+167:        ''*** First line: Version
+177:        '        'Specify Version
+185:        ''Version Check: abort if input file format is newer than version PHEM
+191:        ''Column 2: Option "+" = parameter for KF creation
+200:        '*** Second Line: Name/Identification of Components (Only Em. Power, Revolutions is fixed!)
+203:        ''Column-count check
+207:        ''Abort if less than 3 columns
+210:        ' ''Check whether Power/Revolutions swapped
+215:        ''Em-components initialize
+224:        '    'Default interpolator defined in Em0 = New cEmComp
+225:        '    'Default Correction Pe defined in Em0 = New cEmComp
+235:        '        'Dictionary .... fill
+238:        '            'ERROR when Component in angle brackets but unknown
+245:        '            'Custom Em-Components Dictionary:
+251:        '            '*** Default Em components ***
+262:        '            'TC-components are not dumped
+268:        '            'Custom Em-Components Dictionary:
+272:        '            'Entry in Reference-dictionary
+279:        'VECTO: Column 3 alwaysd consumption(Verbrauch)
+289:            'Abort if already defined
+302:        '*** Read Normalized/Measured
+305:        ''Abort when fewer columns than in the second Line
+308:        ''Read Normalized/Measured
+311:        '    'EM-component reference
+314:        '    'Store Unit in String for further checks
+317:        '    'Remove brackets
+321:        '    'Normalize and set Unit
+353:        ''Check whether n/Pe measured(Einheiten) OK:
+357:        '            'Everything is okay
+375:        '*** Line 4.5: (optional when "+"): Settings for Pe-Cor (old PfAK)
+376:        '   If not "+", use default Interpolators (see above)
+379:            'Line 4 Reading
+382:            'Loop over Em-components
+408:            'Line 5 Reading
+411:            'Loop over Em-components
+436:        'From line 4 (or  6): Values
+440:                'Line read
+443:                'Line counter up (was reset in ResetMe)
+446:                'Revolutions
+451:                'Power
+462:                'Emissions
+474:        'Shep-Init
+477:        'Close file
+487:        'ERROR-label for clean Abort
+506:        'Open file
+513:        'Old maps have always TC-factors are (possibly  null)
+776:        'Values
+778:            'Line read
+781:            'Line counter up (was reset in ResetMe)
+784:            'Revolutions
+787:            'Power
+792:            'Emissions
+803:        'Shep-Init
+806:        'Close file
+821:        'Abort when Em-component not in MAP
+828:        'Abort if TC-factors for the component already defined
+859:        'Speed Normalized
+866:        ' "otherwise calculate normalized Revolutions
+871:        'Normalized Power
+878:        'Emissions unnormalised
+879:        '   CAUTION: Even if x_kWh and x_hPnenn are to be transformed into x_h, the Normed must remain the same because otherwise the DynKor will not be right!
+891:                    'Values are already specified in absolute
+892:                    'Distinction between [x] and [x/h] currently not used/supported
+896:        'Check whether Revolutions/Power reversed
+926:        'FC Delauney
+958:    'Map creation
+1025:        '***************** Initialize Em-components *******************
+1067:            'PeCorMode: Falls nicht in MES/NPI vorgegeben gilt bei Nicht-Default-Em was in cEmComp.New() eingestellt ist |@@| PeCorMode: Unless specified in MES/NPI with non-default Em what is in cEmComp.New()
+1078:                    'If TC specified, then Abort
+1084:                    'Select interpolator
+1087:                    'Entry in Reference Dictionary (It does not check whether Em-Comp occurs twice since it has been caught in DRI.ReadFile)
+1097:            'Dump Infos
+1102:        'Dynamic parameters and Extrapol to be added
+1247:        '************* Initialize Mean-value Dictionary ***************
+1271:        '********************* Calculate Mean-values **********************
+1273:        'Main-loop
+1276:            'Create Lists
+1291:            'Loop over Measurement-values
+1296:                    'Fill the Area below iMsek with Measurement-values
+1310:                    'Fill the Area above iMsek with the Mean-values of the Measurement-values
+1331:            'No averaging
+1347:        'EmCheck: False = Wert noch nicht verwendet, True = Wert wurde bereits in Kennfeld verwurschtet |@@| EmCheck: False = value is not used, True = Value is already(verwurschtet) in the Map
+1353:        '*************************** Rasterung **************************** |@@| Grd-ing(Rasterung) ****************************
+1418:        'Add Drag at half nn-increments. Needed for PfAK. If GEN.KFinsertDrag is disabled, it will be deleted later.
+1428:        'Add Idle-point
+1435:        '**************** Create NrUsed / Set to zero set *****************
+1442:        '**************** Expect pure Measurement-values in Grid *****************
+1444:        'Basis Schrittweite zwischenspeichern |@@| Basis for step-size buffering
+1448:        'Loop over Grid-points(i)
+1451:            'Return Totals/Numbers/Flags
+1456:            'Drag-Power
+1459:            'Loop until enough Values found in Radius
+1462:                'Reset Counter/Totals
+1469:                'Loop over Measured-values   ​​(j)
+1472:                    'If within Radius ...
+1475:                        'Num + 1
+1478:                        'Loop over all Em-comp.
+1481:                            'Total +
+1484:                            'Calculate Min/Max (for Log-output)
+1495:                        'Interpolierte Leistung aufsummieren (wird dann durch Anz dividiert) |@@| Sum-up Interpolated Power (then divided by Num)
+1498:                        'Count how many Measurement-values exist for the Grid-points (Log-output)
+1509:                'If none Measured-value in Radius (Num = 0), then enlarge Radius and set Extra-flag
+1518:            'Allocate NrUsed
+1523:            'Interpolated-Power = Sum / number
+1526:            'Calculate PfAK:
+1527:            '   If above Drag then PfAK according to Formula, or 1 when the difference between  Pe-Interpol and Drag-power is too low
+1528:            '   If below Drag, Pfak=0 => Em-value = Zero
+1539:            'Get the Extrapol flag from the Extrapol-column (1/0)
+1546:            'For Log-output
+1550:            'Loop through Em-Comp (within Grid-points-loop)
+1553:                'Falls Option 'Schlepp-Em aus .FLD' belegen und Rasterpunkt-Leistung <= Schleppleistung |@@| If Option 'Drag-Em' from .FLD 'and Power-gridpoints <= Drag-power
+1556:                    'If Drag-Em exists in .FLD, then use it otherwise alocate with zero
+1565:                    'Em-allocation without PfAK (=> PfAK is crafted later)
+1570:                'For Log-output
+1576:            'Assume TC-factors without Pfak
+1584:        '*****************************  Pfak ******************************
+1586:        '!!! IMPORTANT !!!
+1587:        'Loop passes over all Grid-points (also for Pe <= PeDrag and  respectively for PeIntpol near Pdrag).
+1588:        '   That's OK because PfAK is in anyway allocated with 1s.
+1590:        'Loop through Em-Comp
+1593:            'Falls keine Create Map Einstellungen (in .NPI/.MES) oder Pfak explizit aktiviert => Pfak verwenden |@@| If no Create Map is set (in .NPI/.MES) or PfAK activated explicitly => Use PfAK
+1596:                'Loop over Grid-points (i)
+1601:                        'Altes Pfak mit Extrapolation von Null weg |@@| Old PfAK with Extrapolation from Zero route?
+1606:                        'Schlepp-Emission raus suchen |@@| Pick Drag-Emission
+1607:                        '   Schlepp-Em aus nächstgelegenen Rasterpunkt nehmen. Das geht weil Schleppkurve  |@@| Take the Drag-Em from the nearest Grid-point. This is because the Drag-curve
+1608:                        '   immer ins Map kommt (auch wenn sie dann später raus gelöscht wird) !! |@@| always comes into the Map (even if it is later deleted) !!
+1609:                        '   Option 'Schlepp-Em aus .FLD' spielt keine Rolle weil das nur die Belegungs-Methode der Schleppkurve betrifft (s.o.)  |@@| Option 'Drag-Em(Schlepp-Em)' from .FLD plays no role because it affects only the Allocation-method of the Drag-curve (see above)
+1623:                    'Apply PfAK
+1633:        '******************* Normalize (Value and Unit) ********************
+1636:            'Use them If specified in MES/NPI-files
+1641:                    'Values normalized
+1652:                'Otherwise, use a standard normalization
+1657:                        'Normalized Values
+1673:        '****************** EmComponents zusammenfassen ******************* |@@| Summarized EmComponents *******************
+1688:        '*********** Schleppkurve wieder raus nehmen (optional) *********** |@@| Get Load-curve again (optional) ***********
+1691:            'Schleife über Rasterpunkte (i). Keine For-Schleife weil iMapDim reduziert wird |@@| Loop over Grid-points(i). No For-loop because iMapDim is reduced
+1713:        '************************** Dump Map '**************************
+1732:            'CAUTION: Not Name but sKey !!!
+1751:        'Values
+1765:        '********************** Dump Extended-Info '***********************
+1804:        'Values
+1857:        'Shep-Init
+1864:    'Default Shepard in intpshep ()
+1924:            'Calculate Distance and Correction.
+1928:                    'Um Nullleistung werden Kennfeldpunkte um Pe=0 hoeher gewichtet und Drehzahlabstand geringer, |@@| ????The Map-points with zero-Power (Pe=0) will be weighted higher and Revolution-distances lower,
+1929:                    ' da Interpolation aus Punkten mit hoeherer last dort schlecht passt: |@@| because interpolation of Points with higher Load is fitted badly:
+1935:                    'Square of the distance:
+1938:                    'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten: |@@| ????If the Sign of Pe unequal (Load /Drag separation), then Distance increases more weight to Drag by Drag:
+1945:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen |@@| Points are within radius and possibly within  a bigger Radius
+1962:            'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur |@@| Distance array and create Power interpolate for Pe-correction
+1974:            'Calculation of Wisum
+1980:            'Calcluate Interpolated Power
+1992:            'Calculate Distance and Correction.
+1995:                'Square of the distance:
+2000:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen |@@| Points are within radius and possibly within  a bigger Radius
+2017:            'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur |@@| Distance array and create Power interpolate for Pe-correction
+2029:            'Calculation of wisumV2
+2035:            'Calculate Interpolated Power
+2112:        'Berechnet Emission an Schleppkurve |@@| Calculated Emission on Drag-curve
+2129:            'Es wird an Schleppkurve gesucht |@@| Search on Drag-curve
+2131:            'n0 has already been defined in Init
+2133:            'Calculate Distance and Correction.
+2136:                'Square of the Distances:
+2139:                'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten: |@@| ????If the Sign of Pe unequal (Load /Drag separation), then Distance increases more weight to Drag by Drag:
+2146:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen |@@| Points are within radius and possibly within a  bigger Radius
+2163:            'Create Distances-array
+2173:            'Calculation of wisum
+2179:            'Calculate emission
+>>> Input Files\cTRS.vb
+32:        'Stop if there's no file
+38:        'Open file
+47:        '*** First Line: Version
+51:            ' "Remove "V" => Number remains
+54:                'If invalid version: Abort
+58:                'Version set
+62:            'If no version information: Old format
+67:        'Version Check: Abort if Input-file-format is newer than PHEM-version
+79:        '*** Second Line: Check which TC-factors exist in any column (from column 1!)
+83:        'Abort if less than 2 Columns:
+91:            'Abort if unknown TC-factor
+96:            'Add to Dict
+101:        '*** From Line 3: TC-factors for each Em-component
+102:        '   l is for Error-output
+163:        'Open file
+207:            'Abort if less than 11 Columns:
+>>> Input Files\cVEH.vb
+221:        'Einzelne Nebenverbraucher |@@| Individual next consumer
+249:        'Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo) |@@| Interruption of Traction - Update 09/08/2012 (CO2 demo)
+260:        'Cd mode / Input File - Update 08/14/2012 (CO2 demo)
+316:        '************************ End reading ****************************
+401:        'Interruption of traction (Update 09.08.2012 - CO2 demo)
+451:        'Error-message within AuxInit
+531:                'Transmission Nominal-Revolutions
+534:                'Transmission Nominal-Power
+537:                'If nothing specified: Engine's Nominal-power and Nominal-Revolutions from Normalized ones
+551:                        'PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn |@@| PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn
+552:                        'PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm) |@@| PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm)
+553:                        'VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn |@@| VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn
+619:                'Interpolate with Original Values
+624:                'If error: try extrapolation
+626:                'Search for the nearest Map point
+640:                'Efficiency
+644:                        'Drivetrain=> Drivetrain
+651:                        'Drag => Drivetrain: ERROR!
+661:                        'Drivetrain => Drag: ERROR!
+668:                        'Drag => Drag
+677:                'Calculate efficiency with PeIn for original PeOut
+720:                'Interpolate with original values
+725:                'If error: try extrapolation
+727:                'Search for the nearest Map-point
+741:                'Efficiency
+745:                        'Drivetrain => Drivetrain
+750:                        'Drag => Drivetrain: ERROR!
+760:                        'Drivetrain => Drag: ERROR!
+767:                        'Drag => Drag
+774:                'Calculate efficiency with PeIn for original PeOut
+838:                'Notificationin ReadFile()
+934:        'Warn If Vair specified in DRI but CdType != CdOfBeta
+946:        'If Cd-value is constant then do nothing
+949:        'Read Inputfile
+996:        'Extrapolation for x < x(1)
+1014:        'Extrapolation for x > x(imax)
+1042:        'Read Inputfile
+1104:        'Extrapolation for x < x(1)
+1116:        'Extrapolation for x> x(imax)
+>>> MODcalc\cBatModel.vb
+21:    'Current data (ie the current (last calculated) Time-step)
+55:    'Maximum allowable Power for driving (Battery discharged) [kW]    positive sign (PHEM Standard)
+62:    'Maximum allowable power for Generating/Rekuperiren (Battery-charging) [kW]    negative sign (PHEM Standard)
+72:    '--------------------------------- ~Renhart Battery model ~ ---------------------------------
+74:    'Method for initializaztion - it is called once
+82:        'Abort if there's no file
+91:        'Read the Parameters:
+132:        ' Calculation of the Battery-voltage at TempBat and SOC(0), Discharge curve
+138:        ' Calculation of the Battery-voltage at TempBat and SOC(0), Charging-curve
+148:    'Method of calculating the allowable power - Invoked second by second
+174:    'Method of calculating the Batterie-losses and SOC for the given  Power - Invoked second by second
+202:        '   Perf ... required Power  Condition: PgMAX < Perf < PaMAX [kW]
+203:        '   all Paramers were determined/read in Bat_Init
+204:        '   jz ...Current time-step
+205:        '   All arrays from Time-step 1 to jz-1
+225:    'Returns PeBat for the given  PiBat (sign from PHEM)
+250:    'Battery discharged
+256:        'Temperature Function
+259:        'Determine Ri depending on temperature
+262:        'Voltage determined from SOC and Voltage-curve
+265:        'Current calculation
+268:        'Battery-losses
+271:        'Battery-temperature
+277:        'SOC calculation
+280:        'Adjustment for the current time-step
+287:    'Charging Battery
+294:        'Temperature-Function
+297:        'Determine Ri depending on temperature
+300:        'Voltage determined from SOC and Voltage-curve
+303:        'Current calculation
+306:        'Battery-losses
+309:        'Battery-temperature
+315:        'SOC  calculation
+318:        'Adjustment for the current time-step
+325:    'Battery do nothing
+340:    'Returns PeBat when invoked(Laden) with PEmot (sign from(nach)Renhart)
+362:    'Return PeBat when Unloaded(Entladen) with PEmot (sign  from(nach) Renhart)
+>>> MODcalc\cMOD.vb
+19:    'Power
+36:    'Vehicle
+192:        'Define Cycle-length (shorter by 1sec than original because of Interim-seconds)
+195:        'Here the actual cycle is read:
+198:        'Revolutions-setting
+206:            'Revolutions
+211:            'Angular acceleration
+218:        'Average EM-components (between-seconds) for KF-creation or Eng-Analysis
+227:        'Specify average EXS
+238:        'Specify average Aux and Aux-lists, when Au8x present in DRI and VEH
+258:        'Zykluslänge definieren: Gleiche Länge wie Zyklus (nicht reduziert weil keine "Zwischensekunden") |@@| Define Cycle-length: Same length as Cycle (not reduced because no "interim seconds")
+261:        'Here the actual cycle is read:
+264:        'Revolutions-setting
+272:            'Revolutions
+277:            'Angular acceleration
+315:        '*********** Initialization / Open File **************
+370:        '*** ID line (Only ADVANCE)
+431:        'ADVANCE-specific
+479:        'Berechnete Dynamikparameter (Diff zu Kennfeld) |@@| Calculated dynamics parameters (Diff to Map)
+488:        'Write to File
+497:        '*** Values *************************************************************************************
+505:                'Time
+510:                    'Strecke |@@| Route
+514:                    'Actual-speed.
+517:                    'Target-speed
+520:                    'Acc.
+523:                    'Slope
+532:                        'Revolutions
+535:                        'Power
+538:                        'Revolutions normalized
+541:                        'Power normalized
+546:                    'Revolutions in U/min
+549:                    'EM-power in kW
+552:                    'Effective Battery-power
+555:                    'Internal Battery-power
+558:                    'Battery-voltage
+561:                    'Battery-Power
+569:                    'Revolutions
+572:                    'Power
+575:                    'Revolutions normalized
+578:                    'Power normalized
+581:                    'Full-load and Drag
+592:                    'Power to Clutch
+600:                    'Gear
+603:                    'Transmission-losses
+606:                    'Diff-losses
+609:                    'Retarder-losses
+624:                    'Drag
+627:                    'Slope ..
+633:                    'Wheel-power
+636:                    'Brake
+646:                'ADVANCE-specific
+662:                    'Final-emissions (tailpipe)
+680:                            'Raw-emissions
+683:                            'TC-Emissions
+686:                            'AT-Emissions (EXS)
+694:                'Calculated Dynamics-parameters (Diff from(zu) Map)
+702:                'Write to File
+716:    'Errors/Warnings die sekündlich auftreten können |@@| Errors/Warnings occuring every second
+734:        '   -GeschRedReset(Speed-Reduce-Reset)
+742:        'Full reset (at the beginning of each second step)
+748:        'Reset Errors related to Speed Reduction (within iteration)
+755:        'Reset von Errors die mit der Leistungsberechnung zu tun haben (nach Schaltmodell durchzuführen) |@@| Reset errors related to Power-calculation (towards performing the Gear-shifting model)
+763:        'Emit Errors
+>>> MODcalc\cPower.vb
+21:    'Data per second
+33:    'Interruption of traction
+87:    'Recuperation
+88:    '   Project HERO - BMW Mini Hybrid
+89:    '   Standard Mini One D Wheelbase 2467 mm
+92:    'Specification of Center-of-gravity height (approximation)
+93:    '   from http://www.colliseum.net/wiki/Schwerpunkth% C3% B6he
+95:    '       with R = 2467 [m], and m = 1335 [kg]
+189:    'Read Bat
+196:    'Maximum effective EM-Power in driving depends on Overload and Battery-status
+201:        'Based: Full-load-curve
+204:        'If Overload possible, upscale Overload(ÃœL)-power
+207:        '=> PeFLD = maximum EM-Power by(nach) FLD and Overload(ÃœL)
+209:        'Calculate PeMax from PeBatMax
+212:        '=> PeBAT = maximum EM-power to Battery
+214:        'Return the maximum Power allowed by the Battery
+219:    'Maximum effective EM charging power depending on Overload and Battery-state
+224:        'Base: Drag-curve
+227:        'If Overload possible, upscale to Overload(ÃœL)-power
+230:        '=> PeFLD = maximum EM-Power by(nach) FLD and Overload(ÃœL)
+232:        'Calculate PeMax from PeBatMax
+235:        '=> PeBAT = maximum EM-power to Battery
+237:        'Return the maximum Power allowed by the Battery
+244:    'Conversion of PeBat (=PiEM) to PeEM
+256:            'When sign of x an y is not-equal to the sign of xA(i) and yA(i) respectively, then skip Row i
+281:    'Conversion of PeEM to PeBat (=piEM)
+293:            'When sign of x and y is not-equal to the sign of xA(i) and yA(i) respectively, then skipp Row i
+318:    'Maximum Recuparation-power
+324:        'If speed is already under ceiling then return Zero
+327:        'Wheel contact
+334:        'Sign "should" always be +
+337:        'Longitudinal-force on the Tire
+340:        'Consider Safety-factor
+343:        'Power
+346:        'If below upper V-upper-limit, then scale down linearly
+353:    ''Reduce PeEM-Max until battery current is okay
+371:    ''Reduce PeEM-Min until battery current is okay
+406:        'Start/Stop Control
+444:        'Abort if no speed given
+450:        '   Initialize
+486:        'Gear-shifting points for NEDC / FTP
+521:                'Initialize Gear-shifting parameters
+533:        'Theoretical maximum speed [m/s] - set to Speed ​​at 1.2 x Nominal-Revolutions in top-Gear
+539:        '***********************************    Time-loop ****************************************
+550:            'Secondary Progressbar
+553:            '   Determine State
+556:            'Reset the second by second Errors
+559:            'Calculate Speed​/Acceleration -------------------
+560:            'Now through DRI-class
+564:            'If Speed over Top theoretical Speed => Reduce
+574:                'Check if Acceleration is too high
+593:                    '- Deceleration limit ---------------------------
+595:                    '    'Check whether Deceleration too high
+614:            'From Power -----
+624:            'Determine Driving-state  -------------------------
+649:            'Faster check if Power is too high
+656:            '************************************ Gear selection ************************************
+675:                'Check whether Clutch will slip (important for Gear-shifting model):
+683:                    'Gear-settings
+686:                    'Revolutions-setting
+692:                        'Gear by speed dependent function
+696:                        'Gear-shifting Model
+703:                        'Must be reset here because the Gear-shifting model may cause changes
+709:                'Gear shifting-model / gear input can open Clutch
+720:            ' Important checks
+723:            'Check whether to reduce speed
+724:            ''If GeschwRed Then GoTo lbGeschwRed
+726:            'Check whether Clutch is open:
+727:            ''bKupplOffen = (bStehen Or Gear(jz) = 0) <= Already known by Clutch
+729:            'If conventionall then ICE-clutch = master clutch
+730:            ''bICEKupOffen = bKupplOffen <= i need nothing more
+732:            'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten: |@@| If before?(vor) Gear-shift is detected that Clutch does not Lock, then Downshift at too low Revolutions:
+737:            'Check whether idling although Power > 0
+738:            '   wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren! |@@| when Power before?(vor) Diff > 0.1% of Nominal-power, then Correct!
+759:            '************************************ Revolutions ************************************
+761:            '*** If Revolutions specified then the next block is skipped ***
+766:                'If Start/Stop then it will be set at the same nn < -0.05 to nU = 0
+784:            'Revolutions drop when decoupling
+806:                        'Leistungsabfall limitieren auf Pe(t-1) minus 75% von (Pe(t-1) - Pschlepp) |@@| Limit Power-drop to Pe(t-1) minus 75% of (Pe(t-1) - Pdrag)
+807:                        '   aus Auswertung ETC des Motors mit dem dynamische Volllast parametriert wurde |@@| of the evaluated ETC of the Enginges with the dynamic parametrized Full-load
+808:                        '   Einfluss auf Beschleunigungsvermögen gering (Einfluss durch Pe(t-1) bei dynamischer Volllast mit PT1) |@@| Influence at low acceleration (influence dynamic Full-load through Pe(t-1) with PT1)
+810:                        '   Iteration loop: 01.10.2012
+818:                        '01:10:12 Luz: Revolutions must not be higher than previously
+825:                    'TODO: Switch off?
+838:                '*** Start: Revolutions Check
+840:                'Check whether Revolutions too high! => Upshift
+846:                'Check whether Revolutions too low with the Clutch closed
+863:            '************************************ Determine Engine-state ************************************
+864:            ' fix nn here!
+867:            'Determine next Consumption (from VEH and DRI)
+870:            'ICE-inertia
+875:                    'Not optimal since jz-1 to jz not the right interval
+880:                    'Revolutions-setting
+887:            'Total Engine-power
+957:            '*************** Leistungsverteilung usw. ****************** |@@| Power distribution, etc. ******************
+959:            'Full-Load/Drag curve
+965:                'Revolutions Correction
+979:                'If Pmax < 0 or Pmin > 0 then Abort with Error!
+1009:                        'VKM to Drag-curve
+1012:                        'Forward-calculation to Wheel (PvorD)
+1028:            'Check or Abort (before Speed-reduce-iteration, otherwise it hangs)
+1031:            'Check whether P above Full-load => Reduce Speed
+1046:                        'ERROR: Speed Reduction brings nothing? ...
+1051:                    'ERROR:  Engine not in Drivetrain ... can it be?
+1059:            'Interruption of traction(Zugkraftunterbrechung)
+1093:            '   Finish Second
+1095:            'Start / Stop - Activation-Speed Control
+1110:            'Write Modal-values Fields
+1141:            'Interruption of traction(Zugkraftunterbrechung)
+1172:            'Notify (abort if error)
+1185:        '***********************************    Time loop END ***********************************
+1188:        'Notify (When not ADVANCE)
+1225:        'Abort if Power/Revolutions not given
+1236:        'Drehzahlen vorher weil sonst scheitert die Pmr-Berechnung bei MODdata.nU(t + 1) |@@| Revolutions previously, otherwise Pmr-calculation fails at MODdata.nU(t + 1)
+1238:            'Write Modal value Fields
+1239:            '   Allocate MODdata.Pe
+1244:        'Power calculation
+1247:            'Secondary Progressbar
+1250:            'Reset the second-by-second Errors
+1253:            'OLD and wrong because not time shifted: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnrom) * nnrom * (n(jz) - n(jz - 1))) / Pnrom
+1260:            'Power of the Cycle corrected by P_clutch
+1263:            'Revolutions of the Cycle => Determined in Cycle-init
+1264:            'If Revolutions under idle, assume Engine is stopped
+1276:                'If Pmax < 0 or Pmin >  0 then Abort with Error!
+1314:            'Notify
+1336:        'Start/Stop Control
+1367:        'WegKorrektur |@@| Route-correction
+1381:        'Abort if no speed given
+1387:        '   Initialize
+1415:        'Take WG-map from MAP and calculate Pi-list
+1432:        'Gear-shifting points for NEDC/FTP
+1449:        'Theoretical Maximum-speed [m/s]
+1457:        '***********************************    Time-loop ****************************************
+1465:            'Secondary Progressbar
+1468:            '   Determine State
+1472:            'Calculate Speed/Acceleration -------------------
+1473:            'Now by DRI-class
+1477:            'If Speed over the theoretical Top-Speed => Reduce
+1484:            'From Power -----
+1494:            'Determine Driving-state -------------------------
+1519:            'Maximum allowable Battery-power
+1524:            '************************************ Gear selection ************************************
+1529:                'Check whether Clutch-lock (important for Gear-shifting model):
+1537:                    'Gear-setting
+1540:                    'Revolutions-setting
+1546:                        'Gear from Speed is not supported here
+1550:                        'Gear-shifting Model
+1553:                        'EV: No idle due to recuperation
+1566:            'If regenerative braking is possible according to Wheel-power: Calculate PrekupMax
+1568:                'Calculate Maximum Recuperation-power (depending on Wheel-load/Friction-coefficient)
+1573:            'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten: |@@| If before Gear-selection it Clutch was not Locked, then Shift-down at too low a Revolutions:
+1578:            'Check whether Idling although Power > 0
+1579:            '   When Power before Diff > 0.1% of Nominal-power then Correct!
+1591:            '************************************ Revolutions ************************************
+1593:            '*** If the Revolutions is specified (Gemess = 2) then the next block is skipped ***
+1601:            'Revolutions drop when decoupling
+1622:                '*** Start: Revolutions-Check if not specified
+1624:                'Check whether Revolutions too high! => Upshift
+1630:                'Check whether Revolutions too low with the Clutch-closed
+1642:            '************************************ Determine Engine-state ************************************
+1643:            ' nn fix is here!
+1646:            'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next Consumption (from VEH and DRI)
+1649:            'Engine-inertia
+1654:                    'Not optimal since jz-1 to jz not the right Interval
+1659:                    'Revolutions-setting
+1666:            'Total Engine-power
+1707:            '*************** Power distribution, etc. ******************
+1709:            'Full-load/Drag-curve
+1729:                    'Calculate Maximum Recuperation power (depending on Wheel-load/Friction-coefficient)
+1732:                    'If RecupMax exceeded, then must recalculate Pe
+1735:                        'PbrakeRek = power which must be additionally hampered mechanical overrun of RekupMax
+1736:                        'wird schon oben nach Gangwahl erledigt: PbrakeRek = Pantr - PrekupMax |@@| is already done by top gear selection: PbrakeRek = Pantr - PrekupMax
+1738:                        'New EM-Power
+1743:                    'Check ob Leistung aufgenommen werden kann (abh. von FLD und Batterie). Bremsleistung berechnen. |@@| Check whether power can be added (depending on battery and FLD). Compute Braking Power.
+1752:                    'Addup RekupMax-Braking-power
+1764:            'Check whether above Full-load => Speed-reduction
+1768:                    'When Pmax = 0 then Battery must be empty
+1782:                        'ERROR: Velocity reduction brings nothing? ...
+1792:            '   Finish Second
+1805:            '***************** Battery ***********************
+1817:            '****** Write Modal-value Fields **************
+1859:            'Notify
+1865:        '*********************************    Time loop END *************************************
+1869:        'Notify (not ADV)
+1887:        'TODO Error message etc
+1933:        'Route(Weg) correction
+2033:        'Abort when no speed given
+2039:        '   Initialize
+2062:        'Gear-shifting points for NEDC/FTP
+2097:                'Gear-shifting parameters initialization
+2106:        'Theoretical maximum speed [m/s]
+2127:        '***********************************    Time-loop ****************************************
+2134:            'Secondary Progressbar
+2137:            '   Determine State
+2141:            'Speed / Acceleration calculation -------------------
+2142:            'Now by DRI-class
+2146:            'If Speed over Theoretical-top-speed => Reduce
+2153:            'From Power -----
+2164:            '*************************** Determine Driving-state *****************************
+2166:            'Determine Driving-state-------------------------
+2249:            '************************************ Gear selection ************************************
+2254:                'Check whether Clutch Locks (important for Gear-shifting model):
+2262:                    'Gear-settings
+2265:                    'Revolutions-setting
+2271:                        'Gear from Speed
+2274:                        'Gear-shifting Model
+2289:            'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next Consumption (from VEH and DRI)
+2292:            'HEV-Teil kommt erst nach Gangwahl weil Getr./Diff-Loss den benötigt und EM zwischen ICE und GB liegt |@@| HEV-part comes after Gear-selection because Transmission/Diff-loss and requires the EM is between ICE and GB
+2300:                'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next consumption (from VEH and DRI)
+2306:                    'If Revolutions specified
+2309:                    'Otherwise from Vist and Gear
+2313:                'Normalized Revolutions
+2316:                'Maximum power of the ICE
+2325:                'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next consumption (from VEH and DRI)
+2328:                'Maximum allowable Battery-power
+2333:                'Maximale EM-Leistung. (Batterieleistung limitiert EM-Leistung) |@@| Maximum EM-Power (Battery-power limited by EM power)
+2344:                'Leistung bis ICE/EM (= an Kupplung) berechnen |@@| Power to ICE/EM (= coupling to) get
+2350:                'Power to clutch
+2355:                    'Revolutions-setting
+2363:                '***** Power required in EV-mode
+2364:                '   Power to Clutch plus EM-inertia
+2366:                '! CAUTION: If ICE is engaged then PaICE must also be !  => Later in power distribution
+2368:                '***** Power required in the ICE+EM-operation
+2371:                '***** Power required in ICE-operation
+2374:                '***** Check whether EV possible
+2376:                '   => EM-Power >= Drivetrain-power
+2380:                '***** If EV possible: check whether critical
+2383:                '***** Check whether Assist / LPI / ICEonly is possible and if Boost is needed
+2384:                '   => ICE-On must be possible (ICElock)
+2392:                        '   => ICE at Full-load
+2405:                '***** Check whether Recuparation possible
+2411:                '********************************* Driving-state distinction *********************************
+2417:                    '***************************** Transmission-Mode pre-selection ********************************
+2421:                        'if Boost necessary (and possible), then no Choice
+2426:                        'EV mode when ...
+2435:                        'If EV & ICE is not possible then EV-mode till ICE starts again .... should never happen because no ICE-shutdown when little SOC
+2445:                    'If use of HEV strategy:
+2446:                    '   Ke's calculation
+2449:                        '************** Calculate optimal Ke's and Power for it ************
+2451:                        'Emission/Consumption in g/h
+2458:                        'KeSTE from STE-curve ...
+2476:                                'Remain under Max-Pe
+2479:                                'If Pvkm negative: Calculation of the pure EM-transmission?(Betrieb)
+2482:                                    '    ...not valid if Batlvl <= Low or ICEonLock
+2485:                                    'EM-Power = P-Drivetrain
+2489:                                    'Consumption-reduction in g/h
+2492:                                    'Abort according to this calculation (more EM-power makes no sense because Drivetrain already pure electric)
+2497:                                    'Consumption-savings in g/h
+2502:                                'Power to electric motor in kW
+2513:                                'Power in battery
+2518:                                'Div/0 and Sign checks
+2521:                                    'KeA calculated in kWh/kg
+2524:                                    'Check whether Optimum
+2532:                                'Abort when already reached pure EM-mode
+2565:                                'If Pvkm at Full-load:
+2568:                                    'Put Pvkm on full load
+2571:                                    'EM in generator-mode (Pges1 - Pvkm < 0)
+2574:                                    'Abort after this pass because Generating more impossible
+2579:                                'Additional consumption in g/h
+2582:                                'Power to Electric-motor in kW
+2593:                                'Power in battery
+2598:                                'Div/0 and Sign checks
+2601:                                    'Calculate KeG in kWh/kg
+2604:                                    'Check whether Optimum
+2613:                                'Abort when already reached VKM-full-load
+2622:                            'Abstand Eta zu Kurve berechnen |@@| Calculate Distance Eta from Curve
+2632:                        '********************** Evaluate KeSTE, Deltas ************************
+2661:                        '************************* Operating strategy ***************************
+2690:                        '** Ke-mode used when ...
+2693:                            '...Same mode as before, change Driving-state or last mode impossible
+2698:                            '...when Engine is not running
+2703:                                '...if the PeICE Power-change is lowest with the new Mode
+2728:                    '****************************** Distribute Power to each Mode **************************
+2735:                            'EM assumes the entire Power
+2738:                            'Speed reduced if power is too high for EM or Bat
+2744:                            'If ICElock or EVcrit then ICE on (but disconnected)
+2758:                            'ICE assumes the entire Drivetrain
+2826:                    'CAUTION: ICEclutch defaults to 'false' so here no more statements
+2828:                    'Calculate maximum Recuparation-Power
+2833:                        'Mit PrekupMax auf EM/ICE zurück rechnen |@@| Calculate back PrecupMax from(auf) EM/ICE
+2842:                        'Den Rest gleich auf die Bremse  |@@| The Residual equals that to(auf) the Brakes
+2847:                    'Default for ICE (so as to save the "Else" statement)
+2855:                            'Compute EM-power
+2860:                                'New EM-performance
+2863:                                'Residual power to ICE
+2867:                                'If ICE over Drag-curve
+2870:                                    'New ICE power
+2873:                                    'Rest to Brakes
+2880:                                'ICE is idle (because On-Lock)
+2889:                            'Compute EM-power
+2894:                                'New EM-performance
+2899:                                    'ICE im Schubbetrieb |@@| ICE on the overrun
+2903:                                    'If ICE over Drag-curve
+2906:                                        'New ICE-power
+2909:                                        'The rest to Brakes
+2932:                            'ICE on the Overrun(Schubbetrieb)
+2936:                            'When ICE above Drag-curve
+2939:                                'New ICE-power
+2942:                                'The rest of on Brakes
+2962:                    'Power zero
+2973:            '****************************** Clutch and Revolutions *******************************
+2976:            'Main clutch => must already be known here!
+2989:            '************************************ ICE Revolutions************************************
+3034:            '************************************ EM Revolutions ​​*************************************
+3060:            '   Finish Second
+3065:            '   ACHTUNG: Die beiden If-Schleifen nicht verbinden weil LockCount sich sonst verzählt |@@| CAUTION: The two If-Schleifen do not bind(verbiden) because LockCount is miscounted
+3082:            'Write Modal-values Fields
+3130:            'Notify
+3136:        '*********************************    Time-loop END **************************************
+3139:        'Notify (Not ADVANCE)
+3255:        '-----------------------------------Second 1 --------------------------------------
+3256:        'First second: find Gear / Initialization
+3283:        '--------------------------------From second 2 --------------------------------------
+3285:        '---------Start-values ---------
+3286:        'gangX = Last Gang ie Basis for Gear-shiftching model
+3293:        'Clutch-lock(Kuppelschleif) check << already happened in Power.Calc
+3296:        '-------------------Calculate Gear for the next 6 seconds ---------------------
+3303:            '-----------Gear-shifting function ----------
+3341:            'Revolutions-limit for Upshifting  n_normiert (Idle = 0, Nominal-revolutions = 1)
+3344:            'Revolutions-limit for Downhifting  n_normiert (Idle = 0, Nominal-revolutions = 1)
+3346:            'Deleted by LUZ  13.07.10: If (nnsaufi > 0.85)  Then nnsaufi = 0.85
+3347:            'Convert here the Revolutions-units (n/n_nom):
+3350:            'Revolutions with last Gear (gangX)
+3354:            ' ''Maximum permissible Gear-shift every 2 seconds:
+3357:            'Check whether Downshift, only when Speed decreases or Power increases
+3366:            'Check whether Upshift, only when Speed increases or Power decreases
+3374:            'Correct Gear-selection
+3383:            'Not Idle when Power > 0
+3388:            'New Revolutions
+3392:            'Check whether Gear within the Power/Revolutions limits. Drag is not respected
+3406:            'Save for Gear in Field for further checks
+3418:        'Gear accepted
+3426:        'Gang-Verlauf hinzufügen |@@| Add to Gears-sequence
+3430:        '--------------------------------Checks Part 1 -------------------------------------
+3431:        'Checks to Purge non-sensible Gear-shift:
+3433:        ''Division into "iphase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3):
+3443:        '   ============>> Already determined by VehState0
+3445:        'Search by last Gear-change
+3456:        'Maximum permissible Gear-shifts every 3 seconds:
+3462:            'Cruise-phases:
+3463:            'Do not change Gear for as long Speed-change since last Gear-shift is below 6% and Pe/Pnorm change is below 6%:
+3464:            'Deceleration-phases: Upshift is suppressed
+3465:            'Acceleration-phases: Downshift?(Zurückschalten) suppressed
+3486:                'If within 6 seconds it Shifts back to the previous-Gear,
+3487:                'then maintain the previous-Gear throughout.
+3499:                    'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang |@@| If within 6 seconds it Shifts once above and once below the previous-Gear,
+3500:                    'geschaltet wird, wird voriger Gang durchgehend beibehalten |@@| then maintain the previous-Gear throughout.
+3517:        '--------------------------------Checks Part 2 -------------------------------------
+3518:        'Gear-shift from 2 to 1 are suppressed when v > 2.5 m/s
+3519:        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl |@@| NEW LUZ 040210: Upshifting only when in 2nd Gear over Cluch-Revolutions
+3524:        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| at decelerations below 2.5 m/s, shift to idle
+3538:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet |@@| wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+3545:        'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet |@@| If v <0.1 m/s for more than 1 sec then shift to Gear=0
+3552:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden |@@| at Beschleunigungsvorgaengen below 1.5 m/s is used in 1 Gear is engaged
+3553:        'checking if Revolutions above Nominal-Revolutions, then always Upshift
+3562:    'otherwise lack the power!
+3592:        '-----------------------------------EV-Gear-shifting model (based on Cars(PKW))
+3593:        'Second 1 --------------------------------------
+3620:        '--------------------------------First second: Find Gear / initialization
+3622:        '---------From second 2 --------------------------------------
+3623:        'Start-values ---------
+3630:        'gangX = Last Gear ie Starting-base for Shifting-model
+3633:        '-------------------Clutch-lock check << already happened in Power.Calc
+3640:            '-----------Calculate Gear for the next 6 seconds ---------------------
+3678:            'Shifting-function ----------
+3681:            'Revolutions-limit for Upshift, n_normiert (Idle = 0, Nominal-Revolutions = 1)
+3684:            'Revolutions-limit for Downshift, n_normiert (Idle = 0, Nominal-Revolutions = 1)
+3687:            'Convert here of Revolutions units to use (n/n_nominal):
+3691:            ' ''Revolutions with last Gear (gangX)
+3694:            'Maximum permissible Gear-shifting every 2 seconds:
+3703:            'Check whether Downshifting-gear, only when Revolutions decrease or Power increases
+3711:            'Check whether Upshifting-gear, only when Revolutions increase or Power decreases
+3720:            'Correct Gear-selection
+3725:            'Not idle when Power > 0
+3729:            'New Revolutions
+3743:            'Check if Gear within Power/Revolutions limits. Drag-operation is not respected
+3755:        'Save Gears in field for later checks
+3763:        'Accept Gear
+3767:        '--------------------------------Checks Teil 1------------------------------------- |@@| Add to Gang-sequence
+3768:        'Checks Part 1 -------------------------------------
+3770:        ''Checks to Purge non-sensible Gear-shift:
+3780:        '   ============>> Division into "IPhase(j)" stages: acceleration(=1), Deceleration(=2) and Cruise(=3):
+3782:        'Already determined by VehState0
+3793:        'Search by last Gear-change
+3799:            'Max permissible Gear-change every 3 seconds:
+3800:            'Cruise-phases:
+3801:            'Verzoegerungsphasen: Hochschalten wird unterdrückt |@@| As long Speed-change since last Gear-shift is under 6% and Pe/Pnom below 6%, do not run:
+3802:            'Deceleration phases: Upshift suppressed
+3823:                'Acceleration phases: Downshift?(Zurückschalten) suppressed
+3824:                'durchgehend beibehalten |@@| If within 6 seconds switched back again to the previous Gear, stick
+3836:                    'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang |@@| to the previous Gear
+3837:                    'geschaltet wird, wird voriger Gang durchgehend beibehalten |@@| If within 6 seconds it Shifts once above and once below the previous-Gear,
+3854:        '--------------------------------Checks Teil 2------------------------------------- |@@| then maintain the previous-Gear throughout.
+3855:        'Checks Part 2 -------------------------------------
+3856:        'Suppress Gear-shift from 2 to 1 when v > 2.5 m/s
+3861:        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| NEW LUZ 040210: Upshift only when in 2 Gear over Clutch-revolutions
+3875:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet |@@| at decelerations below 2.5 m/s, shift to Idle
+3882:        'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet |@@| If v < 0.1 m/s for more than 1 sec, then shift to Gear=0
+3889:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden |@@| at acceleration processes below 1.5 m/s is used in first Gear is engaged
+3890:        'Check whether Revolutions over Nominal-Revolutions, then should always Upshift,
+3944:        '-----------------------------------otherwise Power not enough!
+3945:        'Second 1 --------------------------------------
+3982:        '--------------------------------First second: Find Gear/Initialization
+3984:        '---------From second 2 --------------------------------------
+4014:        'Start-values ---------
+4027:            '     Compute power from jz to (jz + 6) -----------------
+4030:            '(1) Nach Variante "schnelle Fahrweise" |@@| Calculated towards a Revolutions/Power model
+4032:            '1) "Fast Driving" variant
+4033:            'Gear-shift only if v-change 5% since last Gear-shift
+4045:            'VECTO: Commented out START
+4047:            'VECTO: Commented out END
+4050:            'Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden: |@@| the first 10 seconds of the cycle can always be used for balancing gear-shifting:
+4054:            'A Change in the Slope can always result in Gear-shift:
+4061:            'Downshift:
+4062:            ' Upshift:
+4063:            ' dabei manchmal zu hoher gang -> Drehzahl und P_max viel zu nieder, daher nu bei niederen leistungen |@@| at Sloped-cycles with excessive speed the Gear i +1 is calculated
+4064:            ' hochschalten erlaubt: |@@| sometimes Gear is too high -> Revolutions and P_max too low, so only at low Power
+4083:            '(2) Nach Variante "sparsame Fahrweise" |@@| Upshift allowed:
+4085:            '   2) "Economical Driving" Variant
+4086:            '   Downshift?(Zurueckschalten) happens only when Speed-change > 6%
+4087:            'Always Upshift
+4099:            'VECTO: Commented out START
+4101:            '       VECTO: Commented out END
+4103:            '       Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden: |@@| The first 10 seconds cycle can always be used for balancing Gear-shift:
+4107:            '    When slope changes always may result in Gear-shift:
+4117:            'Downshift:
+4126:                'C     Upshift, only if checked not the highest Gear:
+4137:            ' Relative Revolutions:
+4138:            ' der "sparsamen (..l)" Variante: |@@| Select Revolutions-relationship for the "fast (h ..)" and
+4140:            '   Drehzahlverhhealtnisse nach "Modellmix": |@@| the "economical (.. l)"  Variant:
+4141:            '   anhand der erforderlichen maximalen Motorleistung ueber die |@@| Revolutions-relationship for "Modelmix":
+4142:            '   naechsten 6 Sekunden |@@| according to the required maximum Engine-power over the
+4150:            '     next 6 seconds
+4151:            '      (Determine the proportions between the Fast and the Economical Driving-style
+4158:            '     Hausberger model):
+4159:            '     (pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl |@@| Mix the calculated Gears as specified in the input file:
+4160:            '      nach "reales Modell" bestehen soll) |@@| from the Input-file it is read the pmodell = ratios of the revolutions
+4165:            '      Ermittlung des "virtuellen" aktuellen Ganges nach Modell |@@| towards a "real model")
+4170:            '    ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden |@@| Determine the "virtual" up-to-date Gears from the Model
+4171:            '    check if Revolutions over Nominal-Revolutions, then must always upshift,
+4181:            '    otherwise Power not enough!
+4182:            '    Check whether required Power is over P_max (s)
+4208:            '    then Downshift?(zurueckgeschaltet):
+4214:            'falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert: |@@| Check whether Actual over P_max (s)
+4217:            '    Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh |@@| if bad Full-load-curve without Torque, then correct in Idle:
+4218:            '     dann wird zurueckgeschaltet: |@@| Checking whether required Power is higher than maximum power at nh
+4256:        'c     Ende "Modell"-Basisgangwahl |@@| then Gear-shift-back?(zurueckgeschaltet):
+4260:        'Kuppelschleif-check |@@| End "model"-Gear-selection basis
+4263:        '--------------------------------Checks Teil 1------------------------------------- |@@| Clutch-lock check
+4264:        'Checks Part 1 -------------------------------------
+4265:        'Checks to Purge non-sensible Gear-shift:
+4290:        'Division into "IPhase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3):
+4299:        'Search by last Gear-change
+4304:        'Maximum permissible Gear-shifts every 3 seconds:
+4305:        'Cruise-phases:
+4306:        'As long Speed-change since last Gear-shift is below 6% and Pe/Pnom below 6% then do not Gear-shift:
+4307:        'Deceleration-phases: Upshift suppressed
+4326:        'Acceleration phases: Downshift?(Zurückschalten) suppressed
+4327:        'If within 6 seconds switched back again to the previous Gear, then
+4328:        'stick to previous Gear
+4339:        'VECTO: Exception: on Full-load curve
+4340:        'If within the 6 seconds, it shifts once to higher and once to lower-Gear than the previous one, then
+4356:        '--------------------------------stick to the previous Gear.
+4357:        'Checks Part 2 -------------------------------------
+4358:        'Shifting from 2nd to 1st Gear is suppressed when v > 1.5 m/s
+4363:        'bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet |@@| NEW LUZ 040210: Upshifting only when in 2nd Gear over the Clutch-revolutions
+4375:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet |@@| at decelerations below 1.5 m/s, shift to Idle
+4383:        'If v < 0.1 m/s for more than 1 sec, then shift to Gear=0
+4384:        'Check if Revolutions over Nominal-revolutions, then should always Upshift,
+4424:        'otherwise Power not enough!
+4437:        'Speed look-ahead
+4438:        'Checks Gears for Cars(PKW) ....
+4447:        'Bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| Gear-shifting from 2nd to 1st is suppressed at v > 2.5 m/s
+4456:        'Wenn v mehr als 1 Sek. <0.1 m/s wird auf Gang=0 geschaltet |@@| At decelerations below 2.5 m/s, shift to Idle
+4461:        'If v < 0.1 m/s for  more than 1 sec, then shift to Gear=0
+4488:    'When Speed?(Beschleunigungsvorgaengen) below 1.5 m/s, then shift to 1st Gear
+4493:    'Function calculating the Power easily for Gear-shift-model
+4508:            'Function calculating the Power easily for EV-shift-model
+4552:    '--------------Revolutions-setting
+4561:    '----------------Power in-front?(vor) of Diff = At Wheel -------------
+4566:    '----------------Rolling-resistance----------------
+4591:    '--------Drag-resistance----------------
+4593:        'Vehicle Acceleration-capability(Beschleunigungsleistung) --------
+4594:        '   Previously (PHEM 10.4.2 and older) the m_raeder was used for Massered instead, with Massered = m_raeder + I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2
+4598:    '----------------The missing part (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) is now considered by fPaG(V,a)
+4603:    '----------------Slope resistance ----------------
+4608:    '-------------------Ancillaries(Nebenaggregate) ----------------
+4633:                'Transmission(Getriebe)-------------------
+4636:                'Verluste berechnet (eignet sich nur für Schaltgetriebe) |@@| Power to Transmission (Transmission-output)
+4637:                '       Calculate Losses (suitable only for Manual-transmission(Schaltgetriebe))
+4638:                '       Interpolation of the Transmission-power-loss
+4662:                '***Between 1 and 8 Gear, as well as between 9 and 16 Gear:
+4663:                '   Differential
+4682:                'Power after Differential (before Transmission)
+4692:                '   Differential
+4744:    '----------------Power before Differential
+>>> MODcalc\cVh.vb
+15:    'From DRI file
+18:    'Calculated
+58:        'Geschwindigkeit |@@| Route(Weg)Correct
+69:            'Speed
+79:            'Original-speed is longer by 1
+87:        'Steigung |@@| Segment (from Intermediate-seconds, otherwise Error)
+99:        'Slope
+112:        'Gear - but not Averaged, rather Gang(t) = DRI.Gear(t)
+132:        'Calculate Acceleration
+157:        'Vair specifications: Not in Intermediate-seconds!
+169:            'Speed
+177:        'Steigung |@@| Segment
+189:        'Slope
+202:        'Gear - not Averaged, rather Gear(t) = DRI.Gear(t)
+257:        'Calculate Acceleration
+273:            'TODO: If veh faster than cycle ...
+279:                'Falls nächsten Zeitschritt löschen näher an Wegvorgabe als aktueller Weg => Nächsten Zeitschritt löschen |@@| If the repeating Time-step is closer to the Specified-route than the Actual-route => Repeat Time-step
+291:                'Keine Korrektur |@@| If the next Time-step to Delete closer to specified Route than the Actual-route => Delete Next Time-step
+>>> MODcalc\Em Calc.vb
+101:                'Normal interpolation
+185:        'First two seconds, no correction:
+208:        'Create Dictionaries
+220:        'Calculate sums
+243:        '************************************ 'Mean-values
+258:            '***** Cycle Mean-values ************************************
+261:            '***** Measurement-value
+264:            '***** PHEM value
+279:            'Diff - CAUTION: No Pnom normalization! Beware of the Dynamic-correction!
+282:                'Average values over x seconds and imediately put au
+286:                'Set to zero
+292:                'Messwert |@@| Accumulate(Aufsummieren)
+295:                'Measurement-value
+311:        '************************************ PHEM-value
+324:            'Dump Modal '************************************
+328:            'Measurement-value
+332:            'PHEM-value
+351:        'Diff - CAUTION: No Pnominal-normalized! Beware of the Dynamic-correction!
+355:        'Header and write units
+358:            'Average Values over x seconds and imediately set au
+371:            'to zero
+388:            'Ausgabe |@@| Accumulati(Aufsummieren)
+399:                'Output
+402:                'Measurement-values
+563:            'C      PHEM-value
+564:            'C      Konstantfahrt: |@@| Load-cycle(lastwechsel) (general Qualification(Bedingung ) except for Intervals with
+572:            'C       Damit werden Trapezfoermige Zyklen nicht als lastwechsel erkannt |@@| Constant-traveling:
+573:            'C       da LWje = 0. In diesem fall wird voraus der naechste Wert gesucht, |@@| Thus Trapezoid-Cycles are not recognized as Load-cycle(lastwechsel)
+574:            'C       der nicht gleich Pe(jz) ist. Dieser wird anstelle von Pe(jz+1) |@@| since LWje = 0. In this case, search ahead of next Value,
+575:            'C       gesetzt: |@@| which is not equal to Pe(jz).
+603:            'C      lastwechsel werden nur als solche gezaehlt, wenn sie mehr als 0.05% von |@@| This will replace Pe(jz +1):
+604:            'C      Pnenn betragen (sonst ist Ergebnis viel zu wackelig): |@@| Load-cycles(lastwechsel) are accounted as such only if they exceed 0.05% of Pnom
+605:            'C       (Lastwechsel wird gezaehlt, wenn LWja < 0) |@@| otherwise Outcome is too unstable):
+609:            'C     (1) Mittlere Amplitude vom Pe-Verlauf ("Ampl") |@@| accounted as Load-cycle(lastwechsel) when LWja < 0)
+610:            'C         Zwischenrechnung fue Zyklusmittelwert: |@@| 1) Mean Amplitude of the running(Verlauf) Pe ("Ampl")
+617:            'C       Berechnung der mittleren Amplitude in 3 Sekunden vor Emission (Ampl3s) |@@| Intermediate calculation of Cycle-average:
+618:            'C       und der Anzahl der Pe-Sekundenschritten ueber 3% der Nennleistung |@@| Calculate the mean Amplitude in 3 seconds of(vor) Emissions (Ampl3s)
+619:            'C       (and the number of Second-steps where Pe is 3% above the Nominal-power
+664:            'C     2) Change the current Engine-power (dP_2s):
+672:            'C    Gezaehlt nur bei dynamischem betrieb: |@@| Average 3 sec of(vor) Emission:
+681:            'C     (Counted only in dynamic operation:
+687:            'C     4) Average of the negative Engine-power ("PnegMW"):
+695:            'C    Gezaehlt nur bei dynamischem betrieb: |@@| Average 3 sec of(vor) Emission:
+707:        'C     Counted only in dynamic operation:
+708:        'C      Addition der Amplituden von Pe (1. Pe-Wert |@@| Calculation of absolute Dynamic-map sizes:
+709:        'C      Addition of Pe Amplitudes (1 Pe-Value
+710:        'C    is counted also for Maxima and for Minima Amplitudes )
+714:            'C     First Second:
+717:                'C        2. Second to End:
+792:        'Absolute-value:
+805:        'Speed/Accel-dependent parameters only when not Eng-Only
+806:        '   ...Dynamic-parameters as the Differential of Dynamics of the Map
+812:    'was here before. Now in its own method because of KF-creation invalidity
+838:''' Dynamic parameters as the Differential of Dynamics in the Map:
+846:    '! Class for calculating the Exhaust-temperatures
+895:    '**** Einlesen von tgas aus .npi (Projekt HERO) **** |@@| Fields for Quantities from PHEM main-program
+896:    ' => Reading about tgas from .npi (Project HERO) ****
+897:    ' Luz/Rexeis 16.05.2011 |@@| overwrites tgas(jz) over(aus) HtMass()
+916:        '! Main-routine for EXS module
+921:        '! Calling from Exs_Main(true) -> Developer Version without PHEM main-program
+951:        'Fields for Quantities from exs-file
+955:        '!General Constants
+956:        '!Exhaust Physical-values:
+958:        'insensitive vs. lambda, see "Stoffwerte_vollständigeVerbrennung_neu.xls"
+964:        '!cp_exh = 1054.0 '!Exhaust heat-capacity [J/(kg*K)] is no longer used because it is now calculated directly in Abh from T and Lambda
+965:        '!Note: Average-value from searching the Internet, found no information in literature
+967:        'Reaktionsenthalpien in J/mol |@@| calibrated based on Test Thermocouple assuming Coating-thickness(Schichtdicke) 0.1mm
+972:        'Molmassen |@@| Reaction-enthalpies in J/mol
+977:        'Molecular-weights
+985:        'Compatibility with old EXS-structure Introduced before the new Concept for Em-components with cMap-class tMAP-class, etc.
+1006:        'References for Emissions: The given, if available, otherwise the calculated
+1025:        'Dimensioning:
+1026:        'In DEV direkt aus der Datei *.phe eingelesen |@@| Return of the relevant Quantities from(aus) the PHEM main-program
+1045:        'Read in DEV directly from the *. phe file
+1056:        'Anfang exs-File einlesen |@@| It is allocated below because there must be further mpexh
+1072:        'Begin readning exs-file
+1079:        'dummy = DatExs.ReadLine(0) 'old dummy line: caution for exs-file compatibility
+1085:        'Initialize the respective Number of Modules
+1088:                'Reading of the Data-blocks for each Module
+1096:        'Error-message in TempMod(iMod).Read(DatExs)
+1100:            'End reading exs-file
+1121:            'Beginning reading csy-file
+1133:        'End reading csy-file
+1135:            'Calculation loop: Per Time-step / per Module: 1. Temperatures, 2. Conversions
+1139:                    ' Display per-second Results on each iteration Results
+1159:                    ' Write Header *.ter
+1169:            'Write the Header for KonvMods
+1174:            'Start-values ​​for Cooling-system simulation:
+1189:                'Heat transfer into the Cooling-system (Map)
+1191:                    'Cooling-System Simulation
+1195:                    'Heat inputs in Masses 1 and 2
+1199:                    'The Heat-transfer Mass 1 and 2 for Cooling -system
+1205:                    'Bulk-temperatures for the next Time-step
+1208:                    'Heat-loss to the outside
+1218:                        'Total Heat-input into the Cooling-system (Output value of the simulation)
+1219:                        'Calculation of the Exhaust-gas-flow from a given Fuel-consumption and lambda
+1220:                        'Permitted only for engines without EGR
+1221:                        'Unit mpexh ....... [kg/s]
+1222:                        'Unit Vpexh ....... [m3/s]
+1224:                        '!Case 1: Calculation of Consumption and lambda
+1231:                        'Case 2: Calculation of pumped Airflow through engine
+1239:                'Missing: Methodology for Mass-flow calculation for EGR Engines BMW HERO Project
+1252:                'Calculate Lambda  if not explicitly given
+1253:                'The First Module in the Exhausts-system may not be a catalytically active Element,
+1269:                            'therefore, emissions are always equal to the untreated emissions from the PHEM main-program
+1273:                            'Calculate Qp_reak: Mass-flow-rate * Conversion * Reactive-enthalpy / molar-mass
+1277:                            'Compute Pollutant-components
+1291:                        'Conversion of NOx, CO, HC -> old value * (1-conversion-rate)
+1304:                'Zeile in *.ter schreiben |@@| If Module has no Conv-element changes nothing (Note: Module 1 has always ModTyp0)
+1323:            'Write Line in *.ter.
+1326:            'End Calculation-loop
+1338:            '---------- Close all second-by-second Result-files
+1340:                'Abbruchbedingung: Temperatur des Massenelementes "t_m" des in "iter_pos" spezifizierten Moduls |@@| Query return in the iterative Calculation-mode for Starttemp -------------------
+1341:                'am Beginn und am Ende des Zyklus innerhalb vorzugebender Bandbreite "iter_tol" |@@| Termination-condition: Temperature of the Mass-elements "t_M" in the "iter_pos" specified module
+1417:        '--- Ausgabefile *.ter schreiben ---------------------------------------------------------- |@@| at the Beginning and End of the Cycle within vorzugebender bandwidth "iter_tol"
+1419:        '--- Write Output-file *. Ter --------------------------------------------- -------------
+1422:        'End wrtting Output-file *. ter -------------------------------------------- ---------
+1431:    ''' Clean up
+1433:    ''' <Class for Temperature-modules
+1492:        ''' remarks>Type of module is defined with Mod\typ </remarks>
+1494:        ''' <Reading the EXS file
+1512:            'Pfad für Konvertierungsraten bei Modulen mit Konvertierung |@@| param name="Datei"> File-handler </param>
+1520:            'Path to Conversion-rates for Modules with Conversion
+1561:                    'Initialize the modules & Read the Parameter-files, depending on Module
+1563:                    'Heat-transfer factor
+1565:                    'surface of exterior
+1567:                    'Faktoren für Wärmeübergänge nach außen |@@| Emissivity
+1571:                    'Factors for Heat-transfer to the outside
+1574:                    'Factors for Temperature related t_katsubstrat  <-> t_kat_außen
+1576:                    'Cooling-mass curve
+1578:                    'Normalized Cross-sectional area
+1580:                    'Durchmesser Thermoelement |@@| average backpressure(Gegendruck)
+1583:                    'Thermocouple Diameter
+1595:                    'Thermocouple Cooling-curve
+1621:            'Heat-transfer-Factors to the outside
+1629:            'Check whether Tgas given in Cycle:
+1638:                'Zusätzlich berechnete Parameter für Rohrmodule: |@@| Normalize(Entnormierungen) and Calculating other Variables
+1650:            'Additionally calculated parameters for Pipe-module:
+1653:            'Geometrische Größen berechnen |@@| For Flow-calculations in SI-units is Querschnittsfäche converted into m2
+1654:            'Geometrical Quantities calculated
+1655:            'Note: it is assumed that temperature sensors are
+1660:            ' centered in the Pipe
+1661:            ' umströmter Zylinder vernachlässigt |@@| Note: Ball joint on t-sensor tip is neglected
+1663:            'Abkühlkurven einlesen |@@| in the analysis of Airstream-cylinder
+1691:        ''' Read Cooling-curves
+1708:            'Heat-transfer mass
+1711:            'Setting Threshold for Precision of the Temperature-calculation (needed for iterative Calculation-mode)
+1730:            'Return the Inlet-temperature of the Exhaust-gas from the Module above or from the Engine
+1733:                '! Calculation of the current Mass-temperature
+1739:            'Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen: |@@| at n_iter > 0 the Final-value is already assigned to the last Iteration
+1761:                'Wärmekapazität (vgl. Bogdanic) |@@| If Engine-OFF, wait Cooling-curve and exit method:
+1780:                'Heat-capacity (see Bogdanic)
+1788:                    '                                     Iteration-loop for Heat-transfer
+1794:                    'Termination-criterion below
+1803:                        'Determining the Temperature of the Exhaust-gas at the Center of Mass ("t_gas_mid") consists of a non-linear (logarithmic) Temperature-curve(verlauf)
+1807:                        'Heat-transfer Convection inside all Modules (except for Pipe)
+1809:                        'for Pipe-modules:
+1811:                        'Nusselt Number: Density = 345/t_gas_mid, Term in Parenthesis: mu_Rohr / mu_Mitte
+1815:                    'Heat-transfer (Convection inside) d_pipe, in m: char. Length
+1820:                    'Heat-capacity (see Bogdanic)
+1838:            'Termination-criterion: Change of the Exhaust Outlet-temperature compared to the last Iteration-step smaller than Threshold
+1840:                'Calculate the Heat loss of the "thermal mass" to the outside
+1841:                'Parameters are read from EXS file:
+1842:                '   Data for MuD:
+1843:                '   Oberfl_Kat = 0.12 'Surface for Heat-transfer in m^2
+1846:                'Empirische Formel, passt für alle Rollentests recht gut |@@| Emiss = 0.5 'emissivity
+1848:                'Anm.: Versuch mit direkter Abhängigkeit von t_m -> funktioniert nicht gut |@@| Empirical formula, suitable for all OK Roll-tests
+1850:                'Note: Tests with direct Dependence on t_m -> does not work well
+1852:                'Heat-loss by Radiation
+1856:                'Heat-loss by Convection
+1857:                'Parameters are read from EXS file:
+1858:                '   Data for MuD:
+1859:                '       Module 3:
+1860:                '       Oberfl_Mod3 = 0.169457508 'Surface for Heat-transfer in m^2
+1863:                '   Modul Nr. 4: |@@| Emiss = 0.5 'emissivity
+1864:                '       Module 4:
+1865:                '       Emiss = 0.9 'Emissivität |@@| Oberfl_Mod4 = 0.103596481 'Surface for Heat-transfer in m^2
+1869:                'Wärmeverlust durch Strahlung = Sichtfaktor * Emissivität * St.-Boltzm.-Konst * Oberfläche * (T_Rohr^4 - T_Umgebung^4) |@@| Emiss = 0.9 'emissivity
+1871:                'Heat-loss by Radiation = View_factor * Emissivity * St.-Boltzm.-const * Surface * (T_Pipe^4 - T_Environ^4)
+1874:                'Heat-loss by Convection = Heat_transfer_coefficient * Surface * (T_Pipe - T_Environ)
+1879:            'Standard: Crad constant, no Loss by Convection
+1886:        ''' Total-heat-loss
+1899:                'Thermocouple-Heat-transfer
+1912:                '!Formelwerk Berechnung Wärmeübergang am umströmten Zylinder |@@| If Engine-OFF, wait for Cooling-curve and exit method:
+1921:                'Formula Calculating Heat-transfer-flow around the Cylinder
+1922:                'Simplified solution of the Heat-flow-equation for the t-sensor
+1924:                'Zeitdiskrete Lösung der PT1-Diffgl |@@| corresponds to a Diffgl. for a PT1 section(glied)
+1991:                ''Discrete-time Solution of the PT1-Diffgl
+2003:                'Extrapolation for LastTemp > TempAR(0)
+2005:                'Extrapolation for LastTemp < TempAR(Adim)
+2041:        'Klasse initialisiert als Unterelement von TempMod |@@| One Time-step forward(vor)( =1 second)
+2047:        'c     Class initialized as a Subelement of TempMod
+2049:        'c     Prefix "c" means: use Cycle-value for Characteristic-correction
+2053:        'Index "cc" means: Value of Charachteristic-curve (-> "c" - "cc" is the Derivative, corrected)
+2105:            'Specify Filename for per-second Output-file
+2126:            'Abort if given no NOx
+2149:            ' t-SCR (° C), deNOx (1-NOx-Exhaust/NOx-Raw), t-upstream (°C), NOx-raw (g/h)/kW_Nominal-power, total NOx over 60sec before g/h)/kW_Nominal-power, space velocity (1/h)
+2150:            ' Program to simulate SCR-fleet-model
+2151:            '            Note: deNOx values less than zero are possible:
+2162:            '     this corresponds to higher NOx-raw level than in the Base-map
+2164:            '     1.) Calculation of per-second Values ​​for Input-variables of the SCR-model
+2165:            '     a.) t_SCR: combined-weight of t_upstream and t_downstream
+2166:            '     Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben |@@| SCR-model-internally there are Temperatures between 50 ° C and 500 ° C limits
+2172:            '     Temperature-model-values (eg Cold-start) will not be overwritten
+2173:            '         b.) t_up, NOxraw, SV. 20s Moving-average in the past
+2187:            '     Formula applied also to the first 20 seconds
+2188:            '         c.) NOx60s: Sum over the last 60s of the specific NOx-raw emissions
+2194:            '        Formula applied to the first 60 seconds
+2201:            '     for seconds 1-59 must Extrapolate total-value
+2213:            '     Calculation of deNOxmin value from Characteristic-curves at 50 ° C
+2215:            '        2.) Calculation deNOx
+2225:            'c        a.) deNOx of characteristic:
+2228:                'c           b.) If correction criteria are met: deNOx-correction compared against Characteristic
+2238:                'c           t_up from characteristics:
+2248:                'c           NOx_raw of characteristics:
+2258:                'c           Sum of the NOxraw in the last 60 seconds from characteristics:
+2276:            'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz) |@@| Space/Velocity from(aus) characteristics:
+2312:    ''' SCR Modell |@@| Write the results on the standardized variables eEmKomp (iSchad, jz) and Qp_reak (jz)
+2319:        'SCR model
+2325:        'c     Class initialized as a Subelement of TempMod
+2327:        'c     Prefix "c" means: use Cycle value for Characteristic-correction
+2331:        'Index "cc" means: Value of Characteristic (-> "c" - "cc" is the Derivative, corrected)
+2385:            'Specify Filename for per-second Output-file
+2405:            'Abort if no NOx given
+2429:            ' Programm zur Simulation SCR-Flottendurchschnitt |@@| t-SCR (° C), deNOx (1-NOx-Exhaust/NOx-raw), t-upstream (° C), NOx-raw (g/h) / kW_Nominal-power, total NOx over 60sec before g/h)/kW_Nominal-power, space velocity (1/h)
+2430:            ' Program to Simulate SCR-fleet-model
+2431:            '            Note: deNOx with values less than zero are possible:
+2443:            '     this corresponds to higher NOx-raw level than in the Base-map
+2445:            '     1.) Calculation of per-second Values ​for Input-variables of the SCR model
+2446:            '     a) t_SCR: combined-weight of the t_upstream and t_downstream
+2447:            '     Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben |@@| SCR model internally there are temperatures between 50 ° C and 500 ° C limits
+2453:            '     Temperature-model values (eg cold start) will not be overwritten
+2454:            '         b.) t_up, NOxraw, SV. 20s moving average in the past
+2470:            '     Formula applies to the first 20 seconds
+2471:            '         c.) NOx60s: Sum over the last 60s of the specific NOx-raw emissions
+2479:            '        Formula applies to the first 60 seconds
+2486:            '     For seconds 1 to 59 must sum the projected values
+2498:            '     Calculation of the Characteristic-curves for deNOxmin values at 50 ° C
+2500:            '        2.) Calculation of deNOx
+2510:            'c        a.) Characteristic of deNOx:
+2513:                'c           b.) If Correction-criteria are met: Correct deNOx against the Characteristic
+2523:                'c           Characteristic of t_up:
+2533:                'c           Characteristic-curve of the NOx_raw:
+2543:                'c           Sum of NOxraw in the last 60 seconds of Characteristic-curve:
+2561:            'Characteristic-curve of Distnace-Speed(Raumgeschwindigkeit):
+2593:    ''' Write the results on the standardized variables eEmKomp(iSchad, jz) and Qp_reak(jz)
+2600:        'KAT-model
+2606:        'Class initialized as a Sub-element of TempMod
+2627:        ''' Mapped-data
+2642:        ''' Creating a new CAT module
+2644:        ''' <Interpolation-Function
+2645:        ''' <param name="x">Mass-flow(Massenstrom)</param>
+2646:        ''' <param name="y"> Temperature before(vor) KAT </param>
+2647:        ''' <param name="MapID">The MapID of the corresponding Exhaust-gas-component</param>
+2648:        ''' <returns>The interpolated value for x and y from the Map</returns>
+2660:        ''' remarks> It calculates the converted rate of the appropriate Exhaust-gas-component from the Mass-flow temperature Map</remarks>
+2662:        ''' <Reading the Maps for Conversion-rates
+2716:            'param name="Name">Filename</param>
+2719:            'Units (are not evaluated)
+2731:                'Values
+2742:            'Set KonvRaten to Zero when no component given
+2750:            'Triangulating
+2763:        ''' define Dic. for modal Konvrate
+2765:        ''' <Calculation of the Conversion-rate from Map
+2766:        ''' <param name="jz">Time</param>
+2768:            'remarks> Used to calculate the temperature of the Thermoelements on Kateingang (corresponds to  Module-number i-1)!</remarks>
+2784:        ''' Conversion-rate calculated from Map
+2796:        ''' Header for Output-file
+2798:        ''' <Data for Output-file
+2819:    ''' param name="jz">Time</param>
+2835:        'C     Interface to Converter-classes cScrMod, cDocMod, etc. ..
+2836:        'C     uebergeben wid "such" als X-Wert, der dann als berechneter Y-Wert wieder zurueck gegeben wird |@@| Subroutine of(zu) PHEM for linear Interpolation of a Polygon (eg called by Vissimzs.for)
+2837:        'C     Zu Belegen sind vorher: |@@| It is given the X-value to "search", and it gives back the calculated Y-value
+2838:        'C     Xis(j) und Yis(j) |@@| for previous Allocation:
+2839:        'c     Xis(j) and Yis(j)
+2850:        'C    Given the desired Value(search) and the Number of the existing Polygon-points (izpl)
+2851:        'c     Search the closest points of the Revolutions from the input Full-load curve:
+2862:        'C      Distance to Input-points and Search those Points with the smallest Distance:
+2868:                '!Fix the second Interpolation-points (only interpolation, no extrapolation)
+2874:                '!Extrapolation up
+2879:        'c      Extrapolation down
+2887:        'c     Sort the 2 Values by ascending n:
+>>> My Project\Application.Designer.vb
+6:' Below is the General Information about the Attributes
+7:' controlling the Assembly. Change these attribute values to modify the information
+9:' associated with the Assembly.
+20:'Review the values of the Assembly Attributes
+23:' The following GUID is for the ID of the Typelib if this project is exposed to COM
+25:'      Version information for an assembly consists of the following four values:
+26:'      Major Release
+27:'      Minor Release
+28:'      Build Number
+31:' You can specify all the values or use the defaults for Build and Revision Numbers
diff --git a/Tools/TranslateComments/comments2.txt b/Tools/TranslateComments/comments2.txt
new file mode 100644
index 0000000000..70b05a91e4
--- /dev/null
+++ b/Tools/TranslateComments/comments2.txt
@@ -0,0 +1,2295 @@
+>>> ApplicationEvents.vb
+5:    ' Für MyApplication sind folgende Ereignisse verfügbar:
+7:    ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
+8:    ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung nicht normal beendet wird.
+9:    ' UnhandledException: Wird ausgelöst, wenn in der Anwendung eine unbehandelte Ausnahme auftritt.
+10:    ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist. 
+11:    ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
+14:        'Initialisierung
+25:            'Pfade
+33:            'Falls Ordner nicht vorhanden: Erstellen!
+52:                    'Directories.txt vorkonfigurieren
+78:            'Trennzeichen!
+91:            'Klassen initialisieren
+102:            'Config
+106:            'Log starten
+109:                'Dateigröße checken
+112:                'Falls Log zu groß: löschen
+139:            'Lizenz initialisieren
+>>> cConfig.vb
+49:        '*** Erste Zeile: Version
+52:            ' "V" entfernen => Zahl bleibt übrig
+55:                'Falls Version ungültig: Abbruch
+58:                'Version festgelegt
+134:        'Zeile      Variable        Typ         Beschreibung
+135:        '(01)       WorkDPath       String      WorkDir
+136:        '(02)       LastMode        Short       Letzter verwendeter Modus (entspricht CBoxMODE.SelectedIndex)
+137:        '(03)       IntpV2          Boolean     Neuen Interpolator verwenden
+138:        '(04)       nnormEngStop    Single      Unter dieser Drehzahl Engine Stop
+139:        '(05)       TEMpath         String      TEM_Data Pfad
+140:        '(06)       LastTEM         String      Letzte TEM Datei   -nicht in Options Form!!!
+141:        '(07)       TEMexl          Boolean     Open TEM in Excel  -nicht in Options Form!!!
+142:        '(08)       EAAvInt         Short       Analyse intervals of seconds. Wenn 0: Wert abfragen
+143:        '(09)       ModOut          Boolean     Modale Ausgabe
+144:        '(10)       WegKorJa        Boolean     Wegkorrektur damit bei Geschw. Reduktion Zyklus nicht kürzer wird
+145:        '(11)       GnVorgab        Boolean     Gang- bzw. Drehzahl
+146:        '(12)       LogSize         Int16       Maximale Log-Größe [MiB]
+147:        '(13)       FZPsort         Boolean     FZP sortieren (früher Standard da VISSIM die .fzp nach Sekunden sortiert ausgibt)
+148:        '(14)       FZPsortExp      Boolean     Sortierte FZP exportieren
+149:        '(15)       BATCHoutpath    Boolean     Ausgabepfad für BATCH-Modus:   <WORKDIR>, <GENPATH> oder Pfad
+150:        '(16)       BATCHoutSubD    Boolean     BATCH-Ausgabe in Unterordner (je .gen Datei)
+151:        '(17)       AirDensity      Single      Luftdichte
+152:        '(18)       FinalEmOnly     Boolean     Nur Final-Emissions ausgeben
+153:        '(19)       FCcorrection    Boolean     FC-Korrektur im BATCH-Modus
+175:                    'Früher:  IntpV2 = CBool(line)
+>>> cCustomMap.vb
+85:        'Min/Max suchen
+105:        'Normieren
+125:            'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+>>> cCycleKin.vb
+9:    'Fahrzustände in Sekunden
+15:    'Fahrzustands-Anteile
+21:    'Beschl.-Parameter
+82:        '3s-Beschl
+91:            'Fahranteile Stop/Acc/Dec/Cruise
+106:            'Durchschnitts-Beschl
+>>> cDelaunayMap.vb
+35:        'XY-Triangulierung
+50:        'XZ-Triangulierung
+>>> cDEV.vb
+13:    '********************************* Anleitung zur Einbindung neuer DEV-Options *********************************
+15:    '1. Eintrag in "Sub New()"
+17:    '   I) Neues cDEVoption Objekt definieren mit "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)"
+19:    '       ConfigType      <tDEVconfType>  ...definiert Typ: Boolean, Integer, Single, String, Menüauswahl (Integer) oder Verweis auf Funktion
+20:    '       Description     <String>        ...Beschreibung des Parameters
+21:    '       SaveInConfg     <Boolean>       ...Ob Einstellung für nächsten PHEM-Start gespeichert werden soll
+22:    '       Enabled         <Boolean>       ...Ob Einstellung im DEV-Tab geändert werden kann
+24:    '   II) Default-Wert definieren. Hier wird unterschieden welcher ConfigType verwendet wird:
+26:    '       a) ConfigType = tBoolean:
+28:    '           Conf0.BoolVal = ...             <Boolean> 
+30:    '       b) ConfigType = tSingleVal:  
+32:    '           Conf0.SingleVal = ...           <Single>
+34:    '       c) ConfigType = tStringVal:    
+36:    '           Conf0.StringVal = ...           <String>
+38:    '       d) ConfigType = tIntVal:    
+40:    '           Conf0.IntVal = ...              <Integer>
+42:    '       e) ConfigType = tAction:
+44:    '           Conf0.ActionDelegate = New cDEVoption.dActionDelegate(AddressOf NameDerFunktion)
+46:    '           Wobei NameDerFunktion die aufzurufende Funktion ist die einen <String> übergibt: "Public Function NameDerFunktion() As String"
+48:    '       f) ConfigType = tContMenIndex:
+50:    '           Verfügbare Auswahl-Möglichkeiten als <String> definieren:
+52:    '               Conf0.AddMode("Auswahl 1")
+53:    '               Conf0.AddMode("Auswahl 2")
+54:    '               usw...
+56:    '           Default-Wert definieren: Erste Auswahl = 0
+58:    '               Conf0.ModeIndex = ...       <Integer>
+73:        '**************************** START: Parameter konfigurieren '****************************
+113:        '**************************** ENDE: Parameter konfigurieren '*****************************
+121:    'Initialisiert die tatsächlichen Config-Parameter aus der MyConfigs-Liste 
+126:    'Demo für Delegate Function
+327:                    '??? Darf nicht sein
+>>> cEmComp.vb
+21:    'Transient Correction
+25:    'Komponente wird sekündlich ausgegeben
+28:    'ATVals definiert (EXS)
+31:    'Summen/DruchschnittsWerte
+109:        'Durchschnitt
+113:        'Summe (g/h umgerechnet in g)
+>>> cERG.vb
+47:        '********************** GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '**********************
+84:        '********************** Erg-Einträge erstellen '**********************
+90:        'Fahrzeugtyp-unabhängig
+94:        'Jede GEN-Datei auf Modus und Kennfeld checken
+115:                    'nix...
+136:            'Elektrofahrzeug / Hybrid
+139:                'EV & HEV
+158:                'Nur EV:
+171:            'Konventionell / Hybrid  (Alles außer EV)
+174:                'Konventionelles Fahrzeug...
+182:                    'Aus den Messdaten
+197:                            'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+212:                    'Aus dem Kennfeld
+240:                            'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+260:            'derzeit nix
+266:            'Fahrzeugbesogene Felder
+280:            'CylceKin
+288:        'ErgListe sortieren damit g/km und g/h nebeneinander liegen
+357:        'Fahrzeugtyp-unabhängig
+361:        'Länge, Geschw., Steigung
+364:            'Durchschnitts-Geschw. berechnen
+374:            'Durchschnitts-Steigung berechnen
+388:            'Positive effektive EM-Leistung
+399:            'Positive effektive Batterie-Leistung = innere EM-Leistung
+410:            'Positive innere Batterie-Leistung
+421:            'Verbrauchte Energie berechnen
+424:            'Negative effektive EM-Leistung
+435:            'Negative effektive Batterie-Leistung = innere EM-Leistung
+446:            'Negative innere Batterie-Leistung
+457:            'Geladene Energie berechnen
+460:            'Energie in/aus Batterie
+464:            'EtaEM
+478:            'EtaBat
+492:            'Delta SOC
+495:            'Nur EV:
+498:                'Energieverbrauch
+505:        'Konventionell d.h. alles mit ICE (nicht EV)
+508:            'Emissionen
+511:                'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+522:            'Leistung, Drehzahl
+535:            'Ppos
+542:            'Pneg
+551:        'Nur Gesamtfahrzeug (nicht EngOnly)
+554:            'Pbrake-norm
+561:            'Eair
+568:            'Eroll
+575:            'Egrad
+582:            'Eacc
+589:            'Eaux
+596:            'Ebrake
+603:            'Etransm
+610:            'Masse, Loading
+614:            'CylceKin
+620:                'EposICE
+627:                'EnegICE
+637:        'Ausgabe-String erstellen:
+655:        'Datei öffnen
+668:        'Datei schließen (wird nach jedem Job neu geöffnet)
+687:        'Datei öffnen
+704:        'Datei schließen
+739:        'Ausgabepfad definieren
+753:        'Datei öffnen
+755:            'Datei öffnen
+769:        'Datei schließen (wird nach jedem Job neu geöffnet)
+>>> cVSUM.vb
+46:        'Durchschnitts-Geschw. berechnen
+114:        'TODO: Mission nicht Zyklusname
+117:        'TODO: Test Setup
+>>> M_FCCor.vb
+5:    'C     Unterprogramm zur Korrektur der verbrauchswerte nach Motorgroesse (fuer HBEFA-Berechnungen, da dort
+6:    'C     alle LKW-Groessen mit gleichem *.mep gerechnet werden
+32:        'c  Korrektur des Kraftstoffverbrauches
+33:        'c  nur für Handbuchrechnungen und LKW
+35:            'c        für Euro0 und früher werden größenabhängig 3 verschiedene KF verwendet
+36:            'c        daher hier keine Größenkorrektur
+39:            'c         Korrekturfunktion für Euro1 und Euro 2 1:1 von Stand ARTEMIS übernommen
+50:            'c        Korrekturfunktion Euro 3 gg. ARTEMIS geringfügig adaptiert (siehe FcCorr_Eu3ff.xls)
+55:            'c         Korrekturfunktion für Euro 4 ff analog zu Euro3
+56:            'c         lediglich adaptiert: Durchschnittsnennleistung der ins mep verwursteten Motoren
+61:            'c         Euro6ff
+>>> M_Lese.vb
+16:        'GEN einlesen
+35:        'VECTO: Defaultwerte für Parameter die nicht mehr in der .GEN/.VECTO sind werden beim Einlesen über SetDefault belegt.
+46:        'Fehlermeldung in Init()
+51:        'Einlesen der KFZ-Spezifikationen aus 'KFZspez'
+131:        '   FLD muss jetzt vor MAP/MEP eingelesen werden falls dort <DRAG> Einträge sind!
+142:        'Normieren
+146:        '    Kennfeld: Spalten 1 und 2 sind die x- und y- Koordinaten (Pe,n), die
+147:        '    uebrigen sind Messwerte
+148:        '    Emissionen und Verbrauch in (g/(h*(kW_Nennleistung) bei SNF
+149:        '    Emissionen in (g/h) und Verbrauch in (g/(h*(kW_Nennleistung) bei PKW und LNF
+152:            'Kennfeld einlesen
+163:            'Normieren
+170:        '    Einlesen des KFZ-Fahrzyklus (Nicht in ADVANCE).
+171:        '       LUZ: 04.02.2011: Ab jetzt ausserhalb von LESE wegen neuer BATCH-Struktur
+174:        '    Dynamik-Korrekturparameter, falls dynamokkorrektur ausgewählt:
+175:        '    Parameter aus multipler Regressionsanalyse, Differenz zu stationär in
+176:        '      SNF: (g/h)/kW_Nennleistung fuer einzelne Parameter
+177:        '      PKW  (g/h) für Emissionen , (g/h)/kW fuer Verbrauch
+192:        'Einlesen der Daten fuer Hybridsimulation:
+195:            'TODO: EV/HEV Init hierher!
+>>> M_MAIN.vb
+31:        'Hauptprogramm für alle Modi
+48:        'Falls es zu "ungeplanten" Abbruch kommt
+51:        'Fehler zurücksetzen
+54:        'Modus festlegen und Meldung
+70:        'Lizenz checken
+93:        'BATCH-Ausgabeordner erstellen falls notwendig
+114:        'MOD-Daten Klasse initialisieren
+116:        'TEST: Schaun ob's auch ohne dem geht: MODdata.Init()
+118:        'ERG-Klasse initialisieren
+128:        'Warnung wenn ungültige/unrealistische Einstellungen
+131:        'Meldungen
+134:        'Progbar-Init
+139:        '       Schleife zur Berechnung fuer alle vorgegebenen Zyklen und Fahrzeuge:
+142:        '**************************************** Job-Schleife ****************************************
+192:            'Check ob Abbruch
+195:            'Falls Error beim GEN einlesen
+198:            'Einlesen der Inputfiles
+199:            '   BATCH: Zyklus aus DRI-Liste
+200:            '   ADVANCE: Zyklus wird nicht eingelesen
+206:            'Überprüfe ob alle Modi in der GEN Datei lizenziert sind
+229:            'Falls Optimierer aktiv werden hier die Parameter eingelesen
+232:            'BATCH: Sub-Dir Ausgabeordner erstellen
+255:            '************************************** Zylus-Schleife ****************************************
+264:                    'ProgBar
+268:                    'BATCH-Modus: Fahrzyklus nicht aus GEN-Datei sondern aus DRI-Liste
+272:                    'Status
+277:                    'Ausgabe-Name definieren
+296:                '********************************** VECTO-Zylus-Schleife **********************************
+304:                        'ProgBar
+321:                    'TODO: Loading Schleife
+322:                    '***************************** VECTO-Loading-Schleife *********************************
+326:                    'Einstiegspunkt für SOC-Start Iteration
+329:                    'Aufraumen
+332:                    'Zyklus einlesen
+335:                        'Einlesen
+344:                        'v(s) in v(t) konvertieren (optional)
+352:                        'In 1Hz konvertieren (optional)
+356:                                'Fehlermeldung in DRI.Convert()
+362:                        'Entnormieren
+370:                    'Zyklus-Vorgaben initialisieren (Geschw, Beschl, ...)
+377:                        'Rechne .npi-Leistung in Pe und P_clutch um
+385:                        'ACHTUNG: VehmodeInit benötigt Infos aus GEN und DRI!
+387:                            'Fehlermeldung innerhalb VehmodeInit()
+416:                                    'TODO: Meldung...
+444:                        'CycleKin (für erg/sum usw.) berechnen
+452:                    'Emissionen und Nachbehandlung - wird bei EV-Modus nicht ausgeführt
+457:                        'Sekündliche TC Parameter ermittlen
+460:                        'Kennfeld Erstellung
+476:                        'Rohemissionen berechnen
+479:                        'TC Parameter umrechnen in Differenz zu Kennfeld-TC-Parameter
+482:                        'Dynamik-Korrektur
+488:                        'Korrektur der Verbrauchswerte kleiner LKW-Motoren bei HBEFA
+494:                        'Exhaust System Simulation
+504:                        'Summen / Durchschnitte bilden
+507:                        'Engine Analysis
+520:                    '*** Sekündliche Ausgabe ***
+532:                    'VECTO Ausgabe
+533:                    'TODO: Loadings umschalten...
+540:                    'Ausgabe für BATCH und ADVANCE
+544:                        'In ADVANCE ist Zyklus-Abbruch = Job-Abbruch
+560:                        'Ausgabe in Erg (Erste Berechnung - Initialisieren & Header)
+567:                    'Daten aufräumen
+570:                    'Status-Update
+577:                    'TODO: Loading Schleife
+578:                    '******************** ENDE *** VECTO-Loading-Schleife *** ENDE ************************
+588:                '************************* ENDE *** VECTO-Zylus-Schleife *** ENDE *************************
+595:            '****************************** ENDE *** Zylus-Schleife *** ENDE ******************************
+621:                'If GEN.irechwahl = tCalcMode.cmHEV Then MsgStrBuilder.Append(" (dSOC = " & SOC(MODdata.tDim) - SOC(0) & ")")
+641:            'Check ob Abbruch
+647:        '******************************* ENDE *** Job-Schleife *** ENDE *******************************
+>>> M_OptInterface.vb
+21:    'Korrigierte Emissionen (wird von SOC-Iterations-Modul bestimmt)
+24:    '*** Opt_Interface Ein/Ausschalten
+32:                'Initialisierung
+40:    '*** Initialisierung
+44:        'Zähler null setzen
+47:        'Korr. Em. löschen 
+52:        'TODO: I/O-Verzeichnis festlegen
+85:        'Timer initialisieren/starten
+92:    '*** Parameter einlesen
+98:        '**** Einlesen der Input-Datei mit Opt-Parameter
+108:    '*** Parameter ausgeben
+114:        '**** Ausgabe der Output-Datei mit Zielfunktion
+124:        'Ausgabe StatusString
+133:        'Berechnung der Zielfunktion
+136:        'Ausgabe der Zielfunktion
+144:    '*** Opt Deaktivieren
+153:    '*** Status-Meldung (darf nicht von BGWorker aufgerufen werden)
+158:    '*** Starte PHEM - wird von F_MAINForm.ComMsgTimer aufgerufen wenn Start-Signal erhalten
+161:        'PHEM starten
+165:        'Timer anhalten
+167:        'Zähler + 1
+169:        'PHEM starten
+174:    '*** PHEM fertig - wird von BackgroundWorker1_RunWorkerCompleted aufgerufen wenn PHEM beendet
+177:        'Ausgabe der Zielfunktion
+180:        'PHEM_Launcher beenden
+183:        'Timer wieder starten
+190:    '*** Beendet PHEM_Launcher
+>>> M_SOC_Iter.vb
+97:        'Check ob Vorzeichen von Delta-SOC sich ändert
+102:                'Vorzeichenwechsel...
+105:                    '...Limit erreicht => Abbruch
+126:                'Falls die letzte Iteration die Beste war (SOCnAbbr = True): Abbruch
+131:                'Falls eine andere Iteration besser war (SOCnAbbr = False): Wiederholen
+168:        'Check ob LinReg möglich: Mind. 2 Berechnungen; Mind. 1 dSOC-Vorzeichenwechsel
+271:            'Unkorrigierte Em verwenden wenn SOC-Iteration OK
+276:            'Unkorrigierte Em verwenden
+284:        'Korrigierte Emissionen für Optimierer
+286:            'Falls SOC-Iteration erfolgreich (oder Lin.Reg. nicht möglich) dann Emissionen der letzten Berechnung (unkorrigiert) verwenden
+>>> VECTO_Global.vb
+20:    'TODO: Weg damit! SOC-Iteration gehört in die Leistungsschleife oder nach Em-Berechnung für LinReg
+27:    'Dateiformat
+346:        'Log starten
+>>> ADVANCE\cADV.vb
+84:        'Zeile 1: FZP-Datei
+87:        'Zeile 2: FLT-Datei
+90:        'Zeile 3: TEM-Datei
+93:        'Zeile 4: RndSeed
+96:        'Zeile 5: MISKAMout True/False
+99:        'Zeile 6: STRfilter True/False
+102:        'Zeile 7: Distance filter für SUM.STR
+105:        'Zeile 8+: STR Dateien
+>>> ADVANCE\cADVANCE.vb
+71:    'Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien 
+103:    'Berechnung
+113:    'ADVANCE Initialisierung
+126:        'ADV Datei einlesen
+129:        'Check ob FLT vorhanden
+135:        'Check ob sortierte FZP vorhanden
+159:        'FLT einlesen (muss vor STR sein wegen cSTRerg)
+164:        'EMlist erstellen
+183:        'STR einlesen
+204:        'Listen erstellen
+209:        'FZP einlesen
+213:        'FZP sortieren (und exportieren)
+223:        'FZP Check
+233:        'Für AusgVis
+236:        'Ausgabe-Initialisierung
+238:        '   Dateinamen
+241:        ' Modale Ausgabe
+246:        'Startwerte
+260:    'ADVANCE Speicher frei geben
+270:        'Ausgabe
+273:        'Speicher freigeben
+333:        'Listen löschen
+340:        'Garbage Collection - Soll "System Out of Memory" Exception verhindern (tut's aber nicht!)
+346:    'ADVANCE Fahrzeugberechnung
+361:        'Check ob Fertig
+368:        'Zyklus-Klasse initialisieren
+374:        'Fahzeugnummer und Typ definieren (bleibt hier konstant)
+375:        '   Altes Fahrzeug ist VehStrAlt, Aktuelles ist VehStr
+380:        'Listen erstellen
+385:        't0
+388:        'Definiere Felder für Fahrzeug-Berechnung
+391:            'Check ob neues Fahrzeug 
+396:            'Allgemeiner Fahrzyklus
+401:            '   Strecken-Auswertung (MISKAM)
+408:                ''StatusMSG(7, "Calculation running... " & CInt(zFZP / FZPlen * 100).ToString("00") & "%", False)
+415:        '   Fahrzeug-Identifizierung
+419:        'Check ob Zyklus zu kurz => Ãœberspringen
+422:        'Fahrzeuganzahl je Typ erhöhen
+427:        'Check ob letzte Gen-Datei neu zu verwenden ist, sonst Belegung durch FLT
+440:        'VehStr ist ab jetzt ALT
+449:    'Abschnittsweise Berechnung
+469:        'Zyklus durchschleifen
+472:            'Nr. der STR-Datei
+475:            'Falls Wechsel in STR-Nr:
+476:            '   Alte STR-Nr abschließen
+485:                        'Distanz (gefahrene km)
+488:                        'Reisezeit in h
+491:                        'Kfz-Anz
+494:                        'Summen-Emissionen
+513:            'Aufsummieren
+527:        'Letzte STR abschließen
+534:                'Distanz (gefahrene km)
+537:                'Reisezeit in h
+540:                'Kfz-Anz
+543:                'Summen-Emissionen
+565:    'FLT einlesen
+667:    'FZP einlesen
+696:        'Dateilänge bestimmen
+730:        'Arrays dimensionieren
+750:        'Datei einlesen
+755:        'Kommentare überspringen
+765:            'Strecken die nicht in der STR Datei aufgeführt sind werden hier entfernt
+783:            'Arrays belegen
+794:            'Progress-Ausgabe
+804:        'Speicher freigeben
+814:            'Arrays neu dimensionieren
+830:    'FZP sortiren
+872:            'Aktuelles Fahrzeug ist vNr1
+874:            'Zähle Fahrzeuge mit vNr = vNr1
+883:            'vNrAnz = Anzahl der Fahrzeuge mit vNr = vNr1
+884:            'Sortiere alle Fahrzeuge mit vNr = vNr1 nach Fahrzeugnummer
+892:                        'Zwischenspeicher = Zeile x1
+901:                        'Zeile x1 = Zeile x2
+910:                        'Zeile x2 = Zwischenspeicher
+924:            'vNr1 nach Zeit sortieren
+931:                            'Zwischenspeicher = Zeile xx1
+938:                            'Zeile xx1 = Zeile xx2
+946:                            'Zeile x2 = Zwischenspeicher
+960:            'Status-Ausgabe
+974:    'FZP exportieren
+1016:        'Daten
+1042:    'STR einlesen
+1133:        'SID-Liste erstellen
+1162:    '   ...Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben
+1194:    'ADV einlesen
+1208:        '********** .ADV Datei einlesen ********
+1217:        'Zeile 1: FZP-Datei
+1220:        'Zeile 2: FLT-Datei
+1223:        'Zeile 3: TEM-Datei
+1226:        'Zeile 4: RndSeed
+1229:        'Zeile 5: MISKAMout True/False
+1232:        'Zeile 6: STRfilter True/False
+1235:        'Zeile 7: STR.SUM Streckenfilter
+1238:        'Zeile 8+: STR Dateien
+1258:            'Ausgabepfad definieren
+1286:        'File mit Summen Ergebnissen ueber alle Kfz:
+1308:    'Ausgabe Schließen
+1331:            'C      Umrechnung auf g Emissionen je Sekunde sowie Kfz/Tag
+1346:            'C      Umrechnung auf mg Emissionen je Meter
+1347:            'C     Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet:
+1363:            'C      Ausgabe der Ergebnisse
+1365:            'C      Filename fuer Ergebnisfile = Name Eingabefile aber mit *.sd3:
+1369:            'C       File mit Summen Ergebnissen ueber alle Streckenstuecke:
+1439:        'C     Unterprogramm zu PHEM/Advance zur Ausgabe der Ergebnisse an MISKAM Luftguetemodell von Lohmeyer
+1440:        'C     Daten jeweils durch Semikolon getrennt ausgegeben
+1452:        'C     Aufaddieren der Emissionsdaten nach Streckenabschnitten, ueber jede Sekunde fuer jedes Fahrzeug
+1453:        'C     Achtung: jeweils 2 Richtungen je Abschnitt moeglich aber nur StrId in *.fzp uebergeben -> auf "naechstgelegene"
+1454:        'C     Richtung zugewiesen
+1464:                    'C      Suche nach naechstgelegenem Strassenteilstueck
+1465:                    'C      Koordinaten Kfz:
+1468:                    'C      Koordinaten Strecke: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) aus Eingabe
+1469:                    'C      Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j
+1479:            'C      Falls Streckennummer auf *.fzp File in *.str File nicht existiert, wird auf naechstgelegenes Stueck zugewiesen (gleiches System wie oben):
+1495:            'C     Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten:
+1496:            'C     berechnung sekuendlich in (g/h)/3600 -> g/Strecke ueber gesamte Zeit
+1503:            'C      Zaehlen der Kfz fuer DTV (nur wenn nicht in voriger Sekunde auch schon auf der Strecke
+1511:            'C     Grobe Rechnung Benzol nach GLOBEMI (HBEFA):
+1512:            'C      Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+1534:            'C     Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!:
+1535:            'C      Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+1562:            'C     SO2-Emissionen aus dem  im Kraftstoff enthaltenen
+1563:            'C     Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2
+1596:        '******** Ausgabe der einzelnen STR-Ergebnisse '*********
+1601:        '********* Ausgabe Summen über alle STR's '*********
+1611:        '** Datei-Header
+1618:        '*************************** Em je km ***************************
+1648:        '** Em je Segment
+1653:            'Segment-Name
+1656:            'Anzahl Fahrzeuge
+1659:            'Reisezeit
+1674:            'Em je km
+1683:            'Schreiben
+1688:        '** Em je Vehicle Type
+1696:            'Anzahl Fahrzeuge
+1699:            'Reisezeit, Strecke, Avg.Speed
+1714:            'Em
+1727:            'Schreiben
+1732:        '** Summe
+1735:        'Segment
+1738:        'Anzahl Fahrzeuge wird nicht aus STRerg berechnet (macht keinen Sinn) sondern aus cFLTfleet-Aufzeichnung
+1745:        'Reisezeit
+1766:        'Em je km
+1779:        'Schreiben
+1783:        '**************************** Em abs ****************************
+1815:        '** Em je Segment
+1820:            'Segment-Name
+1823:            'Em abs
+1828:            'Schreiben
+1833:        '** Em je Vehicle Type
+1841:            'Em
+1850:            'Schreiben
+1855:        '** Summe
+1858:        'Segment
+1861:        'Em abs
+1870:        'Schreiben
+1879:    '.mod-Datei zerlegen
+1895:        'InFile öffnen
+1910:        'Anzahl VehNummern
+1915:        'Schleife durch alle VehNummern in Liste
+1918:            'Abbruch falls Userabbruch
+1924:            'Abbruch falls Datei fertig
+1931:            'Ausgabedatei öffnen / Abbruch wenn Fehler beim Öffnen
+1937:            'Schleife durch Datei
+1940:                'Falls String schon eine VehNr enthält wird Zeile nicht nochmal eingelesen (siehe unten)
+1944:                    'Zeile einlesen
+1948:                'Falls Zeile mit VehNr gefunden: VehNr rausholen
+1952:                    'Falls VehNr die gesuchte ist: Ausgabedatei schreiben
+1955:                        'Erste Zeile schreiben ("VehNr: ...")
+1958:                        'Nächste Zeile lesen (sonst wird Do While übersprungen)
+1961:                        'Schleife bis nächste VehNr / Dateiende
+1964:                            'Wenn nächstes Fahrzeug:
+1967:                                    'Wenn gleiche Fahrzeugnummer: Datei weiter schreiben
+1968:                                    'Header und Units überspringen
+1973:                                    'Sonst: Raus aus Schleife
+1978:                            'Zeile schreiben
+1981:                            'Zeile lesen
+1986:                        'Falls nicht EndOfStream Flag setzen damit nächste VehNr nicht übersprungen wird
+1989:                        'Ausgabedatei schließen
+1992:                        'Aus der VehNr-Such-Schleife raus springen
+2001:            'ProgBar
+2026:    'FLT Klasse
+2042:        'Initialisieren
+2075:        'GenDatei Zufallsgenerator
+2125:    'Klasse für abschnittsweise Auswertung
+2191:            'Datei-Header
+2202:            '*************************** Em je km ***************************
+2232:            '** Ergebnisse je Veh-Type
+2240:                'Anzahl Fahrzeuge
+2243:                'Reisezeit
+2258:                'Em
+2267:                'Schreiben
+2272:            '** Summe
+2278:            'Anzahl Fahrzeuge
+2281:            'Reisezeit
+2296:            'Em
+2309:            'Schreiben
+2315:            '*************************** Em absolut *************************
+2345:            '** Ergebnisse je Veh-Type
+2353:                'Em
+2358:                'Schreiben
+2363:            '** Summe
+2369:            'Em
+2378:            'Schreiben
+2381:            'Datei schließen
+>>> File Browser\cFileBrowser.vb
+13:'   - Fav-Dlog: "Abbrechen" => "Cancel"
+14:'   - Fav-Dlog: Statt leeren Items in Fav-Liste "<undefined>"
+18:'**Anwendung
+25:'**Benötigte Globale Variablen (Default):
+49:    'Neue Instanz - ID definieren, umschalten auf FolderBrowser
+58:    'OpenDialog - Öffnen Dialog - Übergibt True wenn Dialog mit OK beendet wurde
+63:    'SaveDialog - Speichern Dialog - Ãœbergibt True wenn Dialog mit OK beendet wurde
+74:    'Dialog öffnen - Übergibt True wenn Dialog mit OK beendet wurde
+80:    'File-History manuell updaten
+86:    'File / Folder History speichen und Speicher freigeben
+104:    'Dateiendungen definieren
+115:    'Dateien abfragen
+>>> File Browser\FB_Dialog.designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> File Browser\FB_Dialog.vb
+32:        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+34:        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+83:                'Wenn leerer Pfad: Aktuellen Ordner (MyFolder) nehmen
+98:                'Abbruch wenn leerer Pfad
+104:                'Dateien in Array übernehmen
+106:                    'Mehrere Dateien ausgewählt 
+117:                    'Einzelne Datei
+119:                    'Primäre Extension (u.a. für bForceExt)
+121:                    'Falls Datei ohne Pfad angegeben dann Pfad hinzufügen
+123:                    'Falls statt Datei ein Ordner eingegeben wurde: Auf Ordner wechseln und Abbruch
+134:                        'Check ob Datei mit Ext angegeben
+137:                    'Falls Datei ohne Endung (nach bForceExt-Abfrage) und nicht existiert dann primäre Endung hinzufügen
+143:                    'Check ob Datei existiert
+145:                        'Ja: Check ob Overwrite wenn bOverwriteCheck
+153:                        'Nein: Abbruch wenn bFileMustExist
+160:                    'MyFiles definieren
+175:        'FolderHistory ContextMenu laden
+221:        'Pfad definieren
+222:        '   Falls kein Pfad angegeben wird: Letzter Ordner, kein Dateiname
+225:        '   Falls Pfadlänge zu klein (Pfad ungültig): Letzte Datei
+228:        'Ordner öffnen - Falls kein Ordner im Pfad: Letzter Ordner
+230:            'Falls Datei ohne Pfad angegeben
+237:            '...sonst: 
+247:        'Form anzeigen----------------------------------------------------
+259:            'Globale Folder History updaten
+272:    'Schließen und File/Folder History speichern
+309:    'Umschalten auf FolderBrowser
+321:    'Initialisieren
+329:        'Globale FileBrowser Initialisierung
+332:        'Laufwerk-ComboBox laden
+395:        'Laufwerk-Liste erstellen
+403:        'FolderHistory einlesen
+728:        'Context Menu sortieren
+741:        'Context Menu sortieren
+760:        'Dateien
+762:        'Ordner
+773:    'Ordner wechseln
+776:        'Abbruch wenn keine Laufwerk-Angabe
+781:        'Suchfelder löschen
+785:        'Laufwerk setzen
+791:        'Ordner setzen
+806:    'Ordner Eine Ebene hinauf
+817:    'FolderListe laden
+820:        'FolderListe löschen
+824:            'Ordner hinzufügen
+837:    'Dateiliste laden
+845:        'Abbruch wenn bBrowseFolder
+849:        'Extension-Filter definieren
+856:        'FileListe löschen
+863:            'Ordner hinzufügen
+>>> File Browser\FB_FavDlog.designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_AboutBox.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_AboutBox.vb
+4:    'Initialisieren
+33:    'Bild Links------------------------------------------------------------------
+>>> GUI/F_ADV.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_ADV.vb
+7:    'Initialisieren
+12:    'Schließen
+19:    'Inputfile- Steuerelemente------------------------------------------
+21:    'Browse Button-Click Events
+91:    'ADV speichern
+108:    'Neue leere ADV
+126:    'ADV in Form laden
+149:        'Zeile 1: FZP-Datei
+152:        'Zeile 2: FLT-Datei
+155:        'Zeile 3: TEM-Datei
+158:        'Zeile 4: RndSeed
+161:        'Zeile 5: MISKAMout True/False
+164:        'Zeile 6: STRfilter True/False
+167:        'Zeile 7: Distance filter für SUM.STR
+170:        'Zeile 8+: STR Dateien
+181:    'ADV aus Form speichern
+204:        'ADV.STRpathsClear()    '<= Nicht notwendig da neues lokales cADV-Objekt
+234:    'Formular Änderungen (Kontrolle ob GEN gespeichert)---------------------------------
+235:    'Event Handler für Formänderungen
+237:    'Change Status ändern
+243:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+>>> GUI/F_ADVfzp.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_ENG.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_ENG.vb
+127:    'Speichern oder Speichern als Function = true wenn Datei gespeichert
+139:    'ENG speichern
+180:    'Change Status ändern
+188:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+>>> GUI/F_GBX.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_GBX.vb
+154:    'Speichern oder Speichern als Function = true wenn Datei gespeichert
+206:    'Change Status ändern
+214:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+>>> GUI/F_GEN.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_GEN.vb
+23:    'Coolant System Simulation Zwischenspeicher
+31:    'Initialisiere Form (Lade Verlauf, Combobox-Listen,...)
+45:        'Damit Combobox-Inhalte aktuell sind
+59:    'Schließen
+75:    'Änderung der DynKor Checkbox
+83:    'Änderung der Kaltstart Checkbox
+89:    'Änderund der SCR Checkbox
+338:    'a_DesMax
+352:        'Damit Veh-Datei übergeben wird
+378:        'Damit Veh-Datei übergeben wird
+404:        'Damit Veh-Datei übergeben wird
+520:    'Speichern ("Save" bzw. "Save As" falls neue Datei)
+532:    'GEN in Form laden
+544:        'GEN einlesen
+559:        'Form updaten
+587:        'Kennfeld Erstellung-----------------
+601:        'Kalt Start--------------------------
+608:        'Dateien-----------------------------
+617:        'Kalt Start
+699:    'GEN aus Form speichern
+720:        'Kennfeld Erstellung------------------------------------------------------
+730:        'Kalt Start---------------------------------------------------------------
+736:        'Dateien------------------------------------------------------------------
+750:        'Kalt Start
+833:    'Neue leere GEN
+848:        'Kennfeld Erstellung-----------------
+858:        'Kalt Start--------------------------
+864:        'Dateien-----------------------------
+865:        'Kalt Start
+933:    'Event Handler für Formänderungen
+949:    'Start/Stop - Checkbox Änderung
+955:    'Start/Stop - Textbox Änderung
+960:    'TextBox.TextChanged Events => Change()
+1072:    'Change Status ändern
+1080:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+>>> GUI/F_MAINForm.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_MAINForm.vb
+176:    'PHEM-Launcher
+180:        'Falls Aufruf während PHEM schon läuft
+186:        'GENlist-Selection löschen
+189:        'Modus festlegen
+199:        'Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe
+210:        'Status
+214:        'Job-Liste definieren
+216:        'File- / Zylus- Liste definieren
+219:        'Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt)
+222:        'Check ob Overall-Progbar benötigt
+225:        'Launch über Job_Launcher
+259:    'Datei-Listen definieren
+291:    'Job-Launcher
+296:        'Options aus Options-Tab laden
+299:        'Config speichern
+304:        'Msg-Ausgabe zurück setzen
+307:        'Button umschalten
+311:        'Options disablen
+314:        'ProgBars Start
+323:        'BG-Worker starten
+339:    'Beginne Arbeit
+342:        'SLEEP verhindern
+377:                'Bei x.ProgSec = -1 kein Update von ProgBarSec
+404:    'Arbeit fertig
+409:        'Progbar Reset
+415:        'Damit ListView-Item Farben (Warnung = Gelb, etc..) richtig sichtbar
+424:                'Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface
+436:        'ShutDown wenn Unexpected Error
+443:        'Options enablen / GUI Reset
+450:        'CommandLine Shutdown
+453:        'Auto Shutdown
+464:        'SLEEP reaktivieren
+477:    'Initialisieren
+490:        'Tabs richtig laden (sonst Problem mit Listviews)
+511:        'FileLists
+521:        'GUI Options laden (hier werden die GEN/ADV/DRI Listen geladen)
+524:        'Spalten skalieren... erst nach dem Laden der Dateilisten
+529:        'BackgroundWorker initialisieren
+534:        'Lizenz überprüfen
+559:    'Shown Event (Form-Load abgeschlossen)  ...hier werden StartUp-Forms geladen (DEV, GEN/ADV- Editor..)
+587:    'Datei mit PHEM öffnen
+599:        'ComLineArgs auslesen
+614:        'Modus umschalten
+621:        'Falls Datei angegeben
+626:    'Schließen
+629:        'FileLists speichern
+632:        'Log schließen
+641:        'Config speichern
+646:        'FileBrowser-Instanzen schließen
+705:        'Gesperrte Funktionen ein/ausblenden
+791:    'Datei aus Liste entfernen
+830:    'Datei zu Liste hinzufügen
+855:    'Datei öffnen
+880:    'GEN/ADV Liste: Datei hinzufügen
+889:        'Falls PHEM läuft: Vorgang abbrechen (weil Modusänderung während Berechnung nix gscheit)
+895:        'Modus umschalten falls nötig
+923:                    'Wenn Datei schon in Liste vorhanden: Nicht hinzufügen (nur wenn einzelne Datei)
+926:                        'Status reset
+931:                        'Element auswählen und anhaken
+942:            'Sonst: Datei hinzufügen (ohne WorkDir)
+956:        'Anzahl updaten
+1160:    'DRI Liste: Datei hinzufügen
+1171:        'Modus umschalten falls nötig
+1185:        'Anzahl updaten
+1202:        'Me.TabPageDRI.Text = "Driving Cycles (" & c & ")"
+1222:    'New GEN/ADV
+1231:    'Open GEN/ADV
+1293:        'Worker starten
+1363:        'Selected Items zwischenspeichern
+1384:        'Selected Items löschen
+1389:        'Items einfügen und auswählen
+1428:                'Modus ggf. umschalten (auf BATCH)
+1499:            'Falls PHEM schon rennt: STOP
+1503:            '...Sonst: START
+1505:            'Listen speichern falls Crash
+1515:    'Modus Change
+1521:        'Alte Liste speichern
+1543:        'Neue Liste laden
+1730:    'GEN Editor öffnen und Datei laden
+1750:    'ADV Editor öffnen und Datei laden
+1761:    'FileLists speichern
+1774:    '*** ComMsgTimer_Tick Tick - Check ob neue Nachricht
+1856:        'Modus einstellen
+1875:        'Allgemein
+2106:    'Falls Link => Öffnen
+2119:    'Hand-Cursor für Links
+>>> GUI/F_ModSplit.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_ModSplit.vb
+11:        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+14:        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+59:        '   Split
+62:        '   Zu Int32 convertieren
+71:        '   Sort
+76:        'Ende
+>>> GUI/F_Options.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_Options.vb
+5:    'Initialisiere - Lade Config
+14:    'Config laden
+61:    'Optionen-----------------------------------
+>>> GUI/F_ShutDown.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_StrInpBox.designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_TEM_Creator.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_TEM_Creator.vb
+3:    'Initialisierung
+>>> GUI/F_VEH.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_VEH.vb
+99:    'Speichern oder Speichern als Function = true wenn Datei gespeichert
+111:    'Neue VEH
+164:    'VEH öffnen
+234:    'VEH speichern
+405:    'Change Status ändern
+413:    ' "Save changes ?" ...liefert True wenn User Vorgang abbricht
+>>> GUI/F_VEH_AuxDlog.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_VEH_Axle.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/F_VEH_GearDlog.Designer.vb
+5:    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+17:    'Wird vom Windows Form-Designer benötigt.
+20:    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+21:    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+22:    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+>>> GUI/GUI_Subs.vb
+33:    'Job-Status => Jobliste Status-Spalte
+43:    'Zyklus-Status => Zyklusliste Status-Spalte
+52:    'Worker Progress => Progbar (ProgBarSec Update wenn ProgSec > -1; ProgBarSec-Reset bei ProgSec = 0)
+59:    'Progbar auf Continuous setzen
+65:    'Abbruch
+77:    'Status Message direkt an GUI - darf nicht durch den Backgroundworker geschehen!
+82:    'Statusbar  - Aufruf durch WorkerMSG oder direkt über Form, NIEMALS über Worker
+87:    'Status Form zurück setzen - Aufruf NUR durch Events, NIEMALS über Worker
+94:    'Klasse zum Ãœbergeben von Nachrichten vom Backgroundworker
+176:    'Falls String nicht Zahl dann Null
+202:    'Datei in Excel öffnen
+216:    'WorkDir oder MainDir einfügen falls kein Pfad angegeben. Spezial-Ordner einfügen
+221:        'Pfad trimmen
+224:        'Falls leere Datei => Abbruch
+227:        'sKeys ersetzen
+232:        'Replace - Ordner bestimmen
+239:        ' "..\" => Eine Ordner-Ebene hoch
+246:        'Pfad ergänzen falls nicht vorhanden
+257:    'Pfad eine Ebene nach oben      "C:\temp\ordner1\"  >>  "C:\temp\"
+271:    'Dateiname ohne Pfad    "C:\temp\TEST.txt"  >>  "TEST.txt" oder "TEST"
+283:    'Dateiname ohne Extension   "C:\temp\TEST.txt" >> "C:\temp\TEST"
+288:    'Dateiname ohne Pfad falls Pfad = WorkDir oder MainDir
+305:    'Pfad allein        "C:\temp\TEST.txt"  >>  "C:\temp\"
+306:    '                   "TEST.txt"          >>  ""
+314:    'Endung allein      "C:\temp\TEST.txt" >> ".txt"
+>>> Input Files\cAux.vb
+21:        'Abbruch wenn's Datei nicht gibt
+27:        'Datei öffnen
+35:        'Kennfeld zurück setzen
+42:            'Transmission ration to engine rpm [-]
+47:            'Efficiency to engine [-]
+52:            'Efficiency auxiliary to supply [-]
+57:            'Efficiency Map
+60:            'Spalte 1 = Auxiliary speed [rpm]   => X-Achse
+61:            'Spalte 2 = Mechanical power [kW]   => Z-Achse (!)
+62:            'Spalte 3 = Output power [kW]       => Y-Achse (!)
+>>> Input Files\cDRI.vb
+5:    'Private Const FormatVersion As Integer = 1
+6:    'Private FileVersion As Integer
+30:    'Vorgabe für EXS
+34:    'Parameter für KF-Erstellung
+39:    'Vorgabe für AUX
+88:        'Values.Add(tDriComp.t, New List(Of Single))            '<= brauchen wir erst wenn bei ADVANCE > 1Hz unterstützt wird
+123:        'Reset
+126:        'Abbruch wenn's Datei nicht gibt
+132:        'EmComp Init
+133:        '...jetzt in New()
+135:        'Datei öffnen
+157:        ''*** Erste Zeile: Version
+164:        '        'Falls Version ungültig: Abbruch
+168:        '        'Version festgelegt
+172:        '    'Falls keine Versionsangabe: Altes Format
+177:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+183:        ''Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+200:        '*** Zweite Zeile: Namen/Identifizierung der Komponenten
+203:        'Spaltenanzahl/Komponenten checken
+210:            'Falls DRIcomp = Undefined dann wirds als EXS-Comp oder als Emission für KF-Erstellung / Eng-Analysis verwendet
+245:                        'ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+275:                    'Falls erste EXS-Spalte dann Dictionary erstellen
+281:                    'Falls EXS-Componenten noch nicht in Dictionary dann erstellen
+293:                    'Check ob ExsComp/Modul-Kombination schon vorhanden => ERROR
+321:        'Gvorg / Nvorg setzen:
+333:        '*** Dritte Zeile: Einheiten/Normierung
+334:        'VECTO: nix einlesen. Fixe Units (line = file.ReadLine)
+336:        'Normierungs-Unterstützte DRI-Komponenten
+338:            'PeNormed = (UCase(Trim(line(Spalten(tDriComp.Pe)))) = sKey.Normed)
+343:            'nNormed = (UCase(Trim(line(Spalten(tDriComp.nn)))) = sKey.Normed)
+348:            'PaddNormed = (UCase(Trim(line(Spalten(tDriComp.Padd)))) = sKey.Normed)
+352:        'MAP-Komponenten VECTO: Immer [g/h]!  
+355:            ''Unit in String für weitere Checks speichern
+358:            ''Klammern entfernen
+362:            ''Normierung und Unit festlegen
+393:        '*** Zeile 4, 5: (optional, wenn oben "+"): Einstellungen für KF-Erstellung
+395:        'Falls "+" aktiviert
+398:            'Instanzen erstellen
+402:            '1. Option "Kennfeld normieren durch Pnenn"
+408:            '2. Option "Pfak anwenden"
+429:        '*** Ab 4.Zeile bzw. Ab 6.Zeile: Werte (derzeit keine unterschiedlichen Einheiten/Normierungen unterstützt)
+490:        'Datei öffnen
+517:                        'TODO...
+552:        'Nvorg / Gvorg wird in ResetMe zurück gesetzt
+607:        'Geschw. umrechnen in m/s
+615:        'Normieren, falls notwendig
+625:        'Padd entnormieren, falls notwendig
+635:        'Pe normieren, falls notwendig
+647:        '!!!!!!!! Emissionen werden nur in x/h oder x akzeptiert (siehe ReadFile) !!!!!!!!
+759:        '*********************************** Verzögerung limitieren ********************************
+786:        '*********************************** Zeitreihe erstellen '***********************************
+891:        '*********************************** Umrechnen in 1Hz '***********************************
+1009:        'Check ob Zeit nicht rückwärts 
+1017:        'Zeitgrenzen definieren
+1021:        'Ausgabe-, Summen- und Anz- Dictionaries erstellen
+1060:        'Startwerte
+1077:            'Nächster Zeitschritt
+1082:            'Falls Zeitschritt > tMax:
+1085:                'Sekunde abschließen
+1088:                'Falls keine Werte in Summe: Interpolieren
+1140:                        'Falls nur ein Wert: Inter- / Extrapolieren
+1223:                    'Neuen Bereich festlegen
+1228:                    'Check ob letzte Sekunde
+1234:                    'Neue Summe/Anz beginnen
+1291:        'Neue Felder übernehmen
+>>> Input Files\cEMO.vb
+40:        'Abbruch wenn's Datei nicht gibt
+44:        'Datei öffnen
+51:        'Kennfeld-Konfig
+54:        'FLD und MAP einlesen
+76:        'Kennfeld normieren
+83:    'Übergibt aktuell mögliche Antriebsleistung für geg. Drehzahl
+87:        'Extrapolation für x < x(1)
+99:        'Extrapolation für x > x(imax)
+105:        'Interpolation
+114:    'Übergibt aktuell mögliche Generatorleistung für geg. Drehzahl
+118:        'Extrapolation für x < x(1)
+130:        'Extrapolation für x > x(imax)
+136:        'Interpolation
+>>> Input Files\cFLD.vb
+67:        'Abbruch wenn's Datei nicht gibt
+73:        'Datei öffnen
+81:        'Listen initialisieren
+91:        ''*** Erste Zeile: Version
+98:        '        'Falls Version ungültig: Abbruch
+102:        '        'Version festgelegt
+107:        '    'Falls keine Versionsangabe: Altes Format
+112:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+121:        '*** Zweite Zeile: Namen/Identifizierung der Komponenten (Schlepp-Emissionen f. KF-Erstellung)
+124:        ''Spaltenanzahl checken
+127:        ''Abbruch falls weniger als 3 Spalten
+168:        'VECTO: Keine Header/Unit-Spalte. Immer PT1!
+174:        '*** Dritte Zeile: Normierung/Einheit
+177:        ''Abbruch falls weniger Spalten als in zweiter Zeile
+189:        '            'Alles okay
+231:        ''Zusatzkomponenten
+237:        '        'Klammern entfernen
+241:        '        'Normierung und Unit festlegen
+260:        'Ab Zeile 4: Werte
+265:                'Zeile einlesen
+268:                'VECTO: M => Pe
+276:                'Falls PT1 nicht vorgegeben wird Defaultwert verwendet (siehe oben)
+296:                'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+309:        'Datei schließen
+315:        'ERROR-Label für sauberen Abbruch
+328:        'Datei öffnen
+348:            'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+353:        'Datei schließen
+371:        'Drehzahl normieren
+378:        'Leistung normieren
+385:        'Leistung normieren
+392:        'Pe-Target normieren
+399:        'Em ent-normieren
+415:        'Extrapolation für x < x(1)
+427:        'Extrapolation für x > x(imax)
+433:        'Interpolation
+444:        'Extrapolation für x < x(1)
+456:        'Extrapolation für x > x(imax)
+462:        'Interpolation
+466:        'Dynamische Volllast
+475:        'Extrapolation für x < x(1)
+487:        'Extrapolation für x > x(imax)
+493:        'Interpolation
+500:        'Extrapolation für x < x(1)
+512:        'Extrapolation für x > x(imax)
+518:        'Interpolation
+530:        'Extrapolation für x < x(1)
+542:        'Extrapolation für x > x(imax)
+548:        'Interpolation
+>>> Input Files\cGEN.vb
+12:    'Modus
+154:        ''*** Erste Zeile: Version
+172:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+178:        '**** GEN Datei einlesen ****
+180:        'Allgemein
+208:        'KF Erstellung
+253:        'Kaltstart
+297:        'Einzelne Nebenverbraucher
+333:        'Schaltmodell-Verteilung
+357:        'ERROR-Label für sauberen Abbruch
+380:        '**** GEN Datei einlesen ****
+390:        'Alten Rechenmodus in neue Modus-Schalter umwandeln
+547:        'Kennfeld Erstellung------------------------------------------------------
+790:    'Liest Sub Input Files ein die keine eigene Klasse haben, etc.
+1327:        'Extrapolation für x < x(1)
+1339:        'Extrapolation für x > x(imax)
+1345:        'Interpolation
+1353:        'Extrapolation für x < x(1)
+1365:        'Extrapolation für x > x(imax)
+1371:        'Interpolation
+>>> Input Files\cMAP.vb
+140:        'Abbruch wenn's Datei nicht gibt
+146:        'Datei öffnen
+154:        'Listen initialisieren (vor Version-Check damit ReadOldFormat funktioniert)
+163:        'Check ob MEP oder MAP
+164:        '...wird jetzt weiter unten gecheckt beim Einlesen.
+167:        ''*** Erste Zeile: Version
+177:        '        'Version festgelegt
+185:        ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+191:        ''Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+200:        '*** Zweite Zeile: Namen/Identifizierung der Komponenten (Nur Em. Leistung, Drehzahl ist fix!)
+203:        ''Spaltenanzahl checken
+207:        ''Abbruch falls weniger als 3 Spalten
+210:        ' ''Check ob Leistung/Drehzahl vertauscht
+215:        ''Em-Komponenten initialisieren
+224:        '    'Default-Interpolator definiert in Em0 = New cEmComp
+225:        '    'Default Pe-Correction definiert in Em0 = New cEmComp
+235:        '        'Dictionary füllen....
+238:        '            'ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+245:        '            'Custom Em-Komponenten Dictionary:
+251:        '            '*** Default Em-Komponenten ***
+253:        '            'Default-Interpolator
+256:        '            'Default Pe-Correction
+259:        '            'Default-Name
+262:        '            'TC-Komponenten werden nicht ausgegeben
+268:        '            'Custom Em-Komponenten Dictionary:
+272:        '            'Eintrag in Referenz-Dictionary
+279:        'VECTO: Spalte 3 immer Verbrauch
+289:            'Abbruch falls schon definiert
+302:        '*** Dritte Zeile: Normierung/Einheit
+305:        ''Abbruch falls weniger Spalten als in zweiter Zeile
+308:        ''Normierung/Einheit einlesen
+311:        '    'EM-Komp Referenz
+314:        '    'Unit in String für weitere Checks speichern
+317:        '    'Klammern entfernen
+321:        '    'Normierung und Unit festlegen
+353:        ''Check ob n/Pe Einheiten OK:
+357:        '            'Alles okay
+375:        '*** Zeile 4,5: (optional, wenn oben "+"): Einstellungen für Pe-Cor (altes Pfak)
+376:        '   Falls nicht "+" werden Default Interpolatoren verwendet (s.o.)
+379:            'Zeile 4 einlesen
+382:            'Schleife über Em-Komponenten
+408:            'Zeile 5 einlesen
+411:            'Schleife über Em-Komponenten
+436:        'Ab Zeile 4 (bzw. 6): Werte
+440:                'Zeile einlesen
+443:                'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+446:                'Drehzahl
+451:                'Leistung
+462:                'Emissionen
+474:        'Shep-Init
+477:        'Datei schließen
+487:        'ERROR-Label für sauberen Abbruch
+506:        'Datei öffnen
+513:        'Alte Kennfelder haben immer TC-Faktoren (sind halt evtl. Null)
+776:        'Werte
+778:            'Zeile einlesen
+781:            'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+784:            'Drehzahl
+787:            'Leistung
+792:            'Emissionen
+803:        'Shep-Init
+806:        'Datei schließen
+821:        'Abbruch falls Em-Komponente nicht in MAP
+828:        'Abbruch falls TC-Faktoren für die Komponente schon definiert
+859:        'Drehzahl normieren
+866:        ' "anders" normierte Drehzahl berechnen
+871:        'Leistung normieren
+878:        'Emissionen entnormieren
+879:        '   ACHTUNG: Selbst wenn x_kWh bzw. x_hPnenn in x_h umgewandelt werden muss Normed gleich bleiben weil sonst die DynKor nicht stimmt!
+891:                    'Werte sind bereits absolut angegeben
+892:                    'Unterscheidung in [x] und [x/h] derzeit nicht verwendet/unterstützt
+896:        'Check ob Drehzahl/Leistung vertauscht
+926:        'FC Delauney
+958:    'Kennfeld-Erstellung
+1025:        '***************** Initialisiere Em-Komponenten *******************
+1067:            'PeCorMode: Falls nicht in MES/NPI vorgegeben gilt bei Nicht-Default-Em was in cEmComp.New() eingestellt ist
+1078:                    'Falls TC angegeben dann Abbruch
+1084:                    'Interpolator auswählen
+1087:                    'Eintrag in Referenz-Dictionary (Es wird nicht überprüft ob Em-Comp. doppelt vorkommt weil das schon in DRI.ReadFile passiert)
+1097:            'Infos ausgeben
+1102:        'Dynamikparameter und Extrapol kommen noch dazu
+1247:        '************* Mittelwert-Dictionary initialisieren ***************
+1271:        '********************* Mittelwerte berechnen **********************
+1273:        'Haupt-Schleife
+1276:            'Listen erstellen
+1291:            'Schleife über Messwerte
+1296:                    'Bereich unter iMsek mit Messwert belegen
+1310:                    'Bereich über iMsek mit Mittelwerten der Messwerte belegen
+1331:            'Keine Mittelwertbildung
+1347:        'EmCheck: False = Wert noch nicht verwendet, True = Wert wurde bereits in Kennfeld verwurschtet
+1353:        '*************************** Rasterung ****************************
+1418:        'Schlepp hinzufügen mit halber nn-Schrittweite. Wird für Pfak benötigt. Falls GEN.KFinsertDrag deaktiviert wird sie später wieder gelöscht.
+1428:        'Leerlaufpunkt hinzufügen
+1435:        '**************** NrUsed Erstellung / Null setzen *****************
+1442:        '**************** Messwerte in Raster reinrechnen *****************
+1444:        'Basis Schrittweite zwischenspeichern
+1448:        'Schleife über Rasterpunkte (i)
+1451:            'Summen/Anzahl/Flags zurücksetzen
+1456:            'Schlepp-Leistung
+1459:            'Schleife bis genug Werte im Radius gefunden
+1462:                'Zähler/Summen zurück setzen
+1469:                'Schleife über Messwerte    (j)
+1472:                    'Falls innerhalb von Radius...
+1475:                        'Anz + 1
+1478:                        'Schleife über alle Em-Komp.
+1481:                            'Summe +
+1484:                            'Min/Max belegen (für Log-Ausgabe)
+1495:                        'Interpolierte Leistung aufsummieren (wird dann durch Anz dividiert)
+1498:                        'Zählen wieviel Messwerte für Rasterpunkt verwendet werden (Log-Ausgabe)
+1509:                'Falls keine Messwerte im Radius (Anz=0) dann Radius vergrößern und Extra-Flag setzen
+1518:            'NrUsed belegen
+1523:            'Interpolierte Leistung = Summe / Anz
+1526:            'Pfak berechnen:
+1527:            '   Falls oberhalb Pschlepp dann Pfak laut Formel oder 1 falls Abstand zw. Pe-Interpol und Pschlepp zu gering
+1528:            '   Unterhalb von Pschlepp Pfak=0 => Em-Wert=Null
+1539:            'Extrapol-Flag in Extrapol-Spalte (1/0) übernehmen
+1546:            'Für Log-Ausgabe
+1550:            'Schleife über Em-Comp (innerhalb Rasterpunkt Schleife)
+1553:                'Falls Option 'Schlepp-Em aus .FLD' belegen und Rasterpunkt-Leistung <= Schleppleistung
+1556:                    'Falls Schlepp-Em in .FLD vorhanden dann nehmen sonst mit Null belegen
+1565:                    'Em-Belegung ohne Pfak (=> Pfak wird später gemacht)
+1570:                'Für Log-Ausgabe
+1576:            'TC-Faktoren ohne Pfak übernehmen
+1584:        '*****************************  Pfak ******************************
+1586:        '!!! WICHTIG !!!
+1587:        'Schleife geht über alle Rasterpunkt (auch über die Pe <= PeSchlepp bzw. PeIntpol nahe an Pschlepp).
+1588:        '   Das ist OK weil Pfak dort sowieso mit Eins beleget.
+1590:        'Schleife über Em-Comp
+1593:            'Falls keine Create Map Einstellungen (in .NPI/.MES) oder Pfak explizit aktiviert => Pfak verwenden
+1596:                'Schleife über Rasterpunkte (i)
+1601:                        'Altes Pfak mit Extrapolation von Null weg
+1606:                        'Schlepp-Emission raus suchen
+1607:                        '   Schlepp-Em aus nächstgelegenen Rasterpunkt nehmen. Das geht weil Schleppkurve 
+1608:                        '   immer ins Map kommt (auch wenn sie dann später raus gelöscht wird) !!
+1609:                        '   Option 'Schlepp-Em aus .FLD' spielt keine Rolle weil das nur die Belegungs-Methode der Schleppkurve betrifft (s.o.) 
+1623:                    'Pfak anwenden
+1633:        '******************* Normieren (Wert und Unit) ********************
+1636:            'Falls Vorgabe in MES/NPI-Datei dann verwenden
+1641:                    'Werte normieren
+1652:                'Sonst Standard-Normierung verwenden
+1657:                        'Werte normieren
+1673:        '****************** EmComponents zusammenfassen *******************
+1688:        '*********** Schleppkurve wieder raus nehmen (optional) ***********
+1691:            'Schleife über Rasterpunkte (i). Keine For-Schleife weil iMapDim reduziert wird
+1713:        '************************** Ausgabe Map '**************************
+1732:            'ACHTUNG: Nicht Name sondern sKey !!!
+1751:        'Werte
+1765:        '********************** Ausgabe Zusatzinfo '***********************
+1804:        'Werte
+1857:        'Shep-Init
+1864:    'Default Shepard wie in intpshep()
+1873:        'Interpolator V1
+1879:        'Interpolator V2
+1924:            'Abstand berechnen und korrigieren.
+1928:                    'Um Nullleistung werden Kennfeldpunkte um Pe=0 hoeher gewichtet und Drehzahlabstand geringer,
+1929:                    ' da Interpolation aus Punkten mit hoeherer last dort schlecht passt:
+1935:                    'Quadrat des Abstandes:             
+1938:                    'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+1945:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+1962:            'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+1974:            'Berechnung von wisum
+1980:            'Interpolierte Leistung berechnen
+1992:            'Abstand berechnen und korrigieren.
+1995:                'Quadrat des Abstandes:                 
+2000:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+2017:            'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+2029:            'Berechnung von wisumV2
+2035:            'Interpolierte Leistung berechnen
+2112:        'Berechnet Emission an Schleppkurve
+2129:            'Es wird an Schleppkurve gesucht
+2131:            'n0 ist schon in Init definiert worden
+2133:            'Abstand berechnen und korrigieren.
+2136:                'Quadrat des Abstandes:
+2139:                'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+2146:            'Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+2163:            'Abstand-Array erstellen
+2173:            'Berechnung von wisum
+2179:            'Emission berechnen
+>>> Input Files\cTRS.vb
+32:        'Abbruch wenn's Datei nicht gibt
+38:        'Datei öffnen
+47:        '*** Erste Zeile: Version
+51:            ' "V" entfernen => Zahl bleibt übrig
+54:                'Falls Version ungültig: Abbruch
+58:                'Version festgelegt
+62:            'Falls keine Versionsangabe: Altes Format
+67:        'Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+79:        '*** Zweite Zeile: Check welche TC-Faktoren in welcher Spalte stehen (ab Spalte 1!!)
+83:        'Abbruch falls weniger als 2 Spalen:
+91:            'Abbruch wenn unbekannter TC-Faktor
+96:            'Zu Dict hinzufügen
+101:        '*** Ab Zeile 3: TC-Faktoren für die einzelnen Em-Komponeten 
+102:        '   l ist nur für Fehlerausgabe
+163:        'Datei öffnen
+207:            'Abbruch falls weniger als 11 Spalen:
+>>> Input Files\cVEH.vb
+220:        'Update 07.08.2012 (CO2 Demo)
+221:        'Einzelne Nebenverbraucher
+249:        'Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo)
+260:        'Cd Modus / Input Datei - Update 14.08.2012 (CO2 Demo)
+284:        'Axle configuration - Update 16.10.2012
+316:        '************************ Ende Einlesen ****************************
+401:        'Zugkraftunterbrechung (Update 09.08.2012 - CO2 Demo)
+405:        'Cd Modus / Input Datei (Update 14.08.2012 - CO2 Demo)
+409:        'Retarder (Update 02.10.2012 - CO2 Demo)
+417:        'Axle configuration - Update 16.10.2012
+451:        'Fehlermeldung innerhalb AuxInit
+454:        'Cd-Init
+457:        'Transmission Loss Maps
+468:        'Fr0
+531:                'Getriebe-Nenndrehzahl
+534:                'Getriebe-Nennleistung
+537:                'Wenn nix angegeben: Motor-Nennleistung und Nenndrehzahl zur Normierung
+551:                        'PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn
+552:                        'PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm)
+553:                        'VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn
+619:                'Interpolieren mit Original Werten
+624:                'Falls Fehler: Extrapolation versuchen
+626:                'Suche nach nächstgelegenen Kennfeldpunkt
+640:                'Wirkungsgrad
+644:                        'Antrieb => Antrieb
+651:                        'Schlepp => Antrieb: ERROR!
+661:                        'Antrieb => Schlepp: ERROR!
+668:                        'Schlepp => Schlepp
+677:                'Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+720:                'Interpolieren mit Original Werten
+725:                'Falls Fehler: Extrapolation versuchen
+727:                'Suche nach nächstgelegenen Kennfeldpunkt
+741:                'Wirkungsgrad
+745:                        'Antrieb => Antrieb
+750:                        'Schlepp => Antrieb: ERROR!
+760:                        'Antrieb => Schlepp: ERROR!
+767:                        'Schlepp => Schlepp
+774:                'Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+838:                'Meldung in Readfile()
+934:        'Falls Vair-Vorgabe in DRI aber nicht CdType= CdOfBeta dann Warnung
+946:        'Falls konstanter Cd-Wert dann is nix zu tun
+949:        'Inputdatei einlesen
+996:        'Extrapolation für x < x(1)
+1014:        'Extrapolation für x > x(imax)
+1024:        'Interpolation
+1042:        'Inputdatei einlesen
+1104:        'Extrapolation für x < x(1)
+1116:        'Extrapolation für x > x(imax)
+1120:        'Interpolation
+>>> MODcalc\cBatModel.vb
+21:    'Aktuelle Daten (d.h. zum aktuellen (zuletzt berechneten) Zeitschritt)
+55:    'Maximal zulässige Leistung zum Antreiben (Batterie entladen) [kW]    Vorzeichen positiv (PHEM Standard)
+62:    'Maximal zulässige Leistung zum Generieren/Rekuperiren (Batterie laden) [kW]    Vorzeichen negativ (PHEM Standard)
+72:    '--------------------------------- ~Batteriemodell Renhart~ ---------------------------------
+74:    'Methode zur Initialisierung - wird einmal aufgerufen
+82:        'Abbruch wenn's Datei nicht gibt
+91:        'Einlesen der Parameter:
+132:        ' Berechnung der Batteriespannung bei TempBat und SOC(0), Entladekurve
+138:        ' Berechnung der Batteriespannung bei TempBat und SOC(0), Ladekurve
+148:    'Methode zur Berechnung der zulässigen Leistung - sekündlicher Aufruf
+174:    'Methode zur Berechnung der Batterieveluste und SOC für geg. Leistung - sekündlicher Aufruf
+201:        'Input:
+202:        '   Perf ...geforderte Leistung. Bedingung: PgMAX < Perf < PaMAX [kW]
+203:        '   alle Paramer die in Bat_Init bestimmt/eingelesen wurden
+204:        '   jz ...Aktueller Zeitschritt
+205:        '   Alle Arrays von Zeitschritt 1 bis jz-1
+225:    'Übergibt PeBat für geg. PiBat (Vorzeichen nach PHEM)
+247:    '----------------------------------------- PRIVATE ------------------------------------------
+250:    'Batterie entladen
+256:        'Temperaturfunktion
+259:        'Ri bestimmen abhängig von Temperatur
+262:        'Spannung bestimmen aus SOC und Spannungskurve
+265:        'Strom berechnen
+268:        'Batterieverluste
+271:        'Batterietemperatur
+277:        'SOC berechnen
+280:        'Korrektur für den aktuellen Zeitschritt
+287:    'Batterie laden
+294:        'Temperaturfunktion
+297:        'Ri bestimmen abhängig von Temperatur
+300:        'Spannung bestimmen aus SOC und Spannungskurve
+303:        'Strom berechnen
+306:        'Batterieverluste
+309:        'Batterietemperatur
+315:        'SOC berechnen
+318:        'Korrektur für den aktuellen Zeitschritt
+325:    'Batterie nix tun
+336:        ' ALT: Ubat(jz) = Ubat(jz - 1)
+340:    'Ãœbergibt PeBat beim Laden mit PEmot (Vorzeichen nach Renhart)
+362:    'Ãœbergibt PeBat beim Entladen mit PEmot (Vorzeichen nach Renhart)
+>>> MODcalc\cMOD.vb
+19:    'Leistungen
+36:    'Fahrzeug
+192:        'Zykluslänge definieren (Um 1s kürzer als Original weil Zwischensekunden)
+195:        'Hier wird der eigentliche Zyklus eingelesen:
+198:        'Drehzahl-Vorgabe
+206:            'Drehzahl
+211:            'Winkelbeschleunigung
+218:        'Em-Komponenten mitteln (Zwischensekunden) für KF-Erstellung oder Eng-Analysis
+227:        'EXS Vorgaben mitteln
+238:        'Aux Vorgaben mitteln und Aux-Listen falls Aux in Dri und Veh vorhanden
+258:        'Zykluslänge definieren: Gleiche Länge wie Zyklus (nicht reduziert weil keine "Zwischensekunden")
+261:        'Hier wird der eigentliche Zyklus eingelesen:
+264:        'Drehzahl-Vorgabe
+272:            'Drehzahl
+277:            'Winkelbeschleunigung
+315:        '*********** Initialisierung / Datei öffnen **************
+370:        '*** ID-Zeile (Nur ADVANCE)
+431:        'ADVANCE-spezifisch
+479:        'Berechnete Dynamikparameter (Diff zu Kennfeld)
+488:        'In Datei schreiben
+497:        '*** Werte *************************************************************************************
+505:                'Zeit
+510:                    'Strecke
+514:                    'Ist-Geschw.
+517:                    'Soll-Geschw.
+520:                    'Beschl.
+523:                    'Steigung
+532:                        'Drehzahl
+535:                        'Leistung 
+538:                        'Drehzahl normiert
+541:                        'Leistung normiert
+546:                    'Drehzahl in U/min
+549:                    'EM-Leistung in kW
+552:                    'Effektive Batterieleistung
+555:                    'Innere Batterieleistung
+558:                    'Batteriespannung
+561:                    'Batteriestrom
+564:                    'SOC
+569:                    'Drehzahl
+572:                    'Leistung 
+575:                    'Drehzahl normiert
+578:                    'Leistung normiert
+581:                    'Volllast und Schlepp
+592:                    'Leistung an Kupplung
+600:                    'Gang
+603:                    'Getriebeverluste
+606:                    'Diff-Verluste
+609:                    'Retarder-Verluste
+612:                    'PaEng
+615:                    'PaGB
+618:                    'Pa Veh
+621:                    'Roll..
+624:                    'Luft..
+627:                    'Steigung..
+630:                    'Aux..
+633:                    'Radleistung
+636:                    'Bremse
+639:                    'Auxiliaries
+646:                'ADVANCE-spezifisch
+649:                    'X
+652:                    'Y
+655:                    'StrId
+662:                    'Final-Emissionen (Tailpipe)
+680:                            'Roh-Emissionen
+683:                            'TC-Emissionen
+686:                            'AT-Emissionen (EXS)
+694:                'Berechnete Dynamikparameter (Diff zu Kennfeld)
+702:                'In Datei schreiben
+716:    'Errors/Warnings die sekündlich auftreten können
+731:        'Reset-Hierarchie:
+732:        ' ResetAll
+733:        '   DesMaxExtr
+734:        '   -GeschRedReset
+735:        '       CdExtrapol        
+736:        '       -PxReset
+737:        '           TrLossMapExtr 
+738:        '           AuxMapExtr 
+739:        '           AuxNegative
+740:        '           FLDextrapol
+742:        'Kompletter Reset (am Beginn jedes Sekundenschritts)
+748:        'Reset von Errors nach Geschw.-Reduktion (innerhalb Iteration)
+755:        'Reset von Errors die mit der Leistungsberechnung zu tun haben (nach Schaltmodell durchzuführen)
+763:        'Errors ausgeben
+>>> MODcalc\cPower.vb
+21:    'Sekündliche Daten
+33:    'Zugkraftunterbrechung
+87:    'Rekuperation
+88:    '   Projekt HERO - BMW Mini Hybrid
+89:    '   Standard Mini One D Radstand 2467 mm
+92:    'Annahme für Schwerpunkthöhe
+93:    '   nach http://www.colliseum.net/wiki/Schwerpunkth%C3%B6he
+95:    '       mit R = 2.467 [m] und m = 1335 [kg]
+189:    'Bat einlesen
+196:    'Maximale effektive EM-Leistung beim Antreiben abhängig von Überlast und Batteriezustand
+201:        'Basis: Volllastkurve
+204:        'Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+207:        '=> PeFLD = maximale EM-Leistung nach FLD und ÃœL
+209:        'PeMax aus PeBatMax berechnen
+212:        '=> PeBAT = maximale EM-Leistung nach Batterie
+214:        'Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+219:    'Maximale effektive EM-Leistung beim Laden abhängig von Überlast und Batteriezustand
+224:        'Basis: Schleppkurve
+227:        'Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+230:        '=> PeFLD = maximale EM-Leistung nach FLD und ÃœL
+232:        'PeMax aus PeBatMax berechnen
+235:        '=> PeBAT = maximale EM-Leistung nach Batterie
+237:        'Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+244:    'Umrechnung von PeBat(=PiEM) auf PeEM
+256:            'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+281:    'Umrechnung von PeEM auf PeBat(=PiEM)
+293:            'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+318:    'Maximale Rekup-Leistung
+324:        'Falls unter V-Untergrenze dann gleich Null übergeben
+327:        'Radaufstandskraft
+334:        'Vorzeichen "sollte" immer + sein
+337:        'Längskraft am Reifen
+340:        'Sicherheitsfaktor mitnehmen
+343:        'Leistung 
+346:        'Falls unter V-Obergrenze dann linear runter skalieren
+353:    ''PeEM-Max reduzieren bis es die Batterie aushaltet
+371:    ''PeEM-Min reduzieren bis es die Batterie aushaltet
+406:        'Start/Stop Steuerung
+444:        'Abbruch wenn keine Geschw. gegeben
+450:        '   Initialisieren
+486:        'Schaltpunkte für NEDC/FTP Schaltung
+521:                'Schaltparameter initialisieren
+523:                'Standard
+533:        'Theoretische Höchstgeschwindigkeit [m/s] - gesetzt auf Geschw. bei 1.2 x NennDrehzahl im höchsten Gang
+539:        '***********************************    Zeitschleife    ****************************************
+550:            'Sekundäre Progressbar
+553:            '   Zustand bestimmen
+556:            'Reset der sekündlichen Errors 
+559:            'Geschw. / Beschl. berechnen-------------------
+560:            'Jetzt durch DRI-Klasse
+564:            'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+571:            'a_DesMax
+574:                'Check ob Beschleunigung zu hoch
+593:                    '- Verzögerung limitieren ---------------------------
+595:                    '    'Check ob Verzögerung zu hoch
+614:            'Aus Leistg-----
+624:            'Fahrzustand bestimmen-------------------------
+649:            'Schneller Check ob Leistung viel zu hoch
+656:            '************************************ Gangwahl ************************************
+675:                'Checken ob Kupplung schleift (wichtig für Schaltmodell):
+683:                    'Gang-Vorgabe
+686:                    'Drehzahlvorgabe
+692:                        'Gang nach Geschwindigkeit
+696:                        'Schaltmodell
+703:                        'Muss hier nochmal zurück gesetzt werden weil im Schaltmodell kann (und darf) das passieren
+709:                'Schaltmodell/Vorgabe kann Clutch öffnen 
+720:            ' Wichtige Checks
+723:            'Checken ob Geschwindigkeit reduzieren
+724:            ''If GeschwRed Then GoTo lbGeschwRed    <= stattdessen neues Konzept: Leistung wird "normal" berechnet und erst später überprüft ob Pe > Pmax... ?
+726:            'Checken ob Kupplung offen:
+727:            ''bKupplOffen = (bStehen Or Gang(jz) = 0) <= bereits durch Clutch bekannt
+729:            'Falls konventionell dann ICE-Kupplung = Hauptkupplung
+730:            ''bICEKupOffen = bKupplOffen <= Brauch i nix mehr
+732:            'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+737:            'Checken ob Leerlauf obwohl Leistung > 0
+738:            '   wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+759:            '************************************ Drehzahl ************************************
+761:            '*** Wenn Drehzahl vorgegeben dann wird der nächste Block übersprungen ***
+766:                'Falls Start/Stop dann wird gleich bei nn < -0.05 auf nU = 0 gesetzt
+784:            'Drehzahlabfall beim Auskuppeln
+806:                        'Leistungsabfall limitieren auf Pe(t-1) minus 75% von (Pe(t-1) - Pschlepp)
+807:                        '   aus Auswertung ETC des Motors mit dem dynamische Volllast parametriert wurde
+808:                        '   Einfluss auf Beschleunigungsvermögen gering (Einfluss durch Pe(t-1) bei dynamischer Volllast mit PT1)
+809:                        '   Luz/Rexeis 21.08.2012
+810:                        '   Iterations-Schleife: 01.10.2012    
+813:                        'original: M = -Pmin * 1000 * 60 / (2 * Math.PI * ((nU + nUx) / 2))
+818:                        '01.10.12 Luz: Drehzahl darf nicht höher werden als zuvor 
+825:                    'TODO: Auschalten?!
+838:                '*** Beginn: Drehzahl-Check
+840:                'Checken ob Drehzahl zu hoch! =>  Hochschalten
+846:                'Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+863:            '************************************ Motor-Zustand bestimmen ************************************
+864:            ' nn ist ab hier fix!
+867:            'Nebenverbrauch bestimmen (aus VEH und DRI)
+870:            'ICE-Trägheit
+875:                    'Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+880:                    'Drehzahlvorgabe
+887:            'Gesamt-Motorleistung
+957:            '*************** Leistungsverteilung usw. ******************
+959:            'Volllast- / Schleppkurve
+965:                'Drehzahl korrigieren
+979:                'Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+1009:                        'VKM an Schleppkurve
+1012:                        'Forwärtsrechnung bis Rad (PvorD)
+1028:            'Check ob Abbruch (vor Geschw.Red-Iteration sonst kann sichs aufhängen)
+1031:            'Check ob P über Volllast => Geschw.-Reduktion
+1046:                        'FEHLER: Geschw.-Red. bringt nix?!...
+1051:                    'FEHLER: Motor nicht in Antrieb ...kann nicht sein?!
+1059:            'Zugkraftunterbrechung
+1093:            '   Sekunde abschließen
+1095:            'Start / Stop - Aktivierung-Geschw. Steuerung
+1110:            'Modalwerte-Felder schreiben
+1141:            'Zugkraftunterbrechung
+1172:            'Meldungen (Abbruch falls Error)
+1185:        '***********************************    Zeitschleife ENDE    ***********************************
+1188:        'Meldungen (wenn nicht ADVANCE)
+1225:        'Abbruch falls Leistung/Drehzahl nicht gegeben
+1236:        'Drehzahlen vorher weil sonst scheitert die Pmr-Berechnung bei MODdata.nU(t + 1)
+1238:            'Modalwerte-Felder schreiben
+1239:            '   MODdata.Pe wird unten belegt
+1244:        'Leistung berechnen
+1247:            'Sekundäre Progressbar
+1250:            'Reset der sekündlichen Errors 
+1253:            'ALT und falsch weil Zeit nicht verschoben: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnenn) * nnenn * (n(jz) - n(jz - 1))) / Pnenn
+1260:            'Leistung aus Zyklus korrigiert um P_clutch
+1263:            'Drehzhal aus Zyklus => Durch CycleInit bestimmt
+1264:            'Falls Drehzahl unter Leerlauf wir Motor als abgestellt angenommen
+1276:                'Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+1285:                'FLD Check
+1314:            'Meldungen
+1336:        'Start/Stop Steuerung
+1367:        'WegKorrektur
+1381:        'Abbruch wenn keine Geschw. gegeben
+1387:        '   Initialisieren
+1415:        'WG-Kennfeld aus MAP übernehmen und Pi-Liste berechnen
+1432:        'Schaltpunkte für NEDC/FTP Schaltung
+1449:        'Theoretische Höchstgeschwindigkeit [m/s]
+1457:        '***********************************    Zeitschleife    ****************************************
+1465:            'Sekundäre Progressbar
+1468:            '   Zustand bestimmen
+1472:            'Geschw. / Beschl. berechnen-------------------
+1473:            'Jetzt durch DRI-Klasse
+1477:            'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+1484:            'Aus Leistg-----
+1494:            'Fahrzustand bestimmen-------------------------
+1519:            'Maximal zulässige Batterieleistung
+1524:            '************************************ Gangwahl ************************************
+1529:                'Checken ob Kupplung schleift (wichtig für Schaltmodell):
+1537:                    'Gang-Vorgabe
+1540:                    'Drehzahlvorgabe
+1546:                        'Gang nach Geschwindigkeit wird hier nicht unterstützt
+1550:                        'Schaltmodell
+1553:                        'EV: Kein Leerlauf wegen Rekuperation
+1566:            'Falls Rekuperation laut Radleistung möglich: PrekupMax berechnen
+1568:                'Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+1573:            'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+1578:            'Checken ob Leerlauf obwohl Leistung > 0
+1579:            '   wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+1591:            '************************************ Drehzahl ************************************
+1593:            '*** Wenn Drehzahl vorgegeben (Gemess = 2) dann wird der nächste Block übersprungen ***
+1601:            'Drehzahlabfall beim Auskuppeln
+1622:                '*** Beginn: Drehzahl-Check wenn keine Vorgabe
+1624:                'Checken ob Drehzahl zu hoch! =>  Hochschalten
+1630:                'Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+1642:            '************************************ Motor-Zustand bestimmen ************************************
+1643:            ' nn ist ab hier fix!
+1646:            'Nebenverbrauch bestimmen (aus VEH und DRI)
+1649:            'MotorTrägheit
+1654:                    'Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+1659:                    'Drehzahlvorgabe
+1666:            'Gesamt-Motorleistung
+1707:            '*************** Leistungsverteilung usw. ******************
+1709:            'Volllast- / Schleppkurve
+1729:                    'Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+1730:                    'PrekupMax = fPrekupMax()
+1732:                    'Falls RekupMax überschritten muss Pe neu berechnet werden
+1735:                        'PbrakeRek = Leistung die zusätzlich mechanisch gebremst werden muss wegen Überschreitung von RekupMax
+1736:                        'wird schon oben nach Gangwahl erledigt: PbrakeRek = Pantr - PrekupMax
+1738:                        'Neue EM-Leistung
+1743:                    'Check ob Leistung aufgenommen werden kann (abh. von FLD und Batterie). Bremsleistung berechnen.
+1752:                    'RekupMax-Bremsleistung dazu addieren
+1764:            'Check ob P über Volllast => Geschw.-Reduktion
+1768:                    'Falls Pmax=0 muss Batterie leer sein
+1782:                        'FEHLER: Geschw.-Red. bringt nix?!...
+1792:            '   Sekunde abschließen
+1805:            '***************** Batterie ***********************
+1817:            '****** Modalwerte-Felder schreiben **************
+1859:            'Meldungen
+1865:        '*********************************    Zeitschleife ENDE    *************************************
+1869:        'Meldungen (nicht ADV)
+1887:        'TODO.... Fehlermeldung etc
+1933:        'WegKorrektur
+2033:        'Abbruch wenn keine Geschw. gegeben
+2039:        '   Initialisieren
+2062:        'Schaltpunkte für NEDC/FTP Schaltung
+2097:                'Schaltparameter initialisieren
+2106:        'Theoretische Höchstgeschwindigkeit [m/s]
+2109:        'HEV
+2127:        '***********************************    Zeitschleife    ****************************************
+2134:            'Sekundäre Progressbar
+2137:            '   Zustand bestimmen
+2141:            'Geschw. / Beschl. berechnen-------------------
+2142:            'Jetzt durch DRI-Klasse
+2146:            'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+2153:            'Aus Leistg-----
+2164:            '*************************** Fahrzustand bestimmen *****************************
+2166:            'Fahrzustand bestimmen-------------------------
+2249:            '************************************ Gangwahl ************************************
+2254:                'Checken ob Kupplung schleift (wichtig für Schaltmodell):
+2262:                    'Gang-Vorgabe
+2265:                    'Drehzahlvorgabe
+2271:                        'Gang nach Geschwindigkeit
+2274:                        'Schaltmodell
+2289:            'Nebenverbrauch bestimmen (aus VEH und DRI)
+2292:            'HEV-Teil kommt erst nach Gangwahl weil Getr./Diff-Loss den benötigt und EM zwischen ICE und GB liegt
+2300:                'Nebenverbrauch bestimmen (aus VEH und DRI)
+2306:                    'Wenn Drehzahl vorgegeben
+2309:                    'Sonst aus Vist und Gear
+2313:                'Normierte Drehzahl
+2316:                'Maximale Leistung der ICE
+2325:                'Nebenverbrauch bestimmen (aus VEH und DRI)
+2328:                'Maximal zulässige Batterieleistung
+2333:                'Maximale EM-Leistung. (Batterieleistung limitiert EM-Leistung)
+2344:                'Leistung bis ICE/EM (= an Kupplung) berechnen
+2350:                'Leistung an Kupplung
+2355:                    'Drehzahlvorgabe
+2363:                '***** Notwendige Leistung im EV-Betrieb
+2364:                '   Leistung an Kupplung plus EM-Trägheit
+2366:                '! ACHTUNG: Wenn ICE eingekuppelt dann muss PaICE auch noch dazu ! => Später bei Leistungsverteilung
+2368:                '***** Notwendige Leistung im ICE+EM-Betrieb
+2371:                '***** Notwendige Leistung im ICE-Betrieb
+2374:                '***** Check ob EV möglich
+2376:                '   => EM-Leistung >= Antriebsleistung
+2380:                '***** Falls EV möglich: Check ob kritisch
+2383:                '***** Check ob Assist / LPI / ICEonly möglich und ob Boost erforderlich
+2384:                '   => ICE-Ein muss möglich sein (ICElock)
+2387:                    'Assist / Boost
+2391:                        'Boost
+2392:                        '   => ICE an Volllast
+2405:                '***** Check ob Rekup möglich
+2411:                '********************************* Fahrzustands-Unterscheidung *********************************
+2417:                    '***************************** Betriebsmodus Vor-Auswahl ********************************
+2421:                        'Wenn Boost notwendig (und möglich), dann keine Wahl
+2426:                        'EV Mode wenn...
+2435:                        'Wenn EV & ICE nicht möglich dann EV-Modus bis ICE wieder startet.... sollte nie vorkommen weil keine ICE-Abschaltung wenn wenig SOC
+2445:                    'Falls Einsatz von HEV-Strategie:
+2446:                    '   Ke's berechnen
+2449:                        '************** Optimale Ke's berechnen und Leistungen dazu ************
+2451:                        'Emission/Verbrauch in g/h
+2458:                        'KeSTE aus STE-Kurve...
+2476:                                'Unter Max-Pe bleiben
+2479:                                'Wenn Pvkm negativ: Berechnung für reinen EM-Betrieb
+2482:                                    '    ...nicht gültig falls Batlvl <= Low oder ICEonLock
+2485:                                    'EM-Leistung = P-Antrieb
+2489:                                    'Verbrauchseinsparung in g/h 
+2492:                                    'Abbruch nach dieser Berechnung (mehr EM-Leistung macht keinen Sinn da hier schon rein elektrischer Antrieb)
+2497:                                    'Verbrauchseinsparung in g/h 
+2502:                                'Leistung nach E-Motor in kW
+2513:                                'Leistung in Batterie
+2518:                                'Div/0 und Vorzeichen-Check
+2521:                                    'KeA berechnen in kWh/kg
+2524:                                    'Check ob Optimum
+2532:                                'Abbruch falls reiner EM-Betrieb schon erreicht
+2565:                                'Falls Pvkm an Volllast:
+2568:                                    'Pvkm auf Volllast setzen
+2571:                                    'Elektromotor in Generatorbetrieb (Pges1 - Pvkm < 0)
+2574:                                    'Abbruch nach diesem Durchgang weil mehr Generieren nicht möglich
+2579:                                'Zusatzverbrauch in g/h 
+2582:                                'Leistung nach E-Motor in kW
+2593:                                'Leistung in Batterie
+2598:                                'Div/0 und Vorzeichen-Check
+2601:                                    'KeG berechnen in kWh/kg
+2604:                                    'Check ob Optimum
+2613:                                'Abbruch falls VKM-Volllast schon erreicht
+2622:                            'Abstand Eta zu Kurve berechnen
+2632:                        '********************** KeSTE, Deltas auswerten ************************
+2661:                        '************************* Betriebsstrategie ***************************
+2690:                        '** Ke-Modus einsetzen wenn...
+2693:                            '...Gleicher Modus wie vorher, Fahrzustands-Änderung oder Letzter Modus unmöglich
+2698:                            '...wenn Motor nicht läuft
+2703:                                '...wenn PeICE-Leistungsänderung mit neuen Modus am geringsten
+2728:                    '****************************** Leistungen je nach Modus verteilen **************************
+2735:                            'EM übernimmt gesamte Leistung
+2738:                            'Geschw. reduzieren falls Leistung zu hoch für EM oder Bat
+2744:                            'Falls ICElock oder EVcrit dann ICE ein (aber ausgekuppelt)
+2758:                            'ICE übernimmt gesamten Antrieb
+2826:                    'ACHTUNG: ICEclutch ist standardmäßig 'False' deshalb hier keine weiteren Statements mehr
+2828:                    'Maximale Rekup-Leistung berechnen
+2833:                        'Mit PrekupMax auf EM/ICE zurück rechnen
+2842:                        'Den Rest gleich auf die Bremse 
+2847:                    'Default für ICE (damit man sich die "Else"-Statements spart)
+2855:                            'EM-Leistung berechnen
+2860:                                'EM-Leistung neu
+2863:                                'Restliche Leistung an ICE
+2867:                                'Falls ICE über Schleppkurve
+2870:                                    'ICE-Leistung neu
+2873:                                    'Rest an Bremse
+2880:                                'ICE in Leerlauf (weil On-Lock)
+2889:                            'EM-Leistung berechnen
+2894:                                'EM-Leistung neu
+2899:                                    'ICE im Schubbetrieb
+2903:                                    'Falls ICE über Schleppkurve
+2906:                                        'ICE-Leistung neu
+2909:                                        'Rest an Bremse
+2932:                            'ICE im Schubbetrieb
+2936:                            'Falls ICE über Schleppkurve
+2939:                                'ICE-Leistung neu
+2942:                                'Rest an Bremse
+2962:                    'Leistung Null
+2973:            '****************************** Clutch und Drehzahlen *******************************
+2976:            'Haupt-Kupplung => muss hier schon bekannt sein!
+2989:            '************************************ Drehzahl ICE ************************************
+3034:            '************************************ Drehzahl EM *************************************
+3060:            '   Sekunde abschließen
+3065:            '   ACHTUNG: Die beiden If-Schleifen nicht verbinden weil LockCount sich sonst verzählt
+3082:            'Modalwerte-Felder schreiben
+3130:            'Meldungen
+3136:        '*********************************    Zeitschleife ENDE   **************************************
+3139:        'Meldungen (Nicht ADVANCE)
+3255:        '-----------------------------------Sekunde 1--------------------------------------
+3256:        'Erste Sekunde: Gang finden / Initialisierung
+3283:        '--------------------------------Ab Sekunde 2--------------------------------------
+3285:        '---------Startwerte---------
+3286:        'gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+3293:        'Kuppelschleif-check  << Schon passiert in Power.Calc
+3296:        '-------------------Gang für die nächsten 6 Sekunden berechnen---------------------
+3303:            '-----------Schaltfunktion----------
+3341:            'Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3344:            'Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3346:            'Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85
+3347:            'Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+3350:            'Drehzahl mit letzten Gang (gangX)
+3351:            'nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn
+3354:            ' ''Schalten Maximal alle 2 Sekunden schalten zulaessig:
+3357:            'Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+3366:            'Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+3374:            'Gangwahl korrigieren
+3383:            'Kein Leerlauf wenn Leistung > 0
+3388:            'Drehzahl neu
+3389:            ''nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping)
+3392:            'Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+3406:            'Speichere Gänge in Feld für spätere Checks
+3418:        'Gang wird übernommen
+3426:        'Gang-Verlauf hinzufügen
+3430:        '--------------------------------Checks Teil 1-------------------------------------
+3431:        'Checks zur Saeuberung unsinniger Schlatmanoever:
+3433:        ''Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+3443:        '   ============>> Schon bestimmt durch VehState0
+3445:        'Suche nach letztem Gangwechsel
+3456:        'Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+3462:            'Cruise-Phasen:
+3463:            'Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+3464:            'Verzoegerungsphasen: Hochschalten wird unterdrückt
+3465:            'Beschleunigungsphasen: Zurückschalten wird unterdrückt
+3486:                'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+3487:                'durchgehend beibehalten
+3499:                    'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+3500:                    'geschaltet wird, wird voriger Gang durchgehend beibehalten
+3517:        '--------------------------------Checks Teil 2-------------------------------------
+3518:        'Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+3519:        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+3524:        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+3538:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+3545:        'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+3552:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+3553:        'sonst fehlt die leistung!
+3562:    'EV-Schaltmodell (auf Basis PKW)
+3592:        '-----------------------------------Sekunde 1--------------------------------------
+3593:        'Erste Sekunde: Gang finden / Initialisierung
+3620:        '--------------------------------Ab Sekunde 2--------------------------------------
+3622:        '---------Startwerte---------
+3623:        'gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+3630:        'Kuppelschleif-check  << Schon passiert in Power.Calc
+3633:        '-------------------Gang für die nächsten 6 Sekunden berechnen---------------------
+3640:            '-----------Schaltfunktion----------
+3678:            'Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3681:            'Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+3684:            'Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+3687:            'Drehzahl mit letzten Gang (gangX)
+3691:            ' ''Schalten Maximal alle 2 Sekunden schalten zulaessig:
+3694:            'Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+3703:            'Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+3711:            'Gangwahl korrigieren
+3720:            'Kein Leerlauf wenn Leistung > 0
+3725:            'Drehzahl neu
+3729:            'Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+3743:            'Speichere Gänge in Feld für spätere Checks
+3755:        'Gang wird übernommen
+3763:        'Gang-Verlauf hinzufügen
+3767:        '--------------------------------Checks Teil 1-------------------------------------
+3768:        'Checks zur Saeuberung unsinniger Schlatmanoever:
+3770:        ''Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+3780:        '   ============>> Schon bestimmt durch VehState0
+3782:        'Suche nach letztem Gangwechsel
+3793:        'Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+3799:            'Cruise-Phasen:
+3800:            'Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+3801:            'Verzoegerungsphasen: Hochschalten wird unterdrückt
+3802:            'Beschleunigungsphasen: Zurückschalten wird unterdrückt
+3823:                'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+3824:                'durchgehend beibehalten
+3836:                    'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+3837:                    'geschaltet wird, wird voriger Gang durchgehend beibehalten
+3854:        '--------------------------------Checks Teil 2-------------------------------------
+3855:        'Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+3856:        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+3861:        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+3875:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+3882:        'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+3889:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+3890:        'sonst fehlt die leistung!
+3944:        '-----------------------------------Sekunde 1--------------------------------------
+3945:        'Erste Sekunde: Gang finden / Initialisierung
+3982:        '--------------------------------Ab Sekunde 2--------------------------------------
+3984:        '---------Startwerte---------
+4014:        'Leistung berechnen von jz bis jz + 6-----------------
+4027:            '     Berechnung nach Drehzahl/Leistung-Modell
+4030:            '(1) Nach Variante "schnelle Fahrweise"
+4032:            'Schaltmanoever erfolgt nur, wenn v-aenderung 5% seit letztem Gangwechsel,
+4033:            'VECTO: Auskommentiert START
+4045:            'VECTO: Auskommentiert ENDE
+4047:            'in ersten 10 Zyklussekunden kann zum Einregulieren immer geschlatet werden:
+4050:            'Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+4054:            'Hinunterschalten:
+4061:            'Hochschalten:
+4062:            ' bei Steigungszyklen mit zu hohen Geschwindigkeiten wird geschw. i+1 erst nach gangwahl berechnet
+4063:            ' dabei manchmal zu hoher gang -> Drehzahl und P_max viel zu nieder, daher nu bei niederen leistungen
+4064:            ' hochschalten erlaubt:
+4083:            '(2) Nach Variante "sparsame Fahrweise"
+4085:            '   Zurueckschalten erfolgt nur, wenn Geschwindigkeitsaenderung > 6%
+4086:            '   Hochschalten geht immer
+4087:            'VECTO: Auskommentiert START
+4099:            'VECTO: Auskommentiert ENDE
+4101:            '       in ersten 10 Zyklussekunden kann zum einregulieren immer geschlatet werden:
+4103:            '       Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+4107:            '    Hinunterschalten:
+4117:            'Hinaufschalten, nur ueberprueft wenn nicht schon hoechster Gang:
+4126:                'C     relevante Drehzahlen:
+4137:            ' Auswahl des Drehzahlverhaeltnisses aus der "schnellen (..h)" und
+4138:            ' der "sparsamen (..l)" Variante:
+4140:            '   Drehzahlverhhealtnisse nach "Modellmix":
+4141:            '   anhand der erforderlichen maximalen Motorleistung ueber die
+4142:            '   naechsten 6 Sekunden
+4150:            '     Festlegung der Anteile von schneller und sparsamer Fahrweise
+4151:            '      (Modell Hausberger):
+4158:            '     Mix der berechneten Gaenge gemaess Vorgabe in Eingabefile:
+4159:            '     (pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl
+4160:            '      nach "reales Modell" bestehen soll)
+4165:            '      Ermittlung des "virtuellen" aktuellen Ganges nach Modell
+4170:            '    ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+4171:            '    sonst fehlt die leistung!
+4181:            '    ueberpruefung, ob erforderliche leistung ueber P_max(n) liegt
+4182:            '    dann wird zurueckgeschaltet:
+4208:            '    Eigentliche Ueberpruefung ob ueber P_max(n)
+4214:            'falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert:
+4217:            '    Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh
+4218:            '     dann wird zurueckgeschaltet:
+4256:        'c     Ende "Modell"-Basisgangwahl
+4260:        'Kuppelschleif-check
+4263:        '--------------------------------Checks Teil 1-------------------------------------
+4264:        'Checks zur Saeuberung unsinniger Schlatmanoever:
+4265:        'Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+4290:        'Suche nach letztem Gangwechsel
+4299:        'Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+4304:        'Cruise-Phasen:
+4305:        'Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+4306:        'Verzoegerungsphasen: Hochschalten wird unterdrückt
+4307:        'Beschleunigungsphasen: Zurückschalten wird unterdrückt
+4326:        'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+4327:        'durchgehend beibehalten
+4328:        'VECTO: Ausnahme: Ãœber Volllastkurve
+4339:        'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+4340:        'geschaltet wird, wird voriger Gang durchgehend beibehalten
+4356:        '--------------------------------Checks Teil 2-------------------------------------
+4357:        'Schalten von 2. in 1. Gang wird bei v > 1.5 m/s unterdrueckt
+4358:        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+4363:        'bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet
+4375:        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+4383:        'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+4384:        'sonst fehlt die leistung!
+4424:        'Geschwindigkeit vorausschauen
+4437:        'Checks aus PKWgear....
+4438:        'Schalten von 2. in 1. Gang wird bei v>2,5 m/s unterdrueckt
+4447:        'Bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+4456:        'Wenn v mehr als 1 Sek. <0.1 m/s wird auf Gang=0 geschaltet
+4461:        'Bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+4488:    'Funktion zur einfachen Leistungsberechnung für Schaltmodelle
+4493:    'Funktion zur einfachen Leistungsberechnung für EV-Schaltmodell
+4508:            'Drehzahlvorgabe
+4552:    '--------------Leistung vor Diff = Am Rad-------------
+4561:    '----------------Rollwiderstand----------------
+4566:    '----------------Luftwiderstand----------------
+4591:    '--------Beschleunigungsleistung Fahrzeug--------
+4593:        'Früher (PHEM 10.4.2 und älter) wurde statt m_raeder Massered verwendet, mit Massered = m_raeder + I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2
+4594:        '   Der fehlende Teil (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) wird jetzt durch fPaG(V,a) mit berücksichtigt
+4598:    '----------------Steigungswiderstand----------------
+4603:    '----------------Nebenaggregate----------------
+4608:    '-------------------Getriebe-------------------
+4633:                'Leistung nach Getriebe (Getriebeausgang)
+4636:                'Verluste berechnet (eignet sich nur für Schaltgetriebe)
+4637:                '       Interpolation der Getriebeverlustleistung
+4638:                '       Zwischen 1. und 8. gang sowie 9. und 16. Gang:
+4662:                '***Differenzial
+4663:                '   Leistung nach Diff (vor Getriebe)
+4682:                'Pdiff
+4691:                '***Differenzial
+4692:                '   Leistung vor Diff
+4744:    '----------------Getriebe Trägheit----------------
+>>> MODcalc\cVh.vb
+5:    'Aus DRI-Datei
+15:    'Berechnet
+18:    'WegKor
+58:        'Geschwindigkeit
+69:            'Original-Geschwindigkeit ist um 1 länger
+79:            'Strecke (aus Zwischensekunden sonst passiert Fehler)
+87:        'Steigung
+99:        'Gang - nicht Mittelwert sondern Gang(t) = DRI.Gang(t)
+112:        'Padd
+124:        'Beschl. berechnen
+132:        'Vair-Vorgaben: Nicht in Zwischensekunden!!
+157:        'Geschwindigkeit
+169:            'Strecke 
+177:        'Steigung
+189:        'Gang - nicht Mittelwert sonder Gang(t) = DRI.Gang(t)
+202:        'Padd
+214:        'Beschl. berechnen
+257:        'TODO: Wenn Fzg schneller als Zyklus...
+273:            'Falls Zeitschritt wiederholen näher an Wegvorgabe als aktueller Weg => Zeitschritt wiederholen
+279:                'Falls nächsten Zeitschritt löschen näher an Wegvorgabe als aktueller Weg => Nächsten Zeitschritt löschen
+291:                'Keine Korrektur
+>>> MODcalc\Em Calc.vb
+51:                            'Delaunay
+54:                            'Normale Interpolation
+101:                'Ersten zwei sekunden keine Korrektur:
+185:        'Dictionaries erstellen
+208:        'Summen ermitteln
+220:        'Mittelwerte
+243:        '************************************ 'Zyklus-Mittelwerte '************************************
+258:            '***** Messwert
+261:            '***** PHEM-Wert
+264:            '***** Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+279:            'Ãœber x Sekunden gemittelte Werte berechnen und sofort au
+282:                'Null setzen
+286:                'Aufsummieren
+292:                'Messwert
+295:                'PHEM-Wert
+311:        '************************************ Modale Ausgabe '************************************
+324:            'Messwert
+328:            'PHEM-Wert
+332:            'Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+351:        'Header und Units schreiben
+355:        'Ãœber x Sekunden gemittelte Werte berechnen und sofort au
+358:            'Null setzen
+371:            'Aufsummieren
+388:            'Ausgabe
+399:                'Messwert
+402:                'PHEM-Wert
+563:            'C      Lastwechsel (allgemeine Bedingung ausser bei Intervallen mit
+564:            'C      Konstantfahrt:
+572:            'C       Damit werden Trapezfoermige Zyklen nicht als lastwechsel erkannt
+573:            'C       da LWje = 0. In diesem fall wird voraus der naechste Wert gesucht,
+574:            'C       der nicht gleich Pe(jz) ist. Dieser wird anstelle von Pe(jz+1)
+575:            'C       gesetzt:
+603:            'C      lastwechsel werden nur als solche gezaehlt, wenn sie mehr als 0.05% von
+604:            'C      Pnenn betragen (sonst ist Ergebnis viel zu wackelig):
+605:            'C       (Lastwechsel wird gezaehlt, wenn LWja < 0)
+609:            'C     (1) Mittlere Amplitude vom Pe-Verlauf ("Ampl")
+610:            'C         Zwischenrechnung fue Zyklusmittelwert:
+617:            'C       Berechnung der mittleren Amplitude in 3 Sekunden vor Emission (Ampl3s)
+618:            'C       und der Anzahl der Pe-Sekundenschritten ueber 3% der Nennleistung
+619:            'C       (LW3p3s):
+650:            'C     (2) Aenderung der aktuellen Motorleistung (dP_2s):
+664:            'C     Mittelwert 3 sec. vor Emission:
+672:            'C    Gezaehlt nur bei dynamischem betrieb:
+681:            'C     (4) Mittelwert der negativen Motorleistung ("PnegMW"):
+687:            'C     Mittelwert 3 sec. vor Emission:
+695:            'C    Gezaehlt nur bei dynamischem betrieb:
+707:        'C     Berechnung der absoluten Dynamikkenngroessen:
+708:        'C      Addition der Amplituden von Pe (1. Pe-Wert
+709:        'C      wird fuer Amplitude auch als Maxima bzw. Minima gezaehlt)
+710:        'C    1. Sekunde:
+714:            'C     2. Sekunde bis Ende:
+717:                'C        Absolutwert:
+792:        'Geschw./Beschl.-abhängige Parameter nur wenn nicht Eng-Only
+805:        'Dynamikparameter als Differenz zu Dynamik in Kennfeld
+806:        '   ...war früher hier. Jetzt eigene Methode weil bei KF-Erstellung ungültig
+812:    'Dynamikparameter als Differenz zu Dynamik in Kennfeld:
+838:''' Klasse zur Berchnung der Abgastemperaturen
+846:    '! Felder für Größen aus PHEM Hauptprogramm
+895:    '**** Einlesen von tgas aus .npi (Projekt HERO) ****
+896:    ' => überschreibt tgas(jz) aus HtMass()
+897:    ' Luz/Rexeis 16.05.2011
+912:    ''' Hauptroutine für EXS Modul
+916:        '! Aufruf von Exs_Main(true) -> Developer Version ohne PHEM Hauptprogramm
+921:        '! Felder für Größen aus exs-File
+951:        'Allgemeine Konstanten
+955:        '!Stoffwerte Abgas:
+956:        '!unempfindlich gg. lambda, siehe "Stoffwerte_vollständigeVerbrennung_neu.xls"
+958:        'cp_exh = 1054.0 '!Wärmekapazität Abgas [J/(kg*K)], wird nicht mehr verwendet weil jetzt direkt in Abh. von T und Lambda berechnet
+964:        '!Anmerkung: Mittelwertwert aus Internetrecherche, in Literatur keine Angaben gefunden
+965:        '!kalibriert anhand Test an Thermoelement unter Annahme von Schichtdicke 0.1mm
+967:        'Reaktionsenthalpien in J/mol
+972:        'Molmassen
+977:        'Kompatibilität mit alter EXS-Strkutur. Bevor neues Konzept für Em-Komponenten mit cMAP-Klasse, tMapComp, etc. eingeführt wurde
+985:        'Verweise auf Emissionen: Gegebene falls vorhanden sonst die berechneten
+1006:        'Dimensionieren:
+1025:        'Übergabe der relevanten Größen aus dem PHEM Hauptprogramm
+1026:        'In DEV direkt aus der Datei *.phe eingelesen
+1045:        'Lambda
+1051:            'Wird weiter unten belegt weil mpexh vorhanden sein muss
+1056:        'Anfang exs-File einlesen
+1072:        'dummy = DatExs.ReadLine(0) 'alte dummy zeilen: auf exs-file kompatibilität achten
+1079:        'Initialisieren der entsprechenden Anzahl an Modulen
+1085:        'Lesen der Datenblöcke je Modul
+1088:                'Fehlermelderung in TempMod(iMod).Read(DatExs)
+1096:        'Ende exs-File einlesen
+1100:            'Anfang csy-File einlesen
+1121:            'Ende csy-File einlesen
+1133:        'Berechnungsschleife: je Zeitschritt /je Modul: 1. Temperaturen, 2.Konvertierungen
+1135:            'Sekündliche Ergebnisse werden in jeder Iteration ausgegeben
+1139:                    ' Header *.ter schreiben
+1159:                    ' Header der KonvMods schreiben
+1169:            'startwerte für kühlersimulation:
+1174:            'Wärmeeintrag ins Kühlsystem (Kennfeld)
+1189:                'Kühlsystem Simulation
+1191:                    'Wärmeeinträge in Massen 1 und 2
+1195:                    'Wärmeübergang Masse 1 und 2 ins Kühlsystem
+1199:                    'Massentemperaturen für nächsten Zeitschritt
+1205:                    'Wärmeverlust nach außen
+1208:                    'Gesamtwärmeeintrag ins Kühlsystem (Ausgabewert der Kühlersimulation)
+1218:                        'Berechnung Abgasmassenstrom aus gegebenem Kraftstoffverbrauch und Lambda
+1219:                        'nur zulässig bei Motoren ohne AGR
+1220:                        'Einheit mpexh.......[kg/s]
+1221:                        'Einheit Vpexh.......[m3/s]
+1222:                        'Fall 1: Berechnung aus Verbrauch und lambda
+1224:                        '!Fall 2: Berechnung aus durch Motor gepumpter Luftmenge
+1231:                        'Es fehlt: Methodik Massenstromberechnung für AGR Motoren BMW HERO Projekt
+1239:                'Lambda berechnen falls nicht explizit gegeben
+1252:                'Erstes Modul im Abgasstrang kann kein katalytisch aktives Element sein,
+1253:                'daher sind die Emissionen immer gleich der Rohemissionen aus dem PHEM-Hauptprogramm
+1269:                            'Qp_reak berechnen: massenstrom * konvertierungsrate * reaktionsenthalpie / molmasse
+1273:                            'Schadstoffkomponente berechnen
+1277:                            'Konvertierung von NOx, CO, HC -> alter Wert * (1-Konvertierungsrate)
+1291:                        'Falls Modul kein Konv-Element hat ändert sich nix (Anmerkung: Modul 1 hat immer ModTyp0)
+1304:                'Zeile in *.ter schreiben
+1323:            'Ende Berechnungsschleife
+1326:            'Alle sekündlichen Ergebnisfiles zumachen
+1338:            '---------- Abfrage Rücksprung im iterativen Berechnungsmodus für Starttemp -------------------
+1340:                'Abbruchbedingung: Temperatur des Massenelementes "t_m" des in "iter_pos" spezifizierten Moduls
+1341:                'am Beginn und am Ende des Zyklus innerhalb vorzugebender Bandbreite "iter_tol"
+1417:        '--- Ausgabefile *.ter schreiben ----------------------------------------------------------
+1419:        '--- Ende Ausgabefile *.ter schreiben -----------------------------------------------------
+1422:        'Aufräumen
+1431:    ''' Klasse für Temperaturmodule
+1433:    ''' <remarks>Art des Moduls wird mit ModTyp definiert</remarks>
+1492:        ''' Einlesen der EXS-Datei
+1494:        ''' <param name="Datei">Dateihandler</param>
+1512:            'Pfad für Konvertierungsraten bei Modulen mit Konvertierung
+1520:            'Initialisieren der Module & Einlesen des Parameterfiles je nach Modul
+1561:                    'Wärmeübergangsfaktor
+1563:                    'Oberfläche außen
+1565:                    'Emissivität
+1567:                    'Faktoren für Wärmeübergänge nach außen
+1571:                    'Faktoren für Temperaturzusammenhang t_katsubstrat <-> t_kat_außen
+1574:                    'Abkühlkurve Masse
+1576:                    'normierte Querschnittsfläche
+1578:                    'durchschnittlicher Gegendruck
+1580:                    'Durchmesser Thermoelement
+1583:                    'Abkühlkurve Thermoelement
+1595:                    'Faktoren für Wärmeübergänge nach außen
+1621:            'Check ob Tgas in Zyklus gegeben:
+1629:            'Entnormierungen und Berechnung weiterer Größen
+1638:                'Zusätzlich berechnete Parameter für Rohrmodule:
+1650:            'Für Strömungsberechnungen in SI-Einheiten wird Querschnittsfäche in m2 umgerechnet
+1653:            'Geometrische Größen berechnen
+1654:            'Anmerkung: es wird davon ausgegangen, dass Temperatursensoren
+1655:            'mittig ins Rohr stehen
+1660:            ' Anmerkung: Kugelkalotte an t-sensor spitze wird in der Betrachtung als
+1661:            ' umströmter Zylinder vernachlässigt
+1663:            'Abkühlkurven einlesen
+1691:        ''' Wärmeübergang Masse
+1708:            'Festlegung Schwellwert für Genauigkeit der Temperaturberechnung (wird wegen iterativem Berechnungsmodus benötigt)
+1711:            'Ãœbergabe Eintrittstemperatur des Abgases aus oberhalb liegendem Modul bzw. dem Motor
+1730:            'Berechnung der aktuellen Massentemperatur
+1733:                '! bei n_iter > 0 ist bereits der Endwert der letzten Iteration zugewiesen
+1739:            'Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+1761:                'Wärmekapazität (vgl. Bogdanic)
+1780:                'Schleife für Iteration Wärmeübergang
+1788:                    '                                     Abbruchkriterium siehe unten
+1794:                    'Ermittlung der Temperatur des Abgases in der Mitte der Masse ("t_gas_mid") aus einem nichtlinearem (logaritmisch) Temperaturverlauf 
+1803:                        'Wärmeübergang Konvektion innen für alle Module (außer Rohr)
+1807:                        'für Rohrmodule:
+1809:                        'Nusselt Zahl: Dichte = 345/t_gas_mid, Term in Klammer: mu_Rohr / mu_Mitte
+1811:                        'Wärmeübergang (Konvektion innen), d_pipe in m: char. Länge
+1815:                    'Wärmekapazität (vgl. Bogdanic)
+1820:                    'Abbruchkriterium: Änderung der Abgas-Austrittstemperatur im Vergleich zum letzten Iterationsschritt kleiner Schwellwert
+1838:            'Berechnung der Wärmeverluste der "thermischen Masse" nach außen
+1840:                'Parameter werden aus EXS-Datei eingelesen:
+1841:                'Daten für MuD:
+1842:                '   Oberfl_Kat = 0.12 'Oberfläche für Wärmeübergang in m^2
+1843:                '   Emiss = 0.5 'Emissivität
+1846:                'Empirische Formel, passt für alle Rollentests recht gut
+1848:                'Anm.: Versuch mit direkter Abhängigkeit von t_m -> funktioniert nicht gut
+1850:                'Wärmeverlust durch Strahlung
+1852:                'Wärmeverlust durch Konvektion
+1856:                'Parameter werden aus EXS-Datei eingelesen:
+1857:                'Daten für MuD:
+1858:                '   Modul Nr. 3:
+1859:                '       Oberfl_Mod3 = 0.169457508 'Oberfläche für Wärmeübergang in m^2
+1860:                '       Emiss = 0.5 'Emissivität
+1863:                '   Modul Nr. 4:
+1864:                '       Oberfl_Mod4 = 0.103596481 'Oberfläche für Wärmeübergang in m^2
+1865:                '       Emiss = 0.9 'Emissivität
+1869:                'Wärmeverlust durch Strahlung = Sichtfaktor * Emissivität * St.-Boltzm.-Konst * Oberfläche * (T_Rohr^4 - T_Umgebung^4)
+1871:                'Wärmeverlust durch Konvektion = Wärmeübergangskoeffizient * Oberfläche * (T_Rohr - T_Umgebung)
+1874:                'Standard: Crad konstant, keine Verluste durch Konvektion
+1879:            'Gesamtwärmeverlust
+1886:        ''' Wärmeübergang Thermoelement
+1899:                'Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+1912:                '!Formelwerk Berechnung Wärmeübergang am umströmten Zylinder
+1921:                'Vereinfachte Lösung der Wärmeflussgleichung für den t-sensor
+1922:                'entspricht einer Diffgl. für ein PT1 glied
+1924:                'Zeitdiskrete Lösung der PT1-Diffgl
+1991:                ''Extrapolation für LastTemp > TempAr(0)
+2003:                'Extrapolation für LastTemp < TempAr(Adim)
+2005:                'lbInt:
+2013:                'Einen Zeitschritt vor ( = 1 Sekunde)
+2041:        'Klasse initialisiert als Unterelement von TempMod
+2047:        'c     Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+2049:        'c     Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+2053:        'Filename sekündliches Ausgabefile spezifizieren
+2105:            'Abbruch wenn kein NOx gegeben
+2126:            't-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+2149:            ' Programm zur Simulation SCR-Flottendurchschnitt
+2150:            ' Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+2151:            '            dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+2162:            '     1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+2164:            '     a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+2165:            '     SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+2166:            '     Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+2172:            '     b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+2173:            '         Formel gilt auch für die ersten 20 Sekunden
+2187:            '     c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+2188:            '         Formel gilt auch für die ersten 60 Sekunden
+2194:            '        Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+2201:            '     Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2213:            '     2.) Berechnung deNOx
+2215:            '        a.) deNOx aus Kennlinie:
+2225:            'c        b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+2228:                'c           t_up aus Kennlinie:
+2238:                'c           NOx_raw aus Kennlinie:
+2248:                'c           Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+2258:                'c           Raumgeschwindigkeit aus Kennlinie:
+2276:            'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+2312:    ''' SCR Modell
+2319:        'Klasse initialisiert als Unterelement von TempMod
+2325:        'c     Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+2327:        'c     Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+2331:        'Filename sekündliches Ausgabefile spezifizieren
+2385:            'Abbruch wenn kein NOx gegeben
+2405:            't-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+2429:            ' Programm zur Simulation SCR-Flottendurchschnitt
+2430:            ' Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+2431:            '            dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+2443:            '     1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+2445:            '     a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+2446:            '     SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+2447:            '     Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+2453:            '     b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+2454:            '         Formel gilt auch für die ersten 20 Sekunden
+2470:            '     c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+2471:            '         Formel gilt auch für die ersten 60 Sekunden
+2479:            '        Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+2486:            '     Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2498:            '     2.) Berechnung deNOx
+2500:            '        a.) deNOx aus Kennlinie:
+2510:            'c        b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+2513:                'c           t_up aus Kennlinie:
+2523:                'c           NOx_raw aus Kennlinie:
+2533:                'c           Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+2543:                'c           Raumgeschwindigkeit aus Kennlinie:
+2561:            'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+2593:    ''' KAT-Modell
+2600:        'Klasse initialisiert als Unterelement von TempMod
+2606:        'Kennfelddaten
+2627:        ''' Erstellen eines neuen KAT-Moduls
+2642:        ''' Interpolationsfunktion
+2644:        ''' <param name="x">Massenstrom</param>
+2645:        ''' <param name="y">Temperatur vor KAT</param>
+2646:        ''' <param name="MapID">MapID der entsprechenden Abgaskomponente</param>
+2647:        ''' <returns>interpolierten Wert für x und y aus Kennfeld</returns>
+2648:        ''' <remarks>Aus Massenstrom-Temperatur Kennfeld wird Konvertierungsrate für entsprechende Abgaskomponente berechnet</remarks>
+2660:        ''' Einlesen der Kennfelder für Konvertierungsraten
+2662:        ''' <param name="Name">Dateiname</param>
+2716:            'Units (wird nicht ausgewertet)
+2719:            'Werte
+2731:                'KonvRaten Null setzen wenn Komponente nicht gegeben
+2742:            'Triangulieren
+2750:            'Dic. für modale Konvrate definieren
+2763:        ''' Berechnung der Konvertierungsrate aus Kennfeld
+2765:        ''' <param name="jz">Zeit</param>
+2766:        ''' <remarks>Für die Berechnung wird die Temperatur des Thermoelements am Kateingang (entspricht Modulnummer i-1) verwendet!!!</remarks>
+2768:            'Konvertierungsrate aus Kennfeld berechnen
+2784:        ''' Header für Ausgabedatei
+2796:        ''' Daten für Ausgabedatei
+2798:        ''' <param name="jz">Zeit</param>
+2819:    ''' Interface zur Konverter-Klasse cScrMod, cDocMod , usw...
+2835:        'C     Unterprogramm zu PHEM zur linearen INterpolation aus einem Polygonzug (z.B. in Vissimzs.for aufgerufen)
+2836:        'C     uebergeben wid "such" als X-Wert, der dann als berechneter Y-Wert wieder zurueck gegeben wird
+2837:        'C     Zu Belegen sind vorher:
+2838:        'C     Xis(j) und Yis(j)
+2839:        'c     Zu uebergeben der gesuchte Wert (such) und die Anzahl an vorhandenen Polyginpunkten (izpl)
+2850:        'C    Suche der naechstgelegenen Drehzahlpunkte aus eingegebener Vollastkurve:
+2851:        'c     Abstand zu Eingabepunkten und Suche des Punktes mit geringstem Abstand:
+2862:        'C      Festlegung des zweiten INterpolationspunktes (nur interpolieren, nicht extrapolieren)
+2868:                '!Extrapolation nach oben
+2874:                '!Extrapolation nach unten
+2879:        'c      Sortieren der 2 Werte nach aufsteigendem n:
+2887:        'c     Interpolation der zugehoerigen Maximalleistung (P/Pnenn)
+>>> My Project\Application.Designer.vb
+3:'     Dieser Code wurde von einem Tool generiert.
+4:'     Laufzeitversion:4.0.30319.269
+6:'     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+7:'     der Code erneut generiert wird.
+17:    'HINWEIS: Diese Datei wird automatisch generiert. Ändern Sie sie nicht direkt. Zum Ändern
+18:    ' oder bei in dieser Datei auftretenden Buildfehlern wechseln Sie zum Projekt-Designer.
+19:    ' (Wechseln Sie dazu zu den Projekteigenschaften, oder doppelklicken Sie auf den Knoten "Mein Projekt" im
+20:    ' Projektmappen-Explorer). Nehmen Sie auf der Registerkarte "Anwendung" entsprechende Änderungen vor.
+>>> My Project\AssemblyInfo.vb
+5:' Allgemeine Informationen über eine Assembly werden über die folgenden 
+6:' Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+7:' die mit einer Assembly verknüpft sind.
+9:' Die Werte der Assemblyattribute überprüfen
+20:'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+23:' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+25:'      Hauptversion
+26:'      Nebenversion 
+27:'      Buildnummer
+28:'      Revision
+30:' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 
+31:' übernehmen, indem Sie "*" eingeben:
+>>> My Project\Resources.Designer.vb
+3:'     Dieser Code wurde von einem Tool generiert.
+4:'     Laufzeitversion:4.0.30319.269
+6:'     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+7:'     der Code erneut generiert wird.
+18:    'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+19:    '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+20:    'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+21:    'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+23:    '''  Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+36:        '''  Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+50:        '''  Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+51:        '''  Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+>>> My Project\Settings.Designer.vb
+3:'     Dieser Code wurde von einem Tool generiert.
+4:'     Laufzeitversion:4.0.30319.269
+6:'     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+7:'     der Code erneut generiert wird.
diff --git a/Tools/TranslateComments/comments_trans.txt b/Tools/TranslateComments/comments_trans.txt
new file mode 100644
index 0000000000..a6561b9a37
--- /dev/null
+++ b/Tools/TranslateComments/comments_trans.txt
@@ -0,0 +1,2295 @@
+
+Startup: Raised when the application starts even before the creation of the startup-forms. @@ Für MyApplication sind folgende Ereignisse verfügbar:
+Shutdown: Raised after closing all the application forms. This event is not raised if the application terminates abnormally. @@ Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
+UnhandledException: Raised if the application encounters an unhandled exception. @@ Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung nicht normal beendet wird.
+StartupNextInstance: Raised when launching a single-instance application, if it is already active. @@ UnhandledException: Wird ausgelöst, wenn in der Anwendung eine unbehandelte Ausnahme auftritt.
+NetworkAvailabilityChanged: Occurs when connecting or disconnecting to the network. @@ StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist. 
+Initialization @@ NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
+Paths @@ Initialisierung
+If folder does not exist: Create! @@ Pfade
+Directories.txt preconfigure @@ Falls Ordner nicht vorhanden: Erstellen!
+Separator! @@ Directories.txt vorkonfigurieren
+Classes initialize @@ Trennzeichen!
+Config @@ Klassen initialisieren
+Log start @@ Config
+File size check @@ Log starten
+If log too large: Delete @@ Dateigröße checken
+License initialize @@ Falls Log zu groß: löschen
+Lizenz initialisieren
+
+Remove V'' => number remains @@ Erste Zeile: Version
+If invalid version: Abort @@ V" entfernen => Zahl bleibt übrig
+Version set @@ Falls Version ungültig: Abbruch
+Line      Variable        Type         Description @@ Version festgelegt
+01)       WorkDPath       String      WorkDir @@ Zeile      Variable        Typ         Beschreibung
+02)       LastMode        Short      Last used mode (equivalent CBoxMODE.SelectedIndex) @@ 01)       WorkDPath       String      WorkDir
+03)       IntpV2          Boolean     New interpolator to use @@ 02)       LastMode        Short       Letzter verwendeter Modus (entspricht CBoxMODE.SelectedIndex)
+04)       nnormEngStop    Single      Stop engine if under this Rotations @@ 03)       IntpV2          Boolean     Neuen Interpolator verwenden
+05)       TEMpath         String      TEM_Data path @@ 04)       nnormEngStop    Single      Unter dieser Drehzahl Engine Stop
+06)       LastTEM         String      Last TEM file -not in Options Form!!!! @@ 05)       TEMpath         String      TEM_Data Pfad
+07)       TEMexl          Boolean     Open TEM in Excel  -not in Options Form!!! @@ 06)       LastTEM         String      Letzte TEM Datei   -nicht in Options Form!!!
+08)       EAAvInt         Short      Analysis intervals in seconds. If 0: Query Value @@ 07)       TEMexl          Boolean     Open TEM in Excel  -nicht in Options Form!!!
+09)       ModOut          Boolean     Modal output @@ 08)       EAAvInt         Short       Analyse intervals of seconds. Wenn 0: Wert abfragen
+10)       WegKorJa        Boolean     Path-correction in so speed. Reduction cycle is not shorter @@ 09)       ModOut          Boolean     Modale Ausgabe
+11)       GnVorgab        Boolean     Gang- bzw. Rotations @@ 10)       WegKorJa        Boolean     Wegkorrektur damit bei Geschw. Reduktion Zyklus nicht kürzer wird
+12)       LogSize         Int16       Maximale Log-Größe [MiB] @@ 11)       GnVorgab        Boolean     Gang- bzw. Drehzahl
+13)       FZPsort         Boolean     FZP sort (formerly standard since the VISSIM. Fzp sorted according seconds) outputs @@ 12)       LogSize         Int16       Maximale Log-Größe [MiB]
+14)       FZPsortExp      Boolean     Sorted FZP export @@ 13)       FZPsort         Boolean     FZP sortieren (früher Standard da VISSIM die .fzp nach Sekunden sortiert ausgibt)
+15)       BATCHoutpath    Boolean     Output path for BATCH mode: <WORKDIR>, <GENPATH> or path @@ 14)       FZPsortExp      Boolean     Sortierte FZP exportieren
+16)       BATCHoutSubD    Boolean     BATCH-output in subfolders (depending. Tions file) @@ 15)       BATCHoutpath    Boolean     Ausgabepfad für BATCH-Modus:   <WORKDIR>, <GENPATH> oder Pfad
+17)       AirDensity      Single      Air-density @@ 16)       BATCHoutSubD    Boolean     BATCH-Ausgabe in Unterordner (je .gen Datei)
+18)       FinalEmOnly     Boolean     Only Final Emission output @@ 17)       AirDensity      Single      Luftdichte
+19)       FCcorrection    Boolean     FC-Correction in BATCH mode @@ 18)       FinalEmOnly     Boolean     Nur Final-Emissions ausgeben
+Previously: IntpV2 = CBool(line) @@ 19)       FCcorrection    Boolean     FC-Korrektur im BATCH-Modus
+Früher:  IntpV2 = CBool(line)
+
+Normalize @@ Min/Max suchen
+When sign of x or y is equal to the sign of xA(i) or yA(i), then skip row i @@ Normieren
+Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+
+Driving state shares @@ Fahrzustände in Sekunden
+Acceleration parameters @@ Fahrzustands-Anteile
+3s-Accel @@ Beschl.-Parameter
+Driving mode  Stop/Acc/Dec/Cruise @@ 3s-Beschl
+Average-Accel @@ Fahranteile Stop/Acc/Dec/Cruise
+Durchschnitts-Beschl
+
+XZ-triangulation @@ XY-Triangulierung
+XZ-Triangulierung
+
+Entry in "Sub New () ' @@ Anleitung zur Einbindung neuer DEV-Options *********************************
+I) New cDEVoption object definition with "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)" @@ 1. Eintrag in "Sub New()"
+ConfigType <tDEVconfType> defined ... Type: Boolean, Integer, Single, String, menu selection (Integer) or Reference to Function @@ I) Neues cDEVoption Objekt definieren mit "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)"
+Description     <String>        ...Description of the parameter @@ ConfigType      <tDEVconfType>  ...definiert Typ: Boolean, Integer, Single, String, Menüauswahl (Integer) oder Verweis auf Funktion
+SaveInConfg     <Boolean>       ...Whether you want to save settings for next startup PHEM @@ Description     <String>        ...Beschreibung des Parameters
+Enabled         <Boolean>       ...Whether setting the DEV-tab can be changed @@ SaveInConfg     <Boolean>       ...Ob Einstellung für nächsten PHEM-Start gespeichert werden soll
+II) default value defined. A distinction which ConfigType is used: @@ Enabled         <Boolean>       ...Ob Einstellung im DEV-Tab geändert werden kann
+a) ConfigType = tBoolean: @@ II) Default-Wert definieren. Hier wird unterschieden welcher ConfigType verwendet wird:
+Conf0.BoolVal = ...             <Boolean> @@ a) ConfigType = tBoolean:
+b) ConfigType = tSingleVal: @@ Conf0.BoolVal = ...             <Boolean> 
+Conf0.SingleVal = ...           <Single> @@ b) ConfigType = tSingleVal:  
+c) ConfigType = tStringVal: @@ Conf0.SingleVal = ...           <Single>
+Conf0.StringVal = ...           <String> @@ c) ConfigType = tStringVal:    
+d) ConfigType = tIntVal: @@ Conf0.StringVal = ...           <String>
+Conf0.IntVal = ...              <Integer> @@ d) ConfigType = tIntVal:    
+e) ConfigType = tAction: @@ Conf0.IntVal = ...              <Integer>
+Conf0.ActionDelegate = New cDEVoption.dActionDelegate(AddressOf NameDerFunktion) @@ e) ConfigType = tAction:
+Where NameDerFunktion the called function that passes a <String> is: "Public Function NameDerFunktion() As String ' @@ Conf0.ActionDelegate = New cDEVoption.dActionDelegate(AddressOf NameDerFunktion)
+f) ConfigType = tContMenIndex: @@ Wobei NameDerFunktion die aufzurufende Funktion ist die einen <String> übergibt: "Public Function NameDerFunktion() As String"
+Definition of Available selection options as <String>: @@ f) ConfigType = tContMenIndex:
+Conf0.AddMode ("select 1") @@ Verfügbare Auswahl-Möglichkeiten als <String> definieren:
+Conf0.AddMode ("Option 2") @@ Conf0.AddMode("Auswahl 1")
+and so forth. @@ Conf0.AddMode("Auswahl 2")
+Default value definition: First choice = 0 @@ usw...
+Conf0.ModeIndex = ...       <Integer> @@ Default-Wert definieren: Erste Auswahl = 0
+START: Parameters Configuration '**************************** @@ Conf0.ModeIndex = ...       <Integer>
+END: Parameters Configuration '***************************** @@ START: Parameter konfigurieren '****************************
+Initializes the actual Config-Parameter from MyConfigs list @@ ENDE: Parameter konfigurieren '*****************************
+Demo for Delegate Function @@ Initialisiert die tatsächlichen Config-Parameter aus der MyConfigs-Liste 
+May not be @@ Demo für Delegate Function
+Darf nicht sein
+
+Component is output once per second @@ Transient Correction
+ATVals defined (EXS) @@ Komponente wird sekündlich ausgegeben
+Totals /AverageWerte @@ ATVals definiert (EXS)
+Averaged @@ Summen/DruchschnittsWerte
+Total (g/h converted into g) @@ Durchschnitt
+Summe (g/h umgerechnet in g)
+
+Create Erg entries '********************** @@ GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '**********************
+Vehicle type-independent @@ Erg-Einträge erstellen '**********************
+Each GEN file to map mode and check @@ Fahrzeugtyp-unabhängig
+nothing @@ Jede GEN-Datei auf Modus und Kennfeld checken
+Electric Vehicle / Hybrid @@ nix...
+EV & HEV @@ Elektrofahrzeug / Hybrid
+Only EV: @@ EV & HEV
+Conventional / Hybrid (Everything But EV) @@ Nur EV:
+Conventional vehicle ... @@ Konventionell / Hybrid  (Alles außer EV)
+From the measured data @@ Konventionelles Fahrzeug...
+x/h output if ADVANCE mode -or- engine only -or- unit is not in x/h and thereforeConversion into  x/km not possible @@ Aus den Messdaten
+From the map @@ x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+x/h output if ADVANCE mode or engine only or unit is not in x/h and therefore Conversion into x/km not possible @@ Aus dem Kennfeld
+currently nothing @@ x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+Fahrzeugbesogene fields @@ derzeit nix
+CylceKin @@ Fahrzeugbesogene Felder
+ErgListe sort order g/km and g/h side @@ CylceKin
+Vehicle type-independent @@ ErgListe sortieren damit g/km und g/h nebeneinander liegen
+Length, Speed, Pitch @@ Fahrzeugtyp-unabhängig
+Average-Speed. calculate @@ Länge, Geschw., Steigung
+Average-Slope calculated @@ Durchschnitts-Geschw. berechnen
+Positive effective EM-Power @@ Durchschnitts-Steigung berechnen
+Positive effective Battery-Power = internal EM-Power @@ Positive effektive EM-Leistung
+Positive internal Battery-Power @@ Positive effektive Batterie-Leistung = innere EM-Leistung
+Calculate Energy consumed @@ Positive innere Batterie-Leistung
+Negative effective EM-Power @@ Verbrauchte Energie berechnen
+Negative effective Battery-Capacity = internal EM-Power @@ Negative effektive EM-Leistung
+Negative internal Battery-Power @@ Negative effektive Batterie-Leistung = innere EM-Leistung
+Charged energy charge @@ Negative innere Batterie-Leistung
+Energy in/out battery @@ Geladene Energie berechnen
+EtaEM @@ Energie in/aus Batterie
+EtaBat @@ EtaEM
+Delta SOC @@ EtaBat
+Only EV: @@ Delta SOC
+Energy consumption @@ Nur EV:
+Conventional means everything with ICE (not EV) @@ Energieverbrauch
+Emissions @@ Konventionell d.h. alles mit ICE (nicht EV)
+x/h-Output if ADVANCE mode or engine only or unit is not in x/h and therefore not possible to convert into x/km @@ Emissionen
+Power, Rotations @@ x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+Ppos @@ Leistung, Drehzahl
+Pneg @@ Ppos
+Only entire vehicle (not EngOnly) @@ Pneg
+Pbrake-norm @@ Nur Gesamtfahrzeug (nicht EngOnly)
+Eair @@ Pbrake-norm
+Eroll @@ Eair
+Egrad @@ Eroll
+EACC @@ Egrad
+Eaux @@ Eacc
+EBrake @@ Eaux
+Etransm @@ Ebrake
+Mass, Loading @@ Etransm
+CylceKin @@ Masse, Loading
+EposICE @@ CylceKin
+EnegICE @@ EposICE
+Create output string: @@ EnegICE
+Open file @@ Ausgabe-String erstellen:
+Close file (will open after each job) @@ Datei öffnen
+Open file @@ Datei schließen (wird nach jedem Job neu geöffnet)
+Close file @@ Datei öffnen
+Define output path @@ Datei schließen
+Open file @@ Ausgabepfad definieren
+Open file @@ Datei öffnen
+Close file (will open after each job) @@ Datei öffnen
+Datei schließen (wird nach jedem Job neu geöffnet)
+
+TODO: Mission withouyt Cycle-name @@ Durchschnitts-Geschw. berechnen
+TODO: Test Setup @@ TODO: Mission nicht Zyklusname
+TODO: Test Setup
+
+all truck sizes are calculated with the same *. mep @@ Unterprogramm zur Korrektur der verbrauchswerte nach Motorgroesse (fuer HBEFA-Berechnungen, da dort
+Correction of the fuel consumption @@ alle LKW-Groessen mit gleichem *.mep gerechnet werden
+only for manual calculations and trucks(LKW) @@ Korrektur des Kraftstoffverbrauches
+for Euro0 and earlier, 3 different KF used depending on the size @@ nur für Handbuchrechnungen und LKW
+therefore here no size correction @@ für Euro0 und früher werden größenabhängig 3 verschiedene KF verwendet
+Correction function for EUR1 and EUR 2 1:1 adopted by state ARTEMIS @@ daher hier keine Größenkorrektur
+Functionality vs. Euro 3 gg. ARTEMIS adapted slightly (see FcCorr_Eu3ff.xls) @@ Korrekturfunktion für Euro1 und Euro 2 1:1 von Stand ARTEMIS übernommen
+Correction function for Euro 4 ff similar to Euro3 @@ Korrekturfunktion Euro 3 gg. ARTEMIS geringfügig adaptiert (siehe FcCorr_Eu3ff.xls)
+merely adapted: Average Power-rating of the engines into mep verwursteten @@ Korrekturfunktion für Euro 4 ff analog zu Euro3
+Euro6ff @@ lediglich adaptiert: Durchschnittsnennleistung der ins mep verwursteten Motoren
+Euro6ff
+
+VECTO: Default values for the parameters are no longer in GEN/.VECTO are to be occupied in reading about SetDefault. @@ GEN einlesen
+Error message in init () @@ VECTO: Defaultwerte für Parameter die nicht mehr in der .GEN/.VECTO sind werden beim Einlesen über SetDefault belegt.
+Reading in the Vehicle-specifications from 'KFZspez' @@ Fehlermeldung in Init()
+if there are entries before <DRAG>, then read FLD before MAP/MEP! @@ Einlesen der KFZ-Spezifikationen aus 'KFZspez'
+Normalize @@ FLD muss jetzt vor MAP/MEP eingelesen werden falls dort <DRAG> Einträge sind!
+Characteristic field: Columns 1 and 2 are the x-and y-coordinates (Pe, n) @@ Normieren
+rest are measured values @@ Kennfeld: Spalten 1 und 2 sind die x- und y- Koordinaten (Pe,n), die
+Emissions and Consumption in (g/(h*kW_RatedPower) at SNF @@ uebrigen sind Messwerte
+Emissions (g/h) and consumption in (g/(h*kW_RatedPower) in cars(PKW) and UAA(LNF) @@ Emissionen und Verbrauch in (g/(h*(kW_Nennleistung) bei SNF
+Map read @@ Emissionen in (g/h) und Verbrauch in (g/(h*(kW_Nennleistung) bei PKW und LNF
+Normalize @@ Kennfeld einlesen
+Reading in the Vehicle driving cycle (Not in ADVANCE). @@ Normieren
+LUZ: 04.02.2011: From now on the outskirts of READING because new BATCH structure @@ Einlesen des KFZ-Fahrzyklus (Nicht in ADVANCE).
+Dynamic correction parameter, if dynamokkorrektur: @@ LUZ: 04.02.2011: Ab jetzt ausserhalb von LESE wegen neuer BATCH-Struktur
+Parameters of multiple regression analysis, difference with stationary @@ Dynamik-Korrekturparameter, falls dynamokkorrektur ausgewählt:
+SNF: (g/h) / kW Rated power for individual parameters @@ Parameter aus multipler Regressionsanalyse, Differenz zu stationär in
+Cars(PKW) (g/h) for emissions (g/h) / kW for consumption @@ SNF: (g/h)/kW_Nennleistung fuer einzelne Parameter
+Reading data for hybrid simulation: @@ PKW  (g/h) für Emissionen , (g/h)/kW fuer Verbrauch
+TODO: EV / HEV Init here! @@ Einlesen der Daten fuer Hybridsimulation:
+TODO: EV/HEV Init hierher!
+
+If there are any "unplanned" Abortion @@ Hauptprogramm für alle Modi
+Reset the fault @@ Falls es zu "ungeplanten" Abbruch kommt
+Mode and specify message @@ Fehler zurücksetzen
+License check @@ Modus festlegen und Meldung
+BATCH output folder if necessary @@ Lizenz checken
+MOD-class initialize data @@ BATCH-Ausgabeordner erstellen falls notwendig
+TEST: Just look whether it's even without the: MODdata.Init () @@ MOD-Daten Klasse initialisieren
+ERG-class initialize @@ TEST: Schaun ob's auch ohne dem geht: MODdata.Init()
+Warning on invalid/unrealistic settings @@ ERG-Klasse initialisieren
+Messages @@ Warnung wenn ungültige/unrealistische Einstellungen
+Progbar init @@ Meldungen
+Loop calculation for all preset cycles and vehicles: @@ Progbar-Init
+Job loop **************************************** @@ Schleife zur Berechnung fuer alle vorgegebenen Zyklen und Fahrzeuge:
+Check whether Aborted @@ Job-Schleife ****************************************
+If error when read GEN @@ Check ob Abbruch
+Reading the input files @@ Falls Error beim GEN einlesen
+BATCH: Cycle from DRI list @@ Einlesen der Inputfiles
+ADVANCE: Cycle is not read @@ BATCH: Zyklus aus DRI-Liste
+Check if all the modes are licensed in the GEN file @@ ADVANCE: Zyklus wird nicht eingelesen
+If optimizer active here, the parameters are read @@ Überprüfe ob alle Modi in der GEN Datei lizenziert sind
+BATCH: Create sub-folder you issue @@ Falls Optimierer aktiv werden hier die Parameter eingelesen
+Zylus loop **************************************** @@ BATCH: Sub-Dir Ausgabeordner erstellen
+ProgBar @@ Zylus-Schleife ****************************************
+BATCH mode: cycle from GEN-file but not from DRI list @@ ProgBar
+Status @@ BATCH-Modus: Fahrzyklus nicht aus GEN-Datei sondern aus DRI-Liste
+Output name define @@ Status
+VECTO-Zylus loop ********************************** @@ Ausgabe-Name definieren
+ProgBar @@ VECTO-Zylus-Schleife **********************************
+TODO: Loading Loop @@ ProgBar
+VECTO-loading loop ********************************* @@ TODO: Loading Schleife
+Entry point for SOC start iteration @@ VECTO-Loading-Schleife *********************************
+Aufraumen @@ Einstiegspunkt für SOC-Start Iteration
+Read cycle @@ Aufraumen
+Read in @@ Zyklus einlesen
+convert v(s) into v(t) (optional) @@ Einlesen
+Convert to 1Hz (optional) @@ v(s) in v(t) konvertieren (optional)
+Error message in DRI.Convert() @@ In 1Hz konvertieren (optional)
+Unnormalised @@ Fehlermeldung in DRI.Convert()
+Cycle requirements initialize (Speed, Accel, ...) @@ Entnormieren
+Expect Npi-Power into Pe and P_clutch @@ Zyklus-Vorgaben initialisieren (Geschw, Beschl, ...)
+WARNING: VehmodeInit needed information from GEN and DRI! @@ Rechne .npi-Leistung in Pe und P_clutch um
+Error message within VehmodeInit () @@ ACHTUNG: VehmodeInit benötigt Infos aus GEN und DRI!
+TODO: message ... @@ Fehlermeldung innerhalb VehmodeInit()
+Calculate CycleKin (for erg / sum, etc.) @@ TODO: Meldung...
+Emissions and treatment - is not running in EV mode @@ CycleKin (für erg/sum usw.) berechnen
+Every second TC parameters ermittlen @@ Emissionen und Nachbehandlung - wird bei EV-Modus nicht ausgeführt
+Map creation @@ Sekündliche TC Parameter ermittlen
+Raw emissions calculated @@ Kennfeld Erstellung
+TC parameters convert to differential to map-TC parameters @@ Rohemissionen berechnen
+Dynamic correction @@ TC Parameter umrechnen in Differenz zu Kennfeld-TC-Parameter
+Correction of consumption values ​​smaller truck engines at HBEFA @@ Dynamik-Korrektur
+Exhaust system simulation @@ Korrektur der Verbrauchswerte kleiner LKW-Motoren bei HBEFA
+Totals / Averages form @@ Exhaust System Simulation
+Engine Analysis @@ Summen / Durchschnitte bilden
+Every second edition *** @@ Engine Analysis
+VECTO edition @@ Sekündliche Ausgabe ***
+TODO: Loadings Gear-shift ... @@ VECTO Ausgabe
+Output for BATCH and ADVANCE @@ TODO: Loadings umschalten...
+In ADVANCE-cycle cancel = Cancel Job @@ Ausgabe für BATCH und ADVANCE
+Output in Erg (first calculation - Initialize & header) @@ In ADVANCE ist Zyklus-Abbruch = Job-Abbruch
+Data Cleanup @@ Ausgabe in Erg (Erste Berechnung - Initialisieren & Header)
+Status Update @@ Daten aufräumen
+TODO: Loading Loop @@ Status-Update
+END *** VECTO-loading loop *** END ************************ @@ TODO: Loading Schleife
+END *** VECTO Zylus-loop *** END ************************* @@ ENDE *** VECTO-Loading-Schleife *** ENDE ************************
+END *** Zylus loop *** END ****************************** @@ ENDE *** VECTO-Zylus-Schleife *** ENDE *************************
+If GEN.irechwahl = tCalcMode.cmHEV Then MsgStrBuilder.Append ("(DSOC =" & SOC (MODdata.tDim) - SOC (0) & ")") @@ ENDE *** Zylus-Schleife *** ENDE ******************************
+Check whether demolition @@ If GEN.irechwahl = tCalcMode.cmHEV Then MsgStrBuilder.Append(" (dSOC = " & SOC(MODdata.tDim) - SOC(0) & ")")
+END *** Job loop *** END ******************************* @@ Check ob Abbruch
+ENDE *** Job-Schleife *** ENDE *******************************
+
+Opt_Interface / off @@ Korrigierte Emissionen (wird von SOC-Iterations-Modul bestimmt)
+Initialization @@ Opt_Interface Ein/Ausschalten
+Initialization @@ Initialisierung
+Counter to Zero @@ Initialisierung
+Corr Em delete @@ Zähler null setzen
+TODO: Set I / O list @@ Korr. Em. löschen 
+Timer Start / Initialize @@ TODO: I/O-Verzeichnis festlegen
+Read in @@ Timer initialisieren/starten
+Reading the input file with opt-parameter @@ Parameter einlesen
+Output parameters @@ Einlesen der Input-Datei mit Opt-Parameter
+Edition of the output file with the objective function @@ Parameter ausgeben
+Issue Status String @@ Ausgabe der Output-Datei mit Zielfunktion
+Calculation of the objective function @@ Ausgabe StatusString
+Output of the objective function @@ Berechnung der Zielfunktion
+Opt off @@ Ausgabe der Zielfunktion
+Status message (must not be called by BGWorker) @@ Opt Deaktivieren
+Start PHEM - is of F_MAINForm.ComMsgTimer get called when start signal @@ Status-Meldung (darf nicht von BGWorker aufgerufen werden)
+PHEM start @@ Starte PHEM - wird von F_MAINForm.ComMsgTimer aufgerufen wenn Start-Signal erhalten
+Stop the timer @@ PHEM starten
+Count + 1 @@ Timer anhalten
+PHEM start @@ Zähler + 1
+PHEM ready - called by backgroundWorker1_RunWorkerCompleted when finished PHEM @@ PHEM starten
+Output of the objective function @@ PHEM fertig - wird von BackgroundWorker1_RunWorkerCompleted aufgerufen wenn PHEM beendet
+PHEM_Launcher finish @@ Ausgabe der Zielfunktion
+Start the timer again @@ PHEM_Launcher beenden
+Finished PHEM_Launcher @@ Timer wieder starten
+Beendet PHEM_Launcher
+
+Sign changes ... @@ Check ob Vorzeichen von Delta-SOC sich ändert
+Limit reached => Demolition @@ Vorzeichenwechsel...
+If the last iteration was the best (SOCnAbbr = True): demolition @@ Limit erreicht => Abbruch
+If another iteration was better (SOCnAbbr = False): Repeat @@ Falls die letzte Iteration die Beste war (SOCnAbbr = True): Abbruch
+Check whether LinReg possible: Mind. 2 calculations; Mind. DSOC-1 sign changes @@ Falls eine andere Iteration besser war (SOCnAbbr = False): Wiederholen
+Uncorrected Em use if SOC iteration OK @@ Check ob LinReg möglich: Mind. 2 Berechnungen; Mind. 1 dSOC-Vorzeichenwechsel
+Uncorrected Em use @@ Unkorrigierte Em verwenden wenn SOC-Iteration OK
+Corrected emissions for optimizer @@ Unkorrigierte Em verwenden
+If SOC successful iteration (or Lin.Reg not possible) then emissions from the last calculation using (uncorrected) @@ Korrigierte Emissionen für Optimierer
+Falls SOC-Iteration erfolgreich (oder Lin.Reg. nicht möglich) dann Emissionen der letzten Berechnung (unkorrigiert) verwenden
+
+File format @@ TODO: Weg damit! SOC-Iteration gehört in die Leistungsschleife oder nach Em-Berechnung für LinReg
+Log start @@ Dateiformat
+Log starten
+
+Line 2: FLT file @@ Zeile 1: FZP-Datei
+Line 3: TEM file @@ Zeile 2: FLT-Datei
+Line 4: RndSeed @@ Zeile 3: TEM-Datei
+Line 5: MISKAMout True / False @@ Zeile 4: RndSeed
+Line 6: strFilter True / False @@ Zeile 5: MISKAMout True/False
+Line 7: Distance filters for SUM.STR @@ Zeile 6: STRfilter True/False
+Line 8 +: STR files @@ Zeile 7: Distance filter für SUM.STR
+Zeile 8+: STR Dateien
+
+Calculation @@ Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien 
+ADVANCE initialization @@ Berechnung
+ADV Import File @@ ADVANCE Initialisierung
+Check whether there FLT @@ ADV Datei einlesen
+Check whether there assorted FZP @@ Check ob FLT vorhanden
+FLT read (must be before because cSTRerg STR) @@ Check ob sortierte FZP vorhanden
+Create EMlist @@ FLT einlesen (muss vor STR sein wegen cSTRerg)
+STR read @@ EMlist erstellen
+Lists @@ STR einlesen
+FZP read @@ Listen erstellen
+FZP sort (and export) @@ FZP einlesen
+Check FZP @@ FZP sortieren (und exportieren)
+For AusgVis @@ FZP Check
+Output initialization @@ Für AusgVis
+Filename @@ Ausgabe-Initialisierung
+Modal output @@ Dateinamen
+Home values @@ Modale Ausgabe
+ADVANCE memory release @@ Startwerte
+Output @@ ADVANCE Speicher frei geben
+Free memory @@ Ausgabe
+Delete records @@ Speicher freigeben
+Garbage Collection - If "System Out of Memory" Exception prevent (but does not do it!) @@ Listen löschen
+ADVANCE vehicle calculation @@ Garbage Collection - Soll "System Out of Memory" Exception verhindern (tut's aber nicht!)
+Check whether finished @@ ADVANCE Fahrzeugberechnung
+Cycle class initialize @@ Check ob Fertig
+Fahzeugnummer and type definition (here remains constant) @@ Zyklus-Klasse initialisieren
+Old vehicle is VehStrAlt, updates is VehStr @@ Fahzeugnummer und Typ definieren (bleibt hier konstant)
+Lists @@ Altes Fahrzeug ist VehStrAlt, Aktuelles ist VehStr
+T0 @@ Listen erstellen
+Define fields for vehicle computing @@ t0
+Check whether a new vehicle @@ Definiere Felder für Fahrzeug-Berechnung
+General cycle @@ Check ob neues Fahrzeug 
+Distance evaluation (MISKAM) @@ Allgemeiner Fahrzyklus
+StatusMsg (7, 'Calculation running ... "& CInt (zFZP / FZPlen * 100).ToString ("00") & "%", False) @@ Strecken-Auswertung (MISKAM)
+Vehicle identification @@ StatusMSG(7, "Calculation running... " & CInt(zFZP / FZPlen * 100).ToString("00") & "%", False)
+Check whether cycle too short => skip @@ Fahrzeug-Identifizierung
+Vehicle number per type increase @@ Check ob Zyklus zu kurz => Ãœberspringen
+Check if last gen file to use new, otherwise occupied by FLT @@ Fahrzeuganzahl je Typ erhöhen
+VehStr is now ALT @@ Check ob letzte Gen-Datei neu zu verwenden ist, sonst Belegung durch FLT
+Section by section calculation @@ VehStr ist ab jetzt ALT
+Cycle loop through @@ Abschnittsweise Berechnung
+No. of STR file @@ Zyklus durchschleifen
+If changes in STR No.: @@ Nr. der STR-Datei
+Old STR No. conclude @@ Falls Wechsel in STR-Nr:
+Distance (km driven) @@ Alte STR-Nr abschließen
+Time in h @@ Distanz (gefahrene km)
+Vehicle No. @@ Reisezeit in h
+Cumulative emissions @@ Kfz-Anz
+Add up @@ Summen-Emissionen
+Last complete STR @@ Aufsummieren
+Distance (km driven) @@ Letzte STR abschließen
+Time in h @@ Distanz (gefahrene km)
+Vehicle No. @@ Reisezeit in h
+Cumulative emissions @@ Kfz-Anz
+FLT read @@ Summen-Emissionen
+FZP read @@ FLT einlesen
+File length determine @@ FZP einlesen
+Dimensioned arrays @@ Dateilänge bestimmen
+Import File @@ Arrays dimensionieren
+Comments skip @@ Datei einlesen
+Routes that are not listed in the STR file from here @@ Kommentare überspringen
+Arrays show @@ Strecken die nicht in der STR Datei aufgeführt sind werden hier entfernt
+Progress edition @@ Arrays belegen
+Free memory @@ Progress-Ausgabe
+Newly dimensioned arrays @@ Speicher freigeben
+FZP sorting, @@ Arrays neu dimensionieren
+Current vehicle is vNr1 @@ FZP sortiren
+Count vehicles VNR = vNr1 @@ Aktuelles Fahrzeug ist vNr1
+vNrAnz = number of vehicles with VNR = vNr1 @@ Zähle Fahrzeuge mit vNr = vNr1
+Sort all vehicles with VNR = vNr1 by vehicle number @@ vNrAnz = Anzahl der Fahrzeuge mit vNr = vNr1
+Cache = line x1 @@ Sortiere alle Fahrzeuge mit vNr = vNr1 nach Fahrzeugnummer
+Line line x1 = x2 @@ Zwischenspeicher = Zeile x1
+Line x2 = cache @@ Zeile x1 = Zeile x2
+vNr1 sort by time @@ Zeile x2 = Zwischenspeicher
+Cache = line xx1 @@ vNr1 nach Zeit sortieren
+Line xx1 = Line xx2 @@ Zwischenspeicher = Zeile xx1
+Line x2 = Cache @@ Zeile xx1 = Zeile xx2
+Status output @@ Zeile x2 = Zwischenspeicher
+FZP export @@ Status-Ausgabe
+Data @@ FZP exportieren
+STR read @@ Daten
+SID Create List @@ STR einlesen
+Vehicles divide, have the gap over time @@ SID-Liste erstellen
+ADV Reading @@ Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben
+ADV file read ******** @@ ADV einlesen
+Line 1: FZP file @@ ADV Datei einlesen ********
+Line 2: FLT file @@ Zeile 1: FZP-Datei
+Line 3: TEM file @@ Zeile 2: FLT-Datei
+Line 4: RndSeed @@ Zeile 3: TEM-Datei
+Line 5: MISKAMout True / False @@ Zeile 4: RndSeed
+Line 6: strFilter True / False @@ Zeile 5: MISKAMout True/False
+Line 7: STR.SUM path filter @@ Zeile 6: STRfilter True/False
+Line 8+: STR files @@ Zeile 7: STR.SUM Streckenfilter
+Define output path @@ Zeile 8+: STR Dateien
+File results with sums over all Vehicles: @@ Ausgabepfad definieren
+Issue Close @@ File mit Summen Ergebnissen ueber alle Kfz:
+Conversion to g emissions per second and vehicles/day @@ Ausgabe Schließen
+Conversion to mg emissions per meter @@ Umrechnung auf g Emissionen je Sekunde sowie Kfz/Tag
+Route-length [m] is calculated from straight line between start and end points: @@ Umrechnung auf mg Emissionen je Meter
+Output of results @@ Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet:
+ResultFile-filename = input-filename but with *.sd3: @@ Ausgabe der Ergebnisse
+File with sums over all results Route-sections: @@ Filename fuer Ergebnisfile = Name Eingabefile aber mit *.sd3:
+Subroutine to PHEM / Advance for outputting the results of at MISKAM Air Quality Model of Lohmeyer @@ File mit Summen Ergebnissen ueber alle Streckenstuecke:
+Data output, separated by semicolons @@ Unterprogramm zu PHEM/Advance zur Ausgabe der Ergebnisse an MISKAM Luftguetemodell von Lohmeyer
+Adding up the emission data for Route-section, for about every second of every vehicle @@ Daten jeweils durch Semikolon getrennt ausgegeben
+Handed over each 2 possible directions for each section but only in StrId in *.fzp -> to "Closest": Attention. @@ Aufaddieren der Emissionsdaten nach Streckenabschnitten, ueber jede Sekunde fuer jedes Fahrzeug
+Direction assigned @@ Achtung: jeweils 2 Richtungen je Abschnitt moeglich aber nur StrId in *.fzp uebergeben -> auf "naechstgelegene"
+Find nearest Road-section @@ Richtung zugewiesen
+Coordinate vehicle: @@ Suche nach naechstgelegenem Strassenteilstueck
+Coordinate distance: sSegAnX (j), sSegEnX (j), sSegAnY (j), sSegEnY (j) of input @@ Koordinaten Kfz:
+Total distance to the beginning and end of the Route-section j @@ Koordinaten Strecke: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) aus Eingabe
+If the Route number in *.fzp file not exist in *.str file, it is assigned the nearest section (same method as above): @@ Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j
+Summation of the emissions to the respective associated sections: @@ Falls Streckennummer auf *.fzp File in *.str File nicht existiert, wird auf naechstgelegenes Stueck zugewiesen (gleiches System wie oben):
+calculation in every second (g/h) / 3600 - by> g / haul all the time @@ Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten:
+Counting the Vehicle for DTV (only if not already in previous second on the track @@ berechnung sekuendlich in (g/h)/3600 -> g/Strecke ueber gesamte Zeit
+Rough calculation for benzene GLOBEMI (HBEFA): @@ Zaehlen der Kfz fuer DTV (nur wenn nicht in voriger Sekunde auch schon auf der Strecke
+Isolation to petrol, diesel, truck, car, 1 AM / EURO @@ Grobe Rechnung Benzol nach GLOBEMI (HBEFA):
+Gross invoice Russ, Russ shares of PM currently only Schaetzwerte!!: @@ Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+Isolation to petrol, diesel, truck, car, 1 AM / EURO @@ Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!:
+SO2 emissions from the fuel's @@ Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+Sulfur expected. With SO2 = mass (mass% S / 100) * 2 @@ SO2-Emissionen aus dem  im Kraftstoff enthaltenen
+Output of each STR results' ********* @@ Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2
+Output totals of all STR's' ********* @@ Ausgabe der einzelnen STR-Ergebnisse '*********
+File Header @@ Ausgabe Summen über alle STR's '*********
+Em per km *************************** @@ Datei-Header
+Em per segment @@ Em je km ***************************
+Segment Name @@ Em je Segment
+Number of cars @@ Segment-Name
+Travel time @@ Anzahl Fahrzeuge
+Em km per @@ Reisezeit
+Writing @@ Em je km
+Em depending Vehicle Type @@ Schreiben
+Number of cars @@ Em je Vehicle Type
+Travel time, distance, Avg.Speed @@ Anzahl Fahrzeuge
+Em @@ Reisezeit, Strecke, Avg.Speed
+Writing @@ Em
+Total @@ Schreiben
+Segment @@ Summe
+Number of vehicles is not calculated from STRerg (makes no sense) but from cFLTfleet recording @@ Segment
+Travelling season: Beginning of Mai till End of October @@ Anzahl Fahrzeuge wird nicht aus STRerg berechnet (macht keinen Sinn) sondern aus cFLTfleet-Aufzeichnung
+Em km per @@ Reisezeit
+Writing @@ Em je km
+Em abs **************************** @@ Schreiben
+Em per segment @@ Em abs ****************************
+Segment Name @@ Em je Segment
+Em abs @@ Segment-Name
+Writing @@ Em abs
+Em depending Vehicle Type @@ Schreiben
+Em @@ Em je Vehicle Type
+Writing @@ Em
+total @@ Schreiben
+Segment @@ Summe
+Em abs @@ Segment
+Writing @@ Em abs
+mod file to disassemble @@ Schreiben
+Infile open @@ mod-Datei zerlegen
+Number VehNummern @@ InFile öffnen
+Loop through all VehNummern in list @@ Anzahl VehNummern
+User abort abort when @@ Schleife durch alle VehNummern in Liste
+Abort when file finished @@ Abbruch falls Userabbruch
+Output File Open / Stop if error opening @@ Abbruch falls Datei fertig
+Loop through file @@ Ausgabedatei öffnen / Abbruch wenn Fehler beim Öffnen
+If string already contains one row is not VehNr again read (see below) @@ Schleife durch Datei
+Line read @@ Falls String schon eine VehNr enthält wird Zeile nicht nochmal eingelesen (siehe unten)
+If found with VehNr line: get out VehNr @@ Zeile einlesen
+If VehNr is the needed: write output file @@ Falls Zeile mit VehNr gefunden: VehNr rausholen
+First line write ("VehNr: ...") @@ Falls VehNr die gesuchte ist: Ausgabedatei schreiben
+Next Line (Do While otherwise skipped) @@ Erste Zeile schreiben ("VehNr: ...")
+Loop until next VehNr / end of file @@ Nächste Zeile lesen (sonst wird Do While übersprungen)
+If next vehicle: @@ Schleife bis nächste VehNr / Dateiende
+If the same vehicle number: Write file further @@ Wenn nächstes Fahrzeug:
+Skip header and Units @@ Wenn gleiche Fahrzeugnummer: Datei weiter schreiben
+Otherwise: Get out of loop @@ Header und Units überspringen
+Line write @@ Sonst: Raus aus Schleife
+Read line @@ Zeile schreiben
+If not EndOfStream Set flag so next VehNr is not skipped @@ Zeile lesen
+Output file close @@ Falls nicht EndOfStream Flag setzen damit nächste VehNr nicht übersprungen wird
+Jump out of the loop VehNr search out @@ Ausgabedatei schließen
+ProgBar @@ Aus der VehNr-Such-Schleife raus springen
+FLT class @@ ProgBar
+Initialize @@ FLT Klasse
+Random gene file @@ Initialisieren
+Class sections evaluation @@ GenDatei Zufallsgenerator
+File Header @@ Klasse für abschnittsweise Auswertung
+Em per km *************************** @@ Datei-Header
+Results per Veh-Type @@ Em je km ***************************
+Number of cars @@ Ergebnisse je Veh-Type
+Travelling season: Beginning of Mai till End of October @@ Anzahl Fahrzeuge
+Em @@ Reisezeit
+Writing @@ Em
+Total @@ Schreiben
+Number of cars @@ Summe
+Travelling season: Beginning of Mai till End of October @@ Anzahl Fahrzeuge
+Em @@ Reisezeit
+Writing @@ Em
+Em absolutely ************************* @@ Schreiben
+Results per Veh-Type @@ Em absolut *************************
+Em @@ Ergebnisse je Veh-Type
+Writing @@ Em
+Total @@ Schreiben
+Em @@ Summe
+Writing @@ Em
+Close file @@ Schreiben
+Datei schließen
+
+Fav-Dlog: Instead empty Items in Fav list "<undefined>" @@ Fav-Dlog: "Abbrechen" => "Cancel"
+Applications @@ Fav-Dlog: Statt leeren Items in Fav-Liste "<undefined>"
+Global variables needed (default): @@ Anwendung
+New instance - define ID, switch to FolderBrowserDialog @@ Benötigte Globale Variablen (Default):
+Open Dialog - Open Dialog - True Passes when ended with OK @@ Neue Instanz - ID definieren, umschalten auf FolderBrowser
+Save dialog - Save dialog - Passes True if dialog with OK ended @@ OpenDialog - Öffnen Dialog - Übergibt True wenn Dialog mit OK beendet wurde
+Open dialogue - True Passes if dialogue ended with OK @@ SaveDialog - Speichern Dialog - Ãœbergibt True wenn Dialog mit OK beendet wurde
+File History manually update @@ Dialog öffnen - Übergibt True wenn Dialog mit OK beendet wurde
+File / Folder History spokes and release memory @@ File-History manuell updaten
+Extensions define @@ File / Folder History speichen und Speicher freigeben
+Query files @@ Dateiendungen definieren
+Dateien abfragen
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Add any initialization after the InitializeComponent (add) call. @@ Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+If empty path: current folder (MyFolder) take @@ Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+Stop if empty path @@ Wenn leerer Pfad: Aktuellen Ordner (MyFolder) nehmen
+Files in array assume @@ Abbruch wenn leerer Pfad
+Multiple files selected @@ Dateien in Array übernehmen
+Single File @@ Mehrere Dateien ausgewählt 
+Primary extension (eg for bForceExt) @@ Einzelne Datei
+If file without path then add path @@ Primäre Extension (u.a. für bForceExt)
+If instead of file folder is entered: Switch to Folder and demolition @@ Falls Datei ohne Pfad angegeben dann Pfad hinzufügen
+Check whether specified file with Ext @@ Falls statt Datei ein Ordner eingegeben wurde: Auf Ordner wechseln und Abbruch
+If no file extension (after bForceExt query) and not exists then add primary ending @@ Check ob Datei mit Ext angegeben
+Check that file exists @@ Falls Datei ohne Endung (nach bForceExt-Abfrage) und nicht existiert dann primäre Endung hinzufügen
+Yes: Check whether Overwrite if bOverwriteCheck @@ Check ob Datei existiert
+No: abort if bFileMustExist @@ Ja: Check ob Overwrite wenn bOverwriteCheck
+MyFiles define @@ Nein: Abbruch wenn bFileMustExist
+Folder History ContextMenu invite @@ MyFiles definieren
+Defining a Path @@ FolderHistory ContextMenu laden
+If no path is specified: Last folder, no file name @@ Pfad definieren
+If too small path length (Path is invalid): Recent File @@ Falls kein Pfad angegeben wird: Letzter Ordner, kein Dateiname
+Open Folder - If a folder in the path: Last folder @@ Falls Pfadlänge zu klein (Pfad ungültig): Letzte Datei
+If file without path @@ Ordner öffnen - Falls kein Ordner im Pfad: Letzter Ordner
+Other Drinks @@ Falls Datei ohne Pfad angegeben
+See form ------------------------------------------------ ---- @@ sonst: 
+Global History Folder Update @@ Form anzeigen----------------------------------------------------
+Close and File / Folder History save @@ Globale Folder History updaten
+Switching to FolderBrowserDialog @@ Schließen und File/Folder History speichern
+Initialize @@ Umschalten auf FolderBrowser
+Global Initialization File Browser @@ Initialisieren
+Drive ComboBox load @@ Globale FileBrowser Initialisierung
+Drive List Create @@ Laufwerk-ComboBox laden
+Folder History Reading @@ Laufwerk-Liste erstellen
+Sort Context Menu @@ FolderHistory einlesen
+Sort Context Menu @@ Context Menu sortieren
+Files @@ Context Menu sortieren
+File @@ Dateien
+Change folder @@ Ordner
+Abort if no drive specification @@ Ordner wechseln
+Delete search fields @@ Abbruch wenn keine Laufwerk-Angabe
+Drive set @@ Suchfelder löschen
+Folder set @@ Laufwerk setzen
+Folder one level up @@ Ordner setzen
+Folder List invite @@ Ordner Eine Ebene hinauf
+Folder Delete List @@ FolderListe laden
+Add Folder @@ FolderListe löschen
+File upload list @@ Ordner hinzufügen
+Abortion if bBrowseFolder @@ Dateiliste laden
+Extension filters define @@ Abbruch wenn bBrowseFolder
+File Delete List @@ Extension-Filter definieren
+Add Folder @@ FileListe löschen
+Ordner hinzufügen
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Picture Links: @@ Initialisieren
+Bild Links------------------------------------------------------------------
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Close @@ Initialisieren
+InputFile controls ------------------------------------------ @@ Schließen
+Browse button-click events @@ Inputfile- Steuerelemente------------------------------------------
+ADV store @@ Browse Button-Click Events
+New empty ADV @@ ADV speichern
+ADV load in the form @@ Neue leere ADV
+Line 1: FZP file @@ ADV in Form laden
+Line 2: FLT file @@ Zeile 1: FZP-Datei
+Line 3: TEM file @@ Zeile 2: FLT-Datei
+Line 4: RndSeed @@ Zeile 3: TEM-Datei
+Line 5: MISKAMout True / False @@ Zeile 4: RndSeed
+Line 6: strFilter True / False @@ Zeile 5: MISKAMout True/False
+Line 7: Distance filters for SUM.STR @@ Zeile 6: STRfilter True/False
+Line 8 +: STR files @@ Zeile 7: Distance filter für SUM.STR
+ADV save from form @@ Zeile 8+: STR Dateien
+ADV.STRpathsClear () '<= Not necessary because new local cADV object @@ ADV aus Form speichern
+Form changes (control whether GEN saved) --------------------------------- @@ ADV.STRpathsClear()    '<= Nicht notwendig da neues lokales cADV-Objekt
+Event handler for the form changes @@ Formular Änderungen (Kontrolle ob GEN gespeichert)---------------------------------
+Change Status Change @@ Event Handler für Formänderungen
+Save changes? "... Delivers True if user aborts @@ Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+ENG save @@ Speichern oder Speichern als Function = true wenn Datei gespeichert
+Change Status Change @@ ENG speichern
+Save changes? "... Delivers True if user aborts @@ Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Change Status Change @@ Speichern oder Speichern als Function = true wenn Datei gespeichert
+Save changes? "... Delivers True if user aborts @@ Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Initialize form (charging process, combo lists, ...) @@ Coolant System Simulation Zwischenspeicher
+Thus combobox content is currently @@ Initialisiere Form (Lade Verlauf, Combobox-Listen,...)
+Close @@ Damit Combobox-Inhalte aktuell sind
+Change the checkbox DynKor @@ Schließen
+Change the cold start box @@ Änderung der DynKor Checkbox
+Änderund the SCR box @@ Änderung der Kaltstart Checkbox
+a_DesMax @@ Änderund der SCR Checkbox
+Thus Veh-file is passed @@ a_DesMax
+Thus Veh-file is passed @@ Damit Veh-Datei übergeben wird
+Thus Veh-file is passed @@ Damit Veh-Datei übergeben wird
+Save ("Save" or "Save As" if new file) @@ Damit Veh-Datei übergeben wird
+GEN load in the form @@ Speichern ("Save" bzw. "Save As" falls neue Datei)
+GEN read @@ GEN in Form laden
+Form update @@ GEN einlesen
+Map creation ----------------- @@ Form updaten
+Cold start -------------------------- @@ Kennfeld Erstellung-----------------
+Files ----------------------------- @@ Kalt Start--------------------------
+Cold start @@ Dateien-----------------------------
+GEN save from form @@ Kalt Start
+Map creation ------------------------------------------------ ------ @@ GEN aus Form speichern
+Cold start ------------------------------------------------ --------------- @@ Kennfeld Erstellung------------------------------------------------------
+Files ------------------------------------------------- ----------------- @@ Kalt Start---------------------------------------------------------------
+Cold start @@ Dateien------------------------------------------------------------------
+GEN New Blank @@ Kalt Start
+Map creation ----------------- @@ Neue leere GEN
+Cold start -------------------------- @@ Kennfeld Erstellung-----------------
+Files ----------------------------- @@ Kalt Start--------------------------
+Cold start @@ Dateien-----------------------------
+Event handler for the form changes @@ Kalt Start
+Start / Stop - checkbox change @@ Event Handler für Formänderungen
+Start / Stop - Textbox change @@ Start/Stop - Checkbox Änderung
+TextBox.TextChanged Events => Change () @@ Start/Stop - Textbox Änderung
+Change Status Change @@ TextBox.TextChanged Events => Change()
+Save changes? "... Delivers True if user aborts @@ Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+If calling during PHEM is already running @@ PHEM-Launcher
+GENlist Delete Selection @@ Falls Aufruf während PHEM schon läuft
+Mode set @@ GENlist-Selection löschen
+Ask if more than 100 combinations in every second batch if output @@ Modus festlegen
+Status @@ Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe
+Job list define @@ Status
+File / Zylus list define @@ Job-Liste definieren
+Cycle-list define (if not BATCH mode in SetCycleList deleted only the list and not reassigned) @@ File- / Zylus- Liste definieren
+Check whether Coverall Progbar needed @@ Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt)
+Launch on Job_Launcher @@ Check ob Overall-Progbar benötigt
+File lists define @@ Launch über Job_Launcher
+Job Launcher @@ Datei-Listen definieren
+Options of Options Tab Load @@ Job-Launcher
+Config save @@ Options aus Options-Tab laden
+Msg output reset @@ Config speichern
+Button switch @@ Msg-Ausgabe zurück setzen
+Options disablen @@ Button umschalten
+ProgBars start @@ Options disablen
+BG-Worker start @@ ProgBars Start
+Begin work @@ BG-Worker starten
+SLEEP prevent @@ Beginne Arbeit
+At x.ProgSec = -1 no update of ProgBarSec @@ SLEEP verhindern
+Work completed @@ Bei x.ProgSec = -1 kein Update von ProgBarSec
+Progbar reset @@ Arbeit fertig
+So ListView Item colors (yellow = warning, etc..) Visible right @@ Progbar Reset
+If optimizers are active here, the objective function and output signal to interface @@ Damit ListView-Item Farben (Warnung = Gelb, etc..) richtig sichtbar
+ShutDown when Unexpected Error @@ Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface
+Options enablen / GUI reset @@ ShutDown wenn Unexpected Error
+Command Line Shutdown @@ Options enablen / GUI Reset
+AutoShutdown @@ CommandLine Shutdown
+SLEEP reactivate @@ Auto Shutdown
+Initialize @@ SLEEP reaktivieren
+Tabs load properly (otherwise problem with ListViews) @@ Initialisieren
+File Lists @@ Tabs richtig laden (sonst Problem mit Listviews)
+Load GUI Options (here, the GEN / ADV / DRI lists are loaded) @@ FileLists
+Resize columns ... after loading the file lists @@ GUI Options laden (hier werden die GEN/ADV/DRI Listen geladen)
+BackgroundWorker initialize @@ Spalten skalieren... erst nach dem Laden der Dateilisten
+License check @@ BackgroundWorker initialisieren
+Shown event (-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- editor ..) @@ Lizenz überprüfen
+Open file with PHEM @@ Shown Event (Form-Load abgeschlossen)  ...hier werden StartUp-Forms geladen (DEV, GEN/ADV- Editor..)
+ComLineArgs read @@ Datei mit PHEM öffnen
+Mode switch @@ ComLineArgs auslesen
+If file is specified @@ Modus umschalten
+Close @@ Falls Datei angegeben
+File Lists store @@ Schließen
+Login close @@ FileLists speichern
+Config save @@ Log schließen
+File browser instances close @@ Config speichern
+Locked functions hide / @@ FileBrowser-Instanzen schließen
+Remove file from list @@ Gesperrte Funktionen ein/ausblenden
+File to list @@ Datei aus Liste entfernen
+Open file @@ Datei zu Liste hinzufügen
+GEN / ADV list: Add File @@ Datei öffnen
+If PHEM runs Cancel operation (because mode change during calculation gscheit nix) @@ GEN/ADV Liste: Datei hinzufügen
+Mode switch if necessary @@ Falls PHEM läuft: Vorgang abbrechen (weil Modusänderung während Berechnung nix gscheit)
+If file already exists in the list: Do not add (if only a single file) @@ Modus umschalten falls nötig
+Status reset @@ Wenn Datei schon in Liste vorhanden: Nicht hinzufügen (nur wenn einzelne Datei)
+Hook element and select @@ Status reset
+Otherwise: Add File (without WorkDir) @@ Element auswählen und anhaken
+Number update @@ Sonst: Datei hinzufügen (ohne WorkDir)
+DRI list: Add File @@ Anzahl updaten
+Mode switch if necessary @@ DRI Liste: Datei hinzufügen
+Number update @@ Modus umschalten falls nötig
+Me.TabPageDRI.Text = "Driving Cycles (" & c & ")" @@ Anzahl updaten
+New GEN / ADV @@ Me.TabPageDRI.Text = "Driving Cycles (" & c & ")"
+Open GEN / ADV @@ New GEN/ADV
+Worker start @@ Open GEN/ADV
+Selected Items cache @@ Worker starten
+Delete Selected Items @@ Selected Items zwischenspeichern
+Items and select Insert @@ Selected Items löschen
+Mode or toggle (on BATCH) @@ Items einfügen und auswählen
+If PHEM already running: STOP @@ Modus ggf. umschalten (auf BATCH)
+Otherwise: START @@ Falls PHEM schon rennt: STOP
+Save lists if crash @@ Sonst: START
+Mode Change @@ Listen speichern falls Crash
+Old Save list @@ Modus Change
+New List invite @@ Alte Liste speichern
+GEN editor and file upload @@ Neue Liste laden
+ADV editor and file upload @@ GEN Editor öffnen und Datei laden
+File Lists store @@ ADV Editor öffnen und Datei laden
+ComMsgTimer_Tick Tick - Check whether new message @@ FileLists speichern
+Mode Setting @@ ComMsgTimer_Tick Tick - Check ob neue Nachricht
+General @@ Modus einstellen
+If Link => Open @@ Allgemein
+Hand cursor for links @@ Falls Link => Öffnen
+Hand-Cursor für Links
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Add any initialization after the InitializeComponent (add) call. @@ Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+Split @@ Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+Convert to Int32 @@ Split
+Sort @@ Zu Int32 convertieren
+End @@ Sort
+Ende
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Config load @@ Initialisiere - Lade Config
+Options----------------------------------- @@ Config laden
+Optionen-----------------------------------
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Initialisierung
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+New VEH @@ Speichern oder Speichern als Function = true wenn Datei gespeichert
+VEH open @@ Neue VEH
+VEH store @@ VEH öffnen
+Change Status check @@ VEH speichern
+Save changes? "... Delivers True if user aborts @@ Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Required by the Windows Form Designer. @@ Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Note: The following procedure is required by the Windows Form Designer. @@ Wird vom Windows Form-Designer benötigt.
+The editing is possible using the Windows Form Designer. @@ Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Editing with the code editor is not possible. @@ Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Cycle status => Cycle list status column @@ Job-Status => Jobliste Status-Spalte
+Worker Progress => Progbar (ProgBarSec update when ProgSec> -1; ProgBarSec reset at ProgSec = 0) @@ Zyklus-Status => Zyklusliste Status-Spalte
+Progbar set to Continuous @@ Worker Progress => Progbar (ProgBarSec Update wenn ProgSec > -1; ProgBarSec-Reset bei ProgSec = 0)
+Abort @@ Progbar auf Continuous setzen
+Status message directly to GUI - can not be done by the BackgroundWorker! @@ Abbruch
+Statusbar - call by WorkerMSG or directly via the form, NEVER on Worker @@ Status Message direkt an GUI - darf nicht durch den Backgroundworker geschehen!
+Status form reset - ONLY by calling Events, NEVER on Worker @@ Statusbar  - Aufruf durch WorkerMSG oder direkt über Form, NIEMALS über Worker
+Class used to pass messages from BackgroundWorker @@ Status Form zurück setzen - Aufruf NUR durch Events, NIEMALS über Worker
+If no string number zero then @@ Klasse zum Ãœbergeben von Nachrichten vom Backgroundworker
+Open File in Excel @@ Falls String nicht Zahl dann Null
+WorkDir MainDir or insert if no path is specified. Special folder insert @@ Datei in Excel öffnen
+Path trim @@ WorkDir oder MainDir einfügen falls kein Pfad angegeben. Spezial-Ordner einfügen
+If empty file => Demolition @@ Pfad trimmen
+sKeys replace @@ Falls leere Datei => Abbruch
+Replace - determine folder @@ sKeys ersetzen
+A folder-level high @@ Replace - Ordner bestimmen
+Path supplement, if not available @@ Eine Ordner-Ebene hoch
+Level, a path to the top "C: \ temp \ folder1 \" >> "C: \ temp \" @@ Pfad ergänzen falls nicht vorhanden
+File name without the path "C: \ temp \ test.txt" >> "test.txt" or "TEST" @@ Pfad eine Ebene nach oben      "C:\temp\ordner1\"  >>  "C:\temp\"
+File name without the extension "C: \ temp \ test.txt" >> "C: \ temp \ test" @@ Dateiname ohne Pfad    "C:\temp\TEST.txt"  >>  "TEST.txt" oder "TEST"
+Filename without path if path = WorkDir or MainDir @@ Dateiname ohne Extension   "C:\temp\TEST.txt" >> "C:\temp\TEST"
+Path alone "C: \ temp \ test.txt" >> "C: \ temp \" @@ Dateiname ohne Pfad falls Pfad = WorkDir oder MainDir
+Test.txt ">>" " @@ Pfad allein        "C:\temp\TEST.txt"  >>  "C:\temp\"
+Extension alone "C: \ temp \ test.txt" >> ". Txt" @@ TEST.txt"          >>  ""
+Endung allein      "C:\temp\TEST.txt" >> ".txt"
+
+Open file @@ Abbruch wenn's Datei nicht gibt
+Map reset @@ Datei öffnen
+Transmission configuration to engine rpm [-] @@ Kennfeld zurück setzen
+Efficiency to engine [-] @@ Transmission ration to engine rpm [-]
+Efficiency auxiliary supply to [-] @@ Efficiency to engine [-]
+Efficiency Map @@ Efficiency auxiliary to supply [-]
+Column 1 = Auxiliary speed [rpm] => X-axis @@ Efficiency Map
+Column 2 = Mechanical power [kW] => Z-Axis (!) @@ Spalte 1 = Auxiliary speed [rpm]   => X-Achse
+Column 3 = Output power [kW] => Y-Axis (!) @@ Spalte 2 = Mechanical power [kW]   => Z-Achse (!)
+Spalte 3 = Output power [kW]       => Y-Achse (!)
+
+Private FileVersion As Integer @@ Private Const FormatVersion As Integer = 1
+Requirement for EXS @@ Private FileVersion As Integer
+Parameters for KF creation @@ Vorgabe für EXS
+Default for AUX @@ Parameter für KF-Erstellung
+Values.Add (tDriComp.t, New List (Of Single)) '<= Needed only if ADVANCE > 1 Hz is supported @@ Vorgabe für AUX
+Reset @@ Values.Add(tDriComp.t, New List(Of Single))            '<= brauchen wir erst wenn bei ADVANCE > 1Hz unterstützt wird
+Stop if there's no file @@ Reset
+EmComp Init @@ Abbruch wenn's Datei nicht gibt
+now in New() @@ EmComp Init
+Open file @@ jetzt in New()
+First line: Version @@ Datei öffnen
+If invalid version: Abort @@ Erste Zeile: Version
+Version set @@ Falls Version ungültig: Abbruch
+If no version information: Old format @@ Version festgelegt
+Version Check: abort if input file format is newer than PHEM-version @@ Falls keine Versionsangabe: Altes Format
+Column 2: added option "+" = parameter for KF-creation @@ Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Second row: Name / Identification of the Components @@ Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+Number of Columns / check components @@ Zweite Zeile: Namen/Identifizierung der Komponenten
+If used DRIcomp = Undefined it will get as EXS-Comp or Emission for KF-Creation / Eng-Analysis @@ Spaltenanzahl/Komponenten checken
+ERROR when component in angle brackets is unknown @@ Falls DRIcomp = Undefined dann wirds als EXS-Comp oder als Emission für KF-Erstellung / Eng-Analysis verwendet
+Create if the first column EXS in the Dictionary @@ ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+If EXS-Component not yet in Dictionary, create @@ Falls erste EXS-Spalte dann Dictionary erstellen
+Check whether ExsComp / module combination already exists => ERROR @@ Falls EXS-Componenten noch nicht in Dictionary dann erstellen
+Gvorg / Nvorg set: @@ Check ob ExsComp/Modul-Kombination schon vorhanden => ERROR
+Third row: units / normalization @@ Gvorg / Nvorg setzen:
+VECTO: nothing read. Fixed Units (line = file.ReadLine) @@ Dritte Zeile: Einheiten/Normierung
+Normalization Supported DRI-components @@ VECTO: nix einlesen. Fixe Units (line = file.ReadLine)
+PeNormed = (UCase(Trim(line(Spalten(tDriComp.Pe)))) = sKey.Normed) @@ Normierungs-Unterstützte DRI-Komponenten
+nNormed = (UCase(Trim(line(Spalten(tDriComp.nn)))) = sKey.Normed) @@ PeNormed = (UCase(Trim(line(Spalten(tDriComp.Pe)))) = sKey.Normed)
+PaddNormed = (UCase(Trim(line(Spalten(tDriComp.Padd)))) = sKey.Normed) @@ nNormed = (UCase(Trim(line(Spalten(tDriComp.nn)))) = sKey.Normed)
+MAP components VECTO: Always [g/h]! @@ PaddNormed = (UCase(Trim(line(Spalten(tDriComp.Padd)))) = sKey.Normed)
+Unit store in string for further checks @@ MAP-Komponenten VECTO: Immer [g/h]!  
+Remove brackets @@ Unit in String für weitere Checks speichern
+Scaling and Unit Set @@ Klammern entfernen
+Line 4, 5: (optional when "+"): Settings for CF creation @@ Normierung und Unit festlegen
+If "+" enabled @@ Zeile 4, 5: (optional, wenn oben "+"): Einstellungen für KF-Erstellung
+Creating instances @@ Falls "+" aktiviert
+First Option "map normalized by Pnom" @@ Instanzen erstellen
+Second Option "PfAK apply" @@ 1. Option "Kennfeld normieren durch Pnenn"
+From 4th line or From 6th line: values (no different units/normalizations support) @@ 2. Option "Pfak anwenden"
+Open file @@ Ab 4.Zeile bzw. Ab 6.Zeile: Werte (derzeit keine unterschiedlichen Einheiten/Normierungen unterstützt)
+toDo @@ Datei öffnen
+Nvorg / Gvorg is set back in ResetMe @@ TODO...
+Convert Speed to m/s @@ Nvorg / Gvorg wird in ResetMe zurück gesetzt
+Normalize, if necessary @@ Geschw. umrechnen in m/s
+Padd unnormalised, if necessary @@ Normieren, falls notwendig
+Pe normalize, if necessary @@ Padd entnormieren, falls notwendig
+Emissions are only accepted in x/h or x (see ReadFile)!!!!!!!! @@ Pe normieren, falls notwendig
+Delay limit ******************************** @@ Emissionen werden nur in x/h oder x akzeptiert (siehe ReadFile) !!!!!!!!
+Create time series '*********************************** @@ Verzögerung limitieren ********************************
+Convert to 1Hz '*********************************** @@ Zeitreihe erstellen '***********************************
+Check whether or not to reverse @@ Umrechnen in 1Hz '***********************************
+Time limits definition @@ Check ob Zeit nicht rückwärts 
+Output, total and ncols Dictionaries create @@ Zeitgrenzen definieren
+Home values @@ Ausgabe-, Summen- und Anz- Dictionaries erstellen
+Next time-step @@ Startwerte
+If time-step> tMax: @@ Nächster Zeitschritt
+Second conclude @@ Falls Zeitschritt > tMax:
+If no values ​​in sum: Interpolate @@ Sekunde abschließen
+If only one value: Inter- / Extrapolate @@ Falls keine Werte in Summe: Interpolieren
+New field set @@ Falls nur ein Wert: Inter- / Extrapolieren
+Check whether last second @@ Neuen Bereich festlegen
+New sum / no start @@ Check ob letzte Sekunde
+New fields take @@ Neue Summe/Anz beginnen
+Neue Felder übernehmen
+
+Open file @@ Abbruch wenn's Datei nicht gibt
+Map Config @@ Datei öffnen
+FLD and MAP Reading @@ Kennfeld-Konfig
+Map normalize @@ FLD und MAP einlesen
+Returns the maximum available Engine-power for given Rotations Rotations @@ Kennfeld normieren
+Extrapolation for x <x (1) @@ Übergibt aktuell mögliche Antriebsleistung für geg. Drehzahl
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Returns the maximum available  Generator-power for given Rotations Rotations @@ Interpolation
+Extrapolation for x <x (1) @@ Übergibt aktuell mögliche Generatorleistung für geg. Drehzahl
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Interpolation
+
+Open file @@ Abbruch wenn's Datei nicht gibt
+Lists initialize @@ Datei öffnen
+First line: Version @@ Listen initialisieren
+If invalid version: demolition @@ Erste Zeile: Version
+Version set @@ Falls Version ungültig: Abbruch
+If no version information: Old format @@ Version festgelegt
+Version Check: abort if input file format is newer than version PHEM @@ Falls keine Versionsangabe: Altes Format
+Second row: name / identification of components (drag emissions f KF-creation) @@ Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Column count check @@ Zweite Zeile: Namen/Identifizierung der Komponenten (Schlepp-Emissionen f. KF-Erstellung)
+Abort if less than 3 columns @@ Spaltenanzahl checken
+VECTO: No header / Unit column. Always PT1! @@ Abbruch falls weniger als 3 Spalten
+Third row: scaling / unit @@ VECTO: Keine Header/Unit-Spalte. Immer PT1!
+Abort when fewer columns than in the second row @@ Dritte Zeile: Normierung/Einheit
+Everything is okay. " @@ Abbruch falls weniger Spalten als in zweiter Zeile
+Additional Components @@ Alles okay
+Remove brackets @@ Zusatzkomponenten
+Scaling and Unit Set @@ Klammern entfernen
+From Line 4: Values @@ Normierung und Unit festlegen
+Line read @@ Ab Zeile 4: Werte
+VECTO: M => Pe @@ Zeile einlesen
+If not PT1 given default value is used (see above) @@ VECTO: M => Pe
+Line counter (was put in ResetMe back) high @@ Falls PT1 nicht vorgegeben wird Defaultwert verwendet (siehe oben)
+Close file @@ Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+ERROR label for clean demolition @@ Datei schließen
+Open file @@ ERROR-Label für sauberen Abbruch
+Line counter (was put in ResetMe back) high @@ Datei öffnen
+Close file @@ Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+Normalized Rotations @@ Datei schließen
+Normalized Power @@ Drehzahl normieren
+Normalized Power @@ Leistung normieren
+Normalized Pe-Target @@ Leistung normieren
+Em normalize corresponding @@ Pe-Target normieren
+Extrapolation for x <x(1) @@ Em ent-normieren
+Extrapolation for x> x(imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Extrapolation for x <x (1) @@ Interpolation
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Dynamic full load @@ Interpolation
+Extrapolation for x <x (1) @@ Dynamische Volllast
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Extrapolation for x <x (1) @@ Interpolation
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Extrapolation for x <x (1) @@ Interpolation
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Interpolation
+
+First line: Version @@ Modus
+Version Check: abort if input file format is newer than version PHEM @@ Erste Zeile: Version
+GEN file read **** @@ Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+General @@ GEN Datei einlesen ****
+KF creation @@ Allgemein
+Cold start @@ KF Erstellung
+In addition to individual consumers @@ Kaltstart
+Gear-shifting Model Distribution @@ Einzelne Nebenverbraucher
+ERROR label for clean demolition @@ Schaltmodell-Verteilung
+GEN file read **** @@ ERROR-Label für sauberen Abbruch
+Old calculation mode turn into new mode switch @@ GEN Datei einlesen ****
+Map creation ------------------------------------------------ ------ @@ Alten Rechenmodus in neue Modus-Schalter umwandeln
+Sub reads one input file that do not have their own class, etc. @@ Kennfeld Erstellung------------------------------------------------------
+Extrapolation for x <x (1) @@ Liest Sub Input Files ein die keine eigene Klasse haben, etc.
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Extrapolation for x <x (1) @@ Interpolation
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Interpolation
+
+Open file @@ Abbruch wenn's Datei nicht gibt
+Lists initialize (before version check so ReadOldFormat works) @@ Datei öffnen
+Check whether MIP or MAP @@ Listen initialisieren (vor Version-Check damit ReadOldFormat funktioniert)
+is now below checked when reading. @@ Check ob MEP oder MAP
+First line: Version @@ wird jetzt weiter unten gecheckt beim Einlesen.
+Version set @@ Erste Zeile: Version
+Version Check: abort if input file format is newer than version PHEM @@ Version festgelegt
+Column 2: added option "+" = parameter for CF creation @@ Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Second row: name / identification of components (Only Em. Power, Rotations is fast!) @@ Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+Column count check @@ Zweite Zeile: Namen/Identifizierung der Komponenten (Nur Em. Leistung, Drehzahl ist fix!)
+Abort if less than 3 columns @@ Spaltenanzahl checken
+Check whether Power/Rotations swapped @@ Abbruch falls weniger als 3 Spalten
+Em components initialize @@ Check ob Leistung/Drehzahl vertauscht
+Default interpolator defined in Em0 = New cEmComp @@ Em-Komponenten initialisieren
+Default Correction Pe defined in Em0 = New cEmComp @@ Default-Interpolator definiert in Em0 = New cEmComp
+Dictionary .... fill @@ Default Pe-Correction definiert in Em0 = New cEmComp
+ERROR component in angle brackets if not known @@ Dictionary füllen....
+Em Custom Components Dictionary: @@ ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+Default Em components *** @@ Custom Em-Komponenten Dictionary:
+Default interpolator @@ Default Em-Komponenten ***
+Default Pe-Correction @@ Default-Interpolator
+Default name @@ Default Pe-Correction
+TC components are not output @@ Default-Name
+Em Custom Components Dictionary: @@ TC-Komponenten werden nicht ausgegeben
+Entry in Reference Dictionary @@ Custom Em-Komponenten Dictionary:
+VECTO: Column 3 more consumption @@ Eintrag in Referenz-Dictionary
+Abort if already defined @@ VECTO: Spalte 3 immer Verbrauch
+Third row: scaling / unit @@ Abbruch falls schon definiert
+Abort when fewer columns than in the second row @@ Dritte Zeile: Normierung/Einheit
+Normalization / import unit @@ Abbruch falls weniger Spalten als in zweiter Zeile
+EM-component reference @@ Normierung/Einheit einlesen
+Unit store in string for further checks @@ EM-Komp Referenz
+Remove brackets @@ Unit in String für weitere Checks speichern
+Scaling and Unit Set @@ Klammern entfernen
+Check whether n / Pe units OK: @@ Normierung und Unit festlegen
+Everything is okay. " @@ Check ob n/Pe Einheiten OK:
+Line 4.5: (optional when "+"): Settings for Pe-Cor (old PfAK) @@ Alles okay
+If not the "+" default interpolators used (see above) @@ Zeile 4,5: (optional, wenn oben "+"): Einstellungen für Pe-Cor (altes Pfak)
+Line 4 Reading @@ Falls nicht "+" werden Default Interpolatoren verwendet (s.o.)
+Loop over Em components @@ Zeile 4 einlesen
+Line 5 Reading @@ Schleife über Em-Komponenten
+Loop over Em components @@ Zeile 5 einlesen
+From line 4 (or 6): values @@ Schleife über Em-Komponenten
+Line read @@ Ab Zeile 4 (bzw. 6): Werte
+Line counter (was put in ResetMe back) high @@ Zeile einlesen
+Rotations @@ Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+Power @@ Drehzahl
+Emissions @@ Leistung
+Shep-Init @@ Emissionen
+Close file @@ Shep-Init
+ERROR label for clean demolition @@ Datei schließen
+Open file @@ ERROR-Label für sauberen Abbruch
+Old maps have always TC factors are holding (possibly null @@ Datei öffnen
+Values @@ Alte Kennfelder haben immer TC-Faktoren (sind halt evtl. Null)
+Line read @@ Werte
+Line counter (was put in ResetMe back) high @@ Zeile einlesen
+Rotations @@ Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+Power @@ Drehzahl
+Emissions @@ Leistung
+Shep-Init @@ Emissionen
+Close file @@ Shep-Init
+Abort when Em component not MAP @@ Datei schließen
+Abort if defined TC-factors for the component already @@ Abbruch falls Em-Komponente nicht in MAP
+Speed Normalized @@ Abbruch falls TC-Faktoren für die Komponente schon definiert
+otherwise calculate normalized Rotations @@ Drehzahl normieren
+Normalized Power @@ anders" normierte Drehzahl berechnen
+Emissions unnormalised @@ Leistung normieren
+PLEASE NOTE: Even if x_kWh x_hPnenn or be converted into Normed x_h must remain the same because otherwise the DynKor not true! @@ Emissionen entnormieren
+Values ​​are already specified in absolute @@ ACHTUNG: Selbst wenn x_kWh bzw. x_hPnenn in x_h umgewandelt werden muss Normed gleich bleiben weil sonst die DynKor nicht stimmt!
+Distinction between [x] and [x/h] is currently not used / supported @@ Werte sind bereits absolut angegeben
+Check if Rotations/Power reversed @@ Unterscheidung in [x] und [x/h] derzeit nicht verwendet/unterstützt
+FC Delauney @@ Check ob Drehzahl/Leistung vertauscht
+Map creation @@ FC Delauney
+Initialize Em components ******************* @@ Kennfeld-Erstellung
+PeCorMode: Unless specified in MES / NPI with non-default Em what is in cEmComp.New (set) @@ Initialisiere Em-Komponenten *******************
+If TC then specified termination @@ PeCorMode: Falls nicht in MES/NPI vorgegeben gilt bei Nicht-Default-Em was in cEmComp.New() eingestellt ist
+Select interpolator @@ Falls TC angegeben dann Abbruch
+Entry in Reference Dictionary (It does not check whether Em-Comp. Occurs twice since been caught in DRI.ReadFile) @@ Interpolator auswählen
+Info spend @@ Eintrag in Referenz-Dictionary (Es wird nicht überprüft ob Em-Comp. doppelt vorkommt weil das schon in DRI.ReadFile passiert)
+Dynamic parameters and are still added Extrapol @@ Infos ausgeben
+Average Dictionary *************** Initialize @@ Dynamikparameter und Extrapol kommen noch dazu
+Mean values ​​calculated ********************** @@ Mittelwert-Dictionary initialisieren ***************
+Main loop @@ Mittelwerte berechnen **********************
+Lists @@ Haupt-Schleife
+Loop over values @@ Listen erstellen
+Area under iMsek assign reading @@ Schleife über Messwerte
+Divisional iMsek assign mean values ​​of measured values @@ Bereich unter iMsek mit Messwert belegen
+No averaging @@ Bereich über iMsek mit Mittelwerten der Messwerte belegen
+EmCheck: = False value is not used = True Value has been in verwurschtet map @@ Keine Mittelwertbildung
+Screening **************************** @@ EmCheck: False = Wert noch nicht verwendet, True = Wert wurde bereits in Kennfeld verwurschtet
+Add trailing at half nn increment. Needed for PfAK. If it is disabled GEN.KFinsertDrag deleted later. @@ Rasterung ****************************
+Idle point, add @@ Schlepp hinzufügen mit halber nn-Schrittweite. Wird für Pfak benötigt. Falls GEN.KFinsertDrag deaktiviert wird sie später wieder gelöscht.
+NrUsed creation / zero set ***************** @@ Leerlaufpunkt hinzufügen
+Expect Measured values in Grid ***************** @@ NrUsed Erstellung / Null setzen *****************
+Basic step size cache @@ Messwerte in Raster reinrechnen *****************
+Loop over grid points (i) @@ Basis Schrittweite zwischenspeichern
+Return Totals/Numbers/Flags @@ Schleife über Rasterpunkte (i)
+Towing-Power @@ Summen/Anzahl/Flags zurücksetzen
+Loop to find enough value in the Radius @@ Schlepp-Leistung
+Counter / sum reset @@ Schleife bis genug Werte im Radius gefunden
+Loop over values ​​(j) @@ Zähler/Summen zurück setzen
+If within radius ... @@ Schleife über Messwerte    (j)
+Cnt + 1 @@ Falls innerhalb von Radius...
+Loop over all em-comp. @@ Anz + 1
+total @@ Schleife über alle Em-Komp.
+Verify Min/Max (for log output) @@ Summe +
+Sum Interpolated Power (then divided by No.) @@ Min/Max belegen (für Log-Ausgabe)
+Used include measurements of how much Dot are (log output) @@ Interpolierte Leistung aufsummieren (wird dann durch Anz dividiert)
+If measured values ​​in the radius (No. = 0) larger radius and then put extra flag @@ Zählen wieviel Messwerte für Rasterpunkt verwendet werden (Log-Ausgabe)
+NrUsed prove @@ Falls keine Messwerte im Radius (Anz=0) dann Radius vergrößern und Extra-Flag setzen
+Interpolated Power = sum / number @@ NrUsed belegen
+PfAK calculate: @@ Interpolierte Leistung = Summe / Anz
+If above Drag-power then PfAK loud formula or 1 when the difference between Pe-Interpol and Drag-power is too low @@ Pfak berechnen:
+Drag-power below Pfak=0 => Em-value = zero @@ Falls oberhalb Pschlepp dann Pfak laut Formel oder 1 falls Abstand zw. Pe-Interpol und Pschlepp zu gering
+Extrapol flag take Extrapol in column (1/0) @@ Unterhalb von Pschlepp Pfak=0 => Em-Wert=Null
+For log output @@ Extrapol-Flag in Extrapol-Spalte (1/0) übernehmen
+Loop through Em-Comp (within grid point loop) @@ Für Log-Ausgabe
+If option 'Schlepp-em' ofFLD verified 'and Gridpoint-power <= Towing-power @@ Schleife über Em-Comp (innerhalb Rasterpunkt Schleife)
+If towing in Em.FLD exists then prove otherwise take with zero @@ Falls Option 'Schlepp-Em aus .FLD' belegen und Rasterpunkt-Leistung <= Schleppleistung
+Em-verification without PfAK (=> PfAK is made later) @@ Falls Schlepp-Em in .FLD vorhanden dann nehmen sonst mit Null belegen
+For log output @@ Em-Belegung ohne Pfak (=> Pfak wird später gemacht)
+TC factors without PfAK take @@ Für Log-Ausgabe
+PfAK ****************************** @@ TC-Faktoren ohne Pfak übernehmen
+Important @@ Pfak ******************************
+Loop goes over all grid point (also on the Pe <= PeSchlepp or PeIntpol near Drag power). @@ WICHTIG !!!
+That's OK because there anyway PfAK Denecke with one. @@ Schleife geht über alle Rasterpunkt (auch über die Pe <= PeSchlepp bzw. PeIntpol nahe an Pschlepp).
+Loop through Em-Comp @@ Das ist OK weil Pfak dort sowieso mit Eins beleget.
+If no Create Map settings (in.NPI /.MES) or explicitly activated using PfAK => PfAK @@ Schleife über Em-Comp
+Loop over grid points (i) @@ Falls keine Create Map Einstellungen (in .NPI/.MES) oder Pfak explizit aktiviert => Pfak verwenden
+Old PfAK with extrapolation from zero @@ Schleife über Rasterpunkte (i)
+Towing emission looking out @@ Altes Pfak mit Extrapolation von Null weg
+Drag-em from the nearest grid point to take. This is because tractrix @@ Schlepp-Emission raus suchen
+always comes into the map (even if it is then dropped out later)! @@ Schlepp-Em aus nächstgelegenen Rasterpunkt nehmen. Das geht weil Schleppkurve 
+Option 'drag-em out.FLD 'plays no role because it affects only the occupancy method of the drag curve (see above) @@ immer ins Map kommt (auch wenn sie dann später raus gelöscht wird) !!
+PfAK apply @@ Option 'Schlepp-Em aus .FLD' spielt keine Rolle weil das nur die Belegungs-Methode der Schleppkurve betrifft (s.o.) 
+Normalize (value and unit) ******************** @@ Pfak anwenden
+If specified in MES / NPI file then use @@ Normieren (Wert und Unit) ********************
+Values ​​normalized @@ Falls Vorgabe in MES/NPI-Datei dann verwenden
+Otherwise, use a standard normalization @@ Werte normieren
+Values ​​normalized @@ Sonst Standard-Normierung verwenden
+******************* Summarized EmComponents @@ Werte normieren
+Tractrix again take out (optional) *********** @@ EmComponents zusammenfassen *******************
+Loop over grid points (i). No For loop is reduced because iMapDim @@ Schleppkurve wieder raus nehmen (optional) ***********
+Output Map '************************** @@ Schleife über Rasterpunkte (i). Keine For-Schleife weil iMapDim reduziert wird
+CAUTION: Do not Name but sKey! @@ Ausgabe Map '**************************
+Values @@ ACHTUNG: Nicht Name sondern sKey !!!
+Issue Extended Info '*********************** @@ Werte
+Values @@ Ausgabe Zusatzinfo '***********************
+Shep-Init @@ Werte
+Default Shepard in intpshep () @@ Shep-Init
+Interpolator V1 @@ Default Shepard wie in intpshep()
+Interpolator V2 @@ Interpolator V1
+Correct distance and calculate. @@ Interpolator V2
+To zero power map points to be weighted higher Pe = 0 and Rotations is the lesser, @@ Abstand berechnen und korrigieren.
+because interpolation points with higher load there bad fits: @@ Um Nullleistung werden Kennfeldpunkte um Pe=0 hoeher gewichtet und Drehzahlabstand geringer,
+Square of the distance: @@ da Interpolation aus Punkten mit hoeherer last dort schlecht passt:
+If the sign of Pe different (load / tow separation) distance increases weight to tow with tow more: @@ Quadrat des Abstandes:             
+Points are within radius and possibly Radius increase @@ Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+Distance array and create Power interpolate for Pe-correction @@ Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+Calculation of Wisum @@ Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+Interpolated Power compute @@ Berechnung von wisum
+Correct distance and calculate. @@ Interpolierte Leistung berechnen
+Square of the distance: @@ Abstand berechnen und korrigieren.
+Points are within radius and possibly Radius increase @@ Quadrat des Abstandes:                 
+Distance array and create Power interpolate for Pe-correction @@ Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+Calculation of wisumV2 @@ Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+Interpolated Power compute @@ Berechnung von wisumV2
+Calculated emission of tractrix @@ Interpolierte Leistung berechnen
+A search is on tractrix @@ Berechnet Emission an Schleppkurve
+n0 has already been defined in Init @@ Es wird an Schleppkurve gesucht
+Correct distance and calculate. @@ n0 ist schon in Init definiert worden
+Square of the distance: @@ Abstand berechnen und korrigieren.
+If the sign of Pe different (load / tow separation) distance increases weight to tow with tow more: @@ Quadrat des Abstandes:
+Points are within radius and possibly Radius increase @@ Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+Distance array create @@ Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+Calculation of Wisum @@ Abstand-Array erstellen
+Calculate emission @@ Berechnung von wisum
+Emission berechnen
+
+Open file @@ Abbruch wenn's Datei nicht gibt
+First line: Version @@ Datei öffnen
+Remove V '=> number remains @@ Erste Zeile: Version
+If invalid version: demolition @@ V" entfernen => Zahl bleibt übrig
+Version set @@ Falls Version ungültig: Abbruch
+If no version information: Old format @@ Version festgelegt
+Version Check: abort if input file format is newer than version PHEM @@ Falls keine Versionsangabe: Altes Format
+Second row: Check which TC-factors involved in any column (from column 1!) @@ Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Abort if less than 2 Spalen: @@ Zweite Zeile: Check welche TC-Faktoren in welcher Spalte stehen (ab Spalte 1!!)
+Stop if unknown TC-factor @@ Abbruch falls weniger als 2 Spalen:
+Add to Dict @@ Abbruch wenn unbekannter TC-Faktor
+From Line 3: TC-factors for each Em-component @@ Zu Dict hinzufügen
+l is for error output @@ Ab Zeile 3: TC-Faktoren für die einzelnen Em-Komponeten 
+Open file @@ l ist nur für Fehlerausgabe
+Abort if less than 11 Spalen: @@ Datei öffnen
+Abbruch falls weniger als 11 Spalen:
+
+In addition to individual consumers @@ Update 07.08.2012 (CO2 Demo)
+Tractive force - Update 09/08/2012 (CO2 demo) @@ Einzelne Nebenverbraucher
+Cd mode / Input File - Update 08/14/2012 (CO2 demo) @@ Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo)
+Axle configuration - Update 16.10.2012 @@ Cd Modus / Input Datei - Update 14.08.2012 (CO2 Demo)
+End reading **************************** @@ Axle configuration - Update 16.10.2012
+Interruption of traction (Update 09.08.2012 - CO2 demo) @@ Ende Einlesen ****************************
+Cd mode / Input File (Update 14.08.2012 - CO2 demo) @@ Zugkraftunterbrechung (Update 09.08.2012 - CO2 Demo)
+Retarder (Update 02.10.2012 - CO2 demo) @@ Cd Modus / Input Datei (Update 14.08.2012 - CO2 Demo)
+Axle configuration - Update 16.10.2012 @@ Retarder (Update 02.10.2012 - CO2 Demo)
+Error message within AuxInit @@ Axle configuration - Update 16.10.2012
+Cd-Init @@ Fehlermeldung innerhalb AuxInit
+Transmission Loss Maps @@ Cd-Init
+Fr0 @@ Transmission Loss Maps
+Gear/Rated-Rotations @@ Fr0
+Gear/Rated-Power @@ Getriebe-Nenndrehzahl
+If nothing stated: motor power and Rated-Rotations for normalization @@ Getriebe-Nennleistung
+PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn @@ Wenn nix angegeben: Motor-Nennleistung und Nenndrehzahl zur Normierung
+PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm) @@ PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn
+VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn @@ PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm)
+Interpolating with original values @@ VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn
+If error: trying extrapolation @@ Interpolieren mit Original Werten
+Search for the nearest map point @@ Falls Fehler: Extrapolation versuchen
+Efficiency @@ Suche nach nächstgelegenen Kennfeldpunkt
+Drive => Drive @@ Wirkungsgrad
+Towing => Drive: ERROR! @@ Antrieb => Antrieb
+Drive => Towing: ERROR! @@ Schlepp => Antrieb: ERROR!
+Towing => Towing @@ Antrieb => Schlepp: ERROR!
+Calculate efficiency with anguish for original PeOut @@ Schlepp => Schlepp
+Interpolating with original values @@ Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+If error: trying extrapolation @@ Interpolieren mit Original Werten
+Search for the nearest map point @@ Falls Fehler: Extrapolation versuchen
+Efficiency @@ Suche nach nächstgelegenen Kennfeldpunkt
+Drive => Drive @@ Wirkungsgrad
+Towing => Drive: ERROR! @@ Antrieb => Antrieb
+Drive => Towing: ERROR! @@ Schlepp => Antrieb: ERROR!
+Towing => Towing @@ Antrieb => Schlepp: ERROR!
+Calculate efficiency with anguish for original PeOut @@ Schlepp => Schlepp
+Message in ReadFile () @@ Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+If Vair target in DRI but not CdType = CdOfBeta then warning @@ Meldung in Readfile()
+If constant Cd value then is to do nothing @@ Falls Vair-Vorgabe in DRI aber nicht CdType= CdOfBeta dann Warnung
+Input file read @@ Falls konstanter Cd-Wert dann is nix zu tun
+Extrapolation for x <x (1) @@ Inputdatei einlesen
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Input file read @@ Interpolation
+Extrapolation for x <x (1) @@ Inputdatei einlesen
+Extrapolation for x> x (imax) @@ Extrapolation für x < x(1)
+Interpolation @@ Extrapolation für x > x(imax)
+Interpolation
+
+Maximum allowable power for driving [kW] sign (battery discharged) positive (PHEM Standard) @@ Aktuelle Daten (d.h. zum aktuellen (zuletzt berechneten) Zeitschritt)
+Maximum allowable power for generating / Rekuperiren [kW] sign (battery charging) negative (PHEM Standard) @@ Maximal zulässige Leistung zum Antreiben (Batterie entladen) [kW]    Vorzeichen positiv (PHEM Standard)
+Battery model Renhart ~ --------------------------------- @@ Maximal zulässige Leistung zum Generieren/Rekuperiren (Batterie laden) [kW]    Vorzeichen negativ (PHEM Standard)
+Method to initialize - is called once @@ Batteriemodell Renhart~ ---------------------------------
+Stop if there's no file @@ Methode zur Initialisierung - wird einmal aufgerufen
+Parsing arguments: @@ Abbruch wenn's Datei nicht gibt
+Calculation of the battery voltage at TempBat and SOC (0), discharge curve @@ Einlesen der Parameter:
+Calculation of battery voltage TempBat and SOC (0), charging curve @@ Berechnung der Batteriespannung bei TempBat und SOC(0), Entladekurve
+Method of calculating the allowable power - second by second call @@ Berechnung der Batteriespannung bei TempBat und SOC(0), Ladekurve
+Method of calculating the Batterieveluste and SOC for the given  Power - second by second call @@ Methode zur Berechnung der zulässigen Leistung - sekündlicher Aufruf
+Input: @@ Methode zur Berechnung der Batterieveluste und SOC für geg. Leistung - sekündlicher Aufruf
+Perf ... required Power. Condition: PgMAX < Perf < PaMAX [kW] @@ Input:
+all Paramer were determined in Bat_Init read / @@ Perf ...geforderte Leistung. Bedingung: PgMAX < Perf < PaMAX [kW]
+jz ...Current time step @@ alle Paramer die in Bat_Init bestimmt/eingelesen wurden
+All arrays from time step 1 to jz-1 @@ jz ...Aktueller Zeitschritt
+Returns PeBat for the given  PiBat (signal towards PHEM) @@ Alle Arrays von Zeitschritt 1 bis jz-1
+PRIVATE ------------------------------------------ @@ Übergibt PeBat für geg. PiBat (Vorzeichen nach PHEM)
+Battery discharged @@ PRIVATE ------------------------------------------
+Temperature Function @@ Batterie entladen
+Ri determine depending on temperature @@ Temperaturfunktion
+Voltage determined from SOC and voltage curve @@ Ri bestimmen abhängig von Temperatur
+Current charge @@ Spannung bestimmen aus SOC und Spannungskurve
+Battery losses @@ Strom berechnen
+Battery temperature @@ Batterieverluste
+SOC charge @@ Batterietemperatur
+Adjustment for the current time step @@ SOC berechnen
+Charging the battery @@ Korrektur für den aktuellen Zeitschritt
+Temperature Function @@ Batterie laden
+Ri determine depending on temperature @@ Temperaturfunktion
+Voltage determined from SOC and voltage curve @@ Ri bestimmen abhängig von Temperatur
+Current charge @@ Spannung bestimmen aus SOC und Spannungskurve
+Battery losses @@ Strom berechnen
+Battery temperature @@ Batterieverluste
+SOC charge @@ Batterietemperatur
+Adjustment for the current time step @@ SOC berechnen
+Battery do nothing @@ Korrektur für den aktuellen Zeitschritt
+ALT: Ubat (jz) = Ubat (jz - 1) @@ Batterie nix tun
+Passes PeBat when invoked PEmot (sign after Renhart) @@ ALT: Ubat(jz) = Ubat(jz - 1)
+Passes PeBat unloading with PEmot (sign after Renhart) @@ Ãœbergibt PeBat beim Laden mit PEmot (Vorzeichen nach Renhart)
+Ãœbergibt PeBat beim Entladen mit PEmot (Vorzeichen nach Renhart)
+
+{0}{/0} {1}Vehicles{/1} @@ Leistungen
+Define cycle length (shorter than original order 1s because interim seconds) @@ Fahrzeug
+Here is the actual cycle is read: @@ Zykluslänge definieren (Um 1s kürzer als Original weil Zwischensekunden)
+Speed ​​selection @@ Hier wird der eigentliche Zyklus eingelesen:
+Rotations @@ Drehzahl-Vorgabe
+Angular acceleration @@ Drehzahl
+Em components communicate (between seconds) for KF-creation or Eng-Analysis @@ Winkelbeschleunigung
+EXS guidelines submit @@ Em-Komponenten mitteln (Zwischensekunden) für KF-Erstellung oder Eng-Analysis
+Aux requirements and submit Aux Aux lists if present in Dri and Veh @@ EXS Vorgaben mitteln
+Define cycle length: Same as cycle length (not reduced because no "interim seconds") @@ Aux Vorgaben mitteln und Aux-Listen falls Aux in Dri und Veh vorhanden
+Here is the actual cycle is read: @@ Zykluslänge definieren: Gleiche Länge wie Zyklus (nicht reduziert weil keine "Zwischensekunden")
+Rotations selection @@ Hier wird der eigentliche Zyklus eingelesen:
+Rotations @@ Drehzahl-Vorgabe
+Angular acceleration @@ Drehzahl
+Initialization / Open File ************** @@ Winkelbeschleunigung
+ID line (Only ADVANCE) @@ Initialisierung / Datei öffnen **************
+ADVANCE-specific @@ ID-Zeile (Nur ADVANCE)
+Calculated dynamics parameters (Diff to map) @@ ADVANCE-spezifisch
+Write to File @@ Berechnete Dynamikparameter (Diff zu Kennfeld)
+Values ************************************************************************************* @@ In Datei schreiben
+Time @@ Werte *************************************************************************************
+Route @@ Zeit
+Actual speed. @@ Strecke
+Speed Setpoint. @@ Ist-Geschw.
+Acc. @@ Soll-Geschw.
+Slope @@ Beschl.
+Rotations @@ Steigung
+Power @@ Drehzahl
+Rotations normalized @@ Leistung 
+Power normalized @@ Drehzahl normiert
+Rotations ​in r/min @@ Leistung normiert
+EM power in kW @@ Drehzahl in U/min
+Effective battery power @@ EM-Leistung in kW
+Internal battery power @@ Effektive Batterieleistung
+Battery voltage @@ Innere Batterieleistung
+Battery Power @@ Batteriespannung
+SOC @@ Batteriestrom
+Rotations @@ SOC
+Power @@ Drehzahl
+Rotations normalized @@ Leistung 
+Power normalized @@ Drehzahl normiert
+Full load and towing @@ Leistung normiert
+Power to clutch @@ Volllast und Schlepp
+Gear @@ Leistung an Kupplung
+Transmission losses @@ Gang
+Diff losses @@ Getriebeverluste
+Retarder losses @@ Diff-Verluste
+PaEng @@ Retarder-Verluste
+PaGB @@ PaEng
+Pa Veh @@ PaGB
+Roll @@ Pa Veh
+Drag @@ Roll..
+Slope .. @@ Luft..
+Aux .. @@ Steigung..
+Wheel power @@ Aux..
+Brake @@ Radleistung
+Auxiliaries @@ Bremse
+ADVANCE-specific @@ Auxiliaries
+X @@ ADVANCE-spezifisch
+Y @@ X
+Strid @@ Y
+Final emissions (tailpipe) @@ StrId
+Raw-emissions @@ Final-Emissionen (Tailpipe)
+TC-Emissions @@ Roh-Emissionen
+AT-Emissions (EXS) @@ TC-Emissionen
+Calculated dynamics parameters (Diff to map) @@ AT-Emissionen (EXS)
+Write to File @@ Berechnete Dynamikparameter (Diff zu Kennfeld)
+Errors/Warnings can occur every second @@ In Datei schreiben
+Reset hierarchy: @@ Errors/Warnings die sekündlich auftreten können
+ResetAll @@ Reset-Hierarchie:
+DesMaxExtr @@ ResetAll
+GeschRedReset @@ DesMaxExtr
+CdExtrapol @@ GeschRedReset
+PxReset @@ CdExtrapol        
+TrLossMapExtr @@ PxReset
+AuxMapExtr @@ TrLossMapExtr 
+AuxNegative @@ AuxMapExtr 
+FLDextrapol @@ AuxNegative
+Full reset (at the beginning of each second step) @@ FLDextrapol
+Reset of Errors by Speed Reduction (within iteration) @@ Kompletter Reset (am Beginn jedes Sekundenschritts)
+Reset of the errors have to do with the power calculation (carried out after Gear-shifting model) @@ Reset von Errors nach Geschw.-Reduktion (innerhalb Iteration)
+Emit Errors @@ Reset von Errors die mit der Leistungsberechnung zu tun haben (nach Schaltmodell durchzuführen)
+Errors ausgeben
+
+Interruption of traction @@ Sekündliche Daten
+Recuperation @@ Zugkraftunterbrechung
+Project HERO - BMW Mini Hybrid @@ Rekuperation
+Standard Mini One D Wheelbase 2467mm @@ Projekt HERO - BMW Mini Hybrid
+Adoption of gravity height @@ Standard Mini One D Radstand 2467 mm
+after http://www.colliseum.net/wiki/Schwerpunkth% C3% B6he @@ Annahme für Schwerpunkthöhe
+with R = 2467 [m], and m = 1335 [kg] @@ nach http://www.colliseum.net/wiki/Schwerpunkth%C3%B6he
+Bat Reading @@ mit R = 2.467 [m] und m = 1335 [kg]
+Maximum effective EM Power in driving depends on overload and battery status @@ Bat einlesen
+Based on full load curve @@ Maximale effektive EM-Leistung beim Antreiben abhängig von Überlast und Batteriezustand
+If possible overload: Upscale on OL Power @@ Basis: Volllastkurve
+PeFLD = maximum EM Power by FLD and OL @@ Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+Pemax from PeBatMax calculate @@ PeFLD = maximale EM-Leistung nach FLD und ÃœL
+PeBAT = maximum EM power to battery @@ PeMax aus PeBatMax berechnen
+Passing is the maximum power allowed by the battery @@ PeBAT = maximale EM-Leistung nach Batterie
+Maximum effective EM-load Power depends on overload and battery status @@ Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+Base: tractrix @@ Maximale effektive EM-Leistung beim Laden abhängig von Überlast und Batteriezustand
+If possible overload: Upscale on OL Power @@ Basis: Schleppkurve
+PeFLD = maximum EM Power by FLD and OL @@ Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+Pemax from PeBatMax calculate @@ PeFLD = maximale EM-Leistung nach FLD und ÃœL
+PeBAT = maximum EM power to battery @@ PeMax aus PeBatMax berechnen
+Passing is the maximum power allowed by the battery @@ PeBAT = maximale EM-Leistung nach Batterie
+Conversion of PeBat (= piem) on PEEM @@ Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+When sign of x or y is equal to the sign of xA (i) or yA (i) is then skipped row i @@ Umrechnung von PeBat(=PiEM) auf PeEM
+Conversion of PEEM to PeBat (= piem) @@ Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+When sign of x or y is equal to the sign of xA (i) or yA (i) is then skipped row i @@ Umrechnung von PeEM auf PeBat(=PiEM)
+Maximum power Rekup @@ Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+Appropriate V-lower limit of zero then the same @@ Maximale Rekup-Leistung
+Wheel contact @@ Falls unter V-Untergrenze dann gleich Null übergeben
+Sign "should" always be + @@ Radaufstandskraft
+Longitudinal force on the tire @@ Vorzeichen "sollte" immer + sein
+Safety factor to take @@ Längskraft am Reifen
+Power @@ Sicherheitsfaktor mitnehmen
+If scale linearly with V-ceiling then down @@ Leistung 
+PEEM Max reduce it to the battery aushaltet @@ Falls unter V-Obergrenze dann linear runter skalieren
+PEEM Min reduce it to the battery aushaltet @@ PeEM-Max reduzieren bis es die Batterie aushaltet
+Start / Stop Control @@ PeEM-Min reduzieren bis es die Batterie aushaltet
+Abortion if given no speed @@ Start/Stop Steuerung
+Initialize @@ Abbruch wenn keine Geschw. gegeben
+Gear-shifting points for NEDC / FTP circuit @@ Initialisieren
+Gear-shifting parameters initialize @@ Schaltpunkte für NEDC/FTP Schaltung
+Standard @@ Schaltparameter initialisieren
+Theoretical maximum speed [m/s] - set to Speed ​​at 1.2 x Rated-Rotations in top Gear @@ Standard
+Time warp **************************************** @@ Theoretische Höchstgeschwindigkeit [m/s] - gesetzt auf Geschw. bei 1.2 x NennDrehzahl im höchsten Gang
+Secondary Progressbar @@ Zeitschleife    ****************************************
+State determine @@ Sekundäre Progressbar
+Reset the second by second Errors @@ Zustand bestimmen
+Calculate Speed​/Acceleration ------------------- @@ Reset der sekündlichen Errors 
+Now by DRI-class @@ Geschw. / Beschl. berechnen-------------------
+If Speed over Top theoretical Speed => Reduce @@ Jetzt durch DRI-Klasse
+a_DesMax @@ Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+Check if acceleration is too high @@ a_DesMax
+Delay limit --------------------------- @@ Check ob Beschleunigung zu hoch
+Check whether to delay high @@ Verzögerung limitieren ---------------------------
+From Leistg ----- @@ Check ob Verzögerung zu hoch
+Driving conditions determine ------------------------- @@ Aus Leistg-----
+Quick check if power is much too high @@ Fahrzustand bestimmen-------------------------
+Gear selection ************************************ @@ Schneller Check ob Leistung viel zu hoch
+Check whether clutch will drag (important for Gear-shifting model): @@ Gangwahl ************************************
+Gear-setting @@ Checken ob Kupplung schleift (wichtig für Schaltmodell):
+Rotations-setting @@ Gang-Vorgabe
+Gear to speed @@ Drehzahlvorgabe
+Gear-shifting Model @@ Gang nach Geschwindigkeit
+Must be returned here again because in the Gear-shifting model can (and should) be used @@ Schaltmodell
+Shifting-model / specification can open Clutch @@ Muss hier nochmal zurück gesetzt werden weil im Schaltmodell kann (und darf) das passieren
+Important checks @@ Schaltmodell/Vorgabe kann Clutch öffnen 
+Check whether reduce speed @@ Wichtige Checks
+If GeschwRed Then GoTo lbGeschwRed <= instead new concept: Power is "normal" is calculated and later checked if Pe> Pmax ... ? @@ Checken ob Geschwindigkeit reduzieren
+Check whether Clutch open: @@ If GeschwRed Then GoTo lbGeschwRed    <= stattdessen neues Konzept: Leistung wird "normal" berechnet und erst später überprüft ob Pe > Pmax... ?
+bKupplOffen = (bStehen Or Gear(jz) = 0) <= Already known by Clutch @@ Checken ob Kupplung offen:
+If conventionall then ICE-clutch = master clutch @@ bKupplOffen = (bStehen Or Gang(jz) = 0) <= bereits durch Clutch bekannt
+bICEKupOffen = bKupplOffen <= i need nothing more @@ Falls konventionell dann ICE-Kupplung = Hauptkupplung
+If detected before gear selection was not that KupplSchleif, then shift down at too low Rotations: @@ bICEKupOffen = bKupplOffen <= Brauch i nix mehr
+Check whether idling although Power > 0 @@ Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+When Power > 0.1% of Rated-power, then Correct! @@ Checken ob Leerlauf obwohl Leistung > 0
+Rotations @@ wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+If Rotations specified then the next block is skipped *** @@ Drehzahl ************************************
+If Start/Stop will be set at the same nn < -0.05 to nU = 0 @@ Wenn Drehzahl vorgegeben dann wird der nächste Block übersprungen ***
+Rotations drop when decoupling @@ Falls Start/Stop dann wird gleich bei nn < -0.05 auf nU = 0 gesetzt
+Power-loss limit on Pe(t-1) minus 75% of (Pe(t-1) - Drag power) @@ Drehzahlabfall beim Auskuppeln
+of evaluated ETC with the dynamic of the motor full load @@ Leistungsabfall limitieren auf Pe(t-1) minus 75% von (Pe(t-1) - Pschlepp)
+Impact on low acceleration (influence by Pe(t-1) with full load under dynamic PT1) @@ aus Auswertung ETC des Motors mit dem dynamische Volllast parametriert wurde
+Luz/Rexeis / 21.08.2012 @@ Einfluss auf Beschleunigungsvermögen gering (Einfluss durch Pe(t-1) bei dynamischer Volllast mit PT1)
+Iteration loop: 01.10.2012 @@ Luz/Rexeis 21.08.2012
+Iterations-Schleife: 01.10.2012    
+01:10:12 Luz: Rotations must not be higher than previously @@ original: M = -Pmin * 1000 * 60 / (2 * Math.PI * ((nU + nUx) / 2))
+TODO: Switch off? @@ 01.10.12 Luz: Drehzahl darf nicht höher werden als zuvor 
+Start: Rotations Check @@ TODO: Auschalten?!
+Check whether Rotations too high! => Upshift @@ Beginn: Drehzahl-Check
+Check whether Rotations too low with the Clutch closed @@ Checken ob Drehzahl zu hoch! =>  Hochschalten
+Determine Engine condition ************************************ @@ Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+nn fix is here! @@ Motor-Zustand bestimmen ************************************
+Besides consumption determine (from VEH and DRI) @@ nn ist ab hier fix!
+ICE-inertia @@ Nebenverbrauch bestimmen (aus VEH und DRI)
+Not optimal since jz-1 to jz not the right time @@ ICE-Trägheit
+Rotations setting @@ Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+Total Engine-power @@ Drehzahlvorgabe
+Power distribution, etc. ****************** @@ Gesamt-Motorleistung
+Full-Load/Drag curve @@ Leistungsverteilung usw. ******************
+Correct Rotations @@ Volllast- / Schleppkurve
+If Pmax <0 or Pmin> 0 then Abort with Error! @@ Drehzahl korrigieren
+VKM to Drag-curve @@ Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+Forward-calculation to wheel (PvorD) @@ VKM an Schleppkurve
+Check or abort (reduce Speed before iteration otherwise it hangs) @@ Forwärtsrechnung bis Rad (PvorD)
+Check whether P above Full-load => Reduce Speed @@ Check ob Abbruch (vor Geschw.Red-Iteration sonst kann sichs aufhängen)
+ERROR: Velocity Reduction brings nothing? ... @@ Check ob P über Volllast => Geschw.-Reduktion
+ERROR:  Engine not in drive ... can it be? @@ FEHLER: Geschw.-Red. bringt nix?!...
+Interruption of traction @@ FEHLER: Motor nicht in Antrieb ...kann nicht sein?!
+Second conclude @@ Zugkraftunterbrechung
+Start / Stop - activation-Speed. Control @@ Sekunde abschließen
+Modal values Fields write @@ Start / Stop - Aktivierung-Geschw. Steuerung
+Interruption of traction @@ Modalwerte-Felder schreiben
+Messages (abort if error) @@ Zugkraftunterbrechung
+Time loop END *********************************** @@ Meldungen (Abbruch falls Error)
+Messages (When not ADVANCE) @@ Zeitschleife ENDE    ***********************************
+Abort if Power/Rotations not given @@ Meldungen (wenn nicht ADVANCE)
+Rotations previously otherwise fails Pmr calculation at MODdata.nU(t + 1) @@ Abbruch falls Leistung/Drehzahl nicht gegeben
+Modal value Fields write @@ Drehzahlen vorher weil sonst scheitert die Pmr-Berechnung bei MODdata.nU(t + 1)
+MODdata.Pe below shows @@ Modalwerte-Felder schreiben
+Power compute @@ MODdata.Pe wird unten belegt
+Secondary Progressbar @@ Leistung berechnen
+Reset the second-by-second Errors @@ Sekundäre Progressbar
+ALT and wrong because not time shifted: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnrom) * nnrom * (n(jz) - n(jz - 1))) / Pnrom @@ Reset der sekündlichen Errors 
+Power of the Cycle corrected by P_clutch @@ ALT und falsch weil Zeit nicht verschoben: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnenn) * nnenn * (n(jz) - n(jz - 1))) / Pnenn
+Rotations of the Cycle => Cycle-init Determined @@ Leistung aus Zyklus korrigiert um P_clutch
+If adopted under idle Rotations motor as we parked @@ Drehzhal aus Zyklus => Durch CycleInit bestimmt
+If Pmax < 0 or Pmin >  0 then Abort with Error! @@ Falls Drehzahl unter Leerlauf wir Motor als abgestellt angenommen
+FLD check @@ Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+Messages @@ FLD Check
+Start/Stop Control @@ Meldungen
+Path correction @@ Start/Stop Steuerung
+Abortion if given no speed @@ WegKorrektur
+Initialize @@ Abbruch wenn keine Geschw. gegeben
+WG-map take over from MAP and calculate Pi list @@ Initialisieren
+Gear-shifting points for NEDC/FTP @@ WG-Kennfeld aus MAP übernehmen und Pi-Liste berechnen
+Theoretical maximum speed [m/s] @@ Schaltpunkte für NEDC/FTP Schaltung
+Time-loop **************************************** @@ Theoretische Höchstgeschwindigkeit [m/s]
+Secondary Progressbar @@ Zeitschleife    ****************************************
+State determine @@ Sekundäre Progressbar
+Calculate Speed/Acceleration ------------------- @@ Zustand bestimmen
+Now by DRI-class @@ Geschw. / Beschl. berechnen-------------------
+If Speed over the theoretical Top-Speed => Reduce @@ Jetzt durch DRI-Klasse
+From Power ----- @@ Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+Determine Driving conditions ------------------------- @@ Aus Leistg-----
+Maximum allowable battery power @@ Fahrzustand bestimmen-------------------------
+Gear selection ************************************ @@ Maximal zulässige Batterieleistung
+Check whether clutch will drag (important for Gear-shifting model): @@ Gangwahl ************************************
+Gear setting @@ Checken ob Kupplung schleift (wichtig für Schaltmodell):
+Rotations setting @@ Gang-Vorgabe
+Transition to speed is not supported here @@ Drehzahlvorgabe
+Gear-shifting Model @@ Gang nach Geschwindigkeit wird hier nicht unterstützt
+EV: No idle due to recuperation @@ Schaltmodell
+If regenerative braking is possible under wheel power: Calculate PrekupMax @@ EV: Kein Leerlauf wegen Rekuperation
+Maximum recuperation power charge (depending on wheel load / Reibkoef.) @@ Falls Rekuperation laut Radleistung möglich: PrekupMax berechnen
+If detected before gear selection was not that KupplSchleif, then shift down at too low a speed: @@ Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+Check whether idling although power> 0 @@ Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+when power before Diff> 0.1% of rated output then Correct! @@ Checken ob Leerlauf obwohl Leistung > 0
+Rotations ************************************ @@ wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+If the speed is specified (Meas = 2) then the next block is skipped *** @@ Drehzahl ************************************
+Rotations drop when decoupling @@ Wenn Drehzahl vorgegeben (Gemess = 2) dann wird der nächste Block übersprungen ***
+Start: Speed-Check if no default @@ Drehzahlabfall beim Auskuppeln
+Check whether speed too high! => Upshift @@ Beginn: Drehzahl-Check wenn keine Vorgabe
+Check whether speed too low with the clutch @@ Checken ob Drehzahl zu hoch! =>  Hochschalten
+Engine condition ************************************ determine @@ Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+nn fix is ​​here! @@ Motor-Zustand bestimmen ************************************
+Besides consumption determine (from PDB and DRI) @@ nn ist ab hier fix!
+Motor inertia @@ Nebenverbrauch bestimmen (aus VEH und DRI)
+Not optimal since jz-1 to jz not the right time @@ MotorTrägheit
+Speed ​​setting @@ Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+Total motor power @@ Drehzahlvorgabe
+Power distribution, etc. ****************** @@ Gesamt-Motorleistung
+Full load / tractrix @@ Leistungsverteilung usw. ******************
+Maximum recuperation power charge (depending on wheel load / Reibkoef.) @@ Volllast- / Schleppkurve
+PrekupMax fPrekupMax = () @@ Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+Be exceeded if RekupMax recalculated Pe @@ PrekupMax = fPrekupMax()
+PbrakeRek = power which must be additionally hampered mechanical overrun of RekupMax @@ Falls RekupMax überschritten muss Pe neu berechnet werden
+is already done by top gear selection: PbrakeRek = Pantr - PrekupMax @@ PbrakeRek = Leistung die zusätzlich mechanisch gebremst werden muss wegen Überschreitung von RekupMax
+New EM Power @@ wird schon oben nach Gangwahl erledigt: PbrakeRek = Pantr - PrekupMax
+Check whether power can be added (depending on battery and FLD). Braking Power compute. @@ Neue EM-Leistung
+RekupMax braking power to add @@ Check ob Leistung aufgenommen werden kann (abh. von FLD und Batterie). Bremsleistung berechnen.
+Check whether P = on full load> Speed Reduction @@ RekupMax-Bremsleistung dazu addieren
+If Pmax = 0 must be empty battery @@ Check ob P über Volllast => Geschw.-Reduktion
+ERROR: Velocity Red. brings nothing? ... @@ Falls Pmax=0 muss Batterie leer sein
+Second conclude @@ FEHLER: Geschw.-Red. bringt nix?!...
+Battery *********************** @@ Sekunde abschließen
+Write-modal values ​​************** fields @@ Batterie ***********************
+Messages @@ Modalwerte-Felder schreiben **************
+Time loop END ************************************* @@ Meldungen
+Messages (ADV) @@ Zeitschleife ENDE    *************************************
+toDo  Error message etc @@ Meldungen (nicht ADV)
+Path correction @@ TODO.... Fehlermeldung etc
+Abortion if given no speed @@ WegKorrektur
+Initialize @@ Abbruch wenn keine Geschw. gegeben
+Gear-shifting points for NEDC/FTP @@ Initialisieren
+Gear-shifting parameters initialize @@ Schaltpunkte für NEDC/FTP Schaltung
+Theoretical maximum speed [m/s] @@ Schaltparameter initialisieren
+HEV @@ Theoretische Höchstgeschwindigkeit [m/s]
+Time warp **************************************** @@ HEV
+Secondary Progressbar @@ Zeitschleife    ****************************************
+State determine @@ Sekundäre Progressbar
+Speed ​​/ Acceleration calculate ------------------- @@ Zustand bestimmen
+Now by DRI-class @@ Geschw. / Beschl. berechnen-------------------
+If Speed ​​Top speed with theoretical. => Reduce @@ Jetzt durch DRI-Klasse
+From Leistg ----- @@ Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+Driving conditions determine ***************************** @@ Aus Leistg-----
+Driving conditions determine ------------------------- @@ Fahrzustand bestimmen *****************************
+Gear selection ************************************ @@ Fahrzustand bestimmen-------------------------
+Check whether clutch will drag (important for Gear-shifting model): @@ Gangwahl ************************************
+Gear-setting @@ Checken ob Kupplung schleift (wichtig für Schaltmodell):
+Rotations-setting @@ Gang-Vorgabe
+Gear from speed @@ Drehzahlvorgabe
+Gear-shifting Model @@ Gang nach Geschwindigkeit
+Besides consumption determine (from PDB and DRI) @@ Schaltmodell
+HEV part comes after gear selection because beverages. / Diff-loss and requires the EM between ICE and GB is @@ Nebenverbrauch bestimmen (aus VEH und DRI)
+Besides consumption determine (from PDB and DRI) @@ HEV-Teil kommt erst nach Gangwahl weil Getr./Diff-Loss den benötigt und EM zwischen ICE und GB liegt
+If specified speed @@ Nebenverbrauch bestimmen (aus VEH und DRI)
+Otherwise from Vist and Gear @@ Wenn Drehzahl vorgegeben
+Normalized speed @@ Sonst aus Vist und Gear
+Maximum power of the ICE @@ Normierte Drehzahl
+Besides consumption determine (from PDB and DRI) @@ Maximale Leistung der ICE
+Maximum allowable battery power @@ Nebenverbrauch bestimmen (aus VEH und DRI)
+Maximum EM Power. (Limited battery power EM power) @@ Maximal zulässige Batterieleistung
+Power to ICE / EM (= coupling to) get @@ Maximale EM-Leistung. (Batterieleistung limitiert EM-Leistung)
+Power to clutch @@ Leistung bis ICE/EM (= an Kupplung) berechnen
+Speed ​​setting @@ Leistung an Kupplung
+Power required in EV mode @@ Drehzahlvorgabe
+Power to clutch plus EM inertia @@ Notwendige Leistung im EV-Betrieb
+NOTE: If ICE has also engaged then Paice as well! => Later in power distribution @@ Leistung an Kupplung plus EM-Trägheit
+Necessary power in the ICE-EM + operation @@ ACHTUNG: Wenn ICE eingekuppelt dann muss PaICE auch noch dazu ! => Später bei Leistungsverteilung
+Power required in ICE operation @@ Notwendige Leistung im ICE+EM-Betrieb
+Check whether EV possible @@ Notwendige Leistung im ICE-Betrieb
+EM-Power> = input power @@ Check ob EV möglich
+If EV possible: check whether critical @@ EM-Leistung >= Antriebsleistung
+Check whether Assist / LPI / ICEonly possible and if needed boost @@ Falls EV möglich: Check ob kritisch
+ICE-A must be possible (Icelock) @@ Check ob Assist / LPI / ICEonly möglich und ob Boost erforderlich
+Assist / Boost @@ ICE-Ein muss möglich sein (ICElock)
+Boost @@ Assist / Boost
+ICE at full load @@ Boost
+Check whether Rekup possible @@ ICE an Volllast
+Driving state distinction ********************************* @@ Check ob Rekup möglich
+Mode pre-selection ******************************** @@ Fahrzustands-Unterscheidung *********************************
+Boost if necessary (and possible), then no choice @@ Betriebsmodus Vor-Auswahl ********************************
+EV mode when ... @@ Wenn Boost notwendig (und möglich), dann keine Wahl
+If EV & ICE is not possible then to ICE EV mode starts again .... should never happen because no ICE off when little SOC @@ EV Mode wenn...
+If use of HEV strategy: @@ Wenn EV & ICE nicht möglich dann EV-Modus bis ICE wieder startet.... sollte nie vorkommen weil keine ICE-Abschaltung wenn wenig SOC
+Ke's charge @@ Falls Einsatz von HEV-Strategie:
+Calculate optimal Ke's Power and to ************ @@ Ke's berechnen
+Emission / fuel consumption in g/h @@ Optimale Ke's berechnen und Leistungen dazu ************
+Keste from STE-curve ... @@ Emission/Verbrauch in g/h
+Remain under Max Pe @@ KeSTE aus STE-Kurve...
+If Pvkm negative: calculation for pure EM-operation @@ Unter Max-Pe bleiben
+not valid if Batlvl <= Low or ICEonLock @@ Wenn Pvkm negativ: Berechnung für reinen EM-Betrieb
+EM-Power = P drive @@ nicht gültig falls Batlvl <= Low oder ICEonLock
+Reduce consumption in g/h @@ EM-Leistung = P-Antrieb
+Termination according to this calculation (more EM Power makes no sense because even pure electric drive) @@ Verbrauchseinsparung in g/h 
+Reduce consumption in g/h @@ Abbruch nach dieser Berechnung (mehr EM-Leistung macht keinen Sinn da hier schon rein elektrischer Antrieb)
+Power to electric motor in kW @@ Verbrauchseinsparung in g/h 
+Power in battery @@ Leistung nach E-Motor in kW
+Div / 0 and sign check @@ Leistung in Batterie
+Kea calculated in kWh / kg @@ Div/0 und Vorzeichen-Check
+Check whether Optimum @@ KeA berechnen in kWh/kg
+Abort when pure EM mode already reached @@ Check ob Optimum
+If Pvkm at full load: @@ Abbruch falls reiner EM-Betrieb schon erreicht
+Pvkm put on full load @@ Falls Pvkm an Volllast:
+Electric motor in generator mode (Pges1 - Pvkm <0) @@ Pvkm auf Volllast setzen
+Abort after this passage because generating more impossible @@ Elektromotor in Generatorbetrieb (Pges1 - Pvkm < 0)
+Additional consumption in g/h @@ Abbruch nach diesem Durchgang weil mehr Generieren nicht möglich
+Power to electric motor in kW @@ Zusatzverbrauch in g/h 
+Power in battery @@ Leistung nach E-Motor in kW
+Div / 0 and sign check @@ Leistung in Batterie
+Keg calculated in kWh / kg @@ Div/0 und Vorzeichen-Check
+Check whether Optimum @@ KeG berechnen in kWh/kg
+Abort when VKM full load already reached @@ Check ob Optimum
+Eta calculate distance curve @@ Abbruch falls VKM-Volllast schon erreicht
+Keste, deltas evaluate ************************ @@ Abstand Eta zu Kurve berechnen
+Operating strategy *************************** @@ KeSTE, Deltas auswerten ************************
+Ke mode used when ... @@ Betriebsstrategie ***************************
+Same mode as before, driving condition changes or last mode impossible @@ Ke-Modus einsetzen wenn...
+when engine is not running @@ Gleicher Modus wie vorher, Fahrzustands-Änderung oder Letzter Modus unmöglich
+if the peice power change with the new mode lowest @@ wenn Motor nicht läuft
+************************** Distribute benefits depending on the mode @@ wenn PeICE-Leistungsänderung mit neuen Modus am geringsten
+EM assumes full power @@ Leistungen je nach Modus verteilen **************************
+Speed reduced if power is too high for EM or Bat @@ EM übernimmt gesamte Leistung
+If ICElock or EVcrit then ICE again (but disconnected) @@ Geschw. reduzieren falls Leistung zu hoch für EM oder Bat
+ICE takes over the entire drive @@ Falls ICElock oder EVcrit dann ICE ein (aber ausgekuppelt)
+WARNING: ICEclutch defaults to 'false' so here no more statements more @@ ICE übernimmt gesamten Antrieb
+Rekup maximum Power compute @@ ACHTUNG: ICEclutch ist standardmäßig 'False' deshalb hier keine weiteren Statements mehr
+Expect PrekupMax on EM / ICE back @@ Maximale Rekup-Leistung berechnen
+The remainder is on the brakes @@ Mit PrekupMax auf EM/ICE zurück rechnen
+Default for ICE (so that the "else" statement saves) @@ Den Rest gleich auf die Bremse 
+EM-performance compute @@ Default für ICE (damit man sich die "Else"-Statements spart)
+EM-performance new @@ EM-Leistung berechnen
+Residual power to ICE @@ EM-Leistung neu
+If ICE over tractrix @@ Restliche Leistung an ICE
+ICE power new @@ Falls ICE über Schleppkurve
+Rest of brake @@ ICE-Leistung neu
+ICE idle (because on-Lock) @@ Rest an Bremse
+EM-performance compute @@ ICE in Leerlauf (weil On-Lock)
+EM-performance new @@ EM-Leistung berechnen
+ICE on the overrun @@ EM-Leistung neu
+If ICE over tractrix @@ ICE im Schubbetrieb
+ICE power new @@ Falls ICE über Schleppkurve
+Rest of brake @@ ICE-Leistung neu
+ICE on the overrun @@ Rest an Bremse
+If ICE over tractrix @@ ICE im Schubbetrieb
+ICE power new @@ Falls ICE über Schleppkurve
+Rest of brake @@ ICE-Leistung neu
+Power zero @@ Rest an Bremse
+Clutch and speeds ******************************* @@ Leistung Null
+Main clutch => must already be known here! @@ Clutch und Drehzahlen *******************************
+ICE Rotations************************************ @@ Haupt-Kupplung => muss hier schon bekannt sein!
+EM Rotations ​​************************************* @@ Drehzahl ICE ************************************
+Second conclude @@ Drehzahl EM *************************************
+NOTE: If the two loops do not connect because LockCount otherwise miscounted @@ Sekunde abschließen
+Modal values ​​Fields write @@ ACHTUNG: Die beiden If-Schleifen nicht verbinden weil LockCount sich sonst verzählt
+Messages @@ Modalwerte-Felder schreiben
+Time loop END ************************************** @@ Meldungen
+Messages (Not ADVANCE) @@ Zeitschleife ENDE   **************************************
+Second 1 -------------------------------------- @@ Meldungen (Nicht ADVANCE)
+First second: transitional find / initialization @@ Sekunde 1--------------------------------------
+From second 2 -------------------------------------- @@ Erste Sekunde: Gang finden / Initialisierung
+Home values ​​--------- @@ Ab Sekunde 2--------------------------------------
+gangX = Last Gang ie Basis for Gear-shiftching model @@ Startwerte---------
+Dome grinding check << happened already in power.Calc @@ gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+Transition for the next 6 seconds, calculate --------------------- @@ Kuppelschleif-check  << Schon passiert in Power.Calc
+Gear-shifting function ---------- @@ Gang für die nächsten 6 Sekunden berechnen---------------------
+N_normiert speed barrier upshift (Idle = 0, rated speed = 1) @@ Schaltfunktion----------
+N_normiert speed barrier Turn Down (Idle = 0, rated speed = 1) @@ Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+LUZ deleted 13.07.10: If (nnsaufi> 0.85) = 0.85 Then nnsaufi @@ Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+Conversion in here used speed unit (n / N_NENN): @@ Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85
+Speed ​​with last gear (gangX) @@ Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+nx = FNU (Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn @@ Drehzahl mit letzten Gang (gangX)
+Turn off every 2 seconds maximum permissible: @@ nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn
+Check whether down turn, only when speed decreases or increases Power @@ Schalten Maximal alle 2 Sekunden schalten zulaessig:
+Check whether turn up, only when speed increases or decreases Power @@ Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+Correct gear selection @@ Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+No idle when power> 0 @@ Gangwahl korrigieren
+Speed ​​new @@ Kein Leerlauf wenn Leistung > 0
+nn = fnn (Vist, gangX, Clutch = tEngClutch.Slipping) @@ Drehzahl neu
+Check if Power/Rotations transition within the limits. Towing is not respected @@ nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping)
+Save for later courses in field checks @@ Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+Accept Gear @@ Speichere Gänge in Feld für spätere Checks
+Add Gang-shift @@ Gang wird übernommen
+Checks Part 1 ------------------------------------- @@ Gang-Verlauf hinzufügen
+Checks to Purge non-sensible Gear-shift: @@ Checks Teil 1-------------------------------------
+Division into "iphase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3): @@ Checks zur Saeuberung unsinniger Schlatmanoever:
+Already determined by VehState0 @@ Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+Search by last Gear-change @@ Schon bestimmt durch VehState0
+Maximum permissible Gear-shifts every 3 seconds: @@ Suche nach letztem Gangwechsel
+Cruise phases: @@ Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+Do not change Gear for as long Speed-change since last Gear-shift under 6% and Pe/Pnorm below 6%: @@ Cruise-Phasen:
+Deceleration phase: upshift is suppressed @@ Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+Acceleration phases: Downshift suppressed @@ Verzoegerungsphasen: Hochschalten wird unterdrückt
+If within 6 seconds it Shifts back to the previous-Gear, @@ Beschleunigungsphasen: Zurückschalten wird unterdrückt
+then maintain the previous-Gear throughout. @@ Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+If within 6 seconds it Shifts once above and once below the previous-Gear, @@ durchgehend beibehalten
+then maintain the previous-Gear throughout. @@ Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+Checks Part 2 ------------------------------------- @@ geschaltet wird, wird voriger Gang durchgehend beibehalten
+Gear-shift from 2 to 1 are suppressed when v > 2.5 m/s @@ Checks Teil 2-------------------------------------
+NEW LUZ 040210: Upshifting only when in 2nd Gear over Kuppel-Rotations @@ Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+at deceleration below 2.5 m/s is shifted to idle @@ NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet @@ bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+If v <0.1 m/s for more than 1 sec then shift to Gear=0 @@ wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+at Beschleunigungsvorgaengen below 1.5 m/s is used in 1 Gear is engaged @@ bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+checking if Rotations above Rated-rotations, then always upshift @@ ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+otherwise lack the power! @@ sonst fehlt die leistung!
+EV-gear-shifting model (based on Cars) @@ EV-Schaltmodell (auf Basis PKW)
+Second 1 -------------------------------------- @@ Sekunde 1--------------------------------------
+First second: Find Gear / initialization @@ Erste Sekunde: Gang finden / Initialisierung
+From second 2 -------------------------------------- @@ Ab Sekunde 2--------------------------------------
+Start values --------- @@ Startwerte---------
+gangX = Last Gear ie Basis for gear-shifting-model @@ gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+Kuppelschleif-check << happened already in power-calculation @@ Kuppelschleif-check  << Schon passiert in Power.Calc
+Calculate Gear for the next 6 seconds --------------------- @@ Gang für die nächsten 6 Sekunden berechnen---------------------
+Shifting-function ---------- @@ Schaltfunktion----------
+Rotations-limit for Upshift-Gear, N_normalized (Idle = 0, Rated-Rotations = 1) @@ Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+Rotations-limit for Downshift-Gear, N_normalized (Idle = 0, Rated-Rotations = 1) @@ Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+Conversion here of Rotations units to use (n/n_rated): @@ Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+Rotations with last Gear (gangX) @@ Drehzahl mit letzten Gang (gangX)
+Maximum permissible Gear-shifting every 2 seconds: @@ Schalten Maximal alle 2 Sekunden schalten zulaessig:
+Check whether Downshifting-gear, only when Rotations decrease or Power increases @@ Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+Check whether Upshifting-gear, only when Rotations increase or Power decreases @@ Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+Correct Gear selection @@ Gangwahl korrigieren
+Not idle when Power > 0 @@ Kein Leerlauf wenn Leistung > 0
+new Rotation @@ Drehzahl neu
+Check if Gear within Power/Rotations limits. Drag not respected @@ Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+Save Gears in field for later checks @@ Speichere Gänge in Feld für spätere Checks
+Accept Gear @@ Gang wird übernommen
+Add Gang-transition @@ Gang-Verlauf hinzufügen
+Checks Part 1 ------------------------------------- @@ Checks Teil 1-------------------------------------
+Checks to Purge non-sensible Gear-shift: @@ Checks zur Saeuberung unsinniger Schlatmanoever:
+Division into "IPhase (j)" stages: acceleration(=1), Deceleration(=2) and Cruise(=3): @@ Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+Already determined by VehState0 @@ Schon bestimmt durch VehState0
+Search by last gear change @@ Suche nach letztem Gangwechsel
+Schaltvorgaenge max. every 3 seconds permissible: @@ Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+Cruise phases: @@ Cruise-Phasen:
+As long Geschwindigkeitsaenderung change since last gear change under 6% and Pe / Pnom below 6% is not running: @@ Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+Verzoegerungsphasen: upshift is suppressed @@ Verzoegerungsphasen: Hochschalten wird unterdrückt
+Acceleration phases will return suppressed @@ Beschleunigungsphasen: Zurückschalten wird unterdrückt
+If within 6 seconds switched back again to the previous Gear, shift to the previous Gear @@ Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+consistently maintained @@ durchgehend beibehalten
+If within 6 seconds later, and once again lower than previous transition @@ Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+is connected, previous gear is maintained throughout @@ geschaltet wird, wird voriger Gang durchgehend beibehalten
+Checks Part 2 ------------------------------------- @@ Checks Teil 2-------------------------------------
+Turn of 2 in 1st Output is suppressed at v> 2.5 m/s @@ Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+NEW LUZ 040210: upshifting only when the 2nd Response over speed dome @@ NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+at verzoegerungsvorgaengen below 2.5 m/s is shifted to idle @@ bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+If v < 0.1 m/s for more than 1 sec, then shift to Gear=0 @@ wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+at acceleration processes below 1.5 m/s is used in first Gear is engaged @@ bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+checking if Rotations over Rated-Rotations, then you must always upshifted @@ ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+otherwise lack the power! @@ sonst fehlt die leistung!
+Second 1 -------------------------------------- @@ Sekunde 1--------------------------------------
+First second: transitional find / initialization @@ Erste Sekunde: Gang finden / Initialisierung
+From second 2 -------------------------------------- @@ Ab Sekunde 2--------------------------------------
+Home values --------- @@ Startwerte---------
+Compute power from jz to (jz + 6) ----------------- @@ Leistung berechnen von jz bis jz + 6-----------------
+Calculated according to speed / Power model @@ Berechnung nach Drehzahl/Leistung-Modell
+1) After variant "fast driving" @@ 1) Nach Variante "schnelle Fahrweise"
+Gear-shift only if v-change 5% since last Gear change @@ Schaltmanoever erfolgt nur, wenn v-aenderung 5% seit letztem Gangwechsel,
+VECTO: Commented out START @@ VECTO: Auskommentiert START
+VECTO: Commented out END @@ VECTO: Auskommentiert ENDE
+in the first 10 second cycle can be used for balancing geschlatet always: @@ in ersten 10 Zyklussekunden kann zum Einregulieren immer geschlatet werden:
+With change in the slope can also be switched always: @@ Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+Turn down: @@ Hinunterschalten:
+Upshift: @@ Hochschalten:
+at pitch cycles with excessive speed is weakened. i +1 after Input Selector @@ bei Steigungszyklen mit zu hohen Geschwindigkeiten wird geschw. i+1 erst nach gangwahl berechnet
+sometimes there is too high output -> rotations and P_max too low, so only with low power @@ dabei manchmal zu hoher gang -> Drehzahl und P_max viel zu nieder, daher nu bei niederen leistungen
+upshift allowed: @@ hochschalten erlaubt:
+2) After variant "economical driving" @@ 2) Nach Variante "sparsame Fahrweise"
+Turn back only occurs when Speed-change > 6% @@ Zurueckschalten erfolgt nur, wenn Geschwindigkeitsaenderung > 6%
+Always Upshift @@ Hochschalten geht immer
+VECTO: Commented out START @@ VECTO: Auskommentiert START
+VECTO: Commented out END @@ VECTO: Auskommentiert ENDE
+in the first 10 seconds cycle can always be used for balancing geschlatet: @@ in ersten 10 Zyklussekunden kann zum einregulieren immer geschlatet werden:
+When slope changes always may Gear-change: @@ Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+Downsift: @@ Hinunterschalten:
+Upshift, only checked if not the highest Gear: @@ Hinaufschalten, nur ueberprueft wenn nicht schon hoechster Gang:
+Relative Rotations: @@ relevante Drehzahlen:
+Selection of Rotations-sation from the "fast (h ..)" and @@ Auswahl des Drehzahlverhaeltnisses aus der "schnellen (..h)" und
+the "economical (.. l)" 'version: @@ der "sparsamen (..l)" Variante:
+Rotations-ration after "model mix": @@ Drehzahlverhhealtnisse nach "Modellmix":
+according to the required maximum power over the @@ anhand der erforderlichen maximalen Motorleistung ueber die
+next 6 seconds @@ naechsten 6 Sekunden
+Determining the proportions between the Faster Economical driving style @@ Festlegung der Anteile von schneller und sparsamer Fahrweise
+Hausberger model): @@ Modell Hausberger):
+Mix the calculated transitions in default input file: @@ Mix der berechneten Gaenge gemaess Vorgabe in Eingabefile:
+pmodell is read from input-file = proportion to the Rotations @@ pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl
+should exist for "real model") @@ nach "reales Modell" bestehen soll)
+Determination of the "virtual" current gear on the model @@ Ermittlung des "virtuellen" aktuellen Ganges nach Modell
+checking if Rotations over Rated-Rotations, then must always upshift @@ ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+otherwise lack the power! @@ sonst fehlt die leistung!
+Check whether power is required by P_max (s) @@ ueberpruefung, ob erforderliche leistung ueber P_max(n) liegt
+then Gear-shift-back: @@ dann wird zurueckgeschaltet:
+Actual checking whether by P_max (s) @@ Eigentliche Ueberpruefung ob ueber P_max(n)
+if bad moment in idle without full load curve is corrected: @@ falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert:
+Checking whether higher powers required as maximum power at nh @@ Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh
+then switched back: @@ dann wird zurueckgeschaltet:
+End "model"-based gear selection @@ Ende "Modell"-Basisgangwahl
+Dome grinding check @@ Kuppelschleif-check
+Checks Part 1 ------------------------------------- @@ Checks Teil 1-------------------------------------
+Checks to Purge non-sensible Gear-shift: @@ Checks zur Saeuberung unsinniger Schlatmanoever:
+Division into "IPhase (j)" acceleration (= 1), delay (= 2) and cruise (= 3)-stages: @@ Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+Search by last gear change @@ Suche nach letztem Gangwechsel
+Schaltvorgaenge max. every 3 seconds permissible: @@ Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+Cruise phases: @@ Cruise-Phasen:
+As long Geschwindigkeitsaenderung change since last gear change under 6% and Pe / Pnom below 6% is not running: @@ Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+Verzoegerungsphasen: upshift is suppressed @@ Verzoegerungsphasen: Hochschalten wird unterdrückt
+Acceleration phases will return suppressed @@ Beschleunigungsphasen: Zurückschalten wird unterdrückt
+If within 6 seconds again switched back to the previous passage, the previous passage @@ Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+consistently maintained @@ durchgehend beibehalten
+VECTO: Exception: full load curve @@ VECTO: Ausnahme: Ãœber Volllastkurve
+If within 6 seconds later, and once again lower than previous transition @@ Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+is connected, previous gear is maintained throughout @@ geschaltet wird, wird voriger Gang durchgehend beibehalten
+Checks Part 2 ------------------------------------- @@ Checks Teil 2-------------------------------------
+Turn of 2 in 1st Transition is suppressed at v> 1.5 m/s @@ Schalten von 2. in 1. Gang wird bei v > 1.5 m/s unterdrueckt
+NEW LUZ 040210: upshifting only when the 2nd Response over speed dome @@ NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+verzoegerungsvorgaengen at below 1.5 m/s is switched to idle @@ bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet
+v If more than 1 sec <0.1 m/s = 0 switched on transition @@ wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+checking if speed over rated speed, then you must always upshifted @@ ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+otherwise lack the power! @@ sonst fehlt die leistung!
+Speed ​​look ahead @@ Geschwindigkeit vorausschauen
+Checks from PKWgear .... @@ Checks aus PKWgear....
+Turn of 2 in 1st Output is suppressed at v> 2.5 m/s @@ Schalten von 2. in 1. Gang wird bei v>2,5 m/s unterdrueckt
+At verzoegerungsvorgaengen below 2.5 m/s is shifted to idle @@ Bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+V If connected more than 1 sec <0.1 m/s = on port 0 @@ Wenn v mehr als 1 Sek. <0.1 m/s wird auf Gang=0 geschaltet
+When Beschleunigungsvorgaengen below 1.5 m/s in first Gear is engaged @@ Bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+Function for easy switching models for Power calculation @@ Funktion zur einfachen Leistungsberechnung für Schaltmodelle
+Function for easy power calculation for EV-switching model @@ Funktion zur einfachen Leistungsberechnung für EV-Schaltmodell
+Speed ​​setting @@ Drehzahlvorgabe
+On the Power front wheel diff = ------------- @@ Leistung vor Diff = Am Rad-------------
+Rolling resistance ---------------- @@ Rollwiderstand----------------
+Drag resistance---------------- @@ Luftwiderstand----------------
+Acceleration Power vehicle -------- @@ Beschleunigungsleistung Fahrzeug--------
+Previously (PHEM 10.4.2 and above) was used instead m_raeder Massered with Massered = m_raeder I_Getriebe + * (Iachs / (0.5 * Dreifen)) ^ 2 @@ Früher (PHEM 10.4.2 und älter) wurde statt m_raeder Massered verwendet, mit Massered = m_raeder + I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2
+The missing part (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) is now considered by FPAG (V, a) with @@ Der fehlende Teil (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) wird jetzt durch fPaG(V,a) mit berücksichtigt
+Slope resistance ---------------- @@ Steigungswiderstand----------------
+Ancillaries ---------------- @@ Nebenaggregate----------------
+Gearbox @@ Getriebe-------------------
+Power after transmission (transmission output) @@ Leistung nach Getriebe (Getriebeausgang)
+Losses calculated (suitable only for manual transmission) @@ Verluste berechnet (eignet sich nur für Schaltgetriebe)
+Interpolation of the transmission power loss @@ Interpolation der Getriebeverlustleistung
+Between 1 and 8 transition as well as 9 and 16 Response: @@ Zwischen 1. und 8. gang sowie 9. und 16. Gang:
+Differential @@ Differenzial
+Power by Diff (before transmission) @@ Leistung nach Diff (vor Getriebe)
+Pdiff @@ Pdiff
+Differential @@ Differenzial
+Power before Diff @@ Leistung vor Diff
+Gearbox inertia ---------------- @@ Getriebe Trägheit----------------
+
+DRI file @@ Aus DRI-Datei
+calculated @@ Berechnet
+WegKor @@ WegKor
+speed @@ Geschwindigkeit
+Original speed is longer by 1 @@ Original-Geschwindigkeit ist um 1 länger
+Distance (from second intermediate happened otherwise error) @@ Strecke (aus Zwischensekunden sonst passiert Fehler)
+Slope @@ Steigung
+Transition - but not mean transition (t) = DRI.Gang (t) @@ Gang - nicht Mittelwert sondern Gang(t) = DRI.Gang(t)
+Padd @@ Padd
+Calculate Acceleration @@ Beschl. berechnen
+Vair specifications: Not in Between seconds! @@ Vair-Vorgaben: Nicht in Zwischensekunden!!
+speed @@ Geschwindigkeit
+Route @@ Strecke 
+Slope @@ Steigung
+Gear - not mean special transition (t) = DRI.Gang (t) @@ Gang - nicht Mittelwert sonder Gang(t) = DRI.Gang(t)
+Padd @@ Padd
+Calculate Acceleration @@ Beschl. berechnen
+TODO: If veh ... faster than cycle @@ TODO: Wenn Fzg schneller als Zyklus...
+If time step closer to repeating as the current path default path => repeat time step @@ Falls Zeitschritt wiederholen näher an Wegvorgabe als aktueller Weg => Zeitschritt wiederholen
+If the next time step closer to delete path default as the current path => Delete Next time step @@ Falls nächsten Zeitschritt löschen näher an Wegvorgabe als aktueller Weg => Nächsten Zeitschritt löschen
+No correction @@ Keine Korrektur
+
+Delaunay @@ Delaunay
+Normal interpolation @@ Normale Interpolation
+First two seconds, no correction: @@ Ersten zwei sekunden keine Korrektur:
+Dictionaries create @@ Dictionaries erstellen
+Calculate sums @@ Summen ermitteln
+Averages @@ Mittelwerte
+Cycle averages' ************************************ @@ Zyklus-Mittelwerte '************************************
+Reading @@ Messwert
+PHEM value @@ PHEM-Wert
+Diff - WARNING: No Pnom normalization! Beware of dynamic correction! @@ Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+Averaged values ​​over x seconds and instantly calculate au @@ Über x Sekunden gemittelte Werte berechnen und sofort au
+Set to zero @@ Null setzen
+Add up @@ Aufsummieren
+Reading @@ Messwert
+PHEM value @@ PHEM-Wert
+Modal output '************************************ @@ Modale Ausgabe '************************************
+Reading @@ Messwert
+PHEM value @@ PHEM-Wert
+Diff - WARNING: No Pnom normalization! Beware of dynamic correction! @@ Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+Header and write units @@ Header und Units schreiben
+Averaged values ​​over x seconds and instantly calculate au @@ Über x Sekunden gemittelte Werte berechnen und sofort au
+Set to zero @@ Null setzen
+Add up @@ Aufsummieren
+Expense @@ Ausgabe
+Reading @@ Messwert
+PHEM value @@ PHEM-Wert
+Cycles (general condition except for intervals with @@ Lastwechsel (allgemeine Bedingung ausser bei Intervallen mit
+Constant movement: @@ Konstantfahrt:
+This will Trapezfoermige cycles not recognized as load changes @@ Damit werden Trapezfoermige Zyklen nicht als lastwechsel erkannt
+because LWje = 0 In this case ahead of next value is sought, @@ da LWje = 0. In diesem fall wird voraus der naechste Wert gesucht,
+is Pe (jz) is not equal. This is instead of Pe (jz +1) @@ der nicht gleich Pe(jz) ist. Dieser wird anstelle von Pe(jz+1)
+set: @@ gesetzt:
+load changes are only counted as such if it more than 0.05% of @@ lastwechsel werden nur als solche gezaehlt, wenn sie mehr als 0.05% von
+Be Pnom (otherwise result is much too wobbly): @@ Pnenn betragen (sonst ist Ergebnis viel zu wackelig):
+Load change is counted when LWja <0) @@ Lastwechsel wird gezaehlt, wenn LWja < 0)
+1) Mean amplitude of Pe-course ("Ampl") @@ 1) Mittlere Amplitude vom Pe-Verlauf ("Ampl")
+Between invoice fue Cycle Mean: @@ Zwischenrechnung fue Zyklusmittelwert:
+Calculating the mean amplitude in 3 seconds before emission (Ampl3s) @@ Berechnung der mittleren Amplitude in 3 Sekunden vor Emission (Ampl3s)
+and the number of Pe-second increments over 3% of the rated power @@ und der Anzahl der Pe-Sekundenschritten ueber 3% der Nennleistung
+LW3p3s): @@ LW3p3s):
+2) change the current engine output (dP_2s): @@ 2) Aenderung der aktuellen Motorleistung (dP_2s):
+Average 3 sec ago emission: @@ Mittelwert 3 sec. vor Emission:
+Counted only in dynamic operation: @@ Gezaehlt nur bei dynamischem betrieb:
+4) of the negative power ("PnegMW"): @@ 4) Mittelwert der negativen Motorleistung ("PnegMW"):
+Average 3 sec ago emission: @@ Mittelwert 3 sec. vor Emission:
+Counted only in dynamic operation: @@ Gezaehlt nur bei dynamischem betrieb:
+Calculation of absolute Dynamikkenngroessen: @@ Berechnung der absoluten Dynamikkenngroessen:
+Addition of the amplitudes of Pe (1 Pe-value @@ Addition der Amplituden von Pe (1. Pe-Wert
+is for peak amplitudes as well or Minima) counted @@ wird fuer Amplitude auch als Maxima bzw. Minima gezaehlt)
+First Second: @@ 1. Sekunde:
+Second Second to end: @@ 2. Sekunde bis Ende:
+Absolute value: @@ Absolutwert:
+Speed. / Accel. Dependent parameters only if Eng-Only @@ Geschw./Beschl.-abhängige Parameter nur wenn nicht Eng-Only
+Dynamic parameters as the difference in dynamics to map @@ Dynamikparameter als Differenz zu Dynamik in Kennfeld
+was here before. Now own method invalid because of KF-creation @@ war früher hier. Jetzt eigene Methode weil bei KF-Erstellung ungültig
+Dynamic parameters as the difference in dynamics to map: @@ Dynamikparameter als Differenz zu Dynamik in Kennfeld:
+Class for Berchnung exhaust temperatures @@ Klasse zur Berchnung der Abgastemperaturen
+Fields for sizes from PHEM main program @@ Felder für Größen aus PHEM Hauptprogramm
+Reading from TGAs. Npi (Project HERO) **** @@ Einlesen von tgas aus .npi (Projekt HERO) ****
+overwrites TGAs (jz) from HtMass () @@ überschreibt tgas(jz) aus HtMass()
+Luz Rexeis / 16.05.2011 @@ Luz/Rexeis 16.05.2011
+Main routine for EXS module @@ Hauptroutine für EXS Modul
+Calling Exs_Main (true) -> Developer version without PHEM main program @@ Aufruf von Exs_Main(true) -> Developer Version ohne PHEM Hauptprogramm
+Fields for sizes from exs file @@ Felder für Größen aus exs-File
+General Constants @@ Allgemeine Konstanten
+Material values ​​exhaust: @@ Stoffwerte Abgas:
+insensitive vs. lambda see, "Stoffwerte_vollständigeVerbrennung_neu.xls" @@ unempfindlich gg. lambda, siehe "Stoffwerte_vollständigeVerbrennung_neu.xls"
+cp_exh = 1054.0 '!Exhaust heat capacity [J / (kg * K)] is no longer used because now calculated directly in Abh of T and lambda @@ cp_exh = 1054.0 '!Wärmekapazität Abgas [J/(kg*K)], wird nicht mehr verwendet weil jetzt direkt in Abh. von T und Lambda berechnet
+Note: mean value of Internet search found no information in literature @@ Anmerkung: Mittelwertwert aus Internetrecherche, in Literatur keine Angaben gefunden
+calibrated based on test thermocouple assuming thickness 0.1mm @@ kalibriert anhand Test an Thermoelement unter Annahme von Schichtdicke 0.1mm
+Enthalpies in J / mol @@ Reaktionsenthalpien in J/mol
+Molecular weights @@ Molmassen
+Compatibility with old EXS Strkutur. Before new concept for Em components with CMap class tMapComp, etc. was introduced @@ Kompatibilität mit alter EXS-Strkutur. Bevor neues Konzept für Em-Komponenten mit cMAP-Klasse, tMapComp, etc. eingeführt wurde
+References to emissions: Shared if available otherwise the calculated @@ Verweise auf Emissionen: Gegebene falls vorhanden sonst die berechneten
+Dimension: @@ Dimensionieren:
+Transfer of the relevant variables from the main program PHEM @@ Übergabe der relevanten Größen aus dem PHEM Hauptprogramm
+In DEV directly from the file *. Phe read @@ In DEV direkt aus der Datei *.phe eingelesen
+Lambda @@ Lambda
+Is further supported below because there must be mpexh @@ Wird weiter unten belegt weil mpexh vorhanden sein muss
+Beginning exs file read @@ Anfang exs-File einlesen
+dummy = DatExs.ReadLine (0) 'old dummy line: pay attention to exs-file compatibility @@ dummy = DatExs.ReadLine(0) 'alte dummy zeilen: auf exs-file kompatibilität achten
+Initialize the appropriate number of modules @@ Initialisieren der entsprechenden Anzahl an Modulen
+Reading of the data blocks for each module @@ Lesen der Datenblöcke je Modul
+Error message alteration in TempMod (iMod).Read (DatExs) @@ Fehlermelderung in TempMod(iMod).Read(DatExs)
+End exs file read @@ Ende exs-File einlesen
+Beginning csy file read @@ Anfang csy-File einlesen
+End csy file read @@ Ende csy-File einlesen
+Calculation loop: each time step / per module: 1 Temperatures 2.Konvertierungen @@ Berechnungsschleife: je Zeitschritt /je Modul: 1. Temperaturen, 2.Konvertierungen
+Results are displayed every second in each iteration @@ Sekündliche Ergebnisse werden in jeder Iteration ausgegeben
+* Header. Write th @@ Header *.ter schreiben
+Write the header KonvMods @@ Header der KonvMods schreiben
+start values ​​for cooler simulation: @@ startwerte für kühlersimulation:
+Heat transfer into the cooling system (map) @@ Wärmeeintrag ins Kühlsystem (Kennfeld)
+Cooling System Simulation @@ Kühlsystem Simulation
+Heat inputs in masses 1 and 2 @@ Wärmeeinträge in Massen 1 und 2
+The heat transfer material 1 and 2 cooling system @@ Wärmeübergang Masse 1 und 2 ins Kühlsystem
+Melt temperatures for the next time step @@ Massentemperaturen für nächsten Zeitschritt
+Heat loss to the outside @@ Wärmeverlust nach außen
+Total heat input into the cooling system (radiator output value of the simulation) @@ Gesamtwärmeeintrag ins Kühlsystem (Ausgabewert der Kühlersimulation)
+Exhaust gas flow calculation from a given fuel and lambda @@ Berechnung Abgasmassenstrom aus gegebenem Kraftstoffverbrauch und Lambda
+appear only for engines without EGR @@ nur zulässig bei Motoren ohne AGR
+Unit mpexh ....... [kg / s] @@ Einheit mpexh.......[kg/s]
+Unit Vpexh ....... [m3 / s] @@ Einheit Vpexh.......[m3/s]
+Case 1: Calculation of consumption and lambda @@ Fall 1: Berechnung aus Verbrauch und lambda
+Case 2: calculation of pumped airflow through engine @@ Fall 2: Berechnung aus durch Motor gepumpter Luftmenge
+Missing: mass flow calculation methodology for EGR engines BMW HERO Project @@ Es fehlt: Methodik Massenstromberechnung für AGR Motoren BMW HERO Projekt
+Lambda calculate if not explicitly given @@ Lambda berechnen falls nicht explizit gegeben
+The first module in the exhaust system may be a catalytically active element, @@ Erstes Modul im Abgasstrang kann kein katalytisch aktives Element sein,
+therefore, emissions are always equal to the untreated emissions from the main program PHEM @@ daher sind die Emissionen immer gleich der Rohemissionen aus dem PHEM-Hauptprogramm
+Qp_reak calculate: the mass flow rate * Conversion * enthalpy / molar mass @@ Qp_reak berechnen: massenstrom * konvertierungsrate * reaktionsenthalpie / molmasse
+Pollutant component compute @@ Schadstoffkomponente berechnen
+Conversion of NOx, CO, HC -> old value * (1-conversion rate) @@ Konvertierung von NOx, CO, HC -> alter Wert * (1-Konvertierungsrate)
+If module has no conv element changes nothing (Note: Module 1 has always ModTyp0) @@ Falls Modul kein Konv-Element hat ändert sich nix (Anmerkung: Modul 1 hat immer ModTyp0)
+Line write in th *. @@ Zeile in *.ter schreiben
+End calculation loop @@ Ende Berechnungsschleife
+Every second by second result Files undergo @@ Alle sekündlichen Ergebnisfiles zumachen
+Query return in the iterative calculation mode for Starttemp ------------------- @@ Abfrage Rücksprung im iterativen Berechnungsmodus für Starttemp -------------------
+Termination condition: Temperature of the mass element "T_M" in the "iter_pos" specified module @@ Abbruchbedingung: Temperatur des Massenelementes "t_m" des in "iter_pos" spezifizierten Moduls
+at the beginning and end of the cycle within vorzugebender bandwidth "iter_tol" @@ am Beginn und am Ende des Zyklus innerhalb vorzugebender Bandbreite "iter_tol"
+Output file *. Ter write --------------------------------------------- ------------- @@ Ausgabefile *.ter schreiben ----------------------------------------------------------
+End output file write *. Th -------------------------------------------- --------- @@ Ende Ausgabefile *.ter schreiben -----------------------------------------------------
+Clean up @@ Aufräumen
+Class modules for temperature @@ Klasse für Temperaturmodule
+remarks> type of module is defined with MODTYP </ remarks> @@ remarks>Art des Moduls wird mit ModTyp definiert</remarks>
+Reading the EXS file @@ Einlesen der EXS-Datei
+param name = "file"> file handler </ param> @@ param name="Datei">Dateihandler</param>
+Path to conversion rates for modules with conversion @@ Pfad für Konvertierungsraten bei Modulen mit Konvertierung
+Initialize the modules & reading the parameter file, depending on module @@ Initialisieren der Module & Einlesen des Parameterfiles je nach Modul
+Heat transfer factor @@ Wärmeübergangsfaktor
+Surface outside @@ Oberfläche außen
+Emissivity @@ Emissivität
+Factors for heat transfer to the outside @@ Faktoren für Wärmeübergänge nach außen
+Factors for temperature related t_katsubstrat - t_kat_außen <> @@ Faktoren für Temperaturzusammenhang t_katsubstrat <-> t_kat_außen
+Cooling curve mass @@ Abkühlkurve Masse
+Normalized cross-sectional area @@ normierte Querschnittsfläche
+average backpressure @@ durchschnittlicher Gegendruck
+Diameter thermocouple @@ Durchmesser Thermoelement
+Cooling curve thermocouple @@ Abkühlkurve Thermoelement
+Factors for heat transfer to the outside @@ Faktoren für Wärmeübergänge nach außen
+Check whether Tgas given in cycle: @@ Check ob Tgas in Zyklus gegeben:
+Entnormierungen and calculating other variables @@ Entnormierungen und Berechnung weiterer Größen
+Additionally calculated parameters for tubular modules: @@ Zusätzlich berechnete Parameter für Rohrmodule:
+For flow calculations in SI units is Querschnittsfäche converted into m2 @@ Für Strömungsberechnungen in SI-Einheiten wird Querschnittsfäche in m2 umgerechnet
+Geometrical quantities calculated @@ Geometrische Größen berechnen
+Note: If it is assumed that temperature sensors @@ Anmerkung: es wird davon ausgegangen, dass Temperatursensoren
+centered in the pipe are @@ mittig ins Rohr stehen
+Note: spherical cap on t-sensor tip is as in contemplation @@ Anmerkung: Kugelkalotte an t-sensor spitze wird in der Betrachtung als
+airstream cylinder neglected @@ umströmter Zylinder vernachlässigt
+Cooling curves Reading @@ Abkühlkurven einlesen
+Heat transfer mass @@ Wärmeübergang Masse
+Setting threshold for accuracy of the temperature calculation (needed for iterative calculation mode) @@ Festlegung Schwellwert für Genauigkeit der Temperaturberechnung (wird wegen iterativem Berechnungsmodus benötigt)
+Transfer inlet temperature of the exhaust gas from the engine module or lying above @@ Ãœbergabe Eintrittstemperatur des Abgases aus oberhalb liegendem Modul bzw. dem Motor
+Calculation of the current melt temperature @@ Berechnung der aktuellen Massentemperatur
+at n_iter> 0 is already the final value assigned to the last iteration @@ bei n_iter > 0 ist bereits der Endwert der letzten Iteration zugewiesen
+If engine from cooling curve and is expected to leave method: @@ Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+Heat capacity (see Bogdanic) @@ Wärmekapazität (vgl. Bogdanic)
+Iteration loop for heat transfer @@ Schleife für Iteration Wärmeübergang
+Termination criterion below @@ Abbruchkriterium siehe unten
+Determining the temperature of the exhaust gas at the center of mass ("t_gas_mid") consists of a non-linear (logarithmic) temperature curve @@ Ermittlung der Temperatur des Abgases in der Mitte der Masse ("t_gas_mid") aus einem nichtlinearem (logaritmisch) Temperaturverlauf 
+Heat transfer convection inside for all the modules (except for tube) @@ Wärmeübergang Konvektion innen für alle Module (außer Rohr)
+for tubular modules: @@ für Rohrmodule:
+Nusselt number: Density = 345/t_gas_mid, term in parenthesis: mu_Rohr / mu_Mitte @@ Nusselt Zahl: Dichte = 345/t_gas_mid, Term in Klammer: mu_Rohr / mu_Mitte
+Heat transfer (convection inside) d_pipe, in m: char. Length @@ Wärmeübergang (Konvektion innen), d_pipe in m: char. Länge
+Heat capacity (see Bogdanic) @@ Wärmekapazität (vgl. Bogdanic)
+Termination criterion: change the exhaust outlet temperature compared to the last iteration small threshold @@ Abbruchkriterium: Änderung der Abgas-Austrittstemperatur im Vergleich zum letzten Iterationsschritt kleiner Schwellwert
+Calculate the heat loss of the "thermal mass" to the outside @@ Berechnung der Wärmeverluste der "thermischen Masse" nach außen
+Parameters are read from EXS file: @@ Parameter werden aus EXS-Datei eingelesen:
+Data for MuD: @@ Daten für MuD:
+Oberfl_Kat = 0.12 'surface for heat transfer in m ^ 2 @@ Oberfl_Kat = 0.12 'Oberfläche für Wärmeübergang in m^2
+Emiss = 0.5 'emissivity @@ Emiss = 0.5 'Emissivität
+Empirical formula, suitable for all testing role quite well @@ Empirische Formel, passt für alle Rollentests recht gut
+Note: Experiment with direct dependence on T_M -> does not work well @@ Anm.: Versuch mit direkter Abhängigkeit von t_m -> funktioniert nicht gut
+Heat loss by radiation @@ Wärmeverlust durch Strahlung
+Heat loss by convection @@ Wärmeverlust durch Konvektion
+Parameters are read from EXS file: @@ Parameter werden aus EXS-Datei eingelesen:
+Data for MuD: @@ Daten für MuD:
+Module 3: @@ Modul Nr. 3:
+Oberfl_Mod3 = 0.169457508 'surface for heat transfer in m ^ 2 @@ Oberfl_Mod3 = 0.169457508 'Oberfläche für Wärmeübergang in m^2
+Emiss = 0.5 'emissivity @@ Emiss = 0.5 'Emissivität
+Module 4: @@ Modul Nr. 4:
+Oberfl_Mod4 = 0.103596481 'surface for heat transfer in m ^ 2 @@ Oberfl_Mod4 = 0.103596481 'Oberfläche für Wärmeübergang in m^2
+Emiss = 0.9 'emissivity @@ Emiss = 0.9 'Emissivität
+Heat loss by radiation view factor = * emissivity * St. Boltzm.-const * Surface * (T_Rohr ^ 4 - ^ T_Umgebung 4) @@ Wärmeverlust durch Strahlung = Sichtfaktor * Emissivität * St.-Boltzm.-Konst * Oberfläche * (T_Rohr^4 - T_Umgebung^4)
+= Heat loss by convection heat transfer coefficient * Surface * (T_Rohr - T_Umgebung) @@ Wärmeverlust durch Konvektion = Wärmeübergangskoeffizient * Oberfläche * (T_Rohr - T_Umgebung)
+Standard: Crad constant, no loss by convection @@ Standard: Crad konstant, keine Verluste durch Konvektion
+Total heat loss @@ Gesamtwärmeverlust
+Heat transfer thermocouple @@ Wärmeübergang Thermoelement
+If engine from cooling curve and is expected to leave method: @@ Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+Formula calculating heat transfer work flow around the cylinder @@ Formelwerk Berechnung Wärmeübergang am umströmten Zylinder
+Simplified solution of the heat flow equation for the t-sensor @@ Vereinfachte Lösung der Wärmeflussgleichung für den t-sensor
+corresponds to a Diffgl. Member for PT1 @@ entspricht einer Diffgl. für ein PT1 glied
+Discrete-time solution of the PT1 Diffgl @@ Zeitdiskrete Lösung der PT1-Diffgl
+Extrapolation for LastTemp> TempAR (0) @@ Extrapolation für LastTemp > TempAr(0)
+Extrapolation for LastTemp <TempAR (Adim) @@ Extrapolation für LastTemp < TempAr(Adim)
+lbInt: @@ lbInt:
+One time step before (= 1 second) @@ Einen Zeitschritt vor ( = 1 Sekunde)
+Class initialized as a subelement of TempMod @@ Klasse initialisiert als Unterelement von TempMod
+Prefix "c" means: use cycle value for characteristic correction @@ Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+Index "cc" means value of curve (-> "c" - "cc" is the difference, is the corrected) @@ Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+File name every second output file specified @@ Filename sekündliches Ausgabefile spezifizieren
+Abortion if given no NOx @@ Abbruch wenn kein NOx gegeben
+t-SCR (° C), deNOx (1-NOx-exhaust/NOx-Roh), t-upstream (°C), NOx-raw (g/h)/kW_Rated-power, total NOx over 60sec before g/h)/kW_Rated-power, space velocity (1/h) @@ t-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+Program to simulate SCR fleet average @@ Programm zur Simulation SCR-Flottendurchschnitt
+Note: deNOx values ​​are less than zero are possible: @@ Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+this corresponds to higher NOx-raw level than in the base map @@ dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+1.) Calculation of second by second values ​​for input variables SCR model @@ 1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+a) t_SCR: combined weight of the t_upstream and t_downstream @@ a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+SCR model internally there are temperatures between 50 ° C and 500 ° C limits @@ SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+Temperature model values ​​(eg cold start) will not be overwritten @@ Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+b) t_up, NOxraw, SV. 20s moving average in the past @@ b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+Formula applies to the first 20 seconds @@ Formel gilt auch für die ersten 20 Sekunden
+c.) NOx60s: sum over the last 60s of the specific NOx raw emissions @@ c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+Formula applies to the first 60 seconds @@ Formel gilt auch für die ersten 60 Sekunden
+Extrapolated total value for 1-59 seconds must @@ Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+Calculation of characteristic curves deNOxmin value at 50 ° C @@ Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2.) Calculation deNOx @@ 2.) Berechnung deNOx
+a) deNOx of characteristic: @@ a.) deNOx aus Kennlinie:
+b.) If correction criteria are met: deNOx correction towards characteristic @@ b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+t_up of characteristics: @@ t_up aus Kennlinie:
+NOx_raw of characteristics: @@ NOx_raw aus Kennlinie:
+NOxraw sum in the last 60 seconds of characteristics: @@ Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+Space velocity of characteristics: @@ Raumgeschwindigkeit aus Kennlinie:
+Write the results on the standardized variables eEmKomp (iSchad, jz) and Qp_reak (jz) @@ Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+SCR model @@ SCR Modell
+Class initialized as a subelement of TempMod @@ Klasse initialisiert als Unterelement von TempMod
+Prefix "c" means: use cycle value for characteristic correction @@ Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+Index "cc" means: value of curve (-> "c" - "cc" is the difference, with the corrected) @@ Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+File name every second output file specified @@ Filename sekündliches Ausgabefile spezifizieren
+Abort if given no NOx @@ Abbruch wenn kein NOx gegeben
+t-SCR (° C), deNOx (1-NOx-Exhaust/NOx-raw), t-upstream (° C), NOx-raw (g/h) / kW_Rated-power, total NOx over 60sec before g/h)/kW_Rated-power, space velocity (1/h) @@ t-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+Program to simulate SCR fleet average @@ Programm zur Simulation SCR-Flottendurchschnitt
+Note: deNOx with values less than zero are possible: @@ Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+this corresponds to higher NOx-raw level than in the base map @@ dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+1.) Calculation of second by second values ​​for input variables SCR model @@ 1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+a) t_SCR: combined weight of the t_upstream and t_downstream @@ a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+SCR model internally there are temperatures between 50 ° C and 500 ° C limits @@ SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+Temperature model values ​​(eg cold start) will not be overwritten @@ Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+b) t_up, NOxraw, SV. 20s moving average in the past @@ b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+Formula applies to the first 20 seconds @@ Formel gilt auch für die ersten 20 Sekunden
+c.) NOx60s: sum over the last 60s of the specific NOx raw emissions @@ c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+Formula applies to the first 60 seconds @@ Formel gilt auch für die ersten 60 Sekunden
+Extrapolated total value for 1-59 seconds must @@ Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+Calculation of characteristic curves deNOxmin value at 50 ° C @@ Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2.) Calculation deNOx @@ 2.) Berechnung deNOx
+a) deNOx of characteristic: @@ a.) deNOx aus Kennlinie:
+b.) If correction criteria are met: deNOx correction towards characteristic @@ b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+t_up of characteristics: @@ t_up aus Kennlinie:
+NOx_raw of characteristics: @@ NOx_raw aus Kennlinie:
+NOxraw sum in the last 60 seconds of characteristics: @@ Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+Space velocity of characteristics: @@ Raumgeschwindigkeit aus Kennlinie:
+Write the results on the standardized variables eEmKomp (iSchad, jz) and Qp_reak (jz) @@ Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+CAT model @@ KAT-Modell
+Class initialized as a subelement of TempMod @@ Klasse initialisiert als Unterelement von TempMod
+Mapped data @@ Kennfelddaten
+Creating a new CAT module @@ Erstellen eines neuen KAT-Moduls
+Interpolation @@ Interpolationsfunktion
+param name = "x"> mass flow rate </ param> @@ param name="x">Massenstrom</param>
+param name = "y"> temperature before KAT </ param> @@ param name="y">Temperatur vor KAT</param>
+param name = "MapID"> MapID the corresponding exhaust component </ param> @@ param name="MapID">MapID der entsprechenden Abgaskomponente</param>
+returns> interpolated value for x and y map </ returns> @@ returns>interpolierten Wert für x und y aus Kennfeld</returns>
+remarks> From mass flow temperature map is conversion rate calculated for appropriate exhaust component </ summary> @@ remarks>Aus Massenstrom-Temperatur Kennfeld wird Konvertierungsrate für entsprechende Abgaskomponente berechnet</remarks>
+Reading the maps for conversion rates @@ Einlesen der Kennfelder für Konvertierungsraten
+param name = "name"> filename </ param> @@ param name="Name">Dateiname</param>
+Units (is not evaluated) @@ Units (wird nicht ausgewertet)
+Values @@ Werte
+Set to zero if not KonvRaten component given @@ KonvRaten Null setzen wenn Komponente nicht gegeben
+Triangulating @@ Triangulieren
+Dic. define for modal Konvrate @@ Dic. für modale Konvrate definieren
+Calculation of the conversion rate from mapped @@ Berechnung der Konvertierungsrate aus Kennfeld
+param name="jz"> Time </ param> @@ param name="jz">Zeit</param>
+remarks> To calculate the temperature of the thermocouple is on Kateingang (module number corresponds to i-1) used!</ Remarks> @@ remarks>Für die Berechnung wird die Temperatur des Thermoelements am Kateingang (entspricht Modulnummer i-1) verwendet!!!</remarks>
+Conversion rate calculated from mapped @@ Konvertierungsrate aus Kennfeld berechnen
+Header for output file @@ Header für Ausgabedatei
+Data for output file @@ Daten für Ausgabedatei
+param name = "jz"> Time </ param> @@ param name="jz">Zeit</param>
+Interface converter for class cScrMod, cDocMod, etc. .. @@ Interface zur Konverter-Klasse cScrMod, cDocMod , usw...
+Subroutine to PHEM for linear interpolation of a polygon (eg Vissimzs.for called) @@ Unterprogramm zu PHEM zur linearen INterpolation aus einem Polygonzug (z.B. in Vissimzs.for aufgerufen)
+handed over "search" as the X-value, which is then given back as the calculated Y-value @@ uebergeben wid "such" als X-Wert, der dann als berechneter Y-Wert wieder zurueck gegeben wird
+Documents are to advance: @@ Zu Belegen sind vorher:
+Xis(j) and Yi(j) @@ Xis(j) und Yis(j)
+Given the desired value (search) and the number of the existing Polygon points (izpl) @@ Zu uebergeben der gesuchte Wert (such) und die Anzahl an vorhandenen Polyginpunkten (izpl)
+Search rotations of the closest points from inputted full load curve: @@ Suche der naechstgelegenen Drehzahlpunkte aus eingegebener Vollastkurve:
+Distance to input and search points of the point with the smallest distance: @@ Abstand zu Eingabepunkten und Suche des Punktes mit geringstem Abstand:
+Fixing the second interpolation (interpolate only, not extrapolate) @@ Festlegung des zweiten INterpolationspunktes (nur interpolieren, nicht extrapolieren)
+Extrapolation up @@ Extrapolation nach oben
+Extrapolation down @@ Extrapolation nach unten
+Sort by ascending values ​​of the 2 n: @@ Sortieren der 2 Werte nach aufsteigendem n:
+Interpolation of the associated maximum power (P / Pmax) @@ Interpolation der zugehoerigen Maximalleistung (P/Pnenn)
+
+This code was generated by a tool. @@ Dieser Code wurde von einem Tool generiert.
+Runtime Version: 4.0.30319.269 @@ Laufzeitversion:4.0.30319.269
+Changes to this file may cause incorrect behavior and will be lost if @@ Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+the code is regenerated. @@ der Code erneut generiert wird.
+NOTE: This file is automatically generated. Do not change it directly. To change @@ HINWEIS: Diese Datei wird automatisch generiert. Ändern Sie sie nicht direkt. Zum Ändern
+or occurring in this file build errors go to the Project Designer. @@ oder bei in dieser Datei auftretenden Buildfehlern wechseln Sie zum Projekt-Designer.
+Go to the Project Properties, or double-click the node "My Project" in @@ Wechseln Sie dazu zu den Projekteigenschaften, oder doppelklicken Sie auf den Knoten "Mein Projekt" im
+Solution Explorer). Make on the "application" for amendments. @@ Projektmappen-Explorer). Nehmen Sie auf der Registerkarte "Anwendung" entsprechende Änderungen vor.
+
+General Information about an assembly is below the @@ Allgemeine Informationen über eine Assembly werden über die folgenden 
+Attributes controlled. Change these attribute values ​​to modify the information @@ Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+that are associated with an assembly. @@ die mit einer Assembly verknüpft sind.
+The values ​​of the assembly attributes check @@ Die Werte der Assemblyattribute überprüfen
+The following GUID is for the ID of the typelib if this project is exposed to COM @@ Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+Version information for an assembly consists of the following four values: @@ Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+Major Release @@ Hauptversion
+Minor Release @@ Nebenversion 
+Build Number @@ Buildnummer
+Revision @@ Revision
+You can specify all the values ​​or default the Build and Revision Numbers @@ Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 
+take over by "*" in: @@ übernehmen, indem Sie "*" eingeben:
+
+This code was generated by a tool. @@ Dieser Code wurde von einem Tool generiert.
+Runtime Version: 4.0.30319.269 @@ Laufzeitversion:4.0.30319.269
+Changes to this file may cause incorrect behavior and will be lost if @@ Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+the code is regenerated. @@ der Code erneut generiert wird.
+This class was automatically generated by the StronglyTypedResourceBuilder @@ Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+Class via a tool like ResGen or Visual Studio automatically generates. @@ Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+To add or remove a member, edit your.ResX file and then run ResGen @@ Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+with the / str option again, or create your VS project. @@ mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+A strongly typed resource class for finding localized strings, etc. @@ Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+Returns the cached ResourceManager instance used by this class. @@ Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+Overrides the CurrentCulture property of the current thread for all @@ Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+Resource allocations that use the strongly typed resource class. @@ Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+
+This code was generated by a tool. @@ Dieser Code wurde von einem Tool generiert.
+Runtime Version: 4.0.30319.269 @@ Laufzeitversion:4.0.30319.269
+Changes to this file may cause incorrect behavior and will be lost if @@ Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+the code is regenerated. @@ der Code erneut generiert wird.
diff --git a/Tools/TranslateComments/extract_comments.ps1 b/Tools/TranslateComments/extract_comments.ps1
new file mode 100644
index 0000000000000000000000000000000000000000..9f220bbc481a3b9570676675a97cb3c22beda5a0
GIT binary patch
literal 9730
zcmeHNTW=Fb6h6<D`X5YcDNce7;i6WwP#{2v6apfFRthu?i33*SgxU_I4f*SBzi*C@
z&&;fMy`e8usw{hVXXo6nGvmMhmapY2`39ecEK3K!tFkL2c_&>N;AvM5@oC6VdU7Oh
zao?3Te)-hJ_?{d~AD=FsN0`-_;3M7x%sa%m;_AvN?gzlRhikh4+mN#W-2h&GdVp_8
zOPaC+ywApbH2|r!o4~ybnxp9L0w7W>hOIf~hFssqSFt_{9FqIpAjS6y2L{^(ukRpf
zL+0d8_z+&D>tZa0I!|zr%cB76RM*G)+mI7beG~MP;vkgixCocdjk#+=dZl+Rx4@%e
z$$50$xi)Aq<$V(z(b8(C&0saPKeg|cScK+3fd9*~C|B_1z0Xj)9|f)bBClYnMVSZ0
zqHIIkZTVAPLwB725E`N<?FX6PV(f)%$s_p=cb^h%&i0{CfT1L2yQk1Gz0E8=i(UsD
zUMcuy2RP`x#B5)UnroO(FMT5SWCMKPlXY2;HApm+_hTJ0j*cK*BS<&|_FcpQpE>>q
zu6Z0afYs>ms<f^LT5G_34Er!n>COBlZ@i<AYK)P-&8dpYUV^PX!PbHlc`U^dNj>%h
z4~z{)#w$p)1g|qow`2w53-TjIeuC9oxPF8Lix_KSei6Uf%ssjZy;4rn=z`O2xdyLE
z{r?<P=&!?|jkCo1MT~PL@v5Fr%TSZKJ!ob10D5HVVPzW3efOfCNFSgt7VWu%+%tf!
z`xCB;zH$SS)bY$5dk=USv*xjHgHOG|^Pc>MarLof+#QDsK|0LUgrWA-3dbRLzYko#
z3Av<?H|~cGxrtmcjlYI4-w?O@HtR*~%lq)V+&W5MIV;y0-<uUpU(GSDA!@>G+Y^d;
zUv=*gxemLiST-xB*bI_Y!{uB$hn=8DR$<oX%h0#;GVPsWVjedbliIEa$c@arBiK)^
zp8GQ27p2<|Ravbt%s5fLNV^!{2f?na=soEBD&m+j^zh4`f^k<St<79QhAHB;C?~X4
zJgaNQ<#wQy=MINFC_tJ8XF-k%kd*#&pp19=%m8}nL(dCYwlj`B7rV?I#MlV&GQjT;
zIk$)FJK&g~bS?A1SFS(9?fG{uSj6~ZwPyCacqYpub|-kAdzM8BJ>eeeCMzc^W}4}Z
zzc}N&9%4JRL)Ku0y%c=a-<9j=F7!n0TvR{qIbV)`7~!$D_^cI<ciK(d4Egs7G(A90
zDa*EbE%fex2nrv^KBm>62Ry6<Ts3fneR`brNxPVHxOz|y*nJf9J@bV{ahmm}<(eii
z+y)g^kpD9cGphT(<wPI(ax+cr!LcXL>hx@G6WLSc-G(Q0gNL7@cf5s9+Ec23S&pMm
z&B1fDn_aj-KdX>ypv3haX|5m=*blMSou0{zThC(s8u`bd7#DjJIVtfrs_JXR^(yEe
zBgei6{cX8k=$Q>eer*CuW6gX;DRkszi0TtaQ!R;MbWE)8x`s7eTpjHL(`jv7T+<qs
zGAWmX<aPOsYe>G%F&Xl!%cQ&%*Ah8|J?k!jLH&R=(H(fjG#@vJbQi%!?OFxtzT~#_
zJrl21v+JBui~E5WutXm@h3f&X$yj5(3Ot41#Z{mM4`e^WDA*64ZE?oTq<a<IsrWV6
zw-NRhZ1yc+<{Xpad@^eb7#{@>?*o>zT&jGh!(_;>jL#7wWB|(59{ukvaVg2d_4WP@
z;EoF2rT2T)e4E6KXLj+d%(LS+jtlpsxMGy`nAShlk0!@zvF#%rtOHN5MkF=*6xT2<
z>`~6jq$YK>=B8u6I$q0|$Mu58F2Tdt2Rm=Gd@R;seQi`(`g8a_i=u)YeUiKQuzzP%
zxisgHuG*8TBOuNWvDT;Ow-guoigQ_fzZoL5jVh}C%M}6Fi17}j)+*nBzJ|BnL&mEL
zuM3o)d)rm}j^x8Q<-L8)yX<P?+EITSI_hUw!EAx+$Dm<*#KVBW`&i!tC`w>l6Su<K
z4!Za1s+D->J>IXoj~&%j>_KjTgR?}xO+=LTB+ScP9ctupUzU4K`uh^_E0EzSM&>i$
z(DnN5pugquJJr-Pc@Bsbz;5DGq};>WeJR7{8HRiOWtqkH+^biwz9VnhggB>VksGC1
zB=%*~w&otKGr9JhW*$RzazGOveu@g|HIaICFPXK6aFGsoC*-!Yvu!~?+>I^oPu)Is
z`cihF#*=rW)wxAGBc6kp)rceSU@z9&F$;CkmE?MzhMD`x^}Acfq{V)IbzS9F_3mpY
zRFpI(b3FDO`y#t8#mZ6U1NL1mpKH;3sfY42`YE0QrTkd0wTfun3h#G5s~4@~;U<e+
zW0~$F15t`J1J06aHrJN7m8L$OkM}%y(nOlNGrflzaER)1jAvR_=a%mSPp>VksFo{u
zI?8$#XJ)GrylS0z0L^b8PsVTTUT4rUk1^wUn3Glk_J1cKS90H^hjTPiO|{6qnbgbN
zJM+`juKbSKej?~+t>v9+ifujgXI;qT=b5apdQQvr^?Il}JgJ>NmpvAHyK;)=LF(x|
z=h9qBX{O<<&N{IlvMVyIc@{USxlheLaq`L#b84rM_0OBz&|^E;$9jn}9%GqUX{l4^
zq72F;kGZU`&zNSF9#j31CaY?C7H?Ej%f%GbOBFJghdA}$04@n*N-6U$jUwW$A0x`E
z)2I_8u6yUGGdYK@?*Z2RIKEu=qIUml|2Uw1*zcGB>wuY?InMth@Bs4<VDl3|<?DjD
zoArMwq@#8Ju`q`<6Zx}Tz`YFPQ+F)%JkI<#&VrXGxhci*F!X)gCFFk-R)DXEkv^{J
z`bIg<b9-kzH|8q8*E+HWt$l#jyl1det$5d_IK~)jp!a_XSqXa#>u^7DfTu221wKBH
zdE9M3gk@Nd^o;jQwPpVAlhi7yWx3AeE-KHWXea(pquR##iGOb8A#72-?&RAI(A)ww
o(xv_MEJOcmVdu1Mq4(2k`uN)VkZU#CqiTiRfd$D2{RQ8D0Ake&`Tzg`

literal 0
HcmV?d00001

diff --git a/Tools/TranslateComments/translate_from.txt b/Tools/TranslateComments/translate_from.txt
new file mode 100644
index 0000000000..51a0a26037
--- /dev/null
+++ b/Tools/TranslateComments/translate_from.txt
@@ -0,0 +1,2295 @@
+
+Für MyApplication sind folgende Ereignisse verfügbar:
+Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
+Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst, wenn die Anwendung nicht normal beendet wird.
+UnhandledException: Wird ausgelöst, wenn in der Anwendung eine unbehandelte Ausnahme auftritt.
+StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist. 
+NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
+Initialisierung
+Pfade
+Falls Ordner nicht vorhanden: Erstellen!
+Directories.txt vorkonfigurieren
+Trennzeichen!
+Klassen initialisieren
+Config
+Log starten
+Dateigröße checken
+Falls Log zu groß: löschen
+Lizenz initialisieren
+
+Erste Zeile: Version
+V" entfernen => Zahl bleibt übrig
+Falls Version ungültig: Abbruch
+Version festgelegt
+Zeile      Variable        Typ         Beschreibung
+01)       WorkDPath       String      WorkDir
+02)       LastMode        Short       Letzter verwendeter Modus (entspricht CBoxMODE.SelectedIndex)
+03)       IntpV2          Boolean     Neuen Interpolator verwenden
+04)       nnormEngStop    Single      Unter dieser Drehzahl Engine Stop
+05)       TEMpath         String      TEM_Data Pfad
+06)       LastTEM         String      Letzte TEM Datei   -nicht in Options Form!!!
+07)       TEMexl          Boolean     Open TEM in Excel  -nicht in Options Form!!!
+08)       EAAvInt         Short       Analyse intervals of seconds. Wenn 0: Wert abfragen
+09)       ModOut          Boolean     Modale Ausgabe
+10)       WegKorJa        Boolean     Wegkorrektur damit bei Geschw. Reduktion Zyklus nicht kürzer wird
+11)       GnVorgab        Boolean     Gang- bzw. Drehzahl
+12)       LogSize         Int16       Maximale Log-Größe [MiB]
+13)       FZPsort         Boolean     FZP sortieren (früher Standard da VISSIM die .fzp nach Sekunden sortiert ausgibt)
+14)       FZPsortExp      Boolean     Sortierte FZP exportieren
+15)       BATCHoutpath    Boolean     Ausgabepfad für BATCH-Modus:   <WORKDIR>, <GENPATH> oder Pfad
+16)       BATCHoutSubD    Boolean     BATCH-Ausgabe in Unterordner (je .gen Datei)
+17)       AirDensity      Single      Luftdichte
+18)       FinalEmOnly     Boolean     Nur Final-Emissions ausgeben
+19)       FCcorrection    Boolean     FC-Korrektur im BATCH-Modus
+Früher:  IntpV2 = CBool(line)
+
+Min/Max suchen
+Normieren
+Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+
+Fahrzustände in Sekunden
+Fahrzustands-Anteile
+Beschl.-Parameter
+3s-Beschl
+Fahranteile Stop/Acc/Dec/Cruise
+Durchschnitts-Beschl
+
+XY-Triangulierung
+XZ-Triangulierung
+
+Anleitung zur Einbindung neuer DEV-Options *********************************
+1. Eintrag in "Sub New()"
+I) Neues cDEVoption Objekt definieren mit "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)"
+ConfigType      <tDEVconfType>  ...definiert Typ: Boolean, Integer, Single, String, Menüauswahl (Integer) oder Verweis auf Funktion
+Description     <String>        ...Beschreibung des Parameters
+SaveInConfg     <Boolean>       ...Ob Einstellung für nächsten PHEM-Start gespeichert werden soll
+Enabled         <Boolean>       ...Ob Einstellung im DEV-Tab geändert werden kann
+II) Default-Wert definieren. Hier wird unterschieden welcher ConfigType verwendet wird:
+a) ConfigType = tBoolean:
+Conf0.BoolVal = ...             <Boolean> 
+b) ConfigType = tSingleVal:  
+Conf0.SingleVal = ...           <Single>
+c) ConfigType = tStringVal:    
+Conf0.StringVal = ...           <String>
+d) ConfigType = tIntVal:    
+Conf0.IntVal = ...              <Integer>
+e) ConfigType = tAction:
+Conf0.ActionDelegate = New cDEVoption.dActionDelegate(AddressOf NameDerFunktion)
+Wobei NameDerFunktion die aufzurufende Funktion ist die einen <String> übergibt: "Public Function NameDerFunktion() As String"
+f) ConfigType = tContMenIndex:
+Verfügbare Auswahl-Möglichkeiten als <String> definieren:
+Conf0.AddMode("Auswahl 1")
+Conf0.AddMode("Auswahl 2")
+usw...
+Default-Wert definieren: Erste Auswahl = 0
+Conf0.ModeIndex = ...       <Integer>
+START: Parameter konfigurieren '****************************
+ENDE: Parameter konfigurieren '*****************************
+Initialisiert die tatsächlichen Config-Parameter aus der MyConfigs-Liste 
+Demo für Delegate Function
+Darf nicht sein
+
+Transient Correction
+Komponente wird sekündlich ausgegeben
+ATVals definiert (EXS)
+Summen/DruchschnittsWerte
+Durchschnitt
+Summe (g/h umgerechnet in g)
+
+GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '**********************
+Erg-Einträge erstellen '**********************
+Fahrzeugtyp-unabhängig
+Jede GEN-Datei auf Modus und Kennfeld checken
+nix...
+Elektrofahrzeug / Hybrid
+EV & HEV
+Nur EV:
+Konventionell / Hybrid  (Alles außer EV)
+Konventionelles Fahrzeug...
+Aus den Messdaten
+x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+Aus dem Kennfeld
+x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+derzeit nix
+Fahrzeugbesogene Felder
+CylceKin
+ErgListe sortieren damit g/km und g/h nebeneinander liegen
+Fahrzeugtyp-unabhängig
+Länge, Geschw., Steigung
+Durchschnitts-Geschw. berechnen
+Durchschnitts-Steigung berechnen
+Positive effektive EM-Leistung
+Positive effektive Batterie-Leistung = innere EM-Leistung
+Positive innere Batterie-Leistung
+Verbrauchte Energie berechnen
+Negative effektive EM-Leistung
+Negative effektive Batterie-Leistung = innere EM-Leistung
+Negative innere Batterie-Leistung
+Geladene Energie berechnen
+Energie in/aus Batterie
+EtaEM
+EtaBat
+Delta SOC
+Nur EV:
+Energieverbrauch
+Konventionell d.h. alles mit ICE (nicht EV)
+Emissionen
+x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich
+Leistung, Drehzahl
+Ppos
+Pneg
+Nur Gesamtfahrzeug (nicht EngOnly)
+Pbrake-norm
+Eair
+Eroll
+Egrad
+Eacc
+Eaux
+Ebrake
+Etransm
+Masse, Loading
+CylceKin
+EposICE
+EnegICE
+Ausgabe-String erstellen:
+Datei öffnen
+Datei schließen (wird nach jedem Job neu geöffnet)
+Datei öffnen
+Datei schließen
+Ausgabepfad definieren
+Datei öffnen
+Datei öffnen
+Datei schließen (wird nach jedem Job neu geöffnet)
+
+Durchschnitts-Geschw. berechnen
+TODO: Mission nicht Zyklusname
+TODO: Test Setup
+
+Unterprogramm zur Korrektur der verbrauchswerte nach Motorgroesse (fuer HBEFA-Berechnungen, da dort
+alle LKW-Groessen mit gleichem *.mep gerechnet werden
+Korrektur des Kraftstoffverbrauches
+nur für Handbuchrechnungen und LKW
+für Euro0 und früher werden größenabhängig 3 verschiedene KF verwendet
+daher hier keine Größenkorrektur
+Korrekturfunktion für Euro1 und Euro 2 1:1 von Stand ARTEMIS übernommen
+Korrekturfunktion Euro 3 gg. ARTEMIS geringfügig adaptiert (siehe FcCorr_Eu3ff.xls)
+Korrekturfunktion für Euro 4 ff analog zu Euro3
+lediglich adaptiert: Durchschnittsnennleistung der ins mep verwursteten Motoren
+Euro6ff
+
+GEN einlesen
+VECTO: Defaultwerte für Parameter die nicht mehr in der .GEN/.VECTO sind werden beim Einlesen über SetDefault belegt.
+Fehlermeldung in Init()
+Einlesen der KFZ-Spezifikationen aus 'KFZspez'
+FLD muss jetzt vor MAP/MEP eingelesen werden falls dort <DRAG> Einträge sind!
+Normieren
+Kennfeld: Spalten 1 und 2 sind die x- und y- Koordinaten (Pe,n), die
+uebrigen sind Messwerte
+Emissionen und Verbrauch in (g/(h*(kW_Nennleistung) bei SNF
+Emissionen in (g/h) und Verbrauch in (g/(h*(kW_Nennleistung) bei PKW und LNF
+Kennfeld einlesen
+Normieren
+Einlesen des KFZ-Fahrzyklus (Nicht in ADVANCE).
+LUZ: 04.02.2011: Ab jetzt ausserhalb von LESE wegen neuer BATCH-Struktur
+Dynamik-Korrekturparameter, falls dynamokkorrektur ausgewählt:
+Parameter aus multipler Regressionsanalyse, Differenz zu stationär in
+SNF: (g/h)/kW_Nennleistung fuer einzelne Parameter
+PKW  (g/h) für Emissionen , (g/h)/kW fuer Verbrauch
+Einlesen der Daten fuer Hybridsimulation:
+TODO: EV/HEV Init hierher!
+
+Hauptprogramm für alle Modi
+Falls es zu "ungeplanten" Abbruch kommt
+Fehler zurücksetzen
+Modus festlegen und Meldung
+Lizenz checken
+BATCH-Ausgabeordner erstellen falls notwendig
+MOD-Daten Klasse initialisieren
+TEST: Schaun ob's auch ohne dem geht: MODdata.Init()
+ERG-Klasse initialisieren
+Warnung wenn ungültige/unrealistische Einstellungen
+Meldungen
+Progbar-Init
+Schleife zur Berechnung fuer alle vorgegebenen Zyklen und Fahrzeuge:
+Job-Schleife ****************************************
+Check ob Abbruch
+Falls Error beim GEN einlesen
+Einlesen der Inputfiles
+BATCH: Zyklus aus DRI-Liste
+ADVANCE: Zyklus wird nicht eingelesen
+Überprüfe ob alle Modi in der GEN Datei lizenziert sind
+Falls Optimierer aktiv werden hier die Parameter eingelesen
+BATCH: Sub-Dir Ausgabeordner erstellen
+Zylus-Schleife ****************************************
+ProgBar
+BATCH-Modus: Fahrzyklus nicht aus GEN-Datei sondern aus DRI-Liste
+Status
+Ausgabe-Name definieren
+VECTO-Zylus-Schleife **********************************
+ProgBar
+TODO: Loading Schleife
+VECTO-Loading-Schleife *********************************
+Einstiegspunkt für SOC-Start Iteration
+Aufraumen
+Zyklus einlesen
+Einlesen
+v(s) in v(t) konvertieren (optional)
+In 1Hz konvertieren (optional)
+Fehlermeldung in DRI.Convert()
+Entnormieren
+Zyklus-Vorgaben initialisieren (Geschw, Beschl, ...)
+Rechne .npi-Leistung in Pe und P_clutch um
+ACHTUNG: VehmodeInit benötigt Infos aus GEN und DRI!
+Fehlermeldung innerhalb VehmodeInit()
+TODO: Meldung...
+CycleKin (für erg/sum usw.) berechnen
+Emissionen und Nachbehandlung - wird bei EV-Modus nicht ausgeführt
+Sekündliche TC Parameter ermittlen
+Kennfeld Erstellung
+Rohemissionen berechnen
+TC Parameter umrechnen in Differenz zu Kennfeld-TC-Parameter
+Dynamik-Korrektur
+Korrektur der Verbrauchswerte kleiner LKW-Motoren bei HBEFA
+Exhaust System Simulation
+Summen / Durchschnitte bilden
+Engine Analysis
+Sekündliche Ausgabe ***
+VECTO Ausgabe
+TODO: Loadings umschalten...
+Ausgabe für BATCH und ADVANCE
+In ADVANCE ist Zyklus-Abbruch = Job-Abbruch
+Ausgabe in Erg (Erste Berechnung - Initialisieren & Header)
+Daten aufräumen
+Status-Update
+TODO: Loading Schleife
+ENDE *** VECTO-Loading-Schleife *** ENDE ************************
+ENDE *** VECTO-Zylus-Schleife *** ENDE *************************
+ENDE *** Zylus-Schleife *** ENDE ******************************
+If GEN.irechwahl = tCalcMode.cmHEV Then MsgStrBuilder.Append(" (dSOC = " & SOC(MODdata.tDim) - SOC(0) & ")")
+Check ob Abbruch
+ENDE *** Job-Schleife *** ENDE *******************************
+
+Korrigierte Emissionen (wird von SOC-Iterations-Modul bestimmt)
+Opt_Interface Ein/Ausschalten
+Initialisierung
+Initialisierung
+Zähler null setzen
+Korr. Em. löschen 
+TODO: I/O-Verzeichnis festlegen
+Timer initialisieren/starten
+Parameter einlesen
+Einlesen der Input-Datei mit Opt-Parameter
+Parameter ausgeben
+Ausgabe der Output-Datei mit Zielfunktion
+Ausgabe StatusString
+Berechnung der Zielfunktion
+Ausgabe der Zielfunktion
+Opt Deaktivieren
+Status-Meldung (darf nicht von BGWorker aufgerufen werden)
+Starte PHEM - wird von F_MAINForm.ComMsgTimer aufgerufen wenn Start-Signal erhalten
+PHEM starten
+Timer anhalten
+Zähler + 1
+PHEM starten
+PHEM fertig - wird von BackgroundWorker1_RunWorkerCompleted aufgerufen wenn PHEM beendet
+Ausgabe der Zielfunktion
+PHEM_Launcher beenden
+Timer wieder starten
+Beendet PHEM_Launcher
+
+Check ob Vorzeichen von Delta-SOC sich ändert
+Vorzeichenwechsel...
+Limit erreicht => Abbruch
+Falls die letzte Iteration die Beste war (SOCnAbbr = True): Abbruch
+Falls eine andere Iteration besser war (SOCnAbbr = False): Wiederholen
+Check ob LinReg möglich: Mind. 2 Berechnungen; Mind. 1 dSOC-Vorzeichenwechsel
+Unkorrigierte Em verwenden wenn SOC-Iteration OK
+Unkorrigierte Em verwenden
+Korrigierte Emissionen für Optimierer
+Falls SOC-Iteration erfolgreich (oder Lin.Reg. nicht möglich) dann Emissionen der letzten Berechnung (unkorrigiert) verwenden
+
+TODO: Weg damit! SOC-Iteration gehört in die Leistungsschleife oder nach Em-Berechnung für LinReg
+Dateiformat
+Log starten
+
+Zeile 1: FZP-Datei
+Zeile 2: FLT-Datei
+Zeile 3: TEM-Datei
+Zeile 4: RndSeed
+Zeile 5: MISKAMout True/False
+Zeile 6: STRfilter True/False
+Zeile 7: Distance filter für SUM.STR
+Zeile 8+: STR Dateien
+
+Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien 
+Berechnung
+ADVANCE Initialisierung
+ADV Datei einlesen
+Check ob FLT vorhanden
+Check ob sortierte FZP vorhanden
+FLT einlesen (muss vor STR sein wegen cSTRerg)
+EMlist erstellen
+STR einlesen
+Listen erstellen
+FZP einlesen
+FZP sortieren (und exportieren)
+FZP Check
+Für AusgVis
+Ausgabe-Initialisierung
+Dateinamen
+Modale Ausgabe
+Startwerte
+ADVANCE Speicher frei geben
+Ausgabe
+Speicher freigeben
+Listen löschen
+Garbage Collection - Soll "System Out of Memory" Exception verhindern (tut's aber nicht!)
+ADVANCE Fahrzeugberechnung
+Check ob Fertig
+Zyklus-Klasse initialisieren
+Fahzeugnummer und Typ definieren (bleibt hier konstant)
+Altes Fahrzeug ist VehStrAlt, Aktuelles ist VehStr
+Listen erstellen
+t0
+Definiere Felder für Fahrzeug-Berechnung
+Check ob neues Fahrzeug 
+Allgemeiner Fahrzyklus
+Strecken-Auswertung (MISKAM)
+StatusMSG(7, "Calculation running... " & CInt(zFZP / FZPlen * 100).ToString("00") & "%", False)
+Fahrzeug-Identifizierung
+Check ob Zyklus zu kurz => Ãœberspringen
+Fahrzeuganzahl je Typ erhöhen
+Check ob letzte Gen-Datei neu zu verwenden ist, sonst Belegung durch FLT
+VehStr ist ab jetzt ALT
+Abschnittsweise Berechnung
+Zyklus durchschleifen
+Nr. der STR-Datei
+Falls Wechsel in STR-Nr:
+Alte STR-Nr abschließen
+Distanz (gefahrene km)
+Reisezeit in h
+Kfz-Anz
+Summen-Emissionen
+Aufsummieren
+Letzte STR abschließen
+Distanz (gefahrene km)
+Reisezeit in h
+Kfz-Anz
+Summen-Emissionen
+FLT einlesen
+FZP einlesen
+Dateilänge bestimmen
+Arrays dimensionieren
+Datei einlesen
+Kommentare überspringen
+Strecken die nicht in der STR Datei aufgeführt sind werden hier entfernt
+Arrays belegen
+Progress-Ausgabe
+Speicher freigeben
+Arrays neu dimensionieren
+FZP sortiren
+Aktuelles Fahrzeug ist vNr1
+Zähle Fahrzeuge mit vNr = vNr1
+vNrAnz = Anzahl der Fahrzeuge mit vNr = vNr1
+Sortiere alle Fahrzeuge mit vNr = vNr1 nach Fahrzeugnummer
+Zwischenspeicher = Zeile x1
+Zeile x1 = Zeile x2
+Zeile x2 = Zwischenspeicher
+vNr1 nach Zeit sortieren
+Zwischenspeicher = Zeile xx1
+Zeile xx1 = Zeile xx2
+Zeile x2 = Zwischenspeicher
+Status-Ausgabe
+FZP exportieren
+Daten
+STR einlesen
+SID-Liste erstellen
+Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben
+ADV einlesen
+ADV Datei einlesen ********
+Zeile 1: FZP-Datei
+Zeile 2: FLT-Datei
+Zeile 3: TEM-Datei
+Zeile 4: RndSeed
+Zeile 5: MISKAMout True/False
+Zeile 6: STRfilter True/False
+Zeile 7: STR.SUM Streckenfilter
+Zeile 8+: STR Dateien
+Ausgabepfad definieren
+File mit Summen Ergebnissen ueber alle Kfz:
+Ausgabe Schließen
+Umrechnung auf g Emissionen je Sekunde sowie Kfz/Tag
+Umrechnung auf mg Emissionen je Meter
+Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet:
+Ausgabe der Ergebnisse
+Filename fuer Ergebnisfile = Name Eingabefile aber mit *.sd3:
+File mit Summen Ergebnissen ueber alle Streckenstuecke:
+Unterprogramm zu PHEM/Advance zur Ausgabe der Ergebnisse an MISKAM Luftguetemodell von Lohmeyer
+Daten jeweils durch Semikolon getrennt ausgegeben
+Aufaddieren der Emissionsdaten nach Streckenabschnitten, ueber jede Sekunde fuer jedes Fahrzeug
+Achtung: jeweils 2 Richtungen je Abschnitt moeglich aber nur StrId in *.fzp uebergeben -> auf "naechstgelegene"
+Richtung zugewiesen
+Suche nach naechstgelegenem Strassenteilstueck
+Koordinaten Kfz:
+Koordinaten Strecke: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) aus Eingabe
+Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j
+Falls Streckennummer auf *.fzp File in *.str File nicht existiert, wird auf naechstgelegenes Stueck zugewiesen (gleiches System wie oben):
+Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten:
+berechnung sekuendlich in (g/h)/3600 -> g/Strecke ueber gesamte Zeit
+Zaehlen der Kfz fuer DTV (nur wenn nicht in voriger Sekunde auch schon auf der Strecke
+Grobe Rechnung Benzol nach GLOBEMI (HBEFA):
+Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!:
+Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1
+SO2-Emissionen aus dem  im Kraftstoff enthaltenen
+Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2
+Ausgabe der einzelnen STR-Ergebnisse '*********
+Ausgabe Summen über alle STR's '*********
+Datei-Header
+Em je km ***************************
+Em je Segment
+Segment-Name
+Anzahl Fahrzeuge
+Reisezeit
+Em je km
+Schreiben
+Em je Vehicle Type
+Anzahl Fahrzeuge
+Reisezeit, Strecke, Avg.Speed
+Em
+Schreiben
+Summe
+Segment
+Anzahl Fahrzeuge wird nicht aus STRerg berechnet (macht keinen Sinn) sondern aus cFLTfleet-Aufzeichnung
+Reisezeit
+Em je km
+Schreiben
+Em abs ****************************
+Em je Segment
+Segment-Name
+Em abs
+Schreiben
+Em je Vehicle Type
+Em
+Schreiben
+Summe
+Segment
+Em abs
+Schreiben
+mod-Datei zerlegen
+InFile öffnen
+Anzahl VehNummern
+Schleife durch alle VehNummern in Liste
+Abbruch falls Userabbruch
+Abbruch falls Datei fertig
+Ausgabedatei öffnen / Abbruch wenn Fehler beim Öffnen
+Schleife durch Datei
+Falls String schon eine VehNr enthält wird Zeile nicht nochmal eingelesen (siehe unten)
+Zeile einlesen
+Falls Zeile mit VehNr gefunden: VehNr rausholen
+Falls VehNr die gesuchte ist: Ausgabedatei schreiben
+Erste Zeile schreiben ("VehNr: ...")
+Nächste Zeile lesen (sonst wird Do While übersprungen)
+Schleife bis nächste VehNr / Dateiende
+Wenn nächstes Fahrzeug:
+Wenn gleiche Fahrzeugnummer: Datei weiter schreiben
+Header und Units überspringen
+Sonst: Raus aus Schleife
+Zeile schreiben
+Zeile lesen
+Falls nicht EndOfStream Flag setzen damit nächste VehNr nicht übersprungen wird
+Ausgabedatei schließen
+Aus der VehNr-Such-Schleife raus springen
+ProgBar
+FLT Klasse
+Initialisieren
+GenDatei Zufallsgenerator
+Klasse für abschnittsweise Auswertung
+Datei-Header
+Em je km ***************************
+Ergebnisse je Veh-Type
+Anzahl Fahrzeuge
+Reisezeit
+Em
+Schreiben
+Summe
+Anzahl Fahrzeuge
+Reisezeit
+Em
+Schreiben
+Em absolut *************************
+Ergebnisse je Veh-Type
+Em
+Schreiben
+Summe
+Em
+Schreiben
+Datei schließen
+
+Fav-Dlog: "Abbrechen" => "Cancel"
+Fav-Dlog: Statt leeren Items in Fav-Liste "<undefined>"
+Anwendung
+Benötigte Globale Variablen (Default):
+Neue Instanz - ID definieren, umschalten auf FolderBrowser
+OpenDialog - Öffnen Dialog - Übergibt True wenn Dialog mit OK beendet wurde
+SaveDialog - Speichern Dialog - Ãœbergibt True wenn Dialog mit OK beendet wurde
+Dialog öffnen - Übergibt True wenn Dialog mit OK beendet wurde
+File-History manuell updaten
+File / Folder History speichen und Speicher freigeben
+Dateiendungen definieren
+Dateien abfragen
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+Wenn leerer Pfad: Aktuellen Ordner (MyFolder) nehmen
+Abbruch wenn leerer Pfad
+Dateien in Array übernehmen
+Mehrere Dateien ausgewählt 
+Einzelne Datei
+Primäre Extension (u.a. für bForceExt)
+Falls Datei ohne Pfad angegeben dann Pfad hinzufügen
+Falls statt Datei ein Ordner eingegeben wurde: Auf Ordner wechseln und Abbruch
+Check ob Datei mit Ext angegeben
+Falls Datei ohne Endung (nach bForceExt-Abfrage) und nicht existiert dann primäre Endung hinzufügen
+Check ob Datei existiert
+Ja: Check ob Overwrite wenn bOverwriteCheck
+Nein: Abbruch wenn bFileMustExist
+MyFiles definieren
+FolderHistory ContextMenu laden
+Pfad definieren
+Falls kein Pfad angegeben wird: Letzter Ordner, kein Dateiname
+Falls Pfadlänge zu klein (Pfad ungültig): Letzte Datei
+Ordner öffnen - Falls kein Ordner im Pfad: Letzter Ordner
+Falls Datei ohne Pfad angegeben
+sonst: 
+Form anzeigen----------------------------------------------------
+Globale Folder History updaten
+Schließen und File/Folder History speichern
+Umschalten auf FolderBrowser
+Initialisieren
+Globale FileBrowser Initialisierung
+Laufwerk-ComboBox laden
+Laufwerk-Liste erstellen
+FolderHistory einlesen
+Context Menu sortieren
+Context Menu sortieren
+Dateien
+Ordner
+Ordner wechseln
+Abbruch wenn keine Laufwerk-Angabe
+Suchfelder löschen
+Laufwerk setzen
+Ordner setzen
+Ordner Eine Ebene hinauf
+FolderListe laden
+FolderListe löschen
+Ordner hinzufügen
+Dateiliste laden
+Abbruch wenn bBrowseFolder
+Extension-Filter definieren
+FileListe löschen
+Ordner hinzufügen
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Initialisieren
+Bild Links------------------------------------------------------------------
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Initialisieren
+Schließen
+Inputfile- Steuerelemente------------------------------------------
+Browse Button-Click Events
+ADV speichern
+Neue leere ADV
+ADV in Form laden
+Zeile 1: FZP-Datei
+Zeile 2: FLT-Datei
+Zeile 3: TEM-Datei
+Zeile 4: RndSeed
+Zeile 5: MISKAMout True/False
+Zeile 6: STRfilter True/False
+Zeile 7: Distance filter für SUM.STR
+Zeile 8+: STR Dateien
+ADV aus Form speichern
+ADV.STRpathsClear()    '<= Nicht notwendig da neues lokales cADV-Objekt
+Formular Änderungen (Kontrolle ob GEN gespeichert)---------------------------------
+Event Handler für Formänderungen
+Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Speichern oder Speichern als Function = true wenn Datei gespeichert
+ENG speichern
+Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Speichern oder Speichern als Function = true wenn Datei gespeichert
+Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Coolant System Simulation Zwischenspeicher
+Initialisiere Form (Lade Verlauf, Combobox-Listen,...)
+Damit Combobox-Inhalte aktuell sind
+Schließen
+Änderung der DynKor Checkbox
+Änderung der Kaltstart Checkbox
+Änderund der SCR Checkbox
+a_DesMax
+Damit Veh-Datei übergeben wird
+Damit Veh-Datei übergeben wird
+Damit Veh-Datei übergeben wird
+Speichern ("Save" bzw. "Save As" falls neue Datei)
+GEN in Form laden
+GEN einlesen
+Form updaten
+Kennfeld Erstellung-----------------
+Kalt Start--------------------------
+Dateien-----------------------------
+Kalt Start
+GEN aus Form speichern
+Kennfeld Erstellung------------------------------------------------------
+Kalt Start---------------------------------------------------------------
+Dateien------------------------------------------------------------------
+Kalt Start
+Neue leere GEN
+Kennfeld Erstellung-----------------
+Kalt Start--------------------------
+Dateien-----------------------------
+Kalt Start
+Event Handler für Formänderungen
+Start/Stop - Checkbox Änderung
+Start/Stop - Textbox Änderung
+TextBox.TextChanged Events => Change()
+Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+PHEM-Launcher
+Falls Aufruf während PHEM schon läuft
+GENlist-Selection löschen
+Modus festlegen
+Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe
+Status
+Job-Liste definieren
+File- / Zylus- Liste definieren
+Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt)
+Check ob Overall-Progbar benötigt
+Launch über Job_Launcher
+Datei-Listen definieren
+Job-Launcher
+Options aus Options-Tab laden
+Config speichern
+Msg-Ausgabe zurück setzen
+Button umschalten
+Options disablen
+ProgBars Start
+BG-Worker starten
+Beginne Arbeit
+SLEEP verhindern
+Bei x.ProgSec = -1 kein Update von ProgBarSec
+Arbeit fertig
+Progbar Reset
+Damit ListView-Item Farben (Warnung = Gelb, etc..) richtig sichtbar
+Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface
+ShutDown wenn Unexpected Error
+Options enablen / GUI Reset
+CommandLine Shutdown
+Auto Shutdown
+SLEEP reaktivieren
+Initialisieren
+Tabs richtig laden (sonst Problem mit Listviews)
+FileLists
+GUI Options laden (hier werden die GEN/ADV/DRI Listen geladen)
+Spalten skalieren... erst nach dem Laden der Dateilisten
+BackgroundWorker initialisieren
+Lizenz überprüfen
+Shown Event (Form-Load abgeschlossen)  ...hier werden StartUp-Forms geladen (DEV, GEN/ADV- Editor..)
+Datei mit PHEM öffnen
+ComLineArgs auslesen
+Modus umschalten
+Falls Datei angegeben
+Schließen
+FileLists speichern
+Log schließen
+Config speichern
+FileBrowser-Instanzen schließen
+Gesperrte Funktionen ein/ausblenden
+Datei aus Liste entfernen
+Datei zu Liste hinzufügen
+Datei öffnen
+GEN/ADV Liste: Datei hinzufügen
+Falls PHEM läuft: Vorgang abbrechen (weil Modusänderung während Berechnung nix gscheit)
+Modus umschalten falls nötig
+Wenn Datei schon in Liste vorhanden: Nicht hinzufügen (nur wenn einzelne Datei)
+Status reset
+Element auswählen und anhaken
+Sonst: Datei hinzufügen (ohne WorkDir)
+Anzahl updaten
+DRI Liste: Datei hinzufügen
+Modus umschalten falls nötig
+Anzahl updaten
+Me.TabPageDRI.Text = "Driving Cycles (" & c & ")"
+New GEN/ADV
+Open GEN/ADV
+Worker starten
+Selected Items zwischenspeichern
+Selected Items löschen
+Items einfügen und auswählen
+Modus ggf. umschalten (auf BATCH)
+Falls PHEM schon rennt: STOP
+Sonst: START
+Listen speichern falls Crash
+Modus Change
+Alte Liste speichern
+Neue Liste laden
+GEN Editor öffnen und Datei laden
+ADV Editor öffnen und Datei laden
+FileLists speichern
+ComMsgTimer_Tick Tick - Check ob neue Nachricht
+Modus einstellen
+Allgemein
+Falls Link => Öffnen
+Hand-Cursor für Links
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Dieser Aufruf ist für den Windows Form-Designer erforderlich.
+Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+Split
+Zu Int32 convertieren
+Sort
+Ende
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Initialisiere - Lade Config
+Config laden
+Optionen-----------------------------------
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Initialisierung
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Speichern oder Speichern als Function = true wenn Datei gespeichert
+Neue VEH
+VEH öffnen
+VEH speichern
+Change Status ändern
+Save changes ?" ...liefert True wenn User Vorgang abbricht
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+Wird vom Windows Form-Designer benötigt.
+Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+Job-Status => Jobliste Status-Spalte
+Zyklus-Status => Zyklusliste Status-Spalte
+Worker Progress => Progbar (ProgBarSec Update wenn ProgSec > -1; ProgBarSec-Reset bei ProgSec = 0)
+Progbar auf Continuous setzen
+Abbruch
+Status Message direkt an GUI - darf nicht durch den Backgroundworker geschehen!
+Statusbar  - Aufruf durch WorkerMSG oder direkt über Form, NIEMALS über Worker
+Status Form zurück setzen - Aufruf NUR durch Events, NIEMALS über Worker
+Klasse zum Ãœbergeben von Nachrichten vom Backgroundworker
+Falls String nicht Zahl dann Null
+Datei in Excel öffnen
+WorkDir oder MainDir einfügen falls kein Pfad angegeben. Spezial-Ordner einfügen
+Pfad trimmen
+Falls leere Datei => Abbruch
+sKeys ersetzen
+Replace - Ordner bestimmen
+Eine Ordner-Ebene hoch
+Pfad ergänzen falls nicht vorhanden
+Pfad eine Ebene nach oben      "C:\temp\ordner1\"  >>  "C:\temp\"
+Dateiname ohne Pfad    "C:\temp\TEST.txt"  >>  "TEST.txt" oder "TEST"
+Dateiname ohne Extension   "C:\temp\TEST.txt" >> "C:\temp\TEST"
+Dateiname ohne Pfad falls Pfad = WorkDir oder MainDir
+Pfad allein        "C:\temp\TEST.txt"  >>  "C:\temp\"
+TEST.txt"          >>  ""
+Endung allein      "C:\temp\TEST.txt" >> ".txt"
+
+Abbruch wenn's Datei nicht gibt
+Datei öffnen
+Kennfeld zurück setzen
+Transmission ration to engine rpm [-]
+Efficiency to engine [-]
+Efficiency auxiliary to supply [-]
+Efficiency Map
+Spalte 1 = Auxiliary speed [rpm]   => X-Achse
+Spalte 2 = Mechanical power [kW]   => Z-Achse (!)
+Spalte 3 = Output power [kW]       => Y-Achse (!)
+
+Private Const FormatVersion As Integer = 1
+Private FileVersion As Integer
+Vorgabe für EXS
+Parameter für KF-Erstellung
+Vorgabe für AUX
+Values.Add(tDriComp.t, New List(Of Single))            '<= brauchen wir erst wenn bei ADVANCE > 1Hz unterstützt wird
+Reset
+Abbruch wenn's Datei nicht gibt
+EmComp Init
+jetzt in New()
+Datei öffnen
+Erste Zeile: Version
+Falls Version ungültig: Abbruch
+Version festgelegt
+Falls keine Versionsangabe: Altes Format
+Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+Zweite Zeile: Namen/Identifizierung der Komponenten
+Spaltenanzahl/Komponenten checken
+Falls DRIcomp = Undefined dann wirds als EXS-Comp oder als Emission für KF-Erstellung / Eng-Analysis verwendet
+ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+Falls erste EXS-Spalte dann Dictionary erstellen
+Falls EXS-Componenten noch nicht in Dictionary dann erstellen
+Check ob ExsComp/Modul-Kombination schon vorhanden => ERROR
+Gvorg / Nvorg setzen:
+Dritte Zeile: Einheiten/Normierung
+VECTO: nix einlesen. Fixe Units (line = file.ReadLine)
+Normierungs-Unterstützte DRI-Komponenten
+PeNormed = (UCase(Trim(line(Spalten(tDriComp.Pe)))) = sKey.Normed)
+nNormed = (UCase(Trim(line(Spalten(tDriComp.nn)))) = sKey.Normed)
+PaddNormed = (UCase(Trim(line(Spalten(tDriComp.Padd)))) = sKey.Normed)
+MAP-Komponenten VECTO: Immer [g/h]!  
+Unit in String für weitere Checks speichern
+Klammern entfernen
+Normierung und Unit festlegen
+Zeile 4, 5: (optional, wenn oben "+"): Einstellungen für KF-Erstellung
+Falls "+" aktiviert
+Instanzen erstellen
+1. Option "Kennfeld normieren durch Pnenn"
+2. Option "Pfak anwenden"
+Ab 4.Zeile bzw. Ab 6.Zeile: Werte (derzeit keine unterschiedlichen Einheiten/Normierungen unterstützt)
+Datei öffnen
+TODO...
+Nvorg / Gvorg wird in ResetMe zurück gesetzt
+Geschw. umrechnen in m/s
+Normieren, falls notwendig
+Padd entnormieren, falls notwendig
+Pe normieren, falls notwendig
+Emissionen werden nur in x/h oder x akzeptiert (siehe ReadFile) !!!!!!!!
+Verzögerung limitieren ********************************
+Zeitreihe erstellen '***********************************
+Umrechnen in 1Hz '***********************************
+Check ob Zeit nicht rückwärts 
+Zeitgrenzen definieren
+Ausgabe-, Summen- und Anz- Dictionaries erstellen
+Startwerte
+Nächster Zeitschritt
+Falls Zeitschritt > tMax:
+Sekunde abschließen
+Falls keine Werte in Summe: Interpolieren
+Falls nur ein Wert: Inter- / Extrapolieren
+Neuen Bereich festlegen
+Check ob letzte Sekunde
+Neue Summe/Anz beginnen
+Neue Felder übernehmen
+
+Abbruch wenn's Datei nicht gibt
+Datei öffnen
+Kennfeld-Konfig
+FLD und MAP einlesen
+Kennfeld normieren
+Übergibt aktuell mögliche Antriebsleistung für geg. Drehzahl
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+Übergibt aktuell mögliche Generatorleistung für geg. Drehzahl
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+
+Abbruch wenn's Datei nicht gibt
+Datei öffnen
+Listen initialisieren
+Erste Zeile: Version
+Falls Version ungültig: Abbruch
+Version festgelegt
+Falls keine Versionsangabe: Altes Format
+Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Zweite Zeile: Namen/Identifizierung der Komponenten (Schlepp-Emissionen f. KF-Erstellung)
+Spaltenanzahl checken
+Abbruch falls weniger als 3 Spalten
+VECTO: Keine Header/Unit-Spalte. Immer PT1!
+Dritte Zeile: Normierung/Einheit
+Abbruch falls weniger Spalten als in zweiter Zeile
+Alles okay
+Zusatzkomponenten
+Klammern entfernen
+Normierung und Unit festlegen
+Ab Zeile 4: Werte
+Zeile einlesen
+VECTO: M => Pe
+Falls PT1 nicht vorgegeben wird Defaultwert verwendet (siehe oben)
+Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+Datei schließen
+ERROR-Label für sauberen Abbruch
+Datei öffnen
+Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+Datei schließen
+Drehzahl normieren
+Leistung normieren
+Leistung normieren
+Pe-Target normieren
+Em ent-normieren
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+Dynamische Volllast
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+
+Modus
+Erste Zeile: Version
+Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+GEN Datei einlesen ****
+Allgemein
+KF Erstellung
+Kaltstart
+Einzelne Nebenverbraucher
+Schaltmodell-Verteilung
+ERROR-Label für sauberen Abbruch
+GEN Datei einlesen ****
+Alten Rechenmodus in neue Modus-Schalter umwandeln
+Kennfeld Erstellung------------------------------------------------------
+Liest Sub Input Files ein die keine eigene Klasse haben, etc.
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+
+Abbruch wenn's Datei nicht gibt
+Datei öffnen
+Listen initialisieren (vor Version-Check damit ReadOldFormat funktioniert)
+Check ob MEP oder MAP
+wird jetzt weiter unten gecheckt beim Einlesen.
+Erste Zeile: Version
+Version festgelegt
+Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben
+Zweite Zeile: Namen/Identifizierung der Komponenten (Nur Em. Leistung, Drehzahl ist fix!)
+Spaltenanzahl checken
+Abbruch falls weniger als 3 Spalten
+Check ob Leistung/Drehzahl vertauscht
+Em-Komponenten initialisieren
+Default-Interpolator definiert in Em0 = New cEmComp
+Default Pe-Correction definiert in Em0 = New cEmComp
+Dictionary füllen....
+ERROR wenn Komponente in spitzen Klammern aber nicht bekannt
+Custom Em-Komponenten Dictionary:
+Default Em-Komponenten ***
+Default-Interpolator
+Default Pe-Correction
+Default-Name
+TC-Komponenten werden nicht ausgegeben
+Custom Em-Komponenten Dictionary:
+Eintrag in Referenz-Dictionary
+VECTO: Spalte 3 immer Verbrauch
+Abbruch falls schon definiert
+Dritte Zeile: Normierung/Einheit
+Abbruch falls weniger Spalten als in zweiter Zeile
+Normierung/Einheit einlesen
+EM-Komp Referenz
+Unit in String für weitere Checks speichern
+Klammern entfernen
+Normierung und Unit festlegen
+Check ob n/Pe Einheiten OK:
+Alles okay
+Zeile 4,5: (optional, wenn oben "+"): Einstellungen für Pe-Cor (altes Pfak)
+Falls nicht "+" werden Default Interpolatoren verwendet (s.o.)
+Zeile 4 einlesen
+Schleife über Em-Komponenten
+Zeile 5 einlesen
+Schleife über Em-Komponenten
+Ab Zeile 4 (bzw. 6): Werte
+Zeile einlesen
+Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+Drehzahl
+Leistung
+Emissionen
+Shep-Init
+Datei schließen
+ERROR-Label für sauberen Abbruch
+Datei öffnen
+Alte Kennfelder haben immer TC-Faktoren (sind halt evtl. Null)
+Werte
+Zeile einlesen
+Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt)
+Drehzahl
+Leistung
+Emissionen
+Shep-Init
+Datei schließen
+Abbruch falls Em-Komponente nicht in MAP
+Abbruch falls TC-Faktoren für die Komponente schon definiert
+Drehzahl normieren
+anders" normierte Drehzahl berechnen
+Leistung normieren
+Emissionen entnormieren
+ACHTUNG: Selbst wenn x_kWh bzw. x_hPnenn in x_h umgewandelt werden muss Normed gleich bleiben weil sonst die DynKor nicht stimmt!
+Werte sind bereits absolut angegeben
+Unterscheidung in [x] und [x/h] derzeit nicht verwendet/unterstützt
+Check ob Drehzahl/Leistung vertauscht
+FC Delauney
+Kennfeld-Erstellung
+Initialisiere Em-Komponenten *******************
+PeCorMode: Falls nicht in MES/NPI vorgegeben gilt bei Nicht-Default-Em was in cEmComp.New() eingestellt ist
+Falls TC angegeben dann Abbruch
+Interpolator auswählen
+Eintrag in Referenz-Dictionary (Es wird nicht überprüft ob Em-Comp. doppelt vorkommt weil das schon in DRI.ReadFile passiert)
+Infos ausgeben
+Dynamikparameter und Extrapol kommen noch dazu
+Mittelwert-Dictionary initialisieren ***************
+Mittelwerte berechnen **********************
+Haupt-Schleife
+Listen erstellen
+Schleife über Messwerte
+Bereich unter iMsek mit Messwert belegen
+Bereich über iMsek mit Mittelwerten der Messwerte belegen
+Keine Mittelwertbildung
+EmCheck: False = Wert noch nicht verwendet, True = Wert wurde bereits in Kennfeld verwurschtet
+Rasterung ****************************
+Schlepp hinzufügen mit halber nn-Schrittweite. Wird für Pfak benötigt. Falls GEN.KFinsertDrag deaktiviert wird sie später wieder gelöscht.
+Leerlaufpunkt hinzufügen
+NrUsed Erstellung / Null setzen *****************
+Messwerte in Raster reinrechnen *****************
+Basis Schrittweite zwischenspeichern
+Schleife über Rasterpunkte (i)
+Summen/Anzahl/Flags zurücksetzen
+Schlepp-Leistung
+Schleife bis genug Werte im Radius gefunden
+Zähler/Summen zurück setzen
+Schleife über Messwerte    (j)
+Falls innerhalb von Radius...
+Anz + 1
+Schleife über alle Em-Komp.
+Summe +
+Min/Max belegen (für Log-Ausgabe)
+Interpolierte Leistung aufsummieren (wird dann durch Anz dividiert)
+Zählen wieviel Messwerte für Rasterpunkt verwendet werden (Log-Ausgabe)
+Falls keine Messwerte im Radius (Anz=0) dann Radius vergrößern und Extra-Flag setzen
+NrUsed belegen
+Interpolierte Leistung = Summe / Anz
+Pfak berechnen:
+Falls oberhalb Pschlepp dann Pfak laut Formel oder 1 falls Abstand zw. Pe-Interpol und Pschlepp zu gering
+Unterhalb von Pschlepp Pfak=0 => Em-Wert=Null
+Extrapol-Flag in Extrapol-Spalte (1/0) übernehmen
+Für Log-Ausgabe
+Schleife über Em-Comp (innerhalb Rasterpunkt Schleife)
+Falls Option 'Schlepp-Em aus .FLD' belegen und Rasterpunkt-Leistung <= Schleppleistung
+Falls Schlepp-Em in .FLD vorhanden dann nehmen sonst mit Null belegen
+Em-Belegung ohne Pfak (=> Pfak wird später gemacht)
+Für Log-Ausgabe
+TC-Faktoren ohne Pfak übernehmen
+Pfak ******************************
+WICHTIG !!!
+Schleife geht über alle Rasterpunkt (auch über die Pe <= PeSchlepp bzw. PeIntpol nahe an Pschlepp).
+Das ist OK weil Pfak dort sowieso mit Eins beleget.
+Schleife über Em-Comp
+Falls keine Create Map Einstellungen (in .NPI/.MES) oder Pfak explizit aktiviert => Pfak verwenden
+Schleife über Rasterpunkte (i)
+Altes Pfak mit Extrapolation von Null weg
+Schlepp-Emission raus suchen
+Schlepp-Em aus nächstgelegenen Rasterpunkt nehmen. Das geht weil Schleppkurve 
+immer ins Map kommt (auch wenn sie dann später raus gelöscht wird) !!
+Option 'Schlepp-Em aus .FLD' spielt keine Rolle weil das nur die Belegungs-Methode der Schleppkurve betrifft (s.o.) 
+Pfak anwenden
+Normieren (Wert und Unit) ********************
+Falls Vorgabe in MES/NPI-Datei dann verwenden
+Werte normieren
+Sonst Standard-Normierung verwenden
+Werte normieren
+EmComponents zusammenfassen *******************
+Schleppkurve wieder raus nehmen (optional) ***********
+Schleife über Rasterpunkte (i). Keine For-Schleife weil iMapDim reduziert wird
+Ausgabe Map '**************************
+ACHTUNG: Nicht Name sondern sKey !!!
+Werte
+Ausgabe Zusatzinfo '***********************
+Werte
+Shep-Init
+Default Shepard wie in intpshep()
+Interpolator V1
+Interpolator V2
+Abstand berechnen und korrigieren.
+Um Nullleistung werden Kennfeldpunkte um Pe=0 hoeher gewichtet und Drehzahlabstand geringer,
+da Interpolation aus Punkten mit hoeherer last dort schlecht passt:
+Quadrat des Abstandes:             
+Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+Berechnung von wisum
+Interpolierte Leistung berechnen
+Abstand berechnen und korrigieren.
+Quadrat des Abstandes:                 
+Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur
+Berechnung von wisumV2
+Interpolierte Leistung berechnen
+Berechnet Emission an Schleppkurve
+Es wird an Schleppkurve gesucht
+n0 ist schon in Init definiert worden
+Abstand berechnen und korrigieren.
+Quadrat des Abstandes:
+Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten:
+Punkte innerhalb Radius zählen und ggf. Radius erhöhen
+Abstand-Array erstellen
+Berechnung von wisum
+Emission berechnen
+
+Abbruch wenn's Datei nicht gibt
+Datei öffnen
+Erste Zeile: Version
+V" entfernen => Zahl bleibt übrig
+Falls Version ungültig: Abbruch
+Version festgelegt
+Falls keine Versionsangabe: Altes Format
+Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version
+Zweite Zeile: Check welche TC-Faktoren in welcher Spalte stehen (ab Spalte 1!!)
+Abbruch falls weniger als 2 Spalen:
+Abbruch wenn unbekannter TC-Faktor
+Zu Dict hinzufügen
+Ab Zeile 3: TC-Faktoren für die einzelnen Em-Komponeten 
+l ist nur für Fehlerausgabe
+Datei öffnen
+Abbruch falls weniger als 11 Spalen:
+
+Update 07.08.2012 (CO2 Demo)
+Einzelne Nebenverbraucher
+Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo)
+Cd Modus / Input Datei - Update 14.08.2012 (CO2 Demo)
+Axle configuration - Update 16.10.2012
+Ende Einlesen ****************************
+Zugkraftunterbrechung (Update 09.08.2012 - CO2 Demo)
+Cd Modus / Input Datei (Update 14.08.2012 - CO2 Demo)
+Retarder (Update 02.10.2012 - CO2 Demo)
+Axle configuration - Update 16.10.2012
+Fehlermeldung innerhalb AuxInit
+Cd-Init
+Transmission Loss Maps
+Fr0
+Getriebe-Nenndrehzahl
+Getriebe-Nennleistung
+Wenn nix angegeben: Motor-Nennleistung und Nenndrehzahl zur Normierung
+PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn
+PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm)
+VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn
+Interpolieren mit Original Werten
+Falls Fehler: Extrapolation versuchen
+Suche nach nächstgelegenen Kennfeldpunkt
+Wirkungsgrad
+Antrieb => Antrieb
+Schlepp => Antrieb: ERROR!
+Antrieb => Schlepp: ERROR!
+Schlepp => Schlepp
+Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+Interpolieren mit Original Werten
+Falls Fehler: Extrapolation versuchen
+Suche nach nächstgelegenen Kennfeldpunkt
+Wirkungsgrad
+Antrieb => Antrieb
+Schlepp => Antrieb: ERROR!
+Antrieb => Schlepp: ERROR!
+Schlepp => Schlepp
+Mit Wirkungsgrad PeIn für original PeOut ausrechnen
+Meldung in Readfile()
+Falls Vair-Vorgabe in DRI aber nicht CdType= CdOfBeta dann Warnung
+Falls konstanter Cd-Wert dann is nix zu tun
+Inputdatei einlesen
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+Inputdatei einlesen
+Extrapolation für x < x(1)
+Extrapolation für x > x(imax)
+Interpolation
+
+Aktuelle Daten (d.h. zum aktuellen (zuletzt berechneten) Zeitschritt)
+Maximal zulässige Leistung zum Antreiben (Batterie entladen) [kW]    Vorzeichen positiv (PHEM Standard)
+Maximal zulässige Leistung zum Generieren/Rekuperiren (Batterie laden) [kW]    Vorzeichen negativ (PHEM Standard)
+Batteriemodell Renhart~ ---------------------------------
+Methode zur Initialisierung - wird einmal aufgerufen
+Abbruch wenn's Datei nicht gibt
+Einlesen der Parameter:
+Berechnung der Batteriespannung bei TempBat und SOC(0), Entladekurve
+Berechnung der Batteriespannung bei TempBat und SOC(0), Ladekurve
+Methode zur Berechnung der zulässigen Leistung - sekündlicher Aufruf
+Methode zur Berechnung der Batterieveluste und SOC für geg. Leistung - sekündlicher Aufruf
+Input:
+Perf ...geforderte Leistung. Bedingung: PgMAX < Perf < PaMAX [kW]
+alle Paramer die in Bat_Init bestimmt/eingelesen wurden
+jz ...Aktueller Zeitschritt
+Alle Arrays von Zeitschritt 1 bis jz-1
+Übergibt PeBat für geg. PiBat (Vorzeichen nach PHEM)
+PRIVATE ------------------------------------------
+Batterie entladen
+Temperaturfunktion
+Ri bestimmen abhängig von Temperatur
+Spannung bestimmen aus SOC und Spannungskurve
+Strom berechnen
+Batterieverluste
+Batterietemperatur
+SOC berechnen
+Korrektur für den aktuellen Zeitschritt
+Batterie laden
+Temperaturfunktion
+Ri bestimmen abhängig von Temperatur
+Spannung bestimmen aus SOC und Spannungskurve
+Strom berechnen
+Batterieverluste
+Batterietemperatur
+SOC berechnen
+Korrektur für den aktuellen Zeitschritt
+Batterie nix tun
+ALT: Ubat(jz) = Ubat(jz - 1)
+Ãœbergibt PeBat beim Laden mit PEmot (Vorzeichen nach Renhart)
+Ãœbergibt PeBat beim Entladen mit PEmot (Vorzeichen nach Renhart)
+
+Leistungen
+Fahrzeug
+Zykluslänge definieren (Um 1s kürzer als Original weil Zwischensekunden)
+Hier wird der eigentliche Zyklus eingelesen:
+Drehzahl-Vorgabe
+Drehzahl
+Winkelbeschleunigung
+Em-Komponenten mitteln (Zwischensekunden) für KF-Erstellung oder Eng-Analysis
+EXS Vorgaben mitteln
+Aux Vorgaben mitteln und Aux-Listen falls Aux in Dri und Veh vorhanden
+Zykluslänge definieren: Gleiche Länge wie Zyklus (nicht reduziert weil keine "Zwischensekunden")
+Hier wird der eigentliche Zyklus eingelesen:
+Drehzahl-Vorgabe
+Drehzahl
+Winkelbeschleunigung
+Initialisierung / Datei öffnen **************
+ID-Zeile (Nur ADVANCE)
+ADVANCE-spezifisch
+Berechnete Dynamikparameter (Diff zu Kennfeld)
+In Datei schreiben
+Werte *************************************************************************************
+Zeit
+Strecke
+Ist-Geschw.
+Soll-Geschw.
+Beschl.
+Steigung
+Drehzahl
+Leistung 
+Drehzahl normiert
+Leistung normiert
+Drehzahl in U/min
+EM-Leistung in kW
+Effektive Batterieleistung
+Innere Batterieleistung
+Batteriespannung
+Batteriestrom
+SOC
+Drehzahl
+Leistung 
+Drehzahl normiert
+Leistung normiert
+Volllast und Schlepp
+Leistung an Kupplung
+Gang
+Getriebeverluste
+Diff-Verluste
+Retarder-Verluste
+PaEng
+PaGB
+Pa Veh
+Roll..
+Luft..
+Steigung..
+Aux..
+Radleistung
+Bremse
+Auxiliaries
+ADVANCE-spezifisch
+X
+Y
+StrId
+Final-Emissionen (Tailpipe)
+Roh-Emissionen
+TC-Emissionen
+AT-Emissionen (EXS)
+Berechnete Dynamikparameter (Diff zu Kennfeld)
+In Datei schreiben
+Errors/Warnings die sekündlich auftreten können
+Reset-Hierarchie:
+ResetAll
+DesMaxExtr
+GeschRedReset
+CdExtrapol        
+PxReset
+TrLossMapExtr 
+AuxMapExtr 
+AuxNegative
+FLDextrapol
+Kompletter Reset (am Beginn jedes Sekundenschritts)
+Reset von Errors nach Geschw.-Reduktion (innerhalb Iteration)
+Reset von Errors die mit der Leistungsberechnung zu tun haben (nach Schaltmodell durchzuführen)
+Errors ausgeben
+
+Sekündliche Daten
+Zugkraftunterbrechung
+Rekuperation
+Projekt HERO - BMW Mini Hybrid
+Standard Mini One D Radstand 2467 mm
+Annahme für Schwerpunkthöhe
+nach http://www.colliseum.net/wiki/Schwerpunkth%C3%B6he
+mit R = 2.467 [m] und m = 1335 [kg]
+Bat einlesen
+Maximale effektive EM-Leistung beim Antreiben abhängig von Überlast und Batteriezustand
+Basis: Volllastkurve
+Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+PeFLD = maximale EM-Leistung nach FLD und ÃœL
+PeMax aus PeBatMax berechnen
+PeBAT = maximale EM-Leistung nach Batterie
+Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+Maximale effektive EM-Leistung beim Laden abhängig von Überlast und Batteriezustand
+Basis: Schleppkurve
+Falls Überlast möglich: auf ÜL-Leistung hochskalieren
+PeFLD = maximale EM-Leistung nach FLD und ÃœL
+PeMax aus PeBatMax berechnen
+PeBAT = maximale EM-Leistung nach Batterie
+Ãœbergeben wird maximal die Leistung die die Batterie erlaubt
+Umrechnung von PeBat(=PiEM) auf PeEM
+Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+Umrechnung von PeEM auf PeBat(=PiEM)
+Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen
+Maximale Rekup-Leistung
+Falls unter V-Untergrenze dann gleich Null übergeben
+Radaufstandskraft
+Vorzeichen "sollte" immer + sein
+Längskraft am Reifen
+Sicherheitsfaktor mitnehmen
+Leistung 
+Falls unter V-Obergrenze dann linear runter skalieren
+PeEM-Max reduzieren bis es die Batterie aushaltet
+PeEM-Min reduzieren bis es die Batterie aushaltet
+Start/Stop Steuerung
+Abbruch wenn keine Geschw. gegeben
+Initialisieren
+Schaltpunkte für NEDC/FTP Schaltung
+Schaltparameter initialisieren
+Standard
+Theoretische Höchstgeschwindigkeit [m/s] - gesetzt auf Geschw. bei 1.2 x NennDrehzahl im höchsten Gang
+Zeitschleife    ****************************************
+Sekundäre Progressbar
+Zustand bestimmen
+Reset der sekündlichen Errors 
+Geschw. / Beschl. berechnen-------------------
+Jetzt durch DRI-Klasse
+Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+a_DesMax
+Check ob Beschleunigung zu hoch
+Verzögerung limitieren ---------------------------
+Check ob Verzögerung zu hoch
+Aus Leistg-----
+Fahrzustand bestimmen-------------------------
+Schneller Check ob Leistung viel zu hoch
+Gangwahl ************************************
+Checken ob Kupplung schleift (wichtig für Schaltmodell):
+Gang-Vorgabe
+Drehzahlvorgabe
+Gang nach Geschwindigkeit
+Schaltmodell
+Muss hier nochmal zurück gesetzt werden weil im Schaltmodell kann (und darf) das passieren
+Schaltmodell/Vorgabe kann Clutch öffnen 
+Wichtige Checks
+Checken ob Geschwindigkeit reduzieren
+If GeschwRed Then GoTo lbGeschwRed    <= stattdessen neues Konzept: Leistung wird "normal" berechnet und erst später überprüft ob Pe > Pmax... ?
+Checken ob Kupplung offen:
+bKupplOffen = (bStehen Or Gang(jz) = 0) <= bereits durch Clutch bekannt
+Falls konventionell dann ICE-Kupplung = Hauptkupplung
+bICEKupOffen = bKupplOffen <= Brauch i nix mehr
+Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+Checken ob Leerlauf obwohl Leistung > 0
+wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+Drehzahl ************************************
+Wenn Drehzahl vorgegeben dann wird der nächste Block übersprungen ***
+Falls Start/Stop dann wird gleich bei nn < -0.05 auf nU = 0 gesetzt
+Drehzahlabfall beim Auskuppeln
+Leistungsabfall limitieren auf Pe(t-1) minus 75% von (Pe(t-1) - Pschlepp)
+aus Auswertung ETC des Motors mit dem dynamische Volllast parametriert wurde
+Einfluss auf Beschleunigungsvermögen gering (Einfluss durch Pe(t-1) bei dynamischer Volllast mit PT1)
+Luz/Rexeis 21.08.2012
+Iterations-Schleife: 01.10.2012    
+original: M = -Pmin * 1000 * 60 / (2 * Math.PI * ((nU + nUx) / 2))
+01.10.12 Luz: Drehzahl darf nicht höher werden als zuvor 
+TODO: Auschalten?!
+Beginn: Drehzahl-Check
+Checken ob Drehzahl zu hoch! =>  Hochschalten
+Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+Motor-Zustand bestimmen ************************************
+nn ist ab hier fix!
+Nebenverbrauch bestimmen (aus VEH und DRI)
+ICE-Trägheit
+Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+Drehzahlvorgabe
+Gesamt-Motorleistung
+Leistungsverteilung usw. ******************
+Volllast- / Schleppkurve
+Drehzahl korrigieren
+Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+VKM an Schleppkurve
+Forwärtsrechnung bis Rad (PvorD)
+Check ob Abbruch (vor Geschw.Red-Iteration sonst kann sichs aufhängen)
+Check ob P über Volllast => Geschw.-Reduktion
+FEHLER: Geschw.-Red. bringt nix?!...
+FEHLER: Motor nicht in Antrieb ...kann nicht sein?!
+Zugkraftunterbrechung
+Sekunde abschließen
+Start / Stop - Aktivierung-Geschw. Steuerung
+Modalwerte-Felder schreiben
+Zugkraftunterbrechung
+Meldungen (Abbruch falls Error)
+Zeitschleife ENDE    ***********************************
+Meldungen (wenn nicht ADVANCE)
+Abbruch falls Leistung/Drehzahl nicht gegeben
+Drehzahlen vorher weil sonst scheitert die Pmr-Berechnung bei MODdata.nU(t + 1)
+Modalwerte-Felder schreiben
+MODdata.Pe wird unten belegt
+Leistung berechnen
+Sekundäre Progressbar
+Reset der sekündlichen Errors 
+ALT und falsch weil Zeit nicht verschoben: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnenn) * nnenn * (n(jz) - n(jz - 1))) / Pnenn
+Leistung aus Zyklus korrigiert um P_clutch
+Drehzhal aus Zyklus => Durch CycleInit bestimmt
+Falls Drehzahl unter Leerlauf wir Motor als abgestellt angenommen
+Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error!
+FLD Check
+Meldungen
+Start/Stop Steuerung
+WegKorrektur
+Abbruch wenn keine Geschw. gegeben
+Initialisieren
+WG-Kennfeld aus MAP übernehmen und Pi-Liste berechnen
+Schaltpunkte für NEDC/FTP Schaltung
+Theoretische Höchstgeschwindigkeit [m/s]
+Zeitschleife    ****************************************
+Sekundäre Progressbar
+Zustand bestimmen
+Geschw. / Beschl. berechnen-------------------
+Jetzt durch DRI-Klasse
+Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+Aus Leistg-----
+Fahrzustand bestimmen-------------------------
+Maximal zulässige Batterieleistung
+Gangwahl ************************************
+Checken ob Kupplung schleift (wichtig für Schaltmodell):
+Gang-Vorgabe
+Drehzahlvorgabe
+Gang nach Geschwindigkeit wird hier nicht unterstützt
+Schaltmodell
+EV: Kein Leerlauf wegen Rekuperation
+Falls Rekuperation laut Radleistung möglich: PrekupMax berechnen
+Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten:
+Checken ob Leerlauf obwohl Leistung > 0
+wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren!
+Drehzahl ************************************
+Wenn Drehzahl vorgegeben (Gemess = 2) dann wird der nächste Block übersprungen ***
+Drehzahlabfall beim Auskuppeln
+Beginn: Drehzahl-Check wenn keine Vorgabe
+Checken ob Drehzahl zu hoch! =>  Hochschalten
+Checken ob Drehzahl zu niedrig mit geschlossener Kupplung
+Motor-Zustand bestimmen ************************************
+nn ist ab hier fix!
+Nebenverbrauch bestimmen (aus VEH und DRI)
+MotorTrägheit
+Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum
+Drehzahlvorgabe
+Gesamt-Motorleistung
+Leistungsverteilung usw. ******************
+Volllast- / Schleppkurve
+Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.)
+PrekupMax = fPrekupMax()
+Falls RekupMax überschritten muss Pe neu berechnet werden
+PbrakeRek = Leistung die zusätzlich mechanisch gebremst werden muss wegen Überschreitung von RekupMax
+wird schon oben nach Gangwahl erledigt: PbrakeRek = Pantr - PrekupMax
+Neue EM-Leistung
+Check ob Leistung aufgenommen werden kann (abh. von FLD und Batterie). Bremsleistung berechnen.
+RekupMax-Bremsleistung dazu addieren
+Check ob P über Volllast => Geschw.-Reduktion
+Falls Pmax=0 muss Batterie leer sein
+FEHLER: Geschw.-Red. bringt nix?!...
+Sekunde abschließen
+Batterie ***********************
+Modalwerte-Felder schreiben **************
+Meldungen
+Zeitschleife ENDE    *************************************
+Meldungen (nicht ADV)
+TODO.... Fehlermeldung etc
+WegKorrektur
+Abbruch wenn keine Geschw. gegeben
+Initialisieren
+Schaltpunkte für NEDC/FTP Schaltung
+Schaltparameter initialisieren
+Theoretische Höchstgeschwindigkeit [m/s]
+HEV
+Zeitschleife    ****************************************
+Sekundäre Progressbar
+Zustand bestimmen
+Geschw. / Beschl. berechnen-------------------
+Jetzt durch DRI-Klasse
+Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren
+Aus Leistg-----
+Fahrzustand bestimmen *****************************
+Fahrzustand bestimmen-------------------------
+Gangwahl ************************************
+Checken ob Kupplung schleift (wichtig für Schaltmodell):
+Gang-Vorgabe
+Drehzahlvorgabe
+Gang nach Geschwindigkeit
+Schaltmodell
+Nebenverbrauch bestimmen (aus VEH und DRI)
+HEV-Teil kommt erst nach Gangwahl weil Getr./Diff-Loss den benötigt und EM zwischen ICE und GB liegt
+Nebenverbrauch bestimmen (aus VEH und DRI)
+Wenn Drehzahl vorgegeben
+Sonst aus Vist und Gear
+Normierte Drehzahl
+Maximale Leistung der ICE
+Nebenverbrauch bestimmen (aus VEH und DRI)
+Maximal zulässige Batterieleistung
+Maximale EM-Leistung. (Batterieleistung limitiert EM-Leistung)
+Leistung bis ICE/EM (= an Kupplung) berechnen
+Leistung an Kupplung
+Drehzahlvorgabe
+Notwendige Leistung im EV-Betrieb
+Leistung an Kupplung plus EM-Trägheit
+ACHTUNG: Wenn ICE eingekuppelt dann muss PaICE auch noch dazu ! => Später bei Leistungsverteilung
+Notwendige Leistung im ICE+EM-Betrieb
+Notwendige Leistung im ICE-Betrieb
+Check ob EV möglich
+EM-Leistung >= Antriebsleistung
+Falls EV möglich: Check ob kritisch
+Check ob Assist / LPI / ICEonly möglich und ob Boost erforderlich
+ICE-Ein muss möglich sein (ICElock)
+Assist / Boost
+Boost
+ICE an Volllast
+Check ob Rekup möglich
+Fahrzustands-Unterscheidung *********************************
+Betriebsmodus Vor-Auswahl ********************************
+Wenn Boost notwendig (und möglich), dann keine Wahl
+EV Mode wenn...
+Wenn EV & ICE nicht möglich dann EV-Modus bis ICE wieder startet.... sollte nie vorkommen weil keine ICE-Abschaltung wenn wenig SOC
+Falls Einsatz von HEV-Strategie:
+Ke's berechnen
+Optimale Ke's berechnen und Leistungen dazu ************
+Emission/Verbrauch in g/h
+KeSTE aus STE-Kurve...
+Unter Max-Pe bleiben
+Wenn Pvkm negativ: Berechnung für reinen EM-Betrieb
+nicht gültig falls Batlvl <= Low oder ICEonLock
+EM-Leistung = P-Antrieb
+Verbrauchseinsparung in g/h 
+Abbruch nach dieser Berechnung (mehr EM-Leistung macht keinen Sinn da hier schon rein elektrischer Antrieb)
+Verbrauchseinsparung in g/h 
+Leistung nach E-Motor in kW
+Leistung in Batterie
+Div/0 und Vorzeichen-Check
+KeA berechnen in kWh/kg
+Check ob Optimum
+Abbruch falls reiner EM-Betrieb schon erreicht
+Falls Pvkm an Volllast:
+Pvkm auf Volllast setzen
+Elektromotor in Generatorbetrieb (Pges1 - Pvkm < 0)
+Abbruch nach diesem Durchgang weil mehr Generieren nicht möglich
+Zusatzverbrauch in g/h 
+Leistung nach E-Motor in kW
+Leistung in Batterie
+Div/0 und Vorzeichen-Check
+KeG berechnen in kWh/kg
+Check ob Optimum
+Abbruch falls VKM-Volllast schon erreicht
+Abstand Eta zu Kurve berechnen
+KeSTE, Deltas auswerten ************************
+Betriebsstrategie ***************************
+Ke-Modus einsetzen wenn...
+Gleicher Modus wie vorher, Fahrzustands-Änderung oder Letzter Modus unmöglich
+wenn Motor nicht läuft
+wenn PeICE-Leistungsänderung mit neuen Modus am geringsten
+Leistungen je nach Modus verteilen **************************
+EM übernimmt gesamte Leistung
+Geschw. reduzieren falls Leistung zu hoch für EM oder Bat
+Falls ICElock oder EVcrit dann ICE ein (aber ausgekuppelt)
+ICE übernimmt gesamten Antrieb
+ACHTUNG: ICEclutch ist standardmäßig 'False' deshalb hier keine weiteren Statements mehr
+Maximale Rekup-Leistung berechnen
+Mit PrekupMax auf EM/ICE zurück rechnen
+Den Rest gleich auf die Bremse 
+Default für ICE (damit man sich die "Else"-Statements spart)
+EM-Leistung berechnen
+EM-Leistung neu
+Restliche Leistung an ICE
+Falls ICE über Schleppkurve
+ICE-Leistung neu
+Rest an Bremse
+ICE in Leerlauf (weil On-Lock)
+EM-Leistung berechnen
+EM-Leistung neu
+ICE im Schubbetrieb
+Falls ICE über Schleppkurve
+ICE-Leistung neu
+Rest an Bremse
+ICE im Schubbetrieb
+Falls ICE über Schleppkurve
+ICE-Leistung neu
+Rest an Bremse
+Leistung Null
+Clutch und Drehzahlen *******************************
+Haupt-Kupplung => muss hier schon bekannt sein!
+Drehzahl ICE ************************************
+Drehzahl EM *************************************
+Sekunde abschließen
+ACHTUNG: Die beiden If-Schleifen nicht verbinden weil LockCount sich sonst verzählt
+Modalwerte-Felder schreiben
+Meldungen
+Zeitschleife ENDE   **************************************
+Meldungen (Nicht ADVANCE)
+Sekunde 1--------------------------------------
+Erste Sekunde: Gang finden / Initialisierung
+Ab Sekunde 2--------------------------------------
+Startwerte---------
+gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+Kuppelschleif-check  << Schon passiert in Power.Calc
+Gang für die nächsten 6 Sekunden berechnen---------------------
+Schaltfunktion----------
+Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85
+Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+Drehzahl mit letzten Gang (gangX)
+nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn
+Schalten Maximal alle 2 Sekunden schalten zulaessig:
+Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+Gangwahl korrigieren
+Kein Leerlauf wenn Leistung > 0
+Drehzahl neu
+nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping)
+Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+Speichere Gänge in Feld für spätere Checks
+Gang wird übernommen
+Gang-Verlauf hinzufügen
+Checks Teil 1-------------------------------------
+Checks zur Saeuberung unsinniger Schlatmanoever:
+Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+Schon bestimmt durch VehState0
+Suche nach letztem Gangwechsel
+Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+Cruise-Phasen:
+Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+Verzoegerungsphasen: Hochschalten wird unterdrückt
+Beschleunigungsphasen: Zurückschalten wird unterdrückt
+Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+durchgehend beibehalten
+Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+geschaltet wird, wird voriger Gang durchgehend beibehalten
+Checks Teil 2-------------------------------------
+Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+sonst fehlt die leistung!
+EV-Schaltmodell (auf Basis PKW)
+Sekunde 1--------------------------------------
+Erste Sekunde: Gang finden / Initialisierung
+Ab Sekunde 2--------------------------------------
+Startwerte---------
+gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell
+Kuppelschleif-check  << Schon passiert in Power.Calc
+Gang für die nächsten 6 Sekunden berechnen---------------------
+Schaltfunktion----------
+Drehzahlschranke Hinaufschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+Drehzahlschranke Hinunterschalten  n_normiert (leerl = 0, Nenndrehzahl = 1)
+Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn):
+Drehzahl mit letzten Gang (gangX)
+Schalten Maximal alle 2 Sekunden schalten zulaessig:
+Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt
+Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt
+Gangwahl korrigieren
+Kein Leerlauf wenn Leistung > 0
+Drehzahl neu
+Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet
+Speichere Gänge in Feld für spätere Checks
+Gang wird übernommen
+Gang-Verlauf hinzufügen
+Checks Teil 1-------------------------------------
+Checks zur Saeuberung unsinniger Schlatmanoever:
+Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+Schon bestimmt durch VehState0
+Suche nach letztem Gangwechsel
+Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+Cruise-Phasen:
+Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+Verzoegerungsphasen: Hochschalten wird unterdrückt
+Beschleunigungsphasen: Zurückschalten wird unterdrückt
+Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+durchgehend beibehalten
+Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+geschaltet wird, wird voriger Gang durchgehend beibehalten
+Checks Teil 2-------------------------------------
+Schalten von 2. in 1. Gang wird bei v > 2,5 m/s unterdrueckt
+NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+sonst fehlt die leistung!
+Sekunde 1--------------------------------------
+Erste Sekunde: Gang finden / Initialisierung
+Ab Sekunde 2--------------------------------------
+Startwerte---------
+Leistung berechnen von jz bis jz + 6-----------------
+Berechnung nach Drehzahl/Leistung-Modell
+1) Nach Variante "schnelle Fahrweise"
+Schaltmanoever erfolgt nur, wenn v-aenderung 5% seit letztem Gangwechsel,
+VECTO: Auskommentiert START
+VECTO: Auskommentiert ENDE
+in ersten 10 Zyklussekunden kann zum Einregulieren immer geschlatet werden:
+Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+Hinunterschalten:
+Hochschalten:
+bei Steigungszyklen mit zu hohen Geschwindigkeiten wird geschw. i+1 erst nach gangwahl berechnet
+dabei manchmal zu hoher gang -> Drehzahl und P_max viel zu nieder, daher nu bei niederen leistungen
+hochschalten erlaubt:
+2) Nach Variante "sparsame Fahrweise"
+Zurueckschalten erfolgt nur, wenn Geschwindigkeitsaenderung > 6%
+Hochschalten geht immer
+VECTO: Auskommentiert START
+VECTO: Auskommentiert ENDE
+in ersten 10 Zyklussekunden kann zum einregulieren immer geschlatet werden:
+Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden:
+Hinunterschalten:
+Hinaufschalten, nur ueberprueft wenn nicht schon hoechster Gang:
+relevante Drehzahlen:
+Auswahl des Drehzahlverhaeltnisses aus der "schnellen (..h)" und
+der "sparsamen (..l)" Variante:
+Drehzahlverhhealtnisse nach "Modellmix":
+anhand der erforderlichen maximalen Motorleistung ueber die
+naechsten 6 Sekunden
+Festlegung der Anteile von schneller und sparsamer Fahrweise
+Modell Hausberger):
+Mix der berechneten Gaenge gemaess Vorgabe in Eingabefile:
+pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl
+nach "reales Modell" bestehen soll)
+Ermittlung des "virtuellen" aktuellen Ganges nach Modell
+ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+sonst fehlt die leistung!
+ueberpruefung, ob erforderliche leistung ueber P_max(n) liegt
+dann wird zurueckgeschaltet:
+Eigentliche Ueberpruefung ob ueber P_max(n)
+falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert:
+Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh
+dann wird zurueckgeschaltet:
+Ende "Modell"-Basisgangwahl
+Kuppelschleif-check
+Checks Teil 1-------------------------------------
+Checks zur Saeuberung unsinniger Schlatmanoever:
+Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen:
+Suche nach letztem Gangwechsel
+Schaltvorgaenge max. alle 3 Sekunden zulaessig:
+Cruise-Phasen:
+Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet:
+Verzoegerungsphasen: Hochschalten wird unterdrückt
+Beschleunigungsphasen: Zurückschalten wird unterdrückt
+Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang
+durchgehend beibehalten
+VECTO: Ausnahme: Ãœber Volllastkurve
+Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang
+geschaltet wird, wird voriger Gang durchgehend beibehalten
+Checks Teil 2-------------------------------------
+Schalten von 2. in 1. Gang wird bei v > 1.5 m/s unterdrueckt
+NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl
+bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet
+wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden
+sonst fehlt die leistung!
+Geschwindigkeit vorausschauen
+Checks aus PKWgear....
+Schalten von 2. in 1. Gang wird bei v>2,5 m/s unterdrueckt
+Bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet
+Wenn v mehr als 1 Sek. <0.1 m/s wird auf Gang=0 geschaltet
+Bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet
+Funktion zur einfachen Leistungsberechnung für Schaltmodelle
+Funktion zur einfachen Leistungsberechnung für EV-Schaltmodell
+Drehzahlvorgabe
+Leistung vor Diff = Am Rad-------------
+Rollwiderstand----------------
+Luftwiderstand----------------
+Beschleunigungsleistung Fahrzeug--------
+Früher (PHEM 10.4.2 und älter) wurde statt m_raeder Massered verwendet, mit Massered = m_raeder + I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2
+Der fehlende Teil (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) wird jetzt durch fPaG(V,a) mit berücksichtigt
+Steigungswiderstand----------------
+Nebenaggregate----------------
+Getriebe-------------------
+Leistung nach Getriebe (Getriebeausgang)
+Verluste berechnet (eignet sich nur für Schaltgetriebe)
+Interpolation der Getriebeverlustleistung
+Zwischen 1. und 8. gang sowie 9. und 16. Gang:
+Differenzial
+Leistung nach Diff (vor Getriebe)
+Pdiff
+Differenzial
+Leistung vor Diff
+Getriebe Trägheit----------------
+
+Aus DRI-Datei
+Berechnet
+WegKor
+Geschwindigkeit
+Original-Geschwindigkeit ist um 1 länger
+Strecke (aus Zwischensekunden sonst passiert Fehler)
+Steigung
+Gang - nicht Mittelwert sondern Gang(t) = DRI.Gang(t)
+Padd
+Beschl. berechnen
+Vair-Vorgaben: Nicht in Zwischensekunden!!
+Geschwindigkeit
+Strecke 
+Steigung
+Gang - nicht Mittelwert sonder Gang(t) = DRI.Gang(t)
+Padd
+Beschl. berechnen
+TODO: Wenn Fzg schneller als Zyklus...
+Falls Zeitschritt wiederholen näher an Wegvorgabe als aktueller Weg => Zeitschritt wiederholen
+Falls nächsten Zeitschritt löschen näher an Wegvorgabe als aktueller Weg => Nächsten Zeitschritt löschen
+Keine Korrektur
+
+Delaunay
+Normale Interpolation
+Ersten zwei sekunden keine Korrektur:
+Dictionaries erstellen
+Summen ermitteln
+Mittelwerte
+Zyklus-Mittelwerte '************************************
+Messwert
+PHEM-Wert
+Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+Ãœber x Sekunden gemittelte Werte berechnen und sofort au
+Null setzen
+Aufsummieren
+Messwert
+PHEM-Wert
+Modale Ausgabe '************************************
+Messwert
+PHEM-Wert
+Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur!
+Header und Units schreiben
+Ãœber x Sekunden gemittelte Werte berechnen und sofort au
+Null setzen
+Aufsummieren
+Ausgabe
+Messwert
+PHEM-Wert
+Lastwechsel (allgemeine Bedingung ausser bei Intervallen mit
+Konstantfahrt:
+Damit werden Trapezfoermige Zyklen nicht als lastwechsel erkannt
+da LWje = 0. In diesem fall wird voraus der naechste Wert gesucht,
+der nicht gleich Pe(jz) ist. Dieser wird anstelle von Pe(jz+1)
+gesetzt:
+lastwechsel werden nur als solche gezaehlt, wenn sie mehr als 0.05% von
+Pnenn betragen (sonst ist Ergebnis viel zu wackelig):
+Lastwechsel wird gezaehlt, wenn LWja < 0)
+1) Mittlere Amplitude vom Pe-Verlauf ("Ampl")
+Zwischenrechnung fue Zyklusmittelwert:
+Berechnung der mittleren Amplitude in 3 Sekunden vor Emission (Ampl3s)
+und der Anzahl der Pe-Sekundenschritten ueber 3% der Nennleistung
+LW3p3s):
+2) Aenderung der aktuellen Motorleistung (dP_2s):
+Mittelwert 3 sec. vor Emission:
+Gezaehlt nur bei dynamischem betrieb:
+4) Mittelwert der negativen Motorleistung ("PnegMW"):
+Mittelwert 3 sec. vor Emission:
+Gezaehlt nur bei dynamischem betrieb:
+Berechnung der absoluten Dynamikkenngroessen:
+Addition der Amplituden von Pe (1. Pe-Wert
+wird fuer Amplitude auch als Maxima bzw. Minima gezaehlt)
+1. Sekunde:
+2. Sekunde bis Ende:
+Absolutwert:
+Geschw./Beschl.-abhängige Parameter nur wenn nicht Eng-Only
+Dynamikparameter als Differenz zu Dynamik in Kennfeld
+war früher hier. Jetzt eigene Methode weil bei KF-Erstellung ungültig
+Dynamikparameter als Differenz zu Dynamik in Kennfeld:
+Klasse zur Berchnung der Abgastemperaturen
+Felder für Größen aus PHEM Hauptprogramm
+Einlesen von tgas aus .npi (Projekt HERO) ****
+überschreibt tgas(jz) aus HtMass()
+Luz/Rexeis 16.05.2011
+Hauptroutine für EXS Modul
+Aufruf von Exs_Main(true) -> Developer Version ohne PHEM Hauptprogramm
+Felder für Größen aus exs-File
+Allgemeine Konstanten
+Stoffwerte Abgas:
+unempfindlich gg. lambda, siehe "Stoffwerte_vollständigeVerbrennung_neu.xls"
+cp_exh = 1054.0 '!Wärmekapazität Abgas [J/(kg*K)], wird nicht mehr verwendet weil jetzt direkt in Abh. von T und Lambda berechnet
+Anmerkung: Mittelwertwert aus Internetrecherche, in Literatur keine Angaben gefunden
+kalibriert anhand Test an Thermoelement unter Annahme von Schichtdicke 0.1mm
+Reaktionsenthalpien in J/mol
+Molmassen
+Kompatibilität mit alter EXS-Strkutur. Bevor neues Konzept für Em-Komponenten mit cMAP-Klasse, tMapComp, etc. eingeführt wurde
+Verweise auf Emissionen: Gegebene falls vorhanden sonst die berechneten
+Dimensionieren:
+Übergabe der relevanten Größen aus dem PHEM Hauptprogramm
+In DEV direkt aus der Datei *.phe eingelesen
+Lambda
+Wird weiter unten belegt weil mpexh vorhanden sein muss
+Anfang exs-File einlesen
+dummy = DatExs.ReadLine(0) 'alte dummy zeilen: auf exs-file kompatibilität achten
+Initialisieren der entsprechenden Anzahl an Modulen
+Lesen der Datenblöcke je Modul
+Fehlermelderung in TempMod(iMod).Read(DatExs)
+Ende exs-File einlesen
+Anfang csy-File einlesen
+Ende csy-File einlesen
+Berechnungsschleife: je Zeitschritt /je Modul: 1. Temperaturen, 2.Konvertierungen
+Sekündliche Ergebnisse werden in jeder Iteration ausgegeben
+Header *.ter schreiben
+Header der KonvMods schreiben
+startwerte für kühlersimulation:
+Wärmeeintrag ins Kühlsystem (Kennfeld)
+Kühlsystem Simulation
+Wärmeeinträge in Massen 1 und 2
+Wärmeübergang Masse 1 und 2 ins Kühlsystem
+Massentemperaturen für nächsten Zeitschritt
+Wärmeverlust nach außen
+Gesamtwärmeeintrag ins Kühlsystem (Ausgabewert der Kühlersimulation)
+Berechnung Abgasmassenstrom aus gegebenem Kraftstoffverbrauch und Lambda
+nur zulässig bei Motoren ohne AGR
+Einheit mpexh.......[kg/s]
+Einheit Vpexh.......[m3/s]
+Fall 1: Berechnung aus Verbrauch und lambda
+Fall 2: Berechnung aus durch Motor gepumpter Luftmenge
+Es fehlt: Methodik Massenstromberechnung für AGR Motoren BMW HERO Projekt
+Lambda berechnen falls nicht explizit gegeben
+Erstes Modul im Abgasstrang kann kein katalytisch aktives Element sein,
+daher sind die Emissionen immer gleich der Rohemissionen aus dem PHEM-Hauptprogramm
+Qp_reak berechnen: massenstrom * konvertierungsrate * reaktionsenthalpie / molmasse
+Schadstoffkomponente berechnen
+Konvertierung von NOx, CO, HC -> alter Wert * (1-Konvertierungsrate)
+Falls Modul kein Konv-Element hat ändert sich nix (Anmerkung: Modul 1 hat immer ModTyp0)
+Zeile in *.ter schreiben
+Ende Berechnungsschleife
+Alle sekündlichen Ergebnisfiles zumachen
+Abfrage Rücksprung im iterativen Berechnungsmodus für Starttemp -------------------
+Abbruchbedingung: Temperatur des Massenelementes "t_m" des in "iter_pos" spezifizierten Moduls
+am Beginn und am Ende des Zyklus innerhalb vorzugebender Bandbreite "iter_tol"
+Ausgabefile *.ter schreiben ----------------------------------------------------------
+Ende Ausgabefile *.ter schreiben -----------------------------------------------------
+Aufräumen
+Klasse für Temperaturmodule
+remarks>Art des Moduls wird mit ModTyp definiert</remarks>
+Einlesen der EXS-Datei
+param name="Datei">Dateihandler</param>
+Pfad für Konvertierungsraten bei Modulen mit Konvertierung
+Initialisieren der Module & Einlesen des Parameterfiles je nach Modul
+Wärmeübergangsfaktor
+Oberfläche außen
+Emissivität
+Faktoren für Wärmeübergänge nach außen
+Faktoren für Temperaturzusammenhang t_katsubstrat <-> t_kat_außen
+Abkühlkurve Masse
+normierte Querschnittsfläche
+durchschnittlicher Gegendruck
+Durchmesser Thermoelement
+Abkühlkurve Thermoelement
+Faktoren für Wärmeübergänge nach außen
+Check ob Tgas in Zyklus gegeben:
+Entnormierungen und Berechnung weiterer Größen
+Zusätzlich berechnete Parameter für Rohrmodule:
+Für Strömungsberechnungen in SI-Einheiten wird Querschnittsfäche in m2 umgerechnet
+Geometrische Größen berechnen
+Anmerkung: es wird davon ausgegangen, dass Temperatursensoren
+mittig ins Rohr stehen
+Anmerkung: Kugelkalotte an t-sensor spitze wird in der Betrachtung als
+umströmter Zylinder vernachlässigt
+Abkühlkurven einlesen
+Wärmeübergang Masse
+Festlegung Schwellwert für Genauigkeit der Temperaturberechnung (wird wegen iterativem Berechnungsmodus benötigt)
+Ãœbergabe Eintrittstemperatur des Abgases aus oberhalb liegendem Modul bzw. dem Motor
+Berechnung der aktuellen Massentemperatur
+bei n_iter > 0 ist bereits der Endwert der letzten Iteration zugewiesen
+Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+Wärmekapazität (vgl. Bogdanic)
+Schleife für Iteration Wärmeübergang
+Abbruchkriterium siehe unten
+Ermittlung der Temperatur des Abgases in der Mitte der Masse ("t_gas_mid") aus einem nichtlinearem (logaritmisch) Temperaturverlauf 
+Wärmeübergang Konvektion innen für alle Module (außer Rohr)
+für Rohrmodule:
+Nusselt Zahl: Dichte = 345/t_gas_mid, Term in Klammer: mu_Rohr / mu_Mitte
+Wärmeübergang (Konvektion innen), d_pipe in m: char. Länge
+Wärmekapazität (vgl. Bogdanic)
+Abbruchkriterium: Änderung der Abgas-Austrittstemperatur im Vergleich zum letzten Iterationsschritt kleiner Schwellwert
+Berechnung der Wärmeverluste der "thermischen Masse" nach außen
+Parameter werden aus EXS-Datei eingelesen:
+Daten für MuD:
+Oberfl_Kat = 0.12 'Oberfläche für Wärmeübergang in m^2
+Emiss = 0.5 'Emissivität
+Empirische Formel, passt für alle Rollentests recht gut
+Anm.: Versuch mit direkter Abhängigkeit von t_m -> funktioniert nicht gut
+Wärmeverlust durch Strahlung
+Wärmeverlust durch Konvektion
+Parameter werden aus EXS-Datei eingelesen:
+Daten für MuD:
+Modul Nr. 3:
+Oberfl_Mod3 = 0.169457508 'Oberfläche für Wärmeübergang in m^2
+Emiss = 0.5 'Emissivität
+Modul Nr. 4:
+Oberfl_Mod4 = 0.103596481 'Oberfläche für Wärmeübergang in m^2
+Emiss = 0.9 'Emissivität
+Wärmeverlust durch Strahlung = Sichtfaktor * Emissivität * St.-Boltzm.-Konst * Oberfläche * (T_Rohr^4 - T_Umgebung^4)
+Wärmeverlust durch Konvektion = Wärmeübergangskoeffizient * Oberfläche * (T_Rohr - T_Umgebung)
+Standard: Crad konstant, keine Verluste durch Konvektion
+Gesamtwärmeverlust
+Wärmeübergang Thermoelement
+Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen:
+Formelwerk Berechnung Wärmeübergang am umströmten Zylinder
+Vereinfachte Lösung der Wärmeflussgleichung für den t-sensor
+entspricht einer Diffgl. für ein PT1 glied
+Zeitdiskrete Lösung der PT1-Diffgl
+Extrapolation für LastTemp > TempAr(0)
+Extrapolation für LastTemp < TempAr(Adim)
+lbInt:
+Einen Zeitschritt vor ( = 1 Sekunde)
+Klasse initialisiert als Unterelement von TempMod
+Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+Filename sekündliches Ausgabefile spezifizieren
+Abbruch wenn kein NOx gegeben
+t-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+Programm zur Simulation SCR-Flottendurchschnitt
+Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+Formel gilt auch für die ersten 20 Sekunden
+c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+Formel gilt auch für die ersten 60 Sekunden
+Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2.) Berechnung deNOx
+a.) deNOx aus Kennlinie:
+b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+t_up aus Kennlinie:
+NOx_raw aus Kennlinie:
+Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+Raumgeschwindigkeit aus Kennlinie:
+Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+SCR Modell
+Klasse initialisiert als Unterelement von TempMod
+Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur
+Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird)
+Filename sekündliches Ausgabefile spezifizieren
+Abbruch wenn kein NOx gegeben
+t-SCR (°C), deNOx(1-NOx-Auspuff/NOx-Roh), -t-upstream(°C), NOx-Roh (g/h)/kW_Nennleistg, Summe NOx ueber 60Sek vorher g/h)/kW_Nennleistg, Raumgeschwindigkeit (1/h)
+Programm zur Simulation SCR-Flottendurchschnitt
+Anmerkung: deNOx-Werte kleiner als Null sind möglich:
+dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld
+1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell
+a.) t_SCR: zusammengewichten der von t_upstream und t_downstream
+SCR-Model-intern werden dabei Temperaturen zwischen 50°C und 500°C begrenzt
+Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben
+b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit
+Formel gilt auch für die ersten 20 Sekunden
+c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen
+Formel gilt auch für die ersten 60 Sekunden
+Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden
+Berechnung deNOxmin aus Kennlinien-Wert bei 50°C
+2.) Berechnung deNOx
+a.) deNOx aus Kennlinie:
+b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie
+t_up aus Kennlinie:
+NOx_raw aus Kennlinie:
+Summe NOxraw in den letzten 60 Sekunden aus Kennlinie:
+Raumgeschwindigkeit aus Kennlinie:
+Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz)
+KAT-Modell
+Klasse initialisiert als Unterelement von TempMod
+Kennfelddaten
+Erstellen eines neuen KAT-Moduls
+Interpolationsfunktion
+param name="x">Massenstrom</param>
+param name="y">Temperatur vor KAT</param>
+param name="MapID">MapID der entsprechenden Abgaskomponente</param>
+returns>interpolierten Wert für x und y aus Kennfeld</returns>
+remarks>Aus Massenstrom-Temperatur Kennfeld wird Konvertierungsrate für entsprechende Abgaskomponente berechnet</remarks>
+Einlesen der Kennfelder für Konvertierungsraten
+param name="Name">Dateiname</param>
+Units (wird nicht ausgewertet)
+Werte
+KonvRaten Null setzen wenn Komponente nicht gegeben
+Triangulieren
+Dic. für modale Konvrate definieren
+Berechnung der Konvertierungsrate aus Kennfeld
+param name="jz">Zeit</param>
+remarks>Für die Berechnung wird die Temperatur des Thermoelements am Kateingang (entspricht Modulnummer i-1) verwendet!!!</remarks>
+Konvertierungsrate aus Kennfeld berechnen
+Header für Ausgabedatei
+Daten für Ausgabedatei
+param name="jz">Zeit</param>
+Interface zur Konverter-Klasse cScrMod, cDocMod , usw...
+Unterprogramm zu PHEM zur linearen INterpolation aus einem Polygonzug (z.B. in Vissimzs.for aufgerufen)
+uebergeben wid "such" als X-Wert, der dann als berechneter Y-Wert wieder zurueck gegeben wird
+Zu Belegen sind vorher:
+Xis(j) und Yis(j)
+Zu uebergeben der gesuchte Wert (such) und die Anzahl an vorhandenen Polyginpunkten (izpl)
+Suche der naechstgelegenen Drehzahlpunkte aus eingegebener Vollastkurve:
+Abstand zu Eingabepunkten und Suche des Punktes mit geringstem Abstand:
+Festlegung des zweiten INterpolationspunktes (nur interpolieren, nicht extrapolieren)
+Extrapolation nach oben
+Extrapolation nach unten
+Sortieren der 2 Werte nach aufsteigendem n:
+Interpolation der zugehoerigen Maximalleistung (P/Pnenn)
+
+Dieser Code wurde von einem Tool generiert.
+Laufzeitversion:4.0.30319.269
+Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+der Code erneut generiert wird.
+HINWEIS: Diese Datei wird automatisch generiert. Ändern Sie sie nicht direkt. Zum Ändern
+oder bei in dieser Datei auftretenden Buildfehlern wechseln Sie zum Projekt-Designer.
+Wechseln Sie dazu zu den Projekteigenschaften, oder doppelklicken Sie auf den Knoten "Mein Projekt" im
+Projektmappen-Explorer). Nehmen Sie auf der Registerkarte "Anwendung" entsprechende Änderungen vor.
+
+Allgemeine Informationen über eine Assembly werden über die folgenden 
+Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+die mit einer Assembly verknüpft sind.
+Die Werte der Assemblyattribute überprüfen
+Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+Hauptversion
+Nebenversion 
+Buildnummer
+Revision
+Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 
+übernehmen, indem Sie "*" eingeben:
+
+Dieser Code wurde von einem Tool generiert.
+Laufzeitversion:4.0.30319.269
+Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+der Code erneut generiert wird.
+Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+
+Dieser Code wurde von einem Tool generiert.
+Laufzeitversion:4.0.30319.269
+Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+der Code erneut generiert wird.
\ No newline at end of file
diff --git a/Tools/TranslateComments/translate_to.txt b/Tools/TranslateComments/translate_to.txt
new file mode 100644
index 0000000000..35151c1fe3
--- /dev/null
+++ b/Tools/TranslateComments/translate_to.txt
@@ -0,0 +1,2295 @@
+
+@The following events are available for MyApplication:
+@Startup: Raised when the application starts even before the creation of the Startup-forms.
+@Shutdown: Raised after closing all the application forms. This event is not raised if the application terminates abnormally.
+@UnhandledException: Raised if the application encounters an unhandled exception.
+@StartupNextInstance: Raised when launching a single-instance application, and one is already active. 
+@NetworkAvailabilityChanged: Occurs when connecting or disconnecting to the network.
+@Initialization
+@Paths
+@If folder does not exist: Create!
+@Preconfigure Directories.txt
+@Separator!
+@Initialize Classes
+
+@Start Log
+@File size check
+@If Log too large: Delete
+@License initialization
+
+@First line: Version
+@Remove V'' => It remains the number
+@If invalid version: Abort
+@Version settled
+@Line      Variable        Type         Description
+@01)       WorkDPath       String      WorkDir
+@02)       LastMode        Short      Last used mode (equivalent CBoxMODE.SelectedIndex)
+@03)       IntpV2          Boolean     New interpolator to use
+@04)       nnormEngStop    Single      Stop engine if under this Revolutions
+@05)       TEMpath         String      TEM_Data path
+@06)       LastTEM         String      Last TEM file -not in Options Form!!!!
+@07)       TEMexl          Boolean     Open TEM in Excel  -not in Options Form!!!
+@08)       EAAvInt         Short       Analysis intervals in seconds. If 0: Ask for Value
+@09)       ModOut          Boolean     Dump Modal
+10)       WegKorJa        Boolean     Path-correction in so speed. Reduction cycle is not shorter
+@11)       GnVorgab        Boolean     Gear-per- Revolutions
+@12)       LogSize         Int16       Maximum Log-size [MiB]
+13)       FZPsort         Boolean     FZP sort (formerly standard since the VISSIM. Fzp sorted according seconds) outputs
+@14)       FZPsortExp      Boolean     Export FZP Sorted
+@15)       BATCHoutpath    Boolean     Output path for BATCH mode:   <WORKDIR>, <GENPATH> or path
+@16)       BATCHoutSubD    Boolean     Dump-BATCH in Subfolders (per .gen File)
+@17)       AirDensity      Single      Air-density
+@18)       FinalEmOnly     Boolean     Dump only Final Emission
+@19)       FCcorrection    Boolean     FC-Correction in BATCH-mode
+@Previously: IntpV2 = CBool(line)
+
+@Search Min/Max
+@Normalize
+@When sign of x and y is not equal to the sign of xA(i) and yA(i) respectively, then skip Row i
+
+Driving-states in seconds
+Driving-state ratios
+@Acceleration parameters
+@3s-Accel
+@Driving-state ratios:  Stop/Acc/Dec/Cruise
+@Average-Accel
+
+@XY-triangulation
+@XZ-triangulation
+
+@Instructions for integrating new DEV-Options *********************************
+@1. Entry in "Sub New()"
+@I) Define new cDEVoption Object with "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)"
+@ConfigType      <tDEVconfType>  ...Type definition: Boolean, Integer, Single, String, menu selection (Integer) or Reference to Function
+@Description     <String>        ...Description of the parameters
+@SaveInConfg     <Boolean>       ...Whether you want to save settings for next PHEM-startup
+@Enabled         <Boolean>       ...Whether settings in the DEV-tab can be changed
+@II) default value definition. Distinguish which ConfigType to use:
+
+              
+  
+           
+    
+           
+    
+              
+
+
+@Where NameDerFunktion is a function to call returning a <String>: "Public Function NameDerFunktion() As String"
+
+@Definition of Available selection options as <String>:
+@Conf0.AddMode ("select 1")
+@Conf0.AddMode ("Option 2")
+@and so forth.
+@Default value definition: First choice = 0
+       
+@START: Parameters Configuration '****************************
+@END: Parameters Configuration '*****************************
+@Initialize the actual Config-Parameters from MyConfigs list 
+@Demo for Delegate Function
+May not be
+
+@Transient Correction
+@Component is dumped every one second
+@Define ATVals (EXS)
+@Totals/Average Values
+@Averaged
+@Total (g/h converted into g)
+
+Select GEN-list for ADVANCE either from Fleet or from Job-list '**********************
+@Create Erg-entries '**********************
+@Vehicle type-independent
+@For each GEN-file check Mode and Map
+@nothing...
+@Electric-Vehicle / Hybrid
+
+@Only EV:
+@Conventional / Hybrid (Everything except EV)
+@Conventional vehicles ...
+@From the measured data
+@Dump x/h if in ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into  x/km is not possible
+@From the Engine-Map
+@Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible
+@currently nothing
+@Vehicle-related fields
+
+Sort ErgListe so that g/km and g/h are side-by-side
+@Vehicle type-independent
+@Length, Speed, Slope
+@Average-Speed. calculation
+@Average-Slope calculation
+@Positive effective EM-Power
+@Positive effective Battery-Power = internal EM-Power
+@Positive internal Battery-Power
+@Calculate Energy consumed
+@Negative effective EM-Power
+@Negative effective Battery-Power = internal EM-Power
+@Negative internal Battery-Power
+@Charged-energy calculation
+@Battery in/out Energy
+
+
+
+@Only EV:
+@Energy-consumption
+@Conventional means everything with ICE (not EV)
+@Emissions
+@Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible
+@Power, Revolutions
+
+
+Only Entire-vehicle (not EngOnly)
+
+
+
+
+
+
+
+
+
+
+
+
+@Create Output-string:
+@Open file
+@Close file (will open after each job)
+@Open file
+@Close file
+@Define Output-path
+@Open file
+@Open file
+@Close file (will open after each job)
+
+@Average Speed calculation
+@TODO: Mission without Cycle-name
+
+
+@Subroutine to correct the Consumption-values from Engine-size (HBEFA-calculations because
+@all HDV(LKW)-sizes are calculated from the same *. mep
+@Correction of the Fuel-consumption
+@only for manual calculations and HDV(LKW)
+@for Euro0 and earlier, 3 different KF used depending on the size
+@therefore no Size-correction here
+@Correction-function for EUR1 and EUR 2 adopted 1:1 from ARTEMIS standard
+Correction-function for Euro 3 like  ARTEMIS slightly adapted (see FcCorr_Eu3ff.xls)
+@Correction function for Euro 4 similar to Euro3
+@but lightly adapted: Average Nominal-Power of the engines into mep verwursteten
+
+
+@Read GEN
+VECTO: Default values for the parameters are no longer in GEN/.VECTO are to be occupied in reading about SetDefault.
+@Error message in init()
+Read the Vehicle(KFZ)-specifications from 'KFZspez'
+if there are <DRAG> entries, then read FLD before MAP/MEP!
+@Normalize
+@Map: Columns 1 and 2 are the x-and y-coordinates (Pe, n)
+@the rest are Measurement-values
+@Emissions and Consumption in (g/(h*kW_NominalPower) at HDV(SNF)
+@Emissions (g/h) and consumption in (g/(h*kW_NominalPower) in cars(PKW) and LCV(LNF)
+@Kennfeld read
+@Normalize
+@Reading the Vehicle Driving-cycle (Not in ADVANCE).
+@LUZ: 04.02.2011: From now outside of READING because of new BATCH structure
+Dynamic correction parameter, if exclusively Dynamic-correction(dynamokkorrektur):
+Parameters of multiple regression analysis, Difference with stationary
+@HDV(SNF): (g/h) / kW_Nominal-power for individual parameters
+@Cars(PKW) (g/h) for emissions (g/h)/kW for consumption
+@Reading data for hybrid simulation:
+@TODO: Init EV/HEV here!
+
+@Main program for all modes
+@If there are any "unplanned" Aborts
+@Reset the fault
+@Specify Mode and Notification-msg
+@License check
+@Create BATCH Output-folder if necessary
+@MOD-Data class initialization
+TEST: Just look whether it's even without the: MODdata.Init()
+@ERG-class initialization
+@Warning on invalid/unrealistic settings
+@Notify
+
+@Calculation Loop for all Preset-cycles and Vehicles:
+@Job loop ****************************************
+@Check if Abort
+@If error when read GEN
+@Reading the input files
+@BATCH: Cycle from DRI list
+@ADVANCE: Cycle is not read
+@Check if all the modes are licensed in the GEN file
+@If optimizer is active, then read parameters here
+@BATCH: Create Output-sub-folder
+@Cycle-loop ****************************************
+
+@BATCH mode: Cycle from GEN-file but not from DRI list
+
+@Output name definition
+@VECTO-Cycle-loop **********************************
+
+@TODO: Loading-loop
+@VECTO-loading-loop *********************************
+@Entry point for SOC-start iteration
+@Clean up
+@Read cycle
+@Read in
+@convert v(s) into v(t) (optional)
+@Convert to 1Hz (optional)
+@Error-notification in DRI.Convert()
+@Unnormalised
+@Initialize Cycle-specs (Speed, Accel, ...)
+Expect Npi-Power into Pe and P_clutch
+@CAUTION: VehmodeInit() requires information from GEN and DRI!
+@Error-notification within VehmodeInit()
+@TODO: notification...
+@Calculate CycleKin (for erg/sum, etc.)
+Emissions and After-treatment - it will not run in EV mode
+@Determine TC parameters per second
+@Map creation
+@Calculate Raw emissions
+Convert TC parameters to differences with Map-TC-parameters
+@Dynamic correction
+Correction of consumption values smaller HDV(LKW) engines by HBEFA
+@Exhaust system simulation
+@Totals / Averages form
+
+@Output Every second ***
+@VECTO Output
+TODO: Loadings Gear-shift ...
+@Output for BATCH and ADVANCE
+@In ADVANCE, Cycle-cancel = Job-cancel
+@Output in Erg (first Calculation - Initialization & Header)
+@Data Cleanup
+
+@TODO: Loading Loop
+@END *** VECTO-loading loop *** END ************************
+@END *** VECTO Cycle-loop *** END *************************
+@END *** Cycle-loop *** END ******************************
+
+@Check whether Abort
+@END *** Job loop *** END *******************************
+
+@Corrected Emissions (determined by SOC-iteration-module)
+@Opt_Interface On/Off
+@Initialization
+@Initialization
+@Count to Zero
+@Delete Corr. Em. 
+TODO: Specify I/O-directory
+@Timer Initialization/Start
+@Read Parameters
+@Reading the Input-file with Opt-parameter
+@Dump parameters
+Dump the output file along with the Objective-function(Zielfunktion)
+@Dump the StatusString
+Calculation of the Objective-function(Zielfunktion)
+Dump the Objective-function(Zielfunktion)
+@Opt Deactivation
+@Status-notification (must not be called by BGWorker)
+@Start PHEM - Called from F_MAINForm.ComMsgTimer when the Start-signal is received
+@PHEM start
+@Stop the timer
+@Count + 1
+@PHEM start
+@PHEM ready - called by BackgroundWorker1_RunWorkerCompleted when PHEM finished
+Dump of the Objective-function(Zielfunktion)
+@Finish PHEM_Launcher
+@Start the Timer again
+@Finished PHEM_Launcher
+
+@Check whether the Sign of Delta-SOC changes
+@Sign changes ...
+@Limit reached => Abort
+@If the last iteration was the best (SOCnAbbr = True): Exit
+@If another iteration was better (SOCnAbbr = False): Repeat
+@Check whether LinReg possible: Mind. 2 calculations; Mind. dSOC-1 sign-changes
+@Uncorrected Em use if SOC-iteration OK
+@Uncorrected Em used
+@Corrected Emissions for Optimizer
+@If SOC-iteration was successful (or Lin.Reg not possible) then use Emissions from the last (uncorrected) calculation
+
+@TODO: Get rid of it! SOC-iteration belongs either in the Power-loop or Em-calculation for LinReg
+@File format
+@Log start
+
+@Line 1: FZP file
+@Line 2: FLT file
+@Line 3: TEM file
+@Line 4: RndSeed
+@Line 5: MISKAMout True/False|
+@Line 6: STRfilter True/False
+@Line 7: Distance filters for SUM.STR
+@Line 8 +: STR files
+
+Fields for Route-number, Track and Coordinates for all STR files 
+@Calculation
+@ADVANCE initialization
+@Read ADV-File
+@Check whether FLT is available
+@Check whether FZP is sorted
+Read FLT  (must be done before STR because of cSTRerg)
+@Create EMlist
+@STR read
+@Create Lists
+@Read FZP
+@FZP sort (and export)
+
+@For Output-Vis
+@Dump-initialization
+@Filename
+@Dump Modal
+@Start-values
+@ADVANCE memory release
+@Dump
+@Free memory
+@Delete Lists
+Garbage Collection - If "System Out of Memory" Exception prevents it (but does not do it!)
+@ADVANCE Vehicle calculation
+@Check whether finished
+@Initialize Cycle-class
+Vehicle-number and Type definition (here remains constant)
+@Old Vehicle is VehStrAlt, New is VehStr
+@Create Lists
+
+@Define Fields for Vehicle-calculations
+@Check whether it is a new Vehicle 
+@General(Allgemeiner) Vehicle-Cycle
+Road-Distance evaluation (MISKAM)
+
+@Vehicle identification
+@Check whether Cycle too short => skip
+@Increase number of Vehicles per each Type
+@Check whethert last GEN-file to use is new, otherwise occupied(Belegung ) by FLT
+@VehStr is now ALT
+@Section by section calculation
+through Cycle-loop
+@No. of STR-file
+@If STR-No has changed:
+@Finish with Old STR-No.
+@Distance (km driven)
+@Travel-Time in h
+@Vehicle(KFZ) No.
+@Cumulative emissions
+@Add up
+@Last STR completed 
+@Distance (km driven)
+@Time in h
+@Vehicle(KFZ) No.
+@Cumulative emissions
+@Read FLT
+@Read FZP
+@Determine File-length
+@Dimension arrays
+@Import File
+@Skip Comments
+Routes that are not listed in the STR file, are ignoted(?) here
+@Show Arrays
+@Display Progress
+@Free memory
+@Newly dimensioned arrays
+@Sort FZP
+@Current Vehicle is vNr1
+@Count vehicles with vNr = vNr1
+@vNrAnz = Number of Vehicles with vNr = vNr1
+@Sort all vehicles with vNr = vNr1 by Vehicle-number
+@Cache = line x1
+@Linex1 = line x2
+@Line x2 = cache
+@vNr1 sorted by time
+@Cache = line xx1
+@Line xx1 = Line xx2
+@Line x2 = Cache
+@Display Status
+@FZP export
+@Data
+@Read STR
+@Create SID-List
+Vehicles divisions, have the bridge the gap over time
+@Read ADV
+@Read ADV-file ********
+@Line 1: FZP file
+@Line 2: FLT file
+@Line 3: TEM file
+@Line 4: RndSeed
+@Line 5: MISKAMout True/False
+@Line 6: strFilter True/False
+Line 7: STR.SUM Route-filter
+@Line 8+: STR files
+@Define Output-path
+@File results with sums over all Vehicles(KFZs):
+@Close Output
+@Convert Emissions to g per second and Vehicle(KFZ)/day
+@Convert Emissions to mg per Meter
+Route-length [m] is calculated from straight line between start and end points:
+@Dump Results
+@Filename for ResultFile = Input-filename but with *.sd3:
+File with sums over all results Route-sections:
+@Subroutine of PHEM/Advance for dumping the results of MISKAM Air-Quality-Model of Lohmeyer
+@Dump Data separated by Semicolons
+@Adding up the Emission-data for Route-segments, for every Vehicle over each second
+@Caution: There are 2 possible Directions(Richtungen) for each section but only the StrId is given to *.fzp -> the "Closest" assigned Direction(Richtungen)
+Direction assigned
+Find nearest Road-section
+Coordinate vehicle(KFZ):
+Route Coordinates: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) from Input
+Total distance to the beginning and end of the Route-section j
+If the Route number in *.fzp file not exist in *.str file, it is assigned the nearest section (same method as above):
+Summation of the emissions to the respective associated sections:
+calculation in every second (g/h) / 3600 - by> g / haul all the time
+Counting the Vehicle for DTV (only if not already in previous second on the track
+Rough calculation for benzene GLOBEMI (HBEFA):
+@Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1
+Rough calculation of Soot, Soot shares of PM currently only Schaetz-values!!:
+@Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1
+SO2-Emissions as contained in the Fuel
+Sulfur expected. With SO2 mass = (mass% S / 100) * 2
+@Dump each STR results ' *********
+@Dump Totals of all STR's ' *********
+@File Header
+@Em per km ***************************
+@Em per segment
+
+@Number of Vehicles
+@Travel time
+@Em per km
+@Writing
+@Em per Vehicle Type
+@Number of Vehicles
+Travel time, Route-Distance, Avg. Speed
+
+@Writing
+@Total
+
+@Number of Vehicles is not calculated from STRerg (makes no sense) but from cFLTfleet-recording
+@Travelling time
+@Em per km
+@Writing
+
+@Em per segment
+
+
+@Writing
+@Em per Vehicle Type
+
+@Writing
+@Total
+
+
+@Writing
+@Analyze Mod-file
+@Open Infile
+Number of VehNummern
+@Loop through all VehNummern in list
+@Abort when User-abort
+@Abort when File finished
+@Open Output-File / Abort if Error on Opening
+@Loop through file
+@If string already contains a VehNr do not read again Line (see below)
+@Read Line
+@If Line with VehNr found: extract VehNr
+@If VehNr is the required one: write the Output-file
+@First line write ("VehNr: ...")
+@Read next Line (otherwise Do-While skipped)
+@Loop until next VehNr / end_of_file
+@If next Vehicle:
+@If Vehicle-number is the same: Continue writing File
+@Skip header and Units
+@Otherwise: Get out of loop
+@Write Line
+@Read line
+@If not EndOfStream Set flag so next VehNr is not skipped
+@Close Output-file
+@Jump out of the VehNr-search-loop
+
+@FLT-class
+@Initialize
+@GenFile Random-generator
+Class for sections evaluation
+@File Header
+@Em per km ***************************
+@Results per Veh-Type
+@Number of Vehicles
+@Travellingtime
+
+@Writing
+@Total
+@Number of Vehicles
+@Travelling-time
+
+@Writing
+
+@Results per Veh-Type
+
+@Writing
+@Total
+
+@Writing
+@Close file
+
+
+Fav-Dlog: Empty Items in Fav list Instead "<undefined>"
+@Application
+@Required Global variables (default):
+@New Instance - define ID, switch to FolderBrowser
+@OpenDialog Return True when Dialog ended with OK
+@SaveDialog - Returns True when Dialog ended with OK
+@Open dialogue - Return True if Dialogue ended with OK
+@Manually update File History
+File / Folder History spokes and Release memory
+@Define File-Extensions
+@Ask for Files
+
+
+
+
+  
+
+
+@This call is required by the Windows Form Designer.
+@Append any initialization after the InitializeComponent() call.
+@If empty path: use the Current-folder(MyFolder) 
+@Stop if empty path
+@Assume Files in array
+@Multiple files selected 
+@Single File
+@Primary extension (eg for bForceExt)
+@If file without path then append path
+@If instead of File a Folder is entered: Switch to Folder and Abort
+@Check whether specified a File with Ext
+@If File without Extension (after bForceExt question) and it does not exist, then add primary Extension
+@Check that File exists
+@Yes: when bOverwriteCheck, check for Overwrite
+@No: abort if bFileMustExist
+@Define MyFiles
+@Load Folder History ContextMenu
+@Define Path
+@If no path is specified: Last folder, no file name
+@If path-length too small  (Path is invalid): Last File
+@Open Folder - If no folder in the path: Last folder
+@If given a file without path
+@Otherwise: 
+@Show form ------------------------------------------------ ----
+@Update Global History Folder
+@Close and save File / Folder History
+@Switching to FolderBrowser
+@Initialize
+@Initialization for Global File Browser
+@Load Drive ComboBox
+@Create Drive List
+@Read Folder History
+@Sort Context Menu
+@Sort Context Menu
+@Files
+@Folder
+@Change folder
+@Abort if no drive specified
+@Delete Search-fields
+@Set Drive
+@Set Folder
+@Folder one level up
+@Load Folder-List
+@Delete Folder-List
+@Add Folder
+@Load File-list
+@Abort if bBrowseFolder
+@Define Extension-filter
+@Delete File-List
+@Add Folder
+
+
+
+
+  
+
+
+
+
+
+  
+
+
+@Initialize
+@Picture Links------------------------------------------------------------------
+
+
+
+
+  
+
+
+@Initialize
+@Close
+@InputFile controls ------------------------------------------
+
+@Save ADV
+@New empty ADV
+@Load ADV in Form
+@Line 1: FZP file
+@Line 2: FLT file
+@Line 3: TEM file
+@Line 4: RndSeed
+@Line 5: MISKAMout True/False
+@Line 6: strFilter True/False
+@Line 7: Distance filter for SUM.STR
+@Line 8 +: STR files
+@Save ADV from Form
+ADV.STRpathsClear()     '<= Not necessary because new local cADV object
+@Form changes (control whether GEN saved) ---------------------------------
+@Event handler for the Form changes
+Change Status change
+@Save changes? "... Return True if user aborts
+
+
+
+
+  
+
+
+
+
+
+  
+
+
+@Save or Save As function = true if file is saved
+@Save ENG
+Change Status change
+Save changes? "... Return True if User aborts
+
+
+
+
+  
+
+
+@Save or Save As function = true if file is saved
+Change Status change
+Save changes? "... Returns True if user aborts
+
+
+
+
+  
+
+
+@Cache Coolant System Simulation
+@Initialize form (Load Drives, Combo-lists, ...)
+So Combo-content is current
+@Close
+@Change the DynKor checkbox
+@Change the Cold-start checkbox
+@Change the SCR checkbox
+
+@Thus Veh-file is returned
+@Thus Veh-file is returned
+@Thus Veh-file is returned
+@Save ("Save" or "Save As" when new file)
+@Load GEN in the form
+@Read GEN
+@Update Form
+@Map creation -----------------
+@Cold start --------------------------
+@Files -----------------------------
+@Cold start
+@GEN save from form
+@Map creation ------------------------------------------------ ------
+@Cold start ------------------------------------------------ ---------------
+@Files ------------------------------------------------- -----------------
+@Cold start
+@New BlankGEN
+@Map creation -----------------
+@Cold start --------------------------
+@Files -----------------------------
+@Cold start
+@Event handler for the form changes
+@Start/Stop - checkbox change
+@Start / Stop - Textbox change
+@TextBox.TextChanged Events => Change()
+@Change Status Change
+@Save changes? "... Returns True if User aborts
+
+
+
+
+  
+
+
+
+@Called when PHEM already running
+@Delete GENlist-Selection
+@Set Mode
+When Batch resulting in more than 100 combinations per second, ask whether to dump-output  per second
+
+@Define Job-0list
+@Define File / Cycle list
+Define Cycle-list (if not BATCH mode in SetCycleList deleted only the list and not reassigned)
+@Check whether Overall-progbar is needed
+@Launch through Job_Launcher
+@Define File-lists
+@Job Launcher
+@Load Options from Options Tab
+@Save Config
+@Reset Msg-output
+@Button switch
+@Disable Options
+@ProgBars start
+@BG-Worker start
+@Begin work
+@Prevent SLEEP
+@At x.ProgSec = -1 no update of ProgBarSec
+@Work completed
+@Progbar reset
+@So ListView-Item Colors (Warning = Yellow, etc..) are correctly visible 
+If Optimizers(Optimierer ) are active here, then dump the Objective-function(Zielfunktion ) and Signal to interface
+@ShutDown when Unexpected Error
+@Options enable / GUI reset
+@Command Line Shutdown
+
+@SLEEP reactivate
+@Initialize
+@Load Tabs properly (otherwise problem with ListViews)
+
+@Load GUI Options (here, the GEN/ADV/DRI lists are loaded)
+@Resize columns ... after Loading the @file-lists
+@Initialize BackgroundWorker
+@License check
+@Shown Event (Form-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- Editor ..)
+@Open file with PHEM
+@Read Command-Line Args
+@Mode switch
+@If file is specified
+@Close
+@Save File-Lists
+@Login close
+@Config save
+@File browser instances close
+@Locked functions show/hide
+@Remove File from list
+@Append File to List
+@Open file
+@GEN/ADV list: Add File
+@If PHEM runs: Cancel operation (because Mode-change during calculation is not very clever)
+@Mode-switch if necessary
+@If file already exists in the list: Do not append (only when a single file)
+
+Element selection and hook
+@Otherwise: Add File (without WorkDir)
+@Number update
+@DRI list: Add File
+@Mode switch if necessary
+@Number update
+
+
+
+@Worker start
+@Cache Selected Items
+@Delete Selected Items
+@Items select and Insert
+@Mode toggle (from(auf) BATCH)
+@If PHEM already running: STOP
+@Otherwise: START
+@Save Lists if Crash
+@Mode Change
+@Save Old list
+@Load New List
+@Open GEN-editor and load File
+@Open ADV-editor and load file
+@Save File-Lists
+@ComMsgTimer_Tick Tick - Check whether new Message
+@Set Mode
+@General(Allgemein)
+@If it is a Link => Open it
+@Hand cursor for links
+
+
+
+
+  
+
+
+This call is required by the Windows Form Designer.
+@Add any initialization after the InitializeComponent() invocation.
+
+@Convert to Int32
+
+@End
+
+
+
+
+  
+
+
+@Initialize - load config
+@Load Config
+@Options-----------------------------------
+
+
+
+
+  
+
+
+
+
+
+  
+
+
+
+
+
+  
+
+
+@Initialization
+
+
+
+
+  
+
+
+@Save or Save As function = true if file is saved
+@New VEH
+@Open VEH
+@Save VEH
+Change Status change
+@Save changes? "... Returns True if user aborts
+
+
+
+
+  
+
+
+
+
+
+  
+
+
+
+
+
+  
+
+
+@Job status => Job-list Status-column
+@Cycle status => Cycle-list Status-column
+@Worker Progress => Progbar (ProgBarSec Update when ProgSec > -1; ProgBarSec-Reset at ProgSec = 0)
+@Progbar set to Continuous
+@Abort
+@Status message directly to GUI - can not be called by the BackgroundWorker!
+@Statusbar - called either by WorkerMSG or directly by the form, NEVER by the Worker
+@Status form reset - ONLY called by Events, NEVER by Worker
+@Class used to pass Messages from BackgroundWorker
+@If string not a number, then Zero
+@Open File in Excel
+@When no path is specified, then insert either WorkDir or MainDir   Special-folders
+@Trim Path
+@If empty file => Abort
+@Replace sKeys
+@Replace - Determine folder
+@One folder-level up
+@Supplement Path, if not available
+@Path one-level-up      "C:\temp\ordner1\"  >>  "C:\temp\"
+@File name without the path    "C:\temp\TEST.txt"  >>  "TEST.txt" oder "TEST"
+@Filename without extension   "C:\temp\TEST.txt" >> "C:\temp\TEST"
+@Filename without path if Path = WorkDir or MainDir
+@Path alone        "C:\temp\TEST.txt"  >>  "C:\temp\"
+
+@Extension alone      "C:\temp\TEST.txt" >> ".txt"
+
+@Abort if there's no file
+@Open file
+@Map reset
+
+
+
+
+@Column 1 = Auxiliary speed [rpm] => X-axis
+@Column 2 = Mechanical power [kW] => Z-Axis (!)
+@Column 3 = Output power [kW] => Y-Axis (!)
+
+
+
+@Defaults(Vorgabe) for EXS
+@Parameters for KF-creation
+@Defaults(Vorgabe) for AUX
+@Values.Add(tDriComp.t, New List (Of Single))             '<= Needed only if ADVANCE > 1 Hz supported
+
+@Abort if there's no file
+
+@now in New()
+@Open file
+@First line: Version
+@If invalid Version: Abort
+@Version specified
+@If no version information: Old Format
+@Version Check: Abort if input file format is newer than PHEM-version
+@Column 2: added option "+" = parameter for KF-creation
+@Second row: Name/Identification of the Components
+@Check Number of Columns/Components
+If used DRIcomp = Undefined it will get as EXS-Comp or Emission for KF-Creation / Eng-Analysis
+@ERROR when component in angle brackets is unknown
+@if first EXS-column, then create Dictionary
+@If EXS-Component not yet in Dictionary, create 
+@Check whether ExsComp/Module-combination already exists => ERROR
+@Set Gvorg/Nvorg:
+@Third row: Units/Normalization
+@VECTO: nothing read. Fixed Units (line = file.ReadLine)
+@Normalization-compatible DRI-components
+
+
+
+@VECTO MAP-components: Always [g/h]!  
+@Store Unit in String for further checks
+@Remove brackets
+@Set Scaling and Unit
+@Line 4, 5: (optional when "+"): Settings for KF-creation
+@If "+" enabled
+@Creating instances
+@1. Option "Map normalized by Pnom"
+@2. Option "PfAK apply"
+From 4th line or From 6th line: values (no different units/normalizations support)
+@Open file
+
+@ResetMe resets Nvorg / Gvorg 
+@Convert Speed to m/s
+@Normalize, if necessary
+@Padd unnormalised, if neccesary
+@Pe normalize, if necessary
+@Emissions are only accepted in x/h or x (see ReadFile)!!!!!!!!
+@Deceleration(Verzögerung) limit ********************************
+@Create Time-sequence '***********************************
+@Convert to 1Hz '***********************************
+@Check whether Time is not reversed 
+@Define Time-range
+@Create Output, Total and Num-of-Dictionaries
+@Start-values
+@Next Time-step
+@If Time-step > tMax:
+@Conclude Second
+@If no values ​​in Sum: Interpolate
+@If only one Value: Inter- /Extrapolate
+@Set New Area(Bereich)
+@Check whether last second
+@New Sum /Num no start
+@Accept New fields
+
+@Abort if there's no file
+@Open file
+@Map-Config
+@Read FLD and MAP
+@Normalize Map
+@Returns the maximum available Drivetrain-power for given  Revolutions
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+
+@Returns the maximum available Generator-power for the given  Revolutions
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+@Interpolation
+
+@Stop if there's no file
+@Open file
+@Initialize Lists
+@First line: Version
+@If invalid version: Abort
+@Set Version
+@If no version information: Old format
+@Version Check: Abort if input file format is newer than PHEM-version
+@Second Line: Name/Identification of components (Drag-Emissions  create-KF)
+@Column count check, 
+@Abort if less than 3 columns
+@VECTO: No Header/Unit column. Always PT1!
+@Third Line: Normalized/Measured
+@Abort when fewer Columns than in the second Line
+@Everything is okay
+@Additional Components
+@Remove brackets
+@Set Scaling and Unit
+@From Line 4: Values
+@Read Line
+
+@If PT1 not given, use default value (see above)
+@Line-counter up (was reset in ResetMe)
+@Close file
+@ERROR-label for clean Abort
+@Open file
+@Line counter up (was reset in ResetMe)
+@Close file
+@Normalized Revolutions
+@Normalized Power
+@Normalized Power
+@Normalized Pe-Target
+@Em ent-normalize
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+
+@Dynamic Full-load
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+@Interpolation
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+
+@Extrapolation for x <x(1)
+@Extrapolation for x > x(imax)
+
+
+@Mode
+@First line: Version
+@Version Check: abort if Input-file's format is newer than PHEM-version
+Read GEN file ****
+Common
+@KF creation
+@Cold start
+Individual next consumer
+Gear-shifting Model Distribution
+@ERROR-label for clean Abort
+@Read GEN file ****
+@Convert Old Calculation-mode into New-one
+@Map creation ------------------------------------------------ ------
+@This Sub reads those Input-files that do not have their own class, etc.
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+
+
+@Stop if there's no file
+@Open file
+@Initi Lists (before version check so ReadOldFormat works)
+@Now checking whether MIP or MAP
+@is Read.
+@First line: Version
+@Specify Version
+@Version Check: abort if input file format is newer than version PHEM
+@Column 2: Option "+" = parameter for KF creation
+@Second Line: Name/Identification of Components (Only Em. Power, Revolutions is fixed!)
+@Column-count check
+@Abort if less than 3 columns
+@Check whether Power/Revolutions swapped
+@Em-components initialize
+@Default interpolator defined in Em0 = New cEmComp
+@Default Correction Pe defined in Em0 = New cEmComp
+@Dictionary .... fill
+@ERROR when Component in angle brackets but unknown
+@Custom Em-Components Dictionary:
+@Default Em components ***
+
+
+
+@TC-components are not dumped
+@Custom Em-Components Dictionary:
+@Entry in Reference-dictionary
+@VECTO: Column 3 alwaysd consumption(Verbrauch)
+@Abort if already defined
+@Read Normalized/Measured
+@Abort when fewer columns than in the second Line
+@Read Normalized/Measured
+@EM-component reference
+@Store Unit in String for further checks
+@Remove brackets
+@Normalize and set Unit
+@Check whether n/Pe measured(Einheiten) OK:
+@Everything is okay
+@Line 4.5: (optional when "+"): Settings for Pe-Cor (old PfAK)
+@If not "+", use default Interpolators (see above)
+@Line 4 Reading
+@Loop over Em-components
+@Line 5 Reading
+@Loop over Em-components
+@From line 4 (or  6): Values
+@Line read
+@Line counter up (was reset in ResetMe)
+@Revolutions
+@Power
+@Emissions
+@Shep-Init
+@Close file
+@ERROR-label for clean Abort
+@Open file
+@Old maps have always TC-factors are (possibly  null)
+@Values
+@Line read
+@Line counter up (was reset in ResetMe)
+@Revolutions
+@Power
+@Emissions
+@Shep-Init
+@Close file
+@Abort when Em-component not in MAP
+@Abort if TC-factors for the component already defined
+@Speed Normalized
+@otherwise calculate normalized Revolutions
+@Normalized Power
+@Emissions unnormalised
+@CAUTION: Even if x_kWh and x_hPnenn are to be transformed into x_h, the Normed must remain the same because otherwise the DynKor will not be right!
+@Values are already specified in absolute
+@Distinction between [x] and [x/h] currently not used/supported
+@Check whether Revolutions/Power reversed
+@FC Delauney
+@Map creation
+@Initialize Em-components *******************
+PeCorMode: Unless specified in MES/NPI with non-default Em what is in cEmComp.New()
+@If TC specified, then Abort
+@Select interpolator
+@Entry in Reference Dictionary (It does not check whether Em-Comp occurs twice since it has been caught in DRI.ReadFile)
+@Dump Infos
+@Dynamic parameters and Extrapol to be added 
+@Initialize Mean-value Dictionary *************** 
+@Calculate Mean-values **********************
+@Main-loop
+@Create Lists
+@Loop over Measurement-values
+@Fill the Area below iMsek with Measurement-values
+@Fill the Area above iMsek with the Mean-values of the Measurement-values
+@No averaging
+EmCheck: False = value is not used, True = Value is already(verwurschtet) in the Map
+Grd-ing(Rasterung) ****************************
+@Add Drag at half nn-increments. Needed for PfAK. If GEN.KFinsertDrag is disabled, it will be deleted later.
+@Add Idle-point
+@Create NrUsed / Set to zero set *****************
+@Expect pure Measurement-values in Grid *****************
+Basis for step-size buffering
+@Loop over Grid-points(i)
+@Return Totals/Numbers/Flags
+@Drag-Power
+@Loop until enough Values found in Radius
+@Reset Counter/Totals
+@Loop over Measured-values   ​​(j)
+@If within Radius ...
+@Num + 1
+@Loop over all Em-comp.
+@Total +
+@Calculate Min/Max (for Log-output)
+Sum-up Interpolated Power (then divided by Num)
+@Count how many Measurement-values exist for the Grid-points (Log-output)
+@If none Measured-value in Radius (Num = 0), then enlarge Radius and set Extra-flag
+@Allocate NrUsed
+@Interpolated-Power = Sum / number
+@Calculate PfAK:
+@If above Drag then PfAK according to Formula, or 1 when the difference between  Pe-Interpol and Drag-power is too low
+@If below Drag, Pfak=0 => Em-value = Zero
+@Get the Extrapol flag from the Extrapol-column (1/0)
+@For Log-output
+@Loop through Em-Comp (within Grid-points-loop)
+If Option 'Drag-Em' from .FLD 'and Power-gridpoints <= Drag-power
+@If Drag-Em exists in .FLD, then use it otherwise alocate with zero
+@Em-allocation without PfAK (=> PfAK is crafted later)
+@For Log-output
+@Assume TC-factors without Pfak
+@Pfak ******************************
+@IMPORTANT !!!
+@Loop passes over all Grid-points (also for Pe <= PeDrag and  respectively for PeIntpol near Pdrag).
+@That's OK because PfAK is in anyway allocated with 1s.
+@Loop through Em-Comp
+If no Create Map is set (in .NPI/.MES) or PfAK activated explicitly => Use PfAK
+@Loop over Grid-points (i)
+Old PfAK with Extrapolation from Zero route?
+Pick Drag-Emission
+Take the Drag-Em from the nearest Grid-point. This is because the Drag-curve 
+always comes into the Map (even if it is later deleted) !!
+Option 'Drag-Em(Schlepp-Em)' from .FLD plays no role because it affects only the Allocation-method of the Drag-curve (see above) 
+@Apply PfAK
+@Normalize (Value and Unit) ********************
+@Use them If specified in MES/NPI-files
+@Values normalized
+@Otherwise, use a standard normalization
+@Normalized Values
+Summarized EmComponents *******************
+Get Load-curve again (optional) ***********
+Loop over Grid-points(i). No For-loop because iMapDim is reduced
+@Dump Map '**************************
+@CAUTION: Not Name but sKey !!!
+@Values
+@Dump Extended-Info '***********************
+@Values
+@Shep-Init
+@Default Shepard in intpshep ()
+
+
+@Calculate Distance and Correction.
+????The Map-points with zero-Power (Pe=0) will be weighted higher and Revolution-distances lower, 
+because interpolation of Points with higher Load is fitted badly:
+@Square of the distance:             
+????If the Sign of Pe unequal (Load /Drag separation), then Distance increases more weight to Drag by Drag:
+Points are within radius and possibly within  a bigger Radius
+Distance array and create Power interpolate for Pe-correction
+@Calculation of Wisum
+@Calcluate Interpolated Power
+@Calculate Distance and Correction.
+@Square of the distance:                 
+Points are within radius and possibly within  a bigger Radius
+Distance array and create Power interpolate for Pe-correction
+@Calculation of wisumV2
+@Calculate Interpolated Power
+Calculated Emission on Drag-curve
+Search on Drag-curve
+@n0 has already been defined in Init
+@Calculate Distance and Correction.
+@Square of the Distances:
+????If the Sign of Pe unequal (Load /Drag separation), then Distance increases more weight to Drag by Drag:
+Points are within radius and possibly within a  bigger Radius
+@Create Distances-array
+@Calculation of wisum
+@Calculate emission
+
+@Stop if there's no file
+@Open file
+@First Line: Version
+@Remove "V" => Number remains
+@If invalid version: Abort
+@Version set
+@If no version information: Old format
+@Version Check: Abort if Input-file-format is newer than PHEM-version
+@Second Line: Check which TC-factors exist in any column (from column 1!)
+@Abort if less than 2 Columns:
+@Abort if unknown TC-factor
+@Add to Dict
+@From Line 3: TC-factors for each Em-component 
+@l is for Error-output
+@Open file
+@Abort if less than 11 Columns:
+
+
+Individual next consumer
+Interruption of Traction - Update 09/08/2012 (CO2 demo)
+@Cd mode / Input File - Update 08/14/2012 (CO2 demo)
+
+@End reading ****************************
+@Interruption of traction (Update 09.08.2012 - CO2 demo)
+
+
+
+@Error-message within AuxInit
+
+
+
+@Transmission Nominal-Revolutions
+@Transmission Nominal-Power
+@If nothing specified: Engine's Nominal-power and Nominal-Revolutions from Normalized ones
+PHEM:    n, PeIn, PeOut => x=n, y=PeOut, z=PeIn
+PHEM: GBmap0.AddPoints(CDbl(line(0)) * n_norm, CDbl(line(2)) * Pe_norm, CDbl(line(1)) * Pe_norm)
+VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn
+@Interpolate with Original Values
+@If error: try extrapolation
+@Search for the nearest Map point
+@Efficiency 
+@Drivetrain=> Drivetrain
+@Drag => Drivetrain: ERROR!
+@Drivetrain => Drag: ERROR!
+@Drag => Drag
+@Calculate efficiency with PeIn for original PeOut
+@Interpolate with original values
+@If error: try extrapolation
+@Search for the nearest Map-point
+@Efficiency 
+@Drivetrain => Drivetrain
+@Drag => Drivetrain: ERROR!
+@Drivetrain => Drag: ERROR!
+@Drag => Drag
+@Calculate efficiency with PeIn for original PeOut
+@Notificationin ReadFile()
+@Warn If Vair specified in DRI but CdType != CdOfBeta
+@If Cd-value is constant then do nothing
+@Read Inputfile
+@Extrapolation for x < x(1)
+@Extrapolation for x > x(imax)
+
+@Read Inputfile
+@Extrapolation for x < x(1)
+@Extrapolation for x> x(imax)
+
+
+@Current data (ie the current (last calculated) Time-step)
+@Maximum allowable Power for driving (Battery discharged) [kW]    positive sign (PHEM Standard)
+@Maximum allowable power for Generating/Rekuperiren (Battery-charging) [kW]    negative sign (PHEM Standard)
+@Renhart Battery model ~ ---------------------------------
+@Method for initializaztion - it is called once
+@Abort if there's no file
+@Read the Parameters:
+@Calculation of the Battery-voltage at TempBat and SOC(0), Discharge curve
+@Calculation of the Battery-voltage at TempBat and SOC(0), Charging-curve
+@Method of calculating the allowable power - Invoked second by second
+@Method of calculating the Batterie-losses and SOC for the given  Power - Invoked second by second
+
+@Perf ... required Power  Condition: PgMAX < Perf < PaMAX [kW]
+@all Paramers were determined/read in Bat_Init
+@jz ...Current time-step
+@All arrays from Time-step 1 to jz-1
+@Returns PeBat for the given  PiBat (sign from PHEM)
+
+@Battery discharged
+@Temperature Function
+@Determine Ri depending on temperature
+@Voltage determined from SOC and Voltage-curve
+@Current calculation
+@Battery-losses
+@Battery-temperature
+@SOC calculation
+@Adjustment for the current time-step
+@Charging Battery
+@Temperature-Function
+@Determine Ri depending on temperature
+@Voltage determined from SOC and Voltage-curve
+@Current calculation
+@Battery-losses
+@Battery-temperature
+@SOC  calculation
+@Adjustment for the current time-step
+@Battery do nothing
+
+@Returns PeBat when invoked(Laden) with PEmot (sign from(nach)Renhart)
+@Return PeBat when Unloaded(Entladen) with PEmot (sign  from(nach) Renhart)
+
+@Power
+@Vehicle
+@Define Cycle-length (shorter by 1sec than original because of Interim-seconds)
+@Here the actual cycle is read:
+@Revolutions-setting
+@Revolutions
+@Angular acceleration
+@Average EM-components (between-seconds) for KF-creation or Eng-Analysis
+@Specify average EXS
+@Specify average Aux and Aux-lists, when Au8x present in DRI and VEH
+Define Cycle-length: Same length as Cycle (not reduced because no "interim seconds")
+@Here the actual cycle is read:
+@Revolutions-setting
+@Revolutions
+@Angular acceleration
+@Initialization / Open File **************
+@ID line (Only ADVANCE)
+@ADVANCE-specific
+Calculated dynamics parameters (Diff to Map)
+@Write to File
+@Values *************************************************************************************
+@Time
+Route
+@Actual-speed.
+@Target-speed
+@Acc.
+@Slope
+@Revolutions
+@Power 
+@Revolutions normalized
+@Power normalized
+@Revolutions in U/min
+@EM-power in kW
+@Effective Battery-power
+@Internal Battery-power
+@Battery-voltage
+@Battery-Power
+
+@Revolutions
+@Power 
+@Revolutions normalized
+@Power normalized
+@Full-load and Drag
+@Power to Clutch
+@Gear
+@Transmission-losses
+@Diff-losses
+@Retarder-losses
+
+
+
+
+@Drag
+@Slope ..
+
+@Wheel-power
+@Brake
+
+@ADVANCE-specific
+
+
+
+@Final-emissions (tailpipe)
+@Raw-emissions
+@TC-Emissions
+@AT-Emissions (EXS)
+@Calculated Dynamics-parameters (Diff from(zu) Map)
+@Write to File
+Errors/Warnings occuring every second
+
+
+
+@GeschRedReset(Speed-Reduce-Reset)
+        
+
+
+
+
+
+@Full reset (at the beginning of each second step)
+@Reset Errors related to Speed Reduction (within iteration)
+Reset errors related to Power-calculation (towards performing the Gear-shifting model)
+@Emit Errors
+
+@Data per second
+@Interruption of traction
+@Recuperation
+@Project HERO - BMW Mini Hybrid
+@Standard Mini One D Wheelbase 2467 mm
+@Specification of Center-of-gravity height (approximation)
+@from http://www.colliseum.net/wiki/Schwerpunkth% C3% B6he
+@with R = 2467 [m], and m = 1335 [kg]
+@Read Bat
+@Maximum effective EM-Power in driving depends on Overload and Battery-status
+@Based: Full-load-curve
+@If Overload possible, upscale Overload(ÃœL)-power
+@PeFLD = maximum EM-Power by(nach) FLD and Overload(ÃœL)
+@Calculate PeMax from PeBatMax
+@PeBAT = maximum EM-power to Battery
+@Return the maximum Power allowed by the Battery
+@Maximum effective EM charging power depending on Overload and Battery-state
+@Base: Drag-curve
+@If Overload possible, upscale to Overload(ÃœL)-power
+@PeFLD = maximum EM-Power by(nach) FLD and Overload(ÃœL)
+@Calculate PeMax from PeBatMax
+@PeBAT = maximum EM-power to Battery
+@Return the maximum Power allowed by the Battery
+@Conversion of PeBat (=PiEM) to PeEM
+@When sign of x an y is not-equal to the sign of xA(i) and yA(i) respectively, then skip Row i
+@Conversion of PeEM to PeBat (=piEM)
+@When sign of x and y is not-equal to the sign of xA(i) and yA(i) respectively, then skipp Row i
+@Maximum Recuparation-power
+@If speed is already under ceiling then return Zero
+@Wheel contact
+@Sign "should" always be +
+@Longitudinal-force on the Tire
+@Consider Safety-factor
+@Power 
+@If below upper V-upper-limit, then scale down linearly
+@Reduce PeEM-Max until battery current is okay
+@Reduce PeEM-Min until battery current is okay
+@Start/Stop Control
+@Abort if no speed given
+@Initialize
+@Gear-shifting points for NEDC / FTP
+@Initialize Gear-shifting parameters
+
+@Theoretical maximum speed [m/s] - set to Speed ​​at 1.2 x Nominal-Revolutions in top-Gear
+@Time-loop ****************************************
+@Secondary Progressbar
+@Determine State
+@Reset the second by second Errors 
+@Calculate Speed​/Acceleration -------------------
+@Now through DRI-class
+@If Speed over Top theoretical Speed => Reduce
+
+@Check if Acceleration is too high
+@Deceleration limit ---------------------------
+@Check whether Deceleration too high
+@From Power -----
+@Determine Driving-state  -------------------------
+@Faster check if Power is too high
+@Gear selection ************************************
+@Check whether Clutch will slip (important for Gear-shifting model):
+@Gear-settings
+@Revolutions-setting
+@Gear by speed dependent function
+@Gear-shifting Model
+@Must be reset here because the Gear-shifting model may cause changes
+@Gear shifting-model / gear input can open Clutch 
+@Important checks
+@Check whether to reduce speed
+@If GeschwRed Then GoTo lbGeschwRed
+@Check whether Clutch is open:
+@bKupplOffen = (bStehen Or Gear(jz) = 0) <= Already known by Clutch
+@If conventionall then ICE-clutch = master clutch
+@bICEKupOffen = bKupplOffen <= i need nothing more
+If before?(vor) Gear-shift is detected that Clutch does not Lock, then Downshift at too low Revolutions:
+@Check whether idling although Power > 0
+when Power before?(vor) Diff > 0.1% of Nominal-power, then Correct!
+@Revolutions ************************************
+@If Revolutions specified then the next block is skipped ***
+@If Start/Stop then it will be set at the same nn < -0.05 to nU = 0
+@Revolutions drop when decoupling
+Limit Power-drop to Pe(t-1) minus 75% of (Pe(t-1) - Pdrag)
+of the evaluated ETC of the Enginges with the dynamic parametrized Full-load
+Influence at low acceleration (influence dynamic Full-load through Pe(t-1) with PT1)
+
+@Iteration loop: 01.10.2012    
+
+@01:10:12 Luz: Revolutions must not be higher than previously 
+@TODO: Switch off?
+@Start: Revolutions Check
+@Check whether Revolutions too high! => Upshift
+@Check whether Revolutions too low with the Clutch closed
+@Determine Engine-state ************************************ 
+@fix nn here!
+@Determine next Consumption (from VEH and DRI)
+@ICE-inertia
+@Not optimal since jz-1 to jz not the right interval
+@Revolutions-setting
+@Total Engine-power
+Power distribution, etc. ******************
+@Full-Load/Drag curve
+@Revolutions Correction
+@If Pmax < 0 or Pmin > 0 then Abort with Error!
+@VKM to Drag-curve
+@Forward-calculation to Wheel (PvorD)
+@Check or Abort (before Speed-reduce-iteration, otherwise it hangs)
+@Check whether P above Full-load => Reduce Speed
+@ERROR: Speed Reduction brings nothing? ...
+@ERROR:  Engine not in Drivetrain ... can it be?
+@Interruption of traction(Zugkraftunterbrechung)
+@Finish Second
+@Start / Stop - Activation-Speed Control
+@Write Modal-values Fields
+@Interruption of traction(Zugkraftunterbrechung)
+@Notify (abort if error)
+@Time loop END ***********************************
+@Notify (When not ADVANCE)
+@Abort if Power/Revolutions not given
+Revolutions previously, otherwise Pmr-calculation fails at MODdata.nU(t + 1)
+@Write Modal value Fields
+@Allocate MODdata.Pe
+@Power calculation
+@Secondary Progressbar
+@Reset the second-by-second Errors 
+@OLD and wrong because not time shifted: P_mr(jz) = 0.001 * (I_mot * 0.0109662 * (n(jz) * nnrom) * nnrom * (n(jz) - n(jz - 1))) / Pnrom
+@Power of the Cycle corrected by P_clutch
+@Revolutions of the Cycle => Determined in Cycle-init
+@If Revolutions under idle, assume Engine is stopped
+@If Pmax < 0 or Pmin >  0 then Abort with Error!
+
+@Notify
+@Start/Stop Control
+Route-correction
+@Abort if no speed given
+@Initialize
+@Take WG-map from MAP and calculate Pi-list
+@Gear-shifting points for NEDC/FTP
+@Theoretical Maximum-speed [m/s]
+@Time-loop ****************************************
+@Secondary Progressbar
+@Determine State
+@Calculate Speed/Acceleration -------------------
+@Now by DRI-class
+@If Speed over the theoretical Top-Speed => Reduce
+@From Power -----
+@Determine Driving-state -------------------------
+@Maximum allowable Battery-power
+@Gear selection ************************************
+@Check whether Clutch-lock (important for Gear-shifting model):
+@Gear-setting
+@Revolutions-setting
+@Gear from Speed is not supported here
+@Gear-shifting Model
+@EV: No idle due to recuperation
+@If regenerative braking is possible according to Wheel-power: Calculate PrekupMax
+@Calculate Maximum Recuperation-power (depending on Wheel-load/Friction-coefficient)
+If before Gear-selection it Clutch was not Locked, then Shift-down at too low a Revolutions:
+@Check whether Idling although Power > 0
+@When Power before Diff > 0.1% of Nominal-power then Correct!
+@Revolutions ************************************
+@If the Revolutions is specified (Gemess = 2) then the next block is skipped ***
+@Revolutions drop when decoupling
+@Start: Revolutions-Check if not specified
+@Check whether Revolutions too high! => Upshift
+@Check whether Revolutions too low with the Clutch-closed
+@Determine Engine-state ************************************
+@nn fix is here!
+Determine next Consumption (from VEH and DRI)
+@Engine-inertia
+@Not optimal since jz-1 to jz not the right Interval
+@Revolutions-setting
+@Total Engine-power
+@Power distribution, etc. ******************
+@Full-load/Drag-curve
+@Calculate Maximum Recuperation power (depending on Wheel-load/Friction-coefficient)
+
+@If RecupMax exceeded, then must recalculate Pe
+@PbrakeRek = power which must be additionally hampered mechanical overrun of RekupMax
+is already done by top gear selection: PbrakeRek = Pantr - PrekupMax
+@New EM-Power
+Check whether power can be added (depending on battery and FLD). Compute Braking Power.
+@Addup RekupMax-Braking-power
+@Check whether above Full-load => Speed-reduction
+@When Pmax = 0 then Battery must be empty
+@ERROR: Velocity reduction brings nothing? ...
+@Finish Second
+@Battery ***********************
+@Write Modal-value Fields **************
+@Notify
+@Time loop END *************************************
+@Notify (not ADV)
+@TODO Error message etc
+@Route(Weg) correction
+@Abort when no speed given
+@Initialize
+@Gear-shifting points for NEDC/FTP
+@Gear-shifting parameters initialization
+@Theoretical maximum speed [m/s]
+
+@Time-loop ****************************************
+@Secondary Progressbar
+@Determine State
+@Speed / Acceleration calculation -------------------
+@Now by DRI-class
+@If Speed over Theoretical-top-speed => Reduce
+@From Power -----
+@Determine Driving-state *****************************
+@Determine Driving-state-------------------------
+@Gear selection ************************************
+@Check whether Clutch Locks (important for Gear-shifting model):
+@Gear-settings
+@Revolutions-setting
+@Gear from Speed
+@Gear-shifting Model
+Determine next Consumption (from VEH and DRI)
+HEV-part comes after Gear-selection because Transmission/Diff-loss and requires the EM is between ICE and GB
+Determine next consumption (from VEH and DRI)
+@If Revolutions specified
+@Otherwise from Vist and Gear
+@Normalized Revolutions
+@Maximum power of the ICE
+Determine next consumption (from VEH and DRI)
+@Maximum allowable Battery-power
+Maximum EM-Power (Battery-power limited by EM power)
+Power to ICE/EM (= coupling to) get
+@Power to clutch
+@Revolutions-setting
+@Power required in EV-mode
+@Power to Clutch plus EM-inertia
+@CAUTION: If ICE is engaged then PaICE must also be !  => Later in power distribution
+@Power required in the ICE+EM-operation
+@Power required in ICE-operation
+@Check whether EV possible
+@EM-Power >= Drivetrain-power
+@If EV possible: check whether critical
+@Check whether Assist / LPI / ICEonly is possible and if Boost is needed
+@ICE-On must be possible (ICElock)
+
+
+@ICE at Full-load
+@Check whether Recuparation possible
+@Driving-state distinction *********************************
+@Transmission-Mode pre-selection ********************************
+@if Boost necessary (and possible), then no Choice
+@EV mode when ...
+@If EV & ICE is not possible then EV-mode till ICE starts again .... should never happen because no ICE-shutdown when little SOC
+@If use of HEV strategy:
+@Ke's calculation
+@Calculate optimal Ke's and Power for it ************
+@Emission/Consumption in g/h
+@KeSTE from STE-curve ...
+@Remain under Max-Pe
+@If Pvkm negative: Calculation of the pure EM-transmission?(Betrieb)
+@not valid if Batlvl <= Low or ICEonLock
+@EM-Power = P-Drivetrain
+@Consumption-reduction in g/h 
+@Abort according to this calculation (more EM-power makes no sense because Drivetrain already pure electric)
+@Consumption-savings in g/h 
+@Power to electric motor in kW
+@Power in battery
+@Div/0 and Sign checks
+@KeA calculated in kWh/kg
+@Check whether Optimum
+@Abort when already reached pure EM-mode
+@If Pvkm at Full-load:
+@Put Pvkm on full load
+@EM in generator-mode (Pges1 - Pvkm < 0)
+@Abort after this pass because Generating more impossible
+@Additional consumption in g/h 
+@Power to Electric-motor in kW
+@Power in battery
+@Div/0 and Sign checks
+@Calculate KeG in kWh/kg
+@Check whether Optimum
+@Abort when already reached VKM-full-load
+Calculate Distance Eta from Curve
+@Evaluate KeSTE, Deltas ************************
+@Operating strategy ***************************
+@Ke-mode used when ...
+@Same mode as before, change Driving-state or last mode impossible
+@when Engine is not running
+@if the PeICE Power-change is lowest with the new Mode
+@Distribute Power to each Mode **************************
+@EM assumes the entire Power
+@Speed reduced if power is too high for EM or Bat
+@If ICElock or EVcrit then ICE on (but disconnected)
+@ICE assumes the entire Drivetrain
+@CAUTION: ICEclutch defaults to 'false' so here no more statements
+@Calculate maximum Recuparation-Power
+Calculate back PrecupMax from(auf) EM/ICE
+The Residual equals that to(auf) the Brakes 
+@Default for ICE (so as to save the "Else" statement)
+@Compute EM-power
+@New EM-performance
+@Residual power to ICE
+@If ICE over Drag-curve
+@New ICE power
+@Rest to Brakes
+@ICE is idle (because On-Lock)
+@Compute EM-power
+@New EM-performance
+ICE on the overrun
+@If ICE over Drag-curve
+@New ICE-power
+@The rest to Brakes
+@ICE on the Overrun(Schubbetrieb)
+@When ICE above Drag-curve
+@New ICE-power
+@The rest of on Brakes
+@Power zero
+@Clutch and Revolutions *******************************
+@Main clutch => must already be known here!
+@ICE Revolutions************************************
+@EM Revolutions ​​*************************************
+@Finish Second
+CAUTION: The two If-Schleifen do not bind(verbiden) because LockCount is miscounted
+@Write Modal-values Fields
+@Notify
+@Time-loop END **************************************
+@Notify (Not ADVANCE)
+@Second 1 --------------------------------------
+@First second: find Gear / Initialization
+@From second 2 --------------------------------------
+@Start-values ---------
+@gangX = Last Gang ie Basis for Gear-shiftching model
+@Clutch-lock(Kuppelschleif) check << already happened in Power.Calc
+@Calculate Gear for the next 6 seconds ---------------------
+@Gear-shifting function ----------
+@Revolutions-limit for Upshifting  n_normiert (Idle = 0, Nominal-revolutions = 1)
+@Revolutions-limit for Downhifting  n_normiert (Idle = 0, Nominal-revolutions = 1)
+@Deleted by LUZ  13.07.10: If (nnsaufi > 0.85)  Then nnsaufi = 0.85 
+@Convert here the Revolutions-units (n/n_nom):
+@Revolutions with last Gear (gangX)
+
+@Maximum permissible Gear-shift every 2 seconds:
+@Check whether Downshift, only when Speed decreases or Power increases
+@Check whether Upshift, only when Speed increases or Power decreases
+@Correct Gear-selection
+@Not Idle when Power > 0
+@New Revolutions
+
+@Check whether Gear within the Power/Revolutions limits. Drag is not respected
+@Save for Gear in Field for further checks
+@Gear accepted
+Add to Gears-sequence
+@Checks Part 1 -------------------------------------
+@Checks to Purge non-sensible Gear-shift:
+@Division into "iphase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3):
+@Already determined by VehState0
+@Search by last Gear-change
+@Maximum permissible Gear-shifts every 3 seconds:
+@Cruise-phases:
+@Do not change Gear for as long Speed-change since last Gear-shift is below 6% and Pe/Pnorm change is below 6%:
+@Deceleration-phases: Upshift is suppressed
+@Acceleration-phases: Downshift?(Zurückschalten) suppressed
+@If within 6 seconds it Shifts back to the previous-Gear,
+@then maintain the previous-Gear throughout.
+If within 6 seconds it Shifts once above and once below the previous-Gear, 
+then maintain the previous-Gear throughout.
+@Checks Part 2 -------------------------------------
+@Gear-shift from 2 to 1 are suppressed when v > 2.5 m/s
+NEW LUZ 040210: Upshifting only when in 2nd Gear over Cluch-Revolutions
+at decelerations below 2.5 m/s, shift to idle
+wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet
+If v <0.1 m/s for more than 1 sec then shift to Gear=0
+at Beschleunigungsvorgaengen below 1.5 m/s is used in 1 Gear is engaged
+@checking if Revolutions above Nominal-Revolutions, then always Upshift
+@otherwise lack the power!
+@EV-Gear-shifting model (based on Cars(PKW))
+@Second 1 --------------------------------------
+@First second: Find Gear / initialization
+@From second 2 --------------------------------------
+@Start-values ---------
+@gangX = Last Gear ie Starting-base for Shifting-model
+@Clutch-lock check << already happened in Power.Calc
+@Calculate Gear for the next 6 seconds ---------------------
+@Shifting-function ----------
+@Revolutions-limit for Upshift, n_normiert (Idle = 0, Nominal-Revolutions = 1)
+@Revolutions-limit for Downshift, n_normiert (Idle = 0, Nominal-Revolutions = 1)
+@Convert here of Revolutions units to use (n/n_nominal):
+@Revolutions with last Gear (gangX)
+@Maximum permissible Gear-shifting every 2 seconds:
+@Check whether Downshifting-gear, only when Revolutions decrease or Power increases
+@Check whether Upshifting-gear, only when Revolutions increase or Power decreases
+@Correct Gear-selection
+@Not idle when Power > 0
+@New Revolutions
+@Check if Gear within Power/Revolutions limits. Drag-operation is not respected
+@Save Gears in field for later checks
+@Accept Gear
+Add to Gang-sequence
+@Checks Part 1 -------------------------------------
+@Checks to Purge non-sensible Gear-shift:
+@Division into "IPhase(j)" stages: acceleration(=1), Deceleration(=2) and Cruise(=3):
+@Already determined by VehState0
+@Search by last Gear-change
+@Max permissible Gear-change every 3 seconds:
+@Cruise-phases:
+As long Speed-change since last Gear-shift is under 6% and Pe/Pnom below 6%, do not run:
+@Deceleration phases: Upshift suppressed
+@Acceleration phases: Downshift?(Zurückschalten) suppressed
+If within 6 seconds switched back again to the previous Gear, stick 
+to the previous Gear
+If within 6 seconds it Shifts once above and once below the previous-Gear, 
+then maintain the previous-Gear throughout.
+@Checks Part 2 -------------------------------------
+@Suppress Gear-shift from 2 to 1 when v > 2.5 m/s
+NEW LUZ 040210: Upshift only when in 2 Gear over Clutch-revolutions
+at decelerations below 2.5 m/s, shift to Idle
+If v < 0.1 m/s for more than 1 sec, then shift to Gear=0
+at acceleration processes below 1.5 m/s is used in first Gear is engaged
+@Check whether Revolutions over Nominal-Revolutions, then should always Upshift, 
+@otherwise Power not enough!
+@Second 1 --------------------------------------
+@First second: Find Gear/Initialization
+@From second 2 --------------------------------------
+@Start-values ---------
+@Compute power from jz to (jz + 6) -----------------
+Calculated towards a Revolutions/Power model
+@1) "Fast Driving" variant
+@Gear-shift only if v-change 5% since last Gear-shift
+@VECTO: Commented out START
+@VECTO: Commented out END
+the first 10 seconds of the cycle can always be used for balancing gear-shifting:
+@A Change in the Slope can always result in Gear-shift:
+@Downshift:
+@Upshift:
+at Sloped-cycles with excessive speed the Gear i +1 is calculated
+sometimes Gear is too high -> Revolutions and P_max too low, so only at low Power
+Upshift allowed:
+@2) "Economical Driving" Variant
+@Downshift?(Zurueckschalten) happens only when Speed-change > 6%
+@Always Upshift
+@VECTO: Commented out START
+@VECTO: Commented out END
+The first 10 seconds cycle can always be used for balancing Gear-shift:
+@When slope changes always may result in Gear-shift:
+@Downshift:
+@Upshift, only if checked not the highest Gear:
+@Relative Revolutions:
+Select Revolutions-relationship for the "fast (h ..)" and
+the "economical (.. l)"  Variant:
+Revolutions-relationship for "Modelmix":
+according to the required maximum Engine-power over the
+@next 6 seconds
+@Determine the proportions between the Fast and the Economical Driving-style
+@Hausberger model):
+Mix the calculated Gears as specified in the input file:
+from the Input-file it is read the pmodell = ratios of the revolutions
+towards a "real model")
+Determine the "virtual" up-to-date Gears from the Model
+@check if Revolutions over Nominal-Revolutions, then must always upshift,
+@otherwise Power not enough!
+@Check whether required Power is over P_max (s)
+@then Downshift?(zurueckgeschaltet):
+Check whether Actual over P_max (s)
+if bad Full-load-curve without Torque, then correct in Idle:
+Checking whether required Power is higher than maximum power at nh
+then Gear-shift-back?(zurueckgeschaltet):
+End "model"-Gear-selection basis
+Clutch-lock check
+@Checks Part 1 -------------------------------------
+@Checks to Purge non-sensible Gear-shift:
+@Division into "IPhase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3):
+@Search by last Gear-change
+@Maximum permissible Gear-shifts every 3 seconds:
+@Cruise-phases:
+@As long Speed-change since last Gear-shift is below 6% and Pe/Pnom below 6% then do not Gear-shift:
+@Deceleration-phases: Upshift suppressed
+@Acceleration phases: Downshift?(Zurückschalten) suppressed
+@If within 6 seconds switched back again to the previous Gear, then
+@stick to previous Gear
+@VECTO: Exception: on Full-load curve
+@If within the 6 seconds, it shifts once to higher and once to lower-Gear than the previous one, then
+@stick to the previous Gear.
+@Checks Part 2 -------------------------------------
+@Shifting from 2nd to 1st Gear is suppressed when v > 1.5 m/s
+NEW LUZ 040210: Upshifting only when in 2nd Gear over the Clutch-revolutions
+at decelerations below 1.5 m/s, shift to Idle
+@If v < 0.1 m/s for more than 1 sec, then shift to Gear=0
+@Check if Revolutions over Nominal-revolutions, then should always Upshift, 
+@otherwise Power not enough!
+@Speed look-ahead
+@Checks Gears for Cars(PKW) ....
+Gear-shifting from 2nd to 1st is suppressed at v > 2.5 m/s
+At decelerations below 2.5 m/s, shift to Idle
+@If v < 0.1 m/s for  more than 1 sec, then shift to Gear=0
+@When Speed?(Beschleunigungsvorgaengen) below 1.5 m/s, then shift to 1st Gear
+@Function calculating the Power easily for Gear-shift-model
+@Function calculating the Power easily for EV-shift-model
+@Revolutions-setting
+@Power in-front?(vor) of Diff = At Wheel -------------
+@Rolling-resistance----------------
+@Drag-resistance----------------
+@Vehicle Acceleration-capability(Beschleunigungsleistung) --------
+@Previously (PHEM 10.4.2 and older) the m_raeder was used for Massered instead, with Massered = m_raeder + I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2
+@The missing part (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) is now considered by fPaG(V,a)
+@Slope resistance ----------------
+@Ancillaries(Nebenaggregate) ----------------
+@Transmission(Getriebe)-------------------
+Power to Transmission (Transmission-output)
+@Calculate Losses (suitable only for Manual-transmission(Schaltgetriebe))
+@Interpolation of the Transmission-power-loss
+@Between 1 and 8 Gear, as well as between 9 and 16 Gear:
+@Differential
+@Power after Differential (before Transmission)
+
+@Differential
+@Power before Differential
+@Gearbox inertia ----------------
+
+@From DRI file
+@Calculated
+Route(Weg)Correct
+@Speed
+@Original-speed is longer by 1
+Segment (from Intermediate-seconds, otherwise Error)
+@Slope
+@Gear - but not Averaged, rather Gang(t) = DRI.Gear(t)
+
+@Calculate Acceleration
+@Vair specifications: Not in Intermediate-seconds!
+@Speed
+Segment 
+@Slope
+@Gear - not Averaged, rather Gear(t) = DRI.Gear(t)
+
+@Calculate Acceleration
+@TODO: If veh faster than cycle ...
+If the repeating Time-step is closer to the Specified-route than the Actual-route => Repeat Time-step
+If the next Time-step to Delete closer to specified Route than the Actual-route => Delete Next Time-step
+@No correction
+
+
+@Normal interpolation
+@First two seconds, no correction:
+@Create Dictionaries
+@Calculate sums
+@Mean-values
+@Cycle Mean-values ************************************
+@Measurement-value
+@PHEM value
+@Diff - CAUTION: No Pnom normalization! Beware of the Dynamic-correction!
+@Average values over x seconds and imediately put au
+@Set to zero
+Accumulate(Aufsummieren)
+@Measurement-value
+@PHEM-value
+@Dump Modal '************************************
+@Measurement-value
+@PHEM-value
+@Diff - CAUTION: No Pnominal-normalized! Beware of the Dynamic-correction!
+@Header and write units
+@Average Values over x seconds and imediately set au
+@to zero
+Accumulati(Aufsummieren)
+@Output
+@Measurement-values
+@PHEM-value
+Load-cycle(lastwechsel) (general Qualification(Bedingung ) except for Intervals with
+Constant-traveling:
+Thus Trapezoid-Cycles are not recognized as Load-cycle(lastwechsel)
+since LWje = 0. In this case, search ahead of next Value,
+which is not equal to Pe(jz). 
+This will replace Pe(jz +1):
+Load-cycles(lastwechsel) are accounted as such only if they exceed 0.05% of Pnom
+otherwise Outcome is too unstable):
+accounted as Load-cycle(lastwechsel) when LWja < 0)
+1) Mean Amplitude of the running(Verlauf) Pe ("Ampl")
+Intermediate calculation of Cycle-average:
+Calculate the mean Amplitude in 3 seconds of(vor) Emissions (Ampl3s)
+@and the number of Second-steps where Pe is 3% above the Nominal-power
+
+@2) Change the current Engine-power (dP_2s):
+Average 3 sec of(vor) Emission:
+@Counted only in dynamic operation:
+@4) Average of the negative Engine-power ("PnegMW"):
+Average 3 sec of(vor) Emission:
+@Counted only in dynamic operation:
+Calculation of absolute Dynamic-map sizes:
+@Addition of Pe Amplitudes (1 Pe-Value
+@is counted also for Maxima and for Minima Amplitudes )
+@First Second:
+@2. Second to End:
+@Absolute-value:
+@Speed/Accel-dependent parameters only when not Eng-Only
+@Dynamic-parameters as the Differential of Dynamics of the Map
+@was here before. Now in its own method because of KF-creation invalidity
+@Dynamic parameters as the Differential of Dynamics in the Map:
+@Class for calculating the Exhaust-temperatures
+Fields for Quantities from PHEM main-program
+@Reading about tgas from .npi (Project HERO) ****
+overwrites tgas(jz) over(aus) HtMass()
+
+@Main-routine for EXS module
+@Calling from Exs_Main(true) -> Developer Version without PHEM main-program
+@Fields for Quantities from exs-file
+@General Constants
+@Exhaust Physical-values:
+@insensitive vs. lambda, see "Stoffwerte_vollständigeVerbrennung_neu.xls"
+@cp_exh = 1054.0 '!Exhaust heat-capacity [J/(kg*K)] is no longer used because it is now calculated directly in Abh from T and Lambda
+@Note: Average-value from searching the Internet, found no information in literature
+calibrated based on Test Thermocouple assuming Coating-thickness(Schichtdicke) 0.1mm
+Reaction-enthalpies in J/mol
+@Molecular-weights
+@Compatibility with old EXS-structure Introduced before the new Concept for Em-components with cMap-class tMAP-class, etc.
+@References for Emissions: The given, if available, otherwise the calculated
+@Dimensioning:
+Return of the relevant Quantities from(aus) the PHEM main-program
+@Read in DEV directly from the *. phe file 
+
+It is allocated below because there must be further mpexh
+@Begin readning exs-file
+@dummy = DatExs.ReadLine(0) 'old dummy line: caution for exs-file compatibility
+@Initialize the respective Number of Modules
+@Reading of the Data-blocks for each Module
+@Error-message in TempMod(iMod).Read(DatExs)
+@End reading exs-file
+@Beginning reading csy-file
+@End reading csy-file
+@Calculation loop: Per Time-step / per Module: 1. Temperatures, 2. Conversions
+@Display per-second Results on each iteration Results
+@Write Header *.ter
+@Write the Header for KonvMods
+@Start-values ​​for Cooling-system simulation:
+@Heat transfer into the Cooling-system (Map)
+@Cooling-System Simulation
+@Heat inputs in Masses 1 and 2
+@The Heat-transfer Mass 1 and 2 for Cooling -system
+@Bulk-temperatures for the next Time-step
+@Heat-loss to the outside
+@Total Heat-input into the Cooling-system (Output value of the simulation)
+@Calculation of the Exhaust-gas-flow from a given Fuel-consumption and lambda
+@Permitted only for engines without EGR
+@Unit mpexh ....... [kg/s]
+@Unit Vpexh ....... [m3/s]
+@Case 1: Calculation of Consumption and lambda
+@Case 2: Calculation of pumped Airflow through engine
+@Missing: Methodology for Mass-flow calculation for EGR Engines BMW HERO Project
+@Calculate Lambda  if not explicitly given
+@The First Module in the Exhausts-system may not be a catalytically active Element,
+@therefore, emissions are always equal to the untreated emissions from the PHEM main-program
+@Calculate Qp_reak: Mass-flow-rate * Conversion * Reactive-enthalpy / molar-mass
+@Compute Pollutant-components
+@Conversion of NOx, CO, HC -> old value * (1-conversion-rate)
+If Module has no Conv-element changes nothing (Note: Module 1 has always ModTyp0)
+@Write Line in *.ter.
+@End Calculation-loop
+@Close all second-by-second Result-files
+Query return in the iterative Calculation-mode for Starttemp -------------------
+Termination-condition: Temperature of the Mass-elements "t_M" in the "iter_pos" specified module
+at the Beginning and End of the Cycle within vorzugebender bandwidth "iter_tol"
+@Write Output-file *. Ter --------------------------------------------- -------------
+@End wrtting Output-file *. ter -------------------------------------------- ---------
+@Clean up
+@Class for Temperature-modules
+@remarks>Type of module is defined with Mod\typ </remarks>
+@Reading the EXS file
+param name="Datei"> File-handler </param>
+@Path to Conversion-rates for Modules with Conversion
+@Initialize the modules & Read the Parameter-files, depending on Module
+@Heat-transfer factor
+@surface of exterior
+Emissivity
+@Factors for Heat-transfer to the outside
+@Factors for Temperature related t_katsubstrat  <-> t_kat_außen
+@Cooling-mass curve
+@Normalized Cross-sectional area
+average backpressure(Gegendruck)
+@Thermocouple Diameter
+@Thermocouple Cooling-curve
+@Heat-transfer-Factors to the outside
+@Check whether Tgas given in Cycle:
+Normalize(Entnormierungen) and Calculating other Variables
+@Additionally calculated parameters for Pipe-module:
+For Flow-calculations in SI-units is Querschnittsfäche converted into m2
+@Geometrical Quantities calculated
+@Note: it is assumed that temperature sensors are 
+@centered in the Pipe
+Note: Ball joint on t-sensor tip is neglected 
+in the analysis of Airstream-cylinder
+@Read Cooling-curves
+@Heat-transfer mass
+@Setting Threshold for Precision of the Temperature-calculation (needed for iterative Calculation-mode)
+@Return the Inlet-temperature of the Exhaust-gas from the Module above or from the Engine
+@Calculation of the current Mass-temperature
+at n_iter > 0 the Final-value is already assigned to the last Iteration
+If Engine-OFF, wait Cooling-curve and exit method:
+@Heat-capacity (see Bogdanic)
+@Iteration-loop for Heat-transfer
+@Termination-criterion below
+@Determining the Temperature of the Exhaust-gas at the Center of Mass ("t_gas_mid") consists of a non-linear (logarithmic) Temperature-curve(verlauf) 
+@Heat-transfer Convection inside all Modules (except for Pipe)
+@for Pipe-modules:
+@Nusselt Number: Density = 345/t_gas_mid, Term in Parenthesis: mu_Rohr / mu_Mitte
+@Heat-transfer (Convection inside) d_pipe, in m: char. Length
+@Heat-capacity (see Bogdanic)
+@Termination-criterion: Change of the Exhaust Outlet-temperature compared to the last Iteration-step smaller than Threshold
+@Calculate the Heat loss of the "thermal mass" to the outside
+@Parameters are read from EXS file:
+@Data for MuD:
+@Oberfl_Kat = 0.12 'Surface for Heat-transfer in m^2
+Emiss = 0.5 'emissivity
+Empirical formula, suitable for all OK Roll-tests
+@Note: Tests with direct Dependence on t_m -> does not work well
+@Heat-loss by Radiation
+@Heat-loss by Convection
+@Parameters are read from EXS file:
+@Data for MuD:
+@Module 3:
+@Oberfl_Mod3 = 0.169457508 'Surface for Heat-transfer in m^2
+Emiss = 0.5 'emissivity
+@Module 4:
+Oberfl_Mod4 = 0.103596481 'Surface for Heat-transfer in m^2
+Emiss = 0.9 'emissivity
+@Heat-loss by Radiation = View_factor * Emissivity * St.-Boltzm.-const * Surface * (T_Pipe^4 - T_Environ^4)
+@Heat-loss by Convection = Heat_transfer_coefficient * Surface * (T_Pipe - T_Environ)
+@Standard: Crad constant, no Loss by Convection
+@Total-heat-loss
+@Thermocouple-Heat-transfer
+If Engine-OFF, wait for Cooling-curve and exit method:
+@Formula Calculating Heat-transfer-flow around the Cylinder
+@Simplified solution of the Heat-flow-equation for the t-sensor
+corresponds to a Diffgl. for a PT1 section(glied)
+@Discrete-time Solution of the PT1-Diffgl
+@Extrapolation for LastTemp > TempAR(0)
+@Extrapolation for LastTemp < TempAR(Adim)
+
+One Time-step forward(vor)( =1 second)
+@Class initialized as a Subelement of TempMod
+@Prefix "c" means: use Cycle-value for Characteristic-correction
+@Index "cc" means: Value of Charachteristic-curve (-> "c" - "cc" is the Derivative, corrected)
+@Specify Filename for per-second Output-file
+@Abort if given no NOx
+@t-SCR (° C), deNOx (1-NOx-Exhaust/NOx-Raw), t-upstream (°C), NOx-raw (g/h)/kW_Nominal-power, total NOx over 60sec before g/h)/kW_Nominal-power, space velocity (1/h)
+@Program to simulate SCR-fleet-model
+@Note: deNOx values less than zero are possible:
+@this corresponds to higher NOx-raw level than in the Base-map
+@1.) Calculation of per-second Values ​​for Input-variables of the SCR-model
+@a.) t_SCR: combined-weight of t_upstream and t_downstream
+SCR-model-internally there are Temperatures between 50 ° C and 500 ° C limits
+@Temperature-model-values (eg Cold-start) will not be overwritten
+@b.) t_up, NOxraw, SV. 20s Moving-average in the past
+@Formula applied also to the first 20 seconds
+@c.) NOx60s: Sum over the last 60s of the specific NOx-raw emissions
+@Formula applied to the first 60 seconds
+@for seconds 1-59 must Extrapolate total-value
+@Calculation of deNOxmin value from Characteristic-curves at 50 ° C
+@2.) Calculation deNOx
+@a.) deNOx of characteristic:
+@b.) If correction criteria are met: deNOx-correction compared against Characteristic
+@t_up from characteristics:
+@NOx_raw of characteristics:
+@Sum of the NOxraw in the last 60 seconds from characteristics:
+Space/Velocity from(aus) characteristics:
+Write the results on the standardized variables eEmKomp (iSchad, jz) and Qp_reak (jz)
+@SCR model
+@Class initialized as a Subelement of TempMod
+@Prefix "c" means: use Cycle value for Characteristic-correction
+@Index "cc" means: Value of Characteristic (-> "c" - "cc" is the Derivative, corrected)
+@Specify Filename for per-second Output-file
+@Abort if no NOx given
+t-SCR (° C), deNOx (1-NOx-Exhaust/NOx-raw), t-upstream (° C), NOx-raw (g/h) / kW_Nominal-power, total NOx over 60sec before g/h)/kW_Nominal-power, space velocity (1/h)
+@Program to Simulate SCR-fleet-model
+@Note: deNOx with values less than zero are possible:
+@this corresponds to higher NOx-raw level than in the Base-map
+@1.) Calculation of per-second Values ​for Input-variables of the SCR model
+@a) t_SCR: combined-weight of the t_upstream and t_downstream
+SCR model internally there are temperatures between 50 ° C and 500 ° C limits
+@Temperature-model values (eg cold start) will not be overwritten
+@b.) t_up, NOxraw, SV. 20s moving average in the past
+@Formula applies to the first 20 seconds
+@c.) NOx60s: Sum over the last 60s of the specific NOx-raw emissions
+@Formula applies to the first 60 seconds
+@For seconds 1 to 59 must sum the projected values
+@Calculation of the Characteristic-curves for deNOxmin values at 50 ° C
+@2.) Calculation of deNOx
+@a.) Characteristic of deNOx:
+@b.) If Correction-criteria are met: Correct deNOx against the Characteristic
+@Characteristic of t_up:
+@Characteristic-curve of the NOx_raw:
+@Sum of NOxraw in the last 60 seconds of Characteristic-curve:
+@Characteristic-curve of Distnace-Speed(Raumgeschwindigkeit):
+@Write the results on the standardized variables eEmKomp(iSchad, jz) and Qp_reak(jz)
+@KAT-model
+@Class initialized as a Sub-element of TempMod
+@Mapped-data
+@Creating a new CAT module
+@Interpolation-Function
+@param name="x">Mass-flow(Massenstrom)</param>
+@param name="y"> Temperature before(vor) KAT </param>
+@param name="MapID">The MapID of the corresponding Exhaust-gas-component</param>
+@returns>The interpolated value for x and y from the Map</returns>
+@remarks> It calculates the converted rate of the appropriate Exhaust-gas-component from the Mass-flow temperature Map</remarks>
+@Reading the Maps for Conversion-rates
+@param name="Name">Filename</param>
+@Units (are not evaluated)
+@Values
+@Set KonvRaten to Zero when no component given
+@Triangulating
+@define Dic. for modal Konvrate
+@Calculation of the Conversion-rate from Map
+@param name="jz">Time</param>
+@remarks> Used to calculate the temperature of the Thermoelements on Kateingang (corresponds to  Module-number i-1)!</remarks>
+@Conversion-rate calculated from Map
+@Header for Output-file
+@Data for Output-file
+@param name="jz">Time</param>
+@Interface to Converter-classes cScrMod, cDocMod, etc. ..
+Subroutine of(zu) PHEM for linear Interpolation of a Polygon (eg called by Vissimzs.for)
+It is given the X-value to "search", and it gives back the calculated Y-value
+for previous Allocation:
+@Xis(j) and Yis(j)
+@Given the desired Value(search) and the Number of the existing Polygon-points (izpl)
+@Search the closest points of the Revolutions from the input Full-load curve:
+@Distance to Input-points and Search those Points with the smallest Distance:
+@Fix the second Interpolation-points (only interpolation, no extrapolation)
+@Extrapolation up
+@Extrapolation down
+@Sort the 2 Values by ascending n:
+@Interpolation of the associated Maximum-power (P/Pnom)
+
+
+
+
+
+
+
+
+
+
+@Below is the General Information about the Attributes 
+@controlling the Assembly. Change these attribute values to modify the information
+@associated with the Assembly.
+@Review the values of the Assembly Attributes
+@The following GUID is for the ID of the Typelib if this project is exposed to COM
+@Version information for an assembly consists of the following four values:
+@Major Release
+@Minor Release 
+@Build Number
+
+@You can specify all the values or use the defaults for Build and Revision Numbers 
+@by entering "*" in them:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-- 
GitLab