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