diff --git a/Tools/TranslateComments/Get-FileEncoding.ps1 b/Tools/TranslateComments/Get-FileEncoding.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..537c3c0f71aaeb16a575f428b930b51140ade361 --- /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 0000000000000000000000000000000000000000..dcc4c6fef175857b3ef8d94cbdec1b79f5153a19 --- /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-orig.txt b/Tools/TranslateComments/comments2-orig.txt new file mode 100644 index 0000000000000000000000000000000000000000..954505b0e8bf7b94fe8571515baa93fde823e401 --- /dev/null +++ b/Tools/TranslateComments/comments2-orig.txt @@ -0,0 +1,2007 @@ +>>> 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 +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: +46: ' Wobei NameDerFunktion die aufzurufende Funktion ist die einen <String> übergibt: "Public Function NameDerFunktion() As String" +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 +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 +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 +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 +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 +551: 'Nur Gesamtfahrzeug (nicht EngOnly) +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 +>>> 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 +>>> 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 +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 **************************************** +268: 'BATCH-Modus: Fahrzyklus nicht aus GEN-Datei sondern aus DRI-Liste +277: 'Ausgabe-Name definieren +296: '********************************** VECTO-Zylus-Schleife ********************************** +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 +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 +577: 'TODO: Loading Schleife +578: '******************** ENDE *** VECTO-Loading-Schleife *** ENDE ************************ +588: '************************* ENDE *** VECTO-Zylus-Schleife *** ENDE ************************* +595: '****************************** ENDE *** Zylus-Schleife *** ENDE ****************************** +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) +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 +388: 'Definiere Felder für Fahrzeug-Berechnung +391: 'Check ob neues Fahrzeug +396: 'Allgemeiner Fahrzyklus +401: ' Strecken-Auswertung (MISKAM) +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 +1656: 'Anzahl Fahrzeuge +1659: 'Reisezeit +1674: 'Em je km +1683: 'Schreiben +1688: '** Em je Vehicle Type +1696: 'Anzahl Fahrzeuge +1699: 'Reisezeit, Strecke, Avg.Speed +1727: 'Schreiben +1732: '** Summe +1738: 'Anzahl Fahrzeuge wird nicht aus STRerg berechnet (macht keinen Sinn) sondern aus cFLTfleet-Aufzeichnung +1745: 'Reisezeit +1766: 'Em je km +1779: 'Schreiben +1815: '** Em je Segment +1828: 'Schreiben +1833: '** Em je Vehicle Type +1850: 'Schreiben +1855: '** Summe +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 +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 +2267: 'Schreiben +2272: '** Summe +2278: 'Anzahl Fahrzeuge +2281: 'Reisezeit +2309: 'Schreiben +2345: '** Ergebnisse je Veh-Type +2358: 'Schreiben +2363: '** Summe +2378: 'Schreiben +2381: 'Datei schließen +>>> File Browser\cFileBrowser.vb +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.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 +>>> GUI/F_AboutBox.vb +4: 'Initialisieren +33: 'Bild Links------------------------------------------------------------------ +>>> GUI/F_ADV.vb +7: 'Initialisieren +12: 'Schließen +19: 'Inputfile- Steuerelemente------------------------------------------ +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_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.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.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 +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.vb +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 +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 +464: 'SLEEP reaktivieren +477: 'Initialisieren +490: 'Tabs richtig laden (sonst Problem mit Listviews) +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) +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 +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.vb +11: ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. +14: ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. +62: ' Zu Int32 convertieren +76: 'Ende +>>> GUI/F_Options.vb +5: 'Initialisiere - Lade Config +14: 'Config laden +61: 'Optionen----------------------------------- +>>> GUI/F_TEM_Creator.vb +3: 'Initialisierung +>>> 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/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\" +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 +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 +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 +126: 'Abbruch wenn's Datei nicht gibt +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 +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 +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) +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 +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) +444: 'Extrapolation für x < x(1) +456: 'Extrapolation für x > x(imax) +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) +530: 'Extrapolation für x < x(1) +542: 'Extrapolation für x > x(imax) +>>> 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) +1353: 'Extrapolation für x < x(1) +1365: 'Extrapolation für x > x(imax) +>>> 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 *** +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() +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 +221: 'Einzelne Nebenverbraucher +249: 'Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo) +260: 'Cd Modus / Input Datei - Update 14.08.2012 (CO2 Demo) +316: '************************ Ende Einlesen **************************** +401: 'Zugkraftunterbrechung (Update 09.08.2012 - CO2 Demo) +451: 'Fehlermeldung innerhalb AuxInit +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) +1042: 'Inputdatei einlesen +1104: 'Extrapolation für x < x(1) +1116: 'Extrapolation für x > x(imax) +>>> 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 +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) +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 +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 +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 +624: 'Luft.. +627: 'Steigung.. +633: 'Radleistung +636: 'Bremse +646: 'ADVANCE-spezifisch +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 +734: ' -GeschRedReset +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 +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 +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) +810: ' Iterations-Schleife: 01.10.2012 +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! +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.) +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] +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) +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) +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 +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 +4692: ' Leistung vor Diff +4744: '----------------Getriebe Trägheit---------------- +>>> MODcalc\cVh.vb +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 +132: 'Vair-Vorgaben: Nicht in Zwischensekunden!! +157: 'Geschwindigkeit +169: 'Strecke +177: 'Steigung +189: 'Gang - nicht Mittelwert sonder Gang(t) = DRI.Gang(t) +202: 'Padd +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 +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): +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 +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 +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: +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\AssemblyInfo.vb +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 +31:' übernehmen, indem Sie "*" eingeben: diff --git a/Tools/TranslateComments/comments2-trans.txt b/Tools/TranslateComments/comments2-trans.txt new file mode 100644 index 0000000000000000000000000000000000000000..97d62c1c9f6667c7e73cd1e26b3cae2f1e151780 --- /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\AssemblyInfo.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 0000000000000000000000000000000000000000..70b05a91e468682855c8688ab1685fca206fbd4d --- /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 0000000000000000000000000000000000000000..a6561b9a378a731e54006c3289a3d3d298a6d99c --- /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..25ae1d302a3c7b7e019dc157d459ffe8bc2147b7 --- /dev/null +++ b/Tools/TranslateComments/extract_comments.ps1 @@ -0,0 +1,256 @@ +## 0. Transform all ACII files to UTF +$basepath = '../../VECTO'; +ls "*/*/*/*.vb","*/*/*.vb","*/*.vb","*.vb" | + %{ + $f=$_; + if ((Get-FileEncoding $f) -ne UTF8) { + echo "Re-encoding $f"; + (cat $f) | + Out-File -FilePath $f -Encoding UTF8 + } else { + echo "Skipping $f"; + } + } + + + +## 1. Gather all single-line comments. +## +filter extract-comments { + if ($_.Path -ne $last.Path) { + $file = $_.Filename; + echo ">>> $file"; + } + $lno = $_.LineNumber; + $line = $_.Line; + echo "${lno}:$line"; + $last = $_ +} +Select-String -Path *.vb,*/*vb -Pattern "^\s*'.*[a-z]" -Encoding UTF8 | + extract-comments | + Out-File -Encoding UTF8 ../comments.txt + + +## 2. (MANUAL)Inspect and discard any comments . + + +## 3. Isolate text to translate. +## +filter isolate-text() { + if ($_ -match "\d+:\s*'(C )?\W*(\w.*)$") { + echo $Matches[2]; + } else { + echo ""; + } +} +cat comments2.txt | + isolate-text | + Out-File -Encoding UTF8 ../translate_from.txt + + +## 4a. (MANUAL)Inspect translation and go back to 1 or 4a in case of problems. +## 5b. (MANUAL) Store translated-comments into ../translate_to.txt + +$coms=cat comments2.txt +$from=cat translate_from.txt +$to=cat translate_to.txt +$coms.length, $from.length, $to.length + + + +function isolate-untranslated($coms, $from, $to) { + for($i=0; $i -lt $coms.length; $i++) { + $cline = $coms[$i]; + $fline = $from[$i]; + $tline = $to[$i]; + $tline = $tline.trim(); + if ($cline.startsWith('>>> ')) { + echo "$cline" | Out-File -Encoding UTF8 comments_untrans.txt -Append; + } elseif ($tline -and !($tline.startsWith('@'))) { + echo "$fline" | Out-File -Encoding UTF8 comments_untrans.txt -Append; + } + } +} + +## 5.a. Merge translated comment-lines with original ones. +## +$r=for($i=0; $i -lt $coms.length; $i++) { + $cline = $coms[$i]; + $fline = $from[$i]; + $tline = $to[$i]; + $tline = $tline.trim(); + if ($cline.startsWith('>>> ')) { + echo "$cline" + } else { + $m = [regex]::Matches($cline, "(\d+):\s*'(C )?\W*(\w.*)$", "IgnoreCase"); + if ($m[0]) { + $ccm = $m[0].Groups[3]; + $ocom = $ccm.Value; + $ocomi = $ccm.Index; + $ln = $m[0].Groups[1].Value; + } else { + $ocom = ""; + $ln = "<?>" + } + + if ($ocom -ne $fline) { + echo "Unmtached with Original(parsed) line ${ln}:`n Parsed: ${ocom}`n TrFrom: $fline"; + return; + } + + if (!$tline) { + #$nline = $cline; + continue; + } elseif ($tline.startsWith('@')) { + $tline = $tline.Substring(1); + $nline = $cline.Substring(0, $ocomi) + "$tline"; + } else { + $nline = $cline.Substring(0, $ocomi) + "${fline} |@@| ${tline}"; + } + echo "$nline" + } +} + +Set-Content -Path comments2-trans.txt -Value $r -Encoding UTF8 + +## 5.b Manually remove empty filepaths (those without translated lines) + + +## 6.a comments2-orig.txt: Created by runing the above code slightly modified +## so as to remove those non-translated lines from the verbatim-comments, and then +## 6.b Manually remove empty filepaths (those without translated lines) + + + +## 7. PATCH files +function matchTransLine($line) { + [hashtable]$res = @{}; + + $m = [regex]::Matches($line, "^(\d+):(.*)"); + if ($m[0]) { + $mm = $m[0]; + $res.lnum = $mm.Groups[1].Value; + $res.line = $mm.Groups[2].Value; + return $res; + } else { + echo "Bad comment line: `n$line" + return $Null; + } +} + +$coms=cat comments2-orig.txt +filter Patch-Comments() { +BEGIN { + $basepath = '../../VECTO'; + $i = -1; + $file = $Null; + $isFileOK = $true; +} +PROCESS { + $i++; + if ($_.startsWith('>>> ')) { + if ($file) { + if ($isFileOK) { + echo $file | Out-File -FilePath $fname -Encoding UTF8 + echo "Merged $fname"; + } else { + echo "FAILED $fname"; + } + } + $isFileOK = $true; + + $fname = "$basepath/" + $_.Substring(4); + echo "Merging: ${fname}"; + $file = cat "$fname"; + } else { + $m = matchTransLine($coms[$i]); + if (!$m) { + $isFileOK = $false; + return; + } + $expline = $m.line; + $explnum = $m.lnum; + + $m = matchTransLine($_); + if (!$m) { + $isFileOK = $false; + return; + } + $trnline = $m.line; + $trnlnum = $m.lnum; + + if ($explnum -ne $trnlnum) { + $isFileOK = $false; + echo "Mismatch in line-nums:`n EXP($explnum):$expline`n TRN($trnlnum):$trnline" + } else { + $orgline = $file[($trnlnum - 1)]; + + if ($orgline -ne $expline) { + $isFileOK = $false; + echo "Unexpected line $lnum:`n ORG:$orgline`n EXP:$expline`n TRN:$trnline" + } else { + $file[($trnlnum - 1)] = $trnline; + } + } + } +}## End proc-loop + +END { + if ($file) { + if ($isFileOK) { + echo $file | Out-File -FilePath $fname -Encoding UTF8 + echo "Merged $fname"; + } else { + echo "FAILED $fname"; + } + } +} +} +cat comments2-trans.txt | Patch-Comments + + +## DONE + + + + +## OTHER +filter clusterize-comments { + if ($_.Path -eq $last.Path) { + if ($_.LineNumber -ne ($Last.LineNumber + 1)) { + $lno = $_.LineNumber; + echo "@@$lno"; + } + } else { + $file = $_.Filename; + echo "--- $file"; + echo "+++ $file"; + $lno = $_.LineNumber; + echo "@@$lno"; + } + $line = $_.Line; + echo " $line"; + $last = $_ +} + +filter ec { + if ($_.Path -ne $last.Path) { + $file = $_.Filename; + echo ">>> $file"; + } + $lno = $_.LineNumber; + $line = $_.Line; + echo "${lno}:$line"; + $last = $_ +} + +Select-String -Encoding Default -Path ../../*.vb,../../*/*vb -Pattern "^\s*'"| + select Path,LineNumber,Line| + Export-Clixml -Path ../comments.xml + + +## Invocted from with from within 'VectoSource/Vecto' folder. +Select-String -Encoding Default -Path ../../*.vb,../../*/*vb -Pattern "^\s*'.*[a-z]"| + select -Property LineNumber,Line | + Export-Csv -Encoding UTF8 -NoTypeInformation -Delimiter ';' -Path comments.csv + diff --git a/Tools/TranslateComments/translate_from.txt b/Tools/TranslateComments/translate_from.txt new file mode 100644 index 0000000000000000000000000000000000000000..51a0a26037c89f17d993811455977c4131ee35a0 --- /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 0000000000000000000000000000000000000000..35151c1fe390dc163d3918df32949e69f1ac4296 --- /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: + + + + + + + + + + + + + + + + + diff --git a/VECTO/ADVANCE/cADV.vb b/VECTO/ADVANCE/cADV.vb index 2c8689b04273eb5b35c6d031d0e9f32a1805648e..5098ac7718bc68060c195560d9a7d4f868bfe14e 100644 --- a/VECTO/ADVANCE/cADV.vb +++ b/VECTO/ADVANCE/cADV.vb @@ -81,28 +81,28 @@ lbClose: If Not fADV.OpenWrite(sFilePath) Then Return False - 'Zeile 1: FZP-Datei + 'Line 1: FZP file fADV.WriteLine(fFZPpath.PathOrDummy) - 'Zeile 2: FLT-Datei + 'Line 2: FLT file fADV.WriteLine(fFLTpath.PathOrDummy) - 'Zeile 3: TEM-Datei + 'Line 3: TEM file fADV.WriteLine(fTEMpath.PathOrDummy) - 'Zeile 4: RndSeed + 'Line 4: RndSeed fADV.WriteLine(RndSeed.ToString) - 'Zeile 5: MISKAMout True/False + 'Line 5: MISKAMout True/False| fADV.WriteLine(Math.Abs(CInt(SD3out))) - 'Zeile 6: STRfilter True/False + 'Line 6: STRfilter True/False fADV.WriteLine(Math.Abs(CInt(STRfilter))) - 'Zeile 7: Distance filter für SUM.STR + 'Line 7: Distance filters for SUM.STR fADV.WriteLine(STRSUMdistflt.ToString) - 'Zeile 8+: STR Dateien + 'Line 8 +: STR files For Each SubPath In fSTRpaths fADV.WriteLine(SubPath.PathOrDummy) Next diff --git a/VECTO/ADVANCE/cADVANCE.vb b/VECTO/ADVANCE/cADVANCE.vb index 4238b9c9fc2be192760bdb7a876b2b359f08ea38..7b03cbaf3b8e2f852ee5756b23fa2bfe4d28f96b 100644 --- a/VECTO/ADVANCE/cADVANCE.vb +++ b/VECTO/ADVANCE/cADVANCE.vb @@ -68,7 +68,7 @@ Public Class cADVANCE_V3 Private sSIDlist As List(Of Int32) 'Streckennummer-Liste, aufsteigend sortiert, keine Duplikate Private sSIDfiles As List(Of Int32) 'Dateinummern, gleich sortiert wie sSIDlist - 'Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien + 'Felder für Streckennummer, Spur und Koordinaten für alle STR-Dateien |@@| Fields for Route-number, Track and Coordinates for all STR files Private STRlen As Int32 Private sStr As List(Of Int32) Private sSp As List(Of Int16) @@ -100,7 +100,7 @@ Public Class cADVANCE_V3 #End Region - 'Berechnung + 'Calculation Private zFZP As Int32 'Globale FZP-Zeile Private LastGen As String 'Letzte .gen-Datei Private VehStrAlt As String 'VehStr = Fahrzeug ID: bestehend aus Fahrzeugnummer (aus VISSIM) und SubNr um Zeitlücken zu korrigieren @@ -110,7 +110,7 @@ Public Class cADVANCE_V3 Private SUMpath As String - 'ADVANCE Initialisierung + 'ADVANCE initialization Public Function ADVANCE_V2_Init() As Boolean Dim msgtext As String @@ -123,16 +123,16 @@ Public Class cADVANCE_V3 ADVANCEdone = False FZPs = Cfg.FZPsort - 'ADV Datei einlesen + 'Read ADV-File If Not ADVread() Then Return False - 'Check ob FLT vorhanden + 'Check whether FLT is available If Not IO.File.Exists(FLTpath) Then WorkerMsg(tMsgID.Err, "Fleet composition file not found! (" & FLTpath & ")", MsgSrc) Return False End If - 'Check ob sortierte FZP vorhanden + 'Check whether FZP is sorted If FZPs And Cfg.FZPsortExp Then If STRfilter Then FZPsortPath = IO.Path.GetDirectoryName(FZPpath) & "\" & IO.Path.GetFileNameWithoutExtension(FZPpath) & "_" & IO.Path.GetFileNameWithoutExtension(STRpaths(0)) & ".sfzp" @@ -156,12 +156,12 @@ Public Class cADVANCE_V3 End If End If - 'FLT einlesen (muss vor STR sein wegen cSTRerg) + 'FLT einlesen (muss vor STR sein wegen cSTRerg) |@@| Read FLT (must be done before STR because of cSTRerg) If Not FLTread() Then Return False If Not FLTcheck() Then Return False - 'EMlist erstellen + 'Create EMlist EMlist = New List(Of String) If EVcheck() Then @@ -180,7 +180,7 @@ Public Class cADVANCE_V3 - 'STR einlesen + 'STR read If STRfilter Then If Not STRread() Then Return False @@ -201,16 +201,16 @@ Public Class cADVANCE_V3 End If End If - 'Listen erstellen + 'Create Lists aWorldX = New List(Of Single) aWorldY = New List(Of Single) aStrId = New List(Of Int32) - 'FZP einlesen + 'Read FZP If Not FZPread() Then Return False If PHEMworker.CancellationPending Then Return True - 'FZP sortieren (und exportieren) + 'FZP sort (and export) If FZPs Then ProgBarCtrl.ProgJobInt = 0 FZPsortieren() @@ -230,20 +230,20 @@ Public Class cADVANCE_V3 Rnd(-1) Randomize(RndSeed) - 'Für AusgVis + 'For Output-Vis iadvance = FZPlen - 'Ausgabe-Initialisierung + 'Dump-initialization - ' Dateinamen + ' Filename SUMpath = fFileWoExt(JobFile) & ".vehicle.sum" 'fPATH(JobFile) & fFILE(JobFile, False) & ".sum" - ' Modale Ausgabe + ' Dump Modal If Cfg.ModOut Then If Not AusgMOD_Init() Then Return False End If - 'Startwerte + 'Start-values zFZP = 0 VehStrAlt = vNr(1) & "_" & vNrSub(1) vNrAlt = -1 @@ -257,7 +257,7 @@ Public Class cADVANCE_V3 End Function - 'ADVANCE Speicher frei geben + 'ADVANCE memory release Public Sub ADVANCE_V2_Close() Dim MsgSrc As String @@ -267,10 +267,10 @@ Public Class cADVANCE_V3 WorkerMsg(tMsgID.Normal, "Finalizing... ", MsgSrc) - 'Ausgabe + 'Dump AusgVis_V3_Close() - 'Speicher freigeben + 'Free memory vt = Nothing 'ReDim vt(-1) vX = Nothing vY = Nothing @@ -330,20 +330,20 @@ Public Class cADVANCE_V3 End If iadvance = 0 - 'Listen löschen + 'Delete Lists aWorldX = Nothing aWorldY = Nothing aStrId = Nothing AusgVisInit = False - 'Garbage Collection - Soll "System Out of Memory" Exception verhindern (tut's aber nicht!) + '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!) GC.Collect() End Sub - 'ADVANCE Fahrzeugberechnung + 'ADVANCE Vehicle calculation Public Function ADVANCE_V2_Next() As Boolean Dim VehStr As String @@ -358,26 +358,26 @@ Public Class cADVANCE_V3 lbStart: - 'Check ob Fertig + 'Check whether finished If zFZP = FZPlen Then ADVANCEdone = True WorkerMsg(tMsgID.Normal, "Calculation done", MsgSrc) Return True End If - 'Zyklus-Klasse initialisieren + 'Initialize Cycle-class DRI = New cDRI DRI.ADVinit() vList = DRI.Values(tDriComp.V) stgList = DRI.Values(tDriComp.Grad) - 'Fahzeugnummer und Typ definieren (bleibt hier konstant) - ' Altes Fahrzeug ist VehStrAlt, Aktuelles ist VehStr + 'Fahzeugnummer und Typ definieren (bleibt hier konstant) |@@| Vehicle-number and Type definition (here remains constant) + ' Old Vehicle is VehStrAlt, New is VehStr vNrAkt = vNr(zFZP + 1) vIDi = vID(zFZP + 1) VehStr = vNr(zFZP + 1) & "_" & vNrSub(zFZP + 1) - 'Listen erstellen + 'Create Lists aWorldX.Clear() aWorldY.Clear() aStrId.Clear() @@ -385,20 +385,20 @@ lbStart: 't0 DRI.t0 = vt(zFZP + 1) - 'Definiere Felder für Fahrzeug-Berechnung + 'Define Fields for Vehicle-calculations z = -1 Do - 'Check ob neues Fahrzeug + 'Check whether it is a new Vehicle If VehStr <> vNr(zFZP + 1) & "_" & vNrSub(zFZP + 1) Then Exit Do z += 1 zFZP += 1 - 'Allgemeiner Fahrzyklus + 'General(Allgemeiner) Vehicle-Cycle vList.Add(vVm(zFZP) / 3.6) stgList.Add(vStg(zFZP)) 'ADVANCE - ' Strecken-Auswertung (MISKAM) + ' Strecken-Auswertung (MISKAM) |@@| Road-Distance evaluation (MISKAM) aWorldX.Add(vX(zFZP)) aWorldY.Add(vY(zFZP)) aStrId.Add(vSID(zFZP)) @@ -412,19 +412,19 @@ lbStart: Loop Until zFZP = FZPlen - ' Fahrzeug-Identifizierung + ' Vehicle identification aVehNr = vNrAkt aVehType = CStr(vIDi) - 'Check ob Zyklus zu kurz => Ãœberspringen + 'Check whether Cycle too short => skip If z < 1 Then GoTo lbStart - 'Fahrzeuganzahl je Typ erhöhen + 'Increase number of Vehicles per each Type FLTfleet(aVehType).VehCount += 1 DRI.tDim = z - 'Check ob letzte Gen-Datei neu zu verwenden ist, sonst Belegung durch FLT + 'Check whethert last GEN-file to use is new, otherwise occupied(Belegung ) by FLT If vNrAlt = vNrAkt Then GenFile = LastGen Else @@ -437,7 +437,7 @@ lbStart: End Try End If - 'VehStr ist ab jetzt ALT + 'VehStr is now ALT VehStrAlt = VehStr vNrAlt = vNrAkt LastGen = GenFile @@ -446,7 +446,7 @@ lbStart: End Function - 'Abschnittsweise Berechnung + 'Section by section calculation Public Sub STRcalc() Dim t As Integer Dim STR0 As Integer @@ -466,14 +466,14 @@ lbStart: time0 = 0 ReDim EMsum(EMdim) - 'Zyklus durchschleifen + 'Zyklus durchschleifen |@@| through Cycle-loop For t = 0 To MODdata.tDim - 'Nr. der STR-Datei + 'No. of STR-file STR1 = getSTRfileNr(aStrId(t)) - 'Falls Wechsel in STR-Nr: - ' Alte STR-Nr abschließen + 'If STR-No has changed: + ' Finish with Old STR-No. If STR0 <> STR1 Then If t0 > -1 Then ' STR0 > -1 Then @@ -482,16 +482,16 @@ lbStart: If dist0 >= STRdistTol * STRergRef.Distance Then - 'Distanz (gefahrene km) + 'Distance (km driven) STRergRef.VehDist(aVehType) += dist0 - 'Reisezeit in h + 'Travel-Time in h STRergRef.VehTime(aVehType) += time0 / 3600 - 'Kfz-Anz + 'Vehicle(KFZ) No. STRergRef.VehCount(aVehType) += 1 - 'Summen-Emissionen + 'Cumulative emissions For e = 0 To EMdim STRergRef.EMsum(aVehType)(e) += EMsum(e) / 3600 Next @@ -510,7 +510,7 @@ lbStart: End If - 'Aufsummieren + 'Add up dist0 += MODdata.Vh.V(t) / 1000 time0 += 1 If GEN.VehMode = tVehMode.EV Then @@ -524,23 +524,23 @@ lbStart: Next - 'Letzte STR abschließen + 'Last STR completed If t0 > -1 Then STRergRef = STRerg(STR0) If dist0 >= STRdistTol * STRergRef.Distance Then - 'Distanz (gefahrene km) + 'Distance (km driven) STRergRef.VehDist(aVehType) += dist0 - 'Reisezeit in h + 'Time in h STRergRef.VehTime(aVehType) += time0 / 3600 - 'Kfz-Anz + 'Vehicle(KFZ) No. STRergRef.VehCount(aVehType) += 1 - 'Summen-Emissionen + 'Cumulative emissions For e = 0 To EMdim STRergRef.EMsum(aVehType)(e) += EMsum(e) / 3600 Next @@ -562,7 +562,7 @@ lbStart: Return -1 End Function - 'FLT einlesen + 'Read FLT Private Function FLTread() As Boolean Dim fFLT As cFile_V3 @@ -664,7 +664,7 @@ lbStart: End Function - 'FZP einlesen + 'Read FZP Private Function FZPread() As Boolean Dim fReader As Microsoft.VisualBasic.FileIO.TextFieldParser @@ -693,7 +693,7 @@ lbStart: WorkerMsg(tMsgID.Normal, "Traffic File: Counting lines...", MsgSrc) - 'Dateilänge bestimmen + 'Determine File-length Try f = New System.IO.StreamReader(FZPpath) Catch ex As Exception @@ -727,7 +727,7 @@ lbStart: If PHEMworker.CancellationPending Then Return True - 'Arrays dimensionieren + 'Dimension arrays ReDim vt(FZPlen) ReDim vX(FZPlen) ReDim vY(FZPlen) @@ -747,12 +747,12 @@ lbStart: WorkerMsg(tMsgID.Normal, "Traffic File: Reading...", MsgSrc) End If - 'Datei einlesen + 'Import File fReader = New Microsoft.VisualBasic.FileIO.TextFieldParser(FZPpath, FileFormat) fReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited fReader.Delimiters = New String() {";"} - 'Kommentare überspringen + 'Skip Comments For l = 1 To LineSkip fReader.ReadLine() Next @@ -762,7 +762,7 @@ lbStart: lc10 = Math.Max(FZPlen / 100, 1000) Do While Not fReader.EndOfData line = fReader.ReadFields() - 'Strecken die nicht in der STR Datei aufgeführt sind werden hier entfernt + '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 If STRfilter Then If line(FZProwStr) <> lastSID Then lastSID = line(FZProwStr) @@ -780,7 +780,7 @@ lbStart: GoTo lbProg1 'Continue Do End If End If - 'Arrays belegen + 'Show Arrays l += 1 vt(l) = line(FZProwT) vX(l) = line(FZProwWeltX) @@ -791,7 +791,7 @@ lbStart: vID(l) = CInt(line(FZProwTyp)) vSID(l) = line(FZProwStr) vNrSub(l) = 0 - 'Progress-Ausgabe + 'Display Progress lbProg1: lc += 1 If lc >= lc10 Then @@ -801,7 +801,7 @@ lbProg1: End If Loop - 'Speicher freigeben + 'Free memory fReader.Close() fReader.Dispose() fReader = Nothing @@ -811,7 +811,7 @@ lbProg1: WorkerMsg(tMsgID.Err, "Street ID's in traffic file not found in segment file.", MsgSrc) Return False End If - 'Arrays neu dimensionieren + 'Newly dimensioned arrays ReDim Preserve vt(FZPlen) ReDim Preserve vX(FZPlen) ReDim Preserve vY(FZPlen) @@ -827,7 +827,7 @@ lbProg1: End Function - 'FZP sortiren + 'Sort FZP Private Sub FZPsortieren() 'Dim x0 As Int32 @@ -869,9 +869,9 @@ lbProg1: lc = 0 x0 = 1 Do - 'Aktuelles Fahrzeug ist vNr1 + 'Current Vehicle is vNr1 vNr1 = vNrSort(x1) - 'Zähle Fahrzeuge mit vNr = vNr1 + 'Count vehicles with vNr = vNr1 x2 = x1 vNrAnz = 0 Do @@ -880,8 +880,8 @@ lbProg1: If x2 > FZPlen Then Exit Do vNr2 = vNrSort(x2) Loop Until vNr1 <> vNr2 - 'vNrAnz = Anzahl der Fahrzeuge mit vNr = vNr1 - 'Sortiere alle Fahrzeuge mit vNr = vNr1 nach Fahrzeugnummer + 'vNrAnz = Number of Vehicles with vNr = vNr1 + 'Sort all vehicles with vNr = vNr1 by Vehicle-number x2 = x1 - 1 vNri = 0 Do @@ -889,7 +889,7 @@ lbProg1: vNr2 = vNr(x2) If vNr2 = vNr1 Then If x1 <> x2 Then - 'Zwischenspeicher = Zeile x1 + 'Cache = line x1 vts = vt(x1) vXs = vX(x1) vYs = vY(x1) @@ -898,7 +898,7 @@ lbProg1: vStgs = vStg(x1) vIDs = vID(x1) vSIDs = vSID(x1) - 'Zeile x1 = Zeile x2 + 'Linex1 = line x2 vt(x1) = vt(x2) vX(x1) = vX(x2) vY(x1) = vY(x2) @@ -907,7 +907,7 @@ lbProg1: vStg(x1) = vStg(x2) vID(x1) = vID(x2) vSID(x1) = vSID(x2) - 'Zeile x2 = Zwischenspeicher + 'Line x2 = cache vt(x2) = vts vX(x2) = vXs vY(x2) = vYs @@ -921,21 +921,21 @@ lbProg1: x1 += 1 End If Loop Until vNri = vNrAnz - 'vNr1 nach Zeit sortieren + 'vNr1 sorted by time If x0 < FZPlen Then For xx1 = x0 To x1 - 2 t1 = vt(xx1) For xx2 = xx1 + 1 To x1 - 1 t2 = vt(xx2) If t2 < t1 Then - 'Zwischenspeicher = Zeile xx1 + 'Cache = line xx1 vXs = vX(xx1) vYs = vY(xx1) vVms = vVm(xx1) vStgs = vStg(xx1) vIDs = vID(xx1) vSIDs = vSID(xx1) - 'Zeile xx1 = Zeile xx2 + 'Line xx1 = Line xx2 vt(xx1) = t2 vX(xx1) = vX(xx2) vY(xx1) = vY(xx2) @@ -943,7 +943,7 @@ lbProg1: vStg(xx1) = vStg(xx2) vID(xx1) = vID(xx2) vSID(xx1) = vSID(xx2) - 'Zeile x2 = Zwischenspeicher + 'Line x2 = Cache vt(xx2) = t1 vX(xx2) = vXs vY(xx2) = vYs @@ -957,7 +957,7 @@ lbProg1: Next End If x0 = x1 - 'Status-Ausgabe + 'Display Status lc += 1 If lc >= lc10 Then '' StatusMSG(7, "Sorting FZP..." & CInt(x1 / FZPlen * 100).ToString("00") & "%", False) @@ -971,7 +971,7 @@ lbProg1: End Sub - 'FZP exportieren + 'FZP export Private Function FZPexport() As Boolean Dim f As System.IO.StreamWriter @@ -1013,7 +1013,7 @@ lbProg1: 'Header f.WriteLine(line0) - 'Daten + 'Data For x = 1 To FZPlen line(FZProwT) = vt(x) line(FZProwWeltX) = vX(x) @@ -1039,7 +1039,7 @@ lbProg1: End Function - 'STR einlesen + 'Read STR Private Function STRread() As Boolean Dim fReader As Microsoft.VisualBasic.FileIO.TextFieldParser Dim line() As String @@ -1130,7 +1130,7 @@ lbProg1: fReader = Nothing - 'SID-Liste erstellen + 'Create SID-List ReDim StrClone(STRlen) ReDim StrFileClone(STRlen) sStr.CopyTo(StrClone) @@ -1159,7 +1159,7 @@ lbProg1: 'FZP Check: - ' ...Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben + ' ...Fahrzeuge aufteilen, die Lücke im Zeitverlauf haben |@@| Vehicles divisions, have the bridge the gap over time Private Sub FZPcheck() Dim z As Int32 @@ -1191,7 +1191,7 @@ lbProg1: End Sub - 'ADV einlesen + 'Read ADV Private Function ADVread() As Boolean Dim fADV As cADV @@ -1205,7 +1205,7 @@ lbProg1: fADV = New cADV fADV.FilePath = JobFile - '********** .ADV Datei einlesen ******** + '********** .Read ADV-file ******** If Not fADV.ReadFile Then WorkerMsg(tMsgID.Err, "Failed to open .adv file (" & JobFile & ")", MsgSrc) fADV = Nothing @@ -1214,28 +1214,28 @@ lbProg1: STRpaths = New List(Of String) - 'Zeile 1: FZP-Datei + 'Line 1: FZP file FZPpath = fADV.FZPpath - 'Zeile 2: FLT-Datei + 'Line 2: FLT file FLTpath = fADV.FLTpath - 'Zeile 3: TEM-Datei + 'Line 3: TEM file TEMpath = fADV.TEMpath - 'Zeile 4: RndSeed + 'Line 4: RndSeed RndSeed = fADV.RndSeed - 'Zeile 5: MISKAMout True/False + 'Line 5: MISKAMout True/False MISKAMout = fADV.SD3out - 'Zeile 6: STRfilter True/False + 'Line 6: strFilter True/False STRfilter = fADV.STRfilter - 'Zeile 7: STR.SUM Streckenfilter + 'Zeile 7: STR.SUM Streckenfilter |@@| Line 7: STR.SUM Route-filter STRdistTol = fADV.STRSUMdistflt / 100 - 'Zeile 8+: STR Dateien + 'Line 8+: STR files For i = 1 To fADV.STRcount STRpaths.Add(fADV.STRpaths(i - 1)) Next @@ -1255,7 +1255,7 @@ lbProg1: For Each VehType In FLTfleet.Keys - 'Ausgabepfad definieren + 'Define Output-path MODdata.ModOutpName = fFileWoExt(JobFile) f = New cFile_V3 @@ -1283,7 +1283,7 @@ lbProg1: MsgSrc = "ADV/OutpInit/SumInit" ' *********************************** .sum ************************************* - 'File mit Summen Ergebnissen ueber alle Kfz: + 'File results with sums over all Vehicles(KFZs): Try FadvSUM = My.Computer.FileSystem.OpenTextFileWriter(SUMpath, False, FileFormat) Catch ex As Exception @@ -1305,7 +1305,7 @@ lbProg1: End Function - 'Ausgabe Schließen + 'Close Output Private Function AusgVis_V3_Close() As Boolean Dim F611 As New cFile_V3 Dim secvis As Single @@ -1328,7 +1328,7 @@ lbProg1: secvis = amaz - amiz 'C - 'C Umrechnung auf g Emissionen je Sekunde sowie Kfz/Tag + 'C Convert Emissions to g per second and Vehicle(KFZ)/day For j = 1 To STRlen sFC(j) = sFC(j) / secvis sNOx(j) = sNOx(j) / secvis @@ -1343,8 +1343,8 @@ lbProg1: 'C Next j 'C - 'C Umrechnung auf mg Emissionen je Meter - 'C Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet: + 'C Convert Emissions to mg per Meter + 'C Streckenlaenge [m] wird aus Gerade zwischen Anfangs- und Endpunkt berechnet: |@@| Route-length [m] is calculated from straight line between start and end points: 'C For j = 1 To STRlen axi = (sSegEnX(j) - sSegAnX(j)) ^ 2 @@ -1360,13 +1360,13 @@ lbProg1: sSO2(j) = 1000 * sSO2(j) / ala(j) Next j 'C - 'C Ausgabe der Ergebnisse + 'C Dump Results 'C - 'C Filename fuer Ergebnisfile = Name Eingabefile aber mit *.sd3: + 'C Filename for ResultFile = Input-filename but with *.sd3: 'C 'C - 'C File mit Summen Ergebnissen ueber alle Streckenstuecke: + 'C File mit Summen Ergebnissen ueber alle Streckenstuecke: |@@| File with sums over all results Route-sections: Call F611.OpenWrite(SD3path, ";") 'C Call F611.WriteLine("Results from VECTO ADVANCE") ' Format 630 @@ -1436,8 +1436,8 @@ lbProg1: Private Sub AusMISK_V2() - 'C Unterprogramm zu PHEM/Advance zur Ausgabe der Ergebnisse an MISKAM Luftguetemodell von Lohmeyer - 'C Daten jeweils durch Semikolon getrennt ausgegeben + 'C Subroutine of PHEM/Advance for dumping the results of MISKAM Air-Quality-Model of Lohmeyer + 'C Dump Data separated by Semicolons 'C 'C 'C @@ -1449,9 +1449,9 @@ lbProg1: Dim jz As Int32 'C ------------------------------------------------------------------------------------------------- 'C - 'C Aufaddieren der Emissionsdaten nach Streckenabschnitten, ueber jede Sekunde fuer jedes Fahrzeug - 'C Achtung: jeweils 2 Richtungen je Abschnitt moeglich aber nur StrId in *.fzp uebergeben -> auf "naechstgelegene" - 'C Richtung zugewiesen + 'C Adding up the Emission-data for Route-segments, for every Vehicle over each second + 'C Caution: There are 2 possible Directions(Richtungen) for each section but only the StrId is given to *.fzp -> the "Closest" assigned Direction(Richtungen) + 'C Richtung zugewiesen |@@| Direction assigned 'C @@ -1461,12 +1461,12 @@ lbProg1: For j = 0 To STRlen 'C If (aStrId(jz) = sStr(j)) Then - 'C Suche nach naechstgelegenem Strassenteilstueck - 'C Koordinaten Kfz: + 'C Suche nach naechstgelegenem Strassenteilstueck |@@| Find nearest Road-section + 'C Koordinaten Kfz: |@@| Coordinate vehicle(KFZ): ax = aWorldX(jz) ay = aWorldY(jz) - 'C Koordinaten Strecke: sSegAnX(j), sSegEnX(j), sSegAnY(j), sSegEnY(j) aus Eingabe - 'C Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j + '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 + 'C Abstandsumme zu Anfang- und Endpunkt des Streckenabschnittes j |@@| Total distance to the beginning and end of the Route-section j C1 = ((ax - sSegAnX(j)) ^ 2 + (ay - sSegAnY(j)) ^ 2) ^ 0.5 C2 = ((ax - sSegEnX(j)) ^ 2 + (ay - sSegEnY(j)) ^ 2) ^ 0.5 akabst = C1 + C2 @@ -1476,7 +1476,7 @@ lbProg1: End If End If Next j - 'C Falls Streckennummer auf *.fzp File in *.str File nicht existiert, wird auf naechstgelegenes Stueck zugewiesen (gleiches System wie oben): + '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): If (ami = 1000000000000) Then If (STRlen >= 1) Then For j = 1 To STRlen @@ -1492,15 +1492,15 @@ lbProg1: Next j End If End If - 'C Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten: - 'C berechnung sekuendlich in (g/h)/3600 -> g/Strecke ueber gesamte Zeit + 'C Aufsummierung der Emissionen auf den jeweils zugehoerigen Streckenabschnitten: |@@| Summation of the emissions to the respective associated sections: + '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 sFC(jist) = sFC(jist) + (MODdata.Em.EmDefComp(tMapComp.FC).FinalVals(jz)) / 3600 sNOx(jist) = sNOx(jist) + (MODdata.Em.EmDefComp(tMapComp.NOx).FinalVals(jz)) / 3600 sCO(jist) = sCO(jist) + (MODdata.Em.EmDefComp(tMapComp.CO).FinalVals(jz)) / 3600 sHC(jist) = sHC(jist) + (MODdata.Em.EmDefComp(tMapComp.HC).FinalVals(jz)) / 3600 sPM(jist) = sPM(jist) + (MODdata.Em.EmDefComp(tMapComp.PM).FinalVals(jz)) / 3600 - 'C Zaehlen der Kfz fuer DTV (nur wenn nicht in voriger Sekunde auch schon auf der Strecke + '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 If (jist <> jm1) Then vDTV(jist) = vDTV(jist) + 1 If Not GEN.PKWja Then @@ -1508,8 +1508,8 @@ lbProg1: End If End If 'C , - 'C Grobe Rechnung Benzol nach GLOBEMI (HBEFA): - 'C Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1 + 'C Grobe Rechnung Benzol nach GLOBEMI (HBEFA): |@@| Rough calculation for benzene GLOBEMI (HBEFA): + 'C Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1 'C Otto: If GEN.ottoJa Then If GEN.PKWja Then @@ -1531,8 +1531,8 @@ lbProg1: End If End If 'C - 'C Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!: - 'C Trennung nach Otto, Diesel, LKW, PKW,vor/nach EURO 1 + 'C Grobe Rechnung Russ, Anteile Russ an PM derzeit nur Schaetzwerte!!!!: |@@| Rough calculation of Soot, Soot shares of PM currently only Schaetz-values!!: + 'C Distinguish as: Otto, Diesel, HDV(LKW), Car(PKW), before/after EURO 1 'C Diesel: If Not GEN.ottoJa Then If GEN.PKWja Then @@ -1559,8 +1559,8 @@ lbProg1: End If End If 'C - 'C SO2-Emissionen aus dem im Kraftstoff enthaltenen - 'C Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2 + 'C SO2-Emissionen aus dem im Kraftstoff enthaltenen |@@| SO2-Emissions as contained in the Fuel + 'C Schwefel gerechnet. Mit Masse SO2 = (Masse% S / 100) * 2 |@@| Sulfur expected. With SO2 mass = (mass% S / 100) * 2 'C Diesel_ If Not GEN.ottoJa Then sSO2(jist) = sSO2(jist) + (MODdata.Em.EmDefComp(tMapComp.FC).FinalVals(jz) * 0.001 / 50) / 3600 @@ -1593,12 +1593,12 @@ lbProg1: fSSUM = New cFile_V3 s = New System.Text.StringBuilder - '******** Ausgabe der einzelnen STR-Ergebnisse '********* + '******** Dump each STR results ' ********* For Each STRergRef In STRerg If Not STRergRef.Ausg() Then Return False Next - '********* Ausgabe Summen über alle STR's '********* + '********* Dump Totals of all STR's ' ********* STRSUMpath = fFileWoExt(JobFile) & ".segment.sum" @@ -1608,14 +1608,14 @@ lbProg1: End If - '** Datei-Header + '** File Header fSSUM.WriteLine("VECTO ADVANCE Sum Results by Segments and Vehicle Types") fSSUM.WriteLine("VECTO " & VECTOvers) fSSUM.WriteLine(Now.ToString) fSSUM.WriteLine("Inputfile: " & JobFile) '**************************************************************** - '*************************** Em je km *************************** + '*************************** Em per km *************************** 'Header s.Length = 0 @@ -1645,7 +1645,7 @@ lbProg1: End If fSSUM.WriteLine(s.ToString) - '** Em je Segment + '** Em per segment For Each STRergRef In STRerg s.Length = 0 @@ -1653,10 +1653,10 @@ lbProg1: 'Segment-Name s.Append(fFILE(STRergRef.MySTRpath, True)) - 'Anzahl Fahrzeuge + 'Number of Vehicles s.Append(Sepp & STRergRef.AllVehCount) - 'Reisezeit + 'Travel time sum = STRergRef.AllVehTime s.Append(Sepp & sum) @@ -1671,7 +1671,7 @@ lbProg1: s.Append(Sepp & km / sum) End If - 'Em je km + 'Em per km For e = 0 To EMdim If km = 0 Then s.Append(Sepp & "-") @@ -1680,12 +1680,12 @@ lbProg1: End If Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) Next - '** Em je Vehicle Type + '** Em per Vehicle Type For Each VehType In FLTfleet.Keys s.Length = 0 @@ -1693,10 +1693,10 @@ lbProg1: 'Type s.Append("Veh " & VehType) - 'Anzahl Fahrzeuge + 'Number of Vehicles s.Append(Sepp & FLTfleet(VehType).VehCount) - 'Reisezeit, Strecke, Avg.Speed + 'Reisezeit, Strecke, Avg.Speed |@@| Travel time, Route-Distance, Avg. Speed sum = 0 km = 0 For Each STRergRef In STRerg @@ -1724,25 +1724,25 @@ lbProg1: End If Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) Next - '** Summe + '** Total s.Length = 0 'Segment s.Append("Sum") - 'Anzahl Fahrzeuge wird nicht aus STRerg berechnet (macht keinen Sinn) sondern aus cFLTfleet-Aufzeichnung + 'Number of Vehicles is not calculated from STRerg (makes no sense) but from cFLTfleet-recording sum = 0 For Each Fleet0 In FLTfleet.Values sum += Fleet0.VehCount Next s.Append(Sepp & sum) - 'Reisezeit + 'Travelling time sum = 0 For Each STRergRef In STRerg sum += STRergRef.AllVehTime @@ -1763,7 +1763,7 @@ lbProg1: s.Append(Sepp & km / sum) End If - 'Em je km + 'Em per km For e = 0 To EMdim If km = 0 Then s.Append(Sepp & "-") @@ -1776,7 +1776,7 @@ lbProg1: End If Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) '**************************************************************** @@ -1812,7 +1812,7 @@ lbProg1: End If fSSUM.WriteLine(s.ToString) - '** Em je Segment + '** Em per segment For Each STRergRef In STRerg s.Length = 0 @@ -1825,12 +1825,12 @@ lbProg1: s.Append(Sepp & STRergRef.AllEm(e)) Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) Next - '** Em je Vehicle Type + '** Em per Vehicle Type For Each VehType In FLTfleet.Keys s.Length = 0 @@ -1847,12 +1847,12 @@ lbProg1: s.Append(Sepp & sum) Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) Next - '** Summe + '** Total s.Length = 0 'Segment @@ -1867,7 +1867,7 @@ lbProg1: s.Append(Sepp & sum) Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) fSSUM.Close() @@ -1876,7 +1876,7 @@ lbProg1: End Function - '.mod-Datei zerlegen + '.Analyze Mod-file Public Sub AusgModCut(ByVal InPath As String, ByVal VehList As Int32()) Dim f As System.IO.StreamReader Dim VehNr As Int32 @@ -1892,7 +1892,7 @@ lbProg1: WorkerMsg(tMsgID.Normal, "Starting .mod split.", MsgSrc) - 'InFile öffnen + 'Open Infile Try f = New System.IO.StreamReader(InPath) Catch ex As Exception @@ -1907,89 +1907,89 @@ lbProg1: fOut = New cFile_V3 CheckLast = False - 'Anzahl VehNummern + 'Anzahl VehNummern |@@| Number of VehNummern x1 = 1 + UBound(VehList) - x x = 0 laststring = "" - 'Schleife durch alle VehNummern in Liste + 'Loop through all VehNummern in list For Each VehNr In VehList - 'Abbruch falls Userabbruch + 'Abort when User-abort If PHEMworker.CancellationPending Then WorkerMsg(tMsgID.Normal, "Aborted by User.", MsgSrc) GoTo lbDone End If - 'Abbruch falls Datei fertig + 'Abort when File finished If f.EndOfStream Then WorkerMsg(tMsgID.Err, "Reached end of file before last vehicle number was found.", MsgSrc) WorkerMsg(tMsgID.Normal, "Aborted! (Reached end of file)", MsgSrc) GoTo lbDone End If - 'Ausgabedatei öffnen / Abbruch wenn Fehler beim Öffnen + 'Open Output-File / Abort if Error on Opening If Not fOut.OpenWrite(fFileWoExt(InPath) & "_Veh" & VehNr & ".mod") Then WorkerMsg(tMsgID.Err, "Cannot create output file. Veh.Nr. " & VehNr, MsgSrc) GoTo lbDone End If - 'Schleife durch Datei + 'Loop through file Do While Not f.EndOfStream - 'Falls String schon eine VehNr enthält wird Zeile nicht nochmal eingelesen (siehe unten) + 'If string already contains a VehNr do not read again Line (see below) If CheckLast Then CheckLast = False Else - 'Zeile einlesen + 'Read Line laststring = f.ReadLine End If - 'Falls Zeile mit VehNr gefunden: VehNr rausholen + 'If Line with VehNr found: extract VehNr If InStr(laststring, "VehNr:", CompareMethod.Text) > 0 Then foundNr = GetVehNr(laststring) - 'Falls VehNr die gesuchte ist: Ausgabedatei schreiben + 'If VehNr is the required one: write the Output-file If foundNr = VehNr Then - 'Erste Zeile schreiben ("VehNr: ...") + 'First line write ("VehNr: ...") fOut.WriteLine(laststring) - 'Nächste Zeile lesen (sonst wird Do While übersprungen) + 'Read next Line (otherwise Do-While skipped) laststring = f.ReadLine - 'Schleife bis nächste VehNr / Dateiende + 'Loop until next VehNr / end_of_file Do While Not f.EndOfStream - 'Wenn nächstes Fahrzeug: + 'If next Vehicle: If InStr(laststring, "VehNr:", CompareMethod.Text) > 0 Then If GetVehNr(laststring) = VehNr Then - 'Wenn gleiche Fahrzeugnummer: Datei weiter schreiben - 'Header und Units überspringen + 'If Vehicle-number is the same: Continue writing File + 'Skip header and Units f.ReadLine() f.ReadLine() laststring = f.ReadLine Else - 'Sonst: Raus aus Schleife + 'Otherwise: Get out of loop Exit Do End If End If - 'Zeile schreiben + 'Write Line fOut.WriteLine(laststring) - 'Zeile lesen + 'Read line laststring = f.ReadLine Loop - 'Falls nicht EndOfStream Flag setzen damit nächste VehNr nicht übersprungen wird + 'If not EndOfStream Set flag so next VehNr is not skipped If Not f.EndOfStream Then CheckLast = True - 'Ausgabedatei schließen + 'Close Output-file fOut.Close() - 'Aus der VehNr-Such-Schleife raus springen + 'Jump out of the VehNr-search-loop Exit Do End If @@ -2023,7 +2023,7 @@ lbDone: End Function - 'FLT Klasse + 'FLT-class Private Class cFLTfleet Private MyP() As Single 'Percentage @@ -2039,7 +2039,7 @@ lbDone: MyDim = -1 End Sub - 'Initialisieren + 'Initialize Public Function Init(ByVal GenFiles As String(), ByVal Shares As Single(), ByVal ArDim As Int16) As Boolean Dim x As Int16 Dim xsum As Single @@ -2072,7 +2072,7 @@ lbDone: End Function - 'GenDatei Zufallsgenerator + 'GenFile Random-generator Public Function GetGenFile() As String Dim r As Single Dim x As Int16 @@ -2122,7 +2122,7 @@ lbDone: End Class - 'Klasse für abschnittsweise Auswertung + 'Klasse für abschnittsweise Auswertung |@@| Class for sections evaluation Private Class cSTRerg Public MySTRpath As String @@ -2188,7 +2188,7 @@ lbDone: s = New System.Text.StringBuilder - 'Datei-Header + 'File Header fSSUM.WriteLine("VECTO ADVANCE Sum Results per Segment") fSSUM.WriteLine("VECTO " & VECTOvers) fSSUM.WriteLine("Inputfile: " & JobFile) @@ -2199,7 +2199,7 @@ lbDone: fSSUM.WriteLine(" ") '**************************************************************** - '*************************** Em je km *************************** + '*************************** Em per km *************************** 'Header s.Length = 0 @@ -2229,7 +2229,7 @@ lbDone: End If fSSUM.WriteLine(s.ToString) - '** Ergebnisse je Veh-Type + '** Results per Veh-Type For Each VehType In ADV.FLTfleet.Keys s.Length = 0 @@ -2237,10 +2237,10 @@ lbDone: 'Type s.Append(VehType) - 'Anzahl Fahrzeuge + 'Number of Vehicles s.Append(Sepp & VehCount(VehType)) - 'Reisezeit + 'Travellingtime sum = VehTime(VehType) s.Append(Sepp & sum) @@ -2264,21 +2264,21 @@ lbDone: End If Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) Next - '** Summe + '** Total s.Length = 0 'Type s.Append("Sum") - 'Anzahl Fahrzeuge + 'Number of Vehicles s.Append(Sepp & CStr(AllVehCount())) - 'Reisezeit + 'Travelling-time sum = AllVehTime() s.Append(Sepp & CStr(sum)) @@ -2306,7 +2306,7 @@ lbDone: End If Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) fSSUM.WriteLine(" ") @@ -2342,7 +2342,7 @@ lbDone: End If fSSUM.WriteLine(s.ToString) - '** Ergebnisse je Veh-Type + '** Results per Veh-Type For Each VehType In ADV.FLTfleet.Keys s.Length = 0 @@ -2355,12 +2355,12 @@ lbDone: s.Append(Sepp & EMsum(VehType)(e)) Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) Next - '** Summe + '** Total s.Length = 0 'Type @@ -2375,10 +2375,10 @@ lbDone: s.Append(Sepp & sum) Next - 'Schreiben + 'Writing fSSUM.WriteLine(s.ToString) - 'Datei schließen + 'Close file fSSUM.Close() Return True diff --git a/VECTO/ApplicationEvents.vb b/VECTO/ApplicationEvents.vb index 3f2dc1afdc22c47c03e43a48bbd960121478e8f1..f217b51efb7381c24f2ce773ea63b6a4c4ec35a3 100644 --- a/VECTO/ApplicationEvents.vb +++ b/VECTO/ApplicationEvents.vb @@ -2,16 +2,16 @@ Namespace My - ' Für MyApplication sind folgende Ereignisse verfügbar: + ' The following events are available for MyApplication: ' - ' 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. + ' 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. Partial Friend Class MyApplication - 'Initialisierung + 'Initialization Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup Dim logfDetail As IO.FileInfo @@ -22,7 +22,7 @@ Namespace My FirstTime = False - 'Pfade + 'Paths MyAppPath = My.Application.Info.DirectoryPath & "\" MyConfPath = MyAppPath & "config\" MyDeclPath = MyAppPath & "Declaration\" @@ -30,7 +30,7 @@ Namespace My StartLogfile() - 'Falls Ordner nicht vorhanden: Erstellen! + 'If folder does not exist: Create! If Not IO.Directory.Exists(MyConfPath) Then FirstTime = True Try @@ -49,7 +49,7 @@ Namespace My Try IO.Directory.CreateDirectory(FB_FilHisDir) - 'Directories.txt vorkonfigurieren + 'Preconfigure Directories.txt Try s = IO.Directory.GetParent(My.Application.Info.DirectoryPath).ToString & "\" Catch ex As Exception @@ -75,7 +75,7 @@ Namespace My End Try End If - 'Trennzeichen! + 'Separator! SetCulture = False If System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator <> "." Then SetCulture = True @@ -88,7 +88,7 @@ Namespace My End Try End If - 'Klassen initialisieren + 'Initialize Classes sKey = New csKey JobFileList = New List(Of String) JobCycleList = New List(Of String) @@ -103,13 +103,13 @@ Namespace My Cfg.ConfigLOAD() - 'Log starten + 'Start Log If IO.File.Exists(MyAppPath & "LOG.txt") Then - 'Dateigröße checken + 'File size check logfDetail = My.Computer.FileSystem.GetFileInfo(MyAppPath & "LOG.txt") - 'Falls Log zu groß: löschen + 'If Log too large: Delete If logfDetail.Length / (2 ^ 20) > Cfg.LogSize Then LOGfile.WriteLine("Starting new logfile") @@ -136,7 +136,7 @@ Namespace My End If - 'Lizenz initialisieren + 'License initialization Lic = New vectolic.cLicense Lic.AppVersion = VECTOvers Lic.FilePath = MyAppPath & "license.dat" diff --git a/VECTO/File Browser/FB_Dialog.vb b/VECTO/File Browser/FB_Dialog.vb index 5acb015f8546d7d4cfa3bf0c0a9a0b59ccef05f4..a28f8c7ef3908f44dcfd81b02c7cd5a70be79f76 100644 --- a/VECTO/File Browser/FB_Dialog.vb +++ b/VECTO/File Browser/FB_Dialog.vb @@ -29,9 +29,9 @@ 'New Public Sub New(ByVal LightMode As Boolean) - ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. + ' This call is required by the Windows Form Designer. InitializeComponent() - ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + ' Append any initialization after the InitializeComponent() call. MyID = "Default" UpdateLock = False Initialized = False @@ -80,7 +80,7 @@ If Me.DialogResult = Windows.Forms.DialogResult.OK Then If bBrowseFolder Then path = Trim(Me.TextBoxPath.Text) - 'Wenn leerer Pfad: Aktuellen Ordner (MyFolder) nehmen + 'If empty path: use the Current-folder(MyFolder) If path = "" Then path = MyFolder Else @@ -95,15 +95,15 @@ ReDim MyFiles(0) MyFiles(0) = path Else - 'Abbruch wenn leerer Pfad + 'Stop if empty path If Trim(Me.TextBoxPath.Text) = "" Then e.Cancel = True Exit Sub End If LastExt = Trim(Me.ComboBoxExt.Text) - 'Dateien in Array übernehmen + 'Assume Files in array If Microsoft.VisualBasic.Left(Me.TextBoxPath.Text, 1) = "<" And Me.ListViewFiles.SelectedItems.Count > 0 Then - 'Mehrere Dateien ausgewählt + 'Multiple files selected ReDim MyFiles(Me.ListViewFiles.SelectedItems.Count - 1) x = -1 For Each lv0 As ListViewItem In Me.ListViewFiles.Items @@ -114,13 +114,13 @@ Next bMultiFiles = True Else - 'Einzelne Datei + 'Single File path = Trim(Me.TextBoxPath.Text) - 'Primäre Extension (u.a. für bForceExt) + 'Primary extension (eg for bForceExt) Ext = Trim(Me.ComboBoxExt.Text.Split(",")(0)) - 'Falls Datei ohne Pfad angegeben dann Pfad hinzufügen + 'If file without path then append path If Microsoft.VisualBasic.Mid(path, 2, 1) <> ":" Then path = MyFolder & path - 'Falls statt Datei ein Ordner eingegeben wurde: Auf Ordner wechseln und Abbruch + 'If instead of File a Folder is entered: Switch to Folder and Abort If IO.Directory.Exists(path) Then SetFolder(path) e.Cancel = True @@ -131,18 +131,18 @@ If UCase(IO.Path.GetExtension(path)) <> "." & UCase(Ext) Then path &= "." & Ext HasExt = True Else - 'Check ob Datei mit Ext angegeben + 'Check whether specified a File with Ext HasExt = (Microsoft.VisualBasic.Len(IO.Path.GetExtension(path)) > 1) End If - 'Falls Datei ohne Endung (nach bForceExt-Abfrage) und nicht existiert dann primäre Endung hinzufügen + 'If File without Extension (after bForceExt question) and it does not exist, then add primary Extension If Not HasExt Then If Ext <> "*" And Ext <> "" Then If Not IO.File.Exists(path) Then path &= "." & Ext End If End If - 'Check ob Datei existiert + 'Check that File exists If IO.File.Exists(path) Then - 'Ja: Check ob Overwrite wenn bOverwriteCheck + 'Yes: when bOverwriteCheck, check for Overwrite If bOverwriteCheck Then If MsgBox("Overwrite " & path & " ?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then e.Cancel = True @@ -150,14 +150,14 @@ End If End If Else - 'Nein: Abbruch wenn bFileMustExist + 'No: abort if bFileMustExist If bFileMustExist Then MsgBox("The file " & path & " does not exist!", MsgBoxStyle.Critical) e.Cancel = True Exit Sub End If End If - 'MyFiles definieren + 'Define MyFiles ReDim MyFiles(0) MyFiles(0) = path bMultiFiles = False @@ -172,7 +172,7 @@ If Not Initialized Then Init() - 'FolderHistory ContextMenu laden + 'Load Folder History ContextMenu For x = 0 To 9 Me.ContextMenuHisFolder.Items(x).Text = FB_FolderHistory(x) Next @@ -218,23 +218,23 @@ End If - 'Pfad definieren - ' Falls kein Pfad angegeben wird: Letzter Ordner, kein Dateiname + 'Define Path + ' If no path is specified: Last folder, no file name If path = "" Then path = FB_FolderHistory(0) - ' Falls Pfadlänge zu klein (Pfad ungültig): Letzte Datei + ' If path-length too small (Path is invalid): Last File If path.Length < 2 Then path = LastFile - 'Ordner öffnen - Falls kein Ordner im Pfad: Letzter Ordner + 'Open Folder - If no folder in the path: Last folder If fPATH(path) = "" Then - 'Falls Datei ohne Pfad angegeben + 'If given a file without path If Trim(FB_FolderHistory(0)) = "" Then SetFolder("C:\") Else SetFolder(FB_FolderHistory(0)) End If Else - '...sonst: + '...Otherwise: SetFolder(fPATH(path)) End If If bBrowseFolder Then @@ -244,7 +244,7 @@ Me.TextBoxPath.Text = IO.Path.GetFileName(path) End If - 'Form anzeigen---------------------------------------------------- + 'Show form ------------------------------------------------ ---- Me.ShowDialog() If Me.DialogResult = Windows.Forms.DialogResult.OK Then 'File / Folder History @@ -256,7 +256,7 @@ UpdateHisFolder(fPATH(LastFile)) If Not bBrowseFolder Then UpdateHisFile(LastFile) End If - 'Globale Folder History updaten + 'Update Global History Folder For x = 0 To 9 FB_FolderHistory(x) = Me.ContextMenuHisFolder.Items(x).Text Next @@ -269,7 +269,7 @@ End If End Function - 'Schließen und File/Folder History speichern + 'Close and save File / Folder History Public Sub SaveAndClose() Dim f As System.IO.StreamWriter Dim x As Int16 @@ -306,7 +306,7 @@ Me.Close() End Sub - 'Umschalten auf FolderBrowser + 'Switching to FolderBrowser Public Sub SetFolderBrowser() If Initialized Then Exit Sub bBrowseFolder = True @@ -318,7 +318,7 @@ Me.Text = "Directory Browser" End Sub - 'Initialisieren + 'Initialize Private Sub Init() Dim x As Int16 Dim line As String @@ -326,10 +326,10 @@ UpdateLock = True - 'Globale FileBrowser Initialisierung + 'Initialization for Global File Browser If Not FB_Init Then GlobalInit() - 'Laufwerk-ComboBox laden + 'Load Drive ComboBox For x = 0 To UBound(FB_Drives) Me.ComboBoxDrive.Items.Add(FB_Drives(x)) Next @@ -392,7 +392,7 @@ Dim f As System.IO.StreamReader - 'Laufwerk-Liste erstellen + 'Create Drive List ReDim FB_Drives(UBound(IO.Directory.GetLogicalDrives())) x = -1 For Each drive In IO.Directory.GetLogicalDrives() @@ -400,7 +400,7 @@ FB_Drives(x) = Microsoft.VisualBasic.Left(drive, 2) Next - 'FolderHistory einlesen + 'Read Folder History For x = 0 To 19 FB_FolderHistory(x) = EmptyText Next @@ -725,7 +725,7 @@ Dim x As Int16 Dim y As Int16 If bLightMode Then Exit Sub - 'Context Menu sortieren + 'Sort Context Menu For x = 0 To 8 If UCase(Me.ContextMenuHisFile.Items(x).Text.ToString) = UCase(path) Then Exit For Next @@ -738,7 +738,7 @@ Dim x As Int16 Dim y As Int16 - 'Context Menu sortieren + 'Sort Context Menu For x = 0 To 8 If UCase(Me.ContextMenuHisFolder.Items(x).Text.ToString) = UCase(path) Then Exit For Next @@ -757,9 +757,9 @@ Dim y As Int16 'Init If Not Initialized Then Init() - 'Dateien + 'Files UpdateHisFile(path) - 'Ordner + 'Folder path = fPATH(path) For x = 0 To 8 If UCase(FB_FolderHistory(x)) = UCase(path) Then Exit For @@ -770,25 +770,25 @@ FB_FolderHistory(0) = path End Sub - 'Ordner wechseln + 'Change folder Private Sub SetFolder(ByVal Path As String) - 'Abbruch wenn keine Laufwerk-Angabe + 'Abort if no drive specified If Microsoft.VisualBasic.Mid(Path, 2, 1) <> ":" Then Exit Sub UpdateLock = True - 'Suchfelder löschen + 'Delete Search-fields Me.TextBoxSearchFile.Text = "" Me.TextBoxSearchFolder.Text = "" - 'Laufwerk setzen + 'Set Drive If MyDrive <> Microsoft.VisualBasic.Left(Path, 2) Then MyDrive = UCase(Microsoft.VisualBasic.Left(Path, 2)) Me.ComboBoxDrive.SelectedItem = MyDrive End If - 'Ordner setzen + 'Set Folder MyFolder = Path If Microsoft.VisualBasic.Right(MyFolder, 1) <> "\" Then MyFolder &= "\" LoadListFolder() @@ -803,7 +803,7 @@ End Sub - 'Ordner Eine Ebene hinauf + 'Folder one level up Private Sub FolderUp() Dim path As String Dim x As Int32 @@ -814,14 +814,14 @@ End If End Sub - 'FolderListe laden + 'Load Folder-List Private Sub LoadListFolder() Dim SearchPat As String - 'FolderListe löschen + 'Delete Folder-List Me.ListViewFolder.Items.Clear() SearchPat = "*" & Me.TextBoxSearchFolder.Text & "*" Try - 'Ordner hinzufügen + 'Add Folder Dim di As New IO.DirectoryInfo(MyFolder) Dim aryFi As IO.DirectoryInfo() Dim fi As IO.DirectoryInfo @@ -834,7 +834,7 @@ End Try End Sub - 'Dateiliste laden + 'Load File-list Private Sub LoadListFiles() Dim x As Int32 Dim SearchPat As String @@ -842,25 +842,25 @@ Dim SearchExt As String Dim ExtStr As String() - 'Abbruch wenn bBrowseFolder + 'Abort if bBrowseFolder If bBrowseFolder Then Exit Sub Me.LabelFileAnz.Text = "0 Files" - 'Extension-Filter definieren + 'Define Extension-filter If Trim(Me.ComboBoxExt.Text.ToString) = "" Then ExtStr = New String() {"*"} Else ExtStr = Me.ComboBoxExt.Text.ToString.Split(",") End If - 'FileListe löschen + 'Delete File-List Me.ListViewFiles.Items.Clear() SearchFile = Me.TextBoxSearchFile.Text Me.ListViewFiles.BeginUpdate() Try - 'Ordner hinzufügen + 'Add Folder Dim di As New IO.DirectoryInfo(MyFolder) Dim aryFi As IO.FileInfo() Dim fi As IO.FileInfo diff --git a/VECTO/File Browser/cFileBrowser.vb b/VECTO/File Browser/cFileBrowser.vb index 84a6d9d1131066070bb37c1a71ae4ef12c8d4380..641153f5a79abc590404c964e812d68ae5ed55f3 100644 --- a/VECTO/File Browser/cFileBrowser.vb +++ b/VECTO/File Browser/cFileBrowser.vb @@ -11,18 +11,18 @@ ' - Dir-Favorites 'V2.0.1 01.12.2011 ' - Fav-Dlog: "Abbrechen" => "Cancel" -' - Fav-Dlog: Statt leeren Items in Fav-Liste "<undefined>" +' - Fav-Dlog: Statt leeren Items in Fav-Liste "<undefined>" |@@| Fav-Dlog: Empty Items in Fav list Instead "<undefined>" -'**Anwendung +'**Application 'Dim fbTXT As cFileBrowser 'fbTXT = New cFileBrowser("TXT") 'fbTXT.Extensions = New String() {"txt,log", "csv"} '... 'fbTXT.Close() -'**Benötigte Globale Variablen (Default): +'**Required Global variables (default): 'Public FB_Drives() As String 'Public FB_Init As Boolean = False 'Public FB_FilHisDir As String @@ -46,7 +46,7 @@ Public Class cFileBrowser Private bFolderBrowser As Boolean Private bLightMode As Boolean - 'Neue Instanz - ID definieren, umschalten auf FolderBrowser + 'New Instance - define ID, switch to FolderBrowser Public Sub New(ByVal ID As String, Optional ByVal FolderBrowser As Boolean = False, Optional ByVal LightMode As Boolean = False) Initialized = False MyID = ID @@ -55,12 +55,12 @@ Public Class cFileBrowser bLightMode = LightMode End Sub - 'OpenDialog - Öffnen Dialog - Ãœbergibt True wenn Dialog mit OK beendet wurde + 'OpenDialog Return True when Dialog ended with OK Public Function OpenDialog(ByVal path As String, Optional ByVal MultiFile As Boolean = False, Optional ByVal Ext As String = "") As Boolean Return CustomDialog(path, True, False, eExtMode.MultiExt, MultiFile, Ext, "Open") End Function - 'SaveDialog - Speichern Dialog - Ãœbergibt True wenn Dialog mit OK beendet wurde + 'SaveDialog - Returns True when Dialog ended with OK Public Function SaveDialog(ByVal path As String, Optional ByVal ForceExt As Boolean = True, Optional ByVal Ext As String = "") As Boolean Dim x As eExtMode If ForceExt Then @@ -71,19 +71,19 @@ Public Class cFileBrowser Return CustomDialog(path, False, True, x, False, Ext, "Save As") End Function - 'Dialog öffnen - Ãœbergibt True wenn Dialog mit OK beendet wurde + 'Open dialogue - Return True if Dialogue ended with OK Public Function CustomDialog(ByVal path As String, ByVal FileMustExist As Boolean, ByVal OverwriteCheck As Boolean, ByVal ExtMode As eExtMode, ByVal MultiFile As Boolean, ByVal Ext As String, Optional Title As String = "File Browser") As Boolean If Not Initialized Then Init() Return Dlog.Browse(path, FileMustExist, OverwriteCheck, ExtMode, MultiFile, Ext, Title) End Function - 'File-History manuell updaten + 'Manually update File History Public Sub UpdateHistory(ByVal Path As String) If Not Initialized Then Init() Dlog.UpdateHistory(Path) End Sub - 'File / Folder History speichen und Speicher freigeben + 'File / Folder History speichen und Speicher freigeben |@@| File / Folder History spokes and Release memory Public Sub Close() If Initialized Then Dlog.SaveAndClose() @@ -101,7 +101,7 @@ Public Class cFileBrowser Initialized = True End Sub - 'Dateiendungen definieren + 'Define File-Extensions Public Property Extensions() As String() Get Return MyExt @@ -112,7 +112,7 @@ Public Class cFileBrowser End Set End Property - 'Dateien abfragen + 'Ask for Files Public ReadOnly Property Files() As String() Get If Initialized Then diff --git a/VECTO/GUI/F_ADV.vb b/VECTO/GUI/F_ADV.vb index e37fe552be88e7e29b9c3a046d6ba056b458fec1..1232e5f2a5f8d4b0a4c5cbcda7f78d88e44840d9 100644 --- a/VECTO/GUI/F_ADV.vb +++ b/VECTO/GUI/F_ADV.vb @@ -4,19 +4,19 @@ Dim Advfile As String Dim Changed As Boolean = False - 'Initialisieren + 'Initialize Private Sub F05_ADV_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Changed = False End Sub - 'Schließen + 'Close Private Sub F05_ADV_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then e.Cancel = ChangeCheckCancel() End If End Sub - 'Inputfile- Steuerelemente------------------------------------------ + 'InputFile controls ------------------------------------------ 'Browse Button-Click Events Private Sub ButtonFZP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFZP.Click @@ -88,7 +88,7 @@ #End Region - 'ADV speichern + 'Save ADV Private Function Save() As Boolean If Advfile = "" Then If fbADV.SaveDialog("") Then @@ -105,7 +105,7 @@ '------------------------------------------------------------------- - 'Neue leere ADV + 'New empty ADV Public Sub ADVnew() If ChangeCheckCancel() Then Exit Sub Me.TBseed.Text = "1" @@ -123,7 +123,7 @@ Me.ToolStripStatusLabelADV.Text = "New file" End Sub - 'ADV in Form laden + 'Load ADV in Form Public Sub ADVload2Form(ByVal file As String) Dim ADV As cADV Dim i As Integer @@ -146,28 +146,28 @@ Exit Sub End If - 'Zeile 1: FZP-Datei + 'Line 1: FZP file Me.TextBoxFZP.Text = ADV.FZPpath(True) - 'Zeile 2: FLT-Datei + 'Line 2: FLT file Me.TextBoxFLT.Text = ADV.FLTpath(True) - 'Zeile 3: TEM-Datei + 'Line 3: TEM file Me.TextBoxTEM.Text = ADV.TEMpath(True) - 'Zeile 4: RndSeed + 'Line 4: RndSeed Me.TBseed.Text = ADV.RndSeed - 'Zeile 5: MISKAMout True/False + 'Line 5: MISKAMout True/False Me.CheckBoxMISKAM.Checked = ADV.SD3out - 'Zeile 6: STRfilter True/False + 'Line 6: strFilter True/False Me.CheckBoxSTRfilter.Checked = ADV.STRfilter - 'Zeile 7: Distance filter für SUM.STR + 'Line 7: Distance filter for SUM.STR Me.TbFilter.Text = ADV.STRSUMdistflt - 'Zeile 8+: STR Dateien + 'Line 8 +: STR files For i = 1 To ADV.STRcount Me.LbSTR.Items.Add(ADV.STRpaths(i - 1, True)) Next @@ -178,7 +178,7 @@ Me.ToolStripStatusLabelADV.Text = "" 'file End Sub - 'ADV aus Form speichern + 'Save ADV from Form Private Function ADVsave(ByVal file As String) As Boolean Dim ADV As cADV Dim s As String @@ -201,7 +201,7 @@ ADV.STRSUMdistflt = Me.TbFilter.Text - 'ADV.STRpathsClear() '<= Nicht notwendig da neues lokales cADV-Objekt + 'ADV.STRpathsClear() '<= Nicht notwendig da neues lokales cADV-Objekt |@@| ADV.STRpathsClear() '<= Not necessary because new local cADV object For Each s In Me.LbSTR.Items ADV.STRpathsAdd(s) Next @@ -231,16 +231,16 @@ Me.TextBoxTEM.Text = txt End Sub - 'Formular Änderungen (Kontrolle ob GEN gespeichert)--------------------------------- - 'Event Handler für Formänderungen + 'Form changes (control whether GEN saved) --------------------------------- + 'Event handler for the Form changes - 'Change Status ändern + 'Change Status ändern |@@| Change Status change Private Sub Change() Me.ToolStripStatusLabelADV.Text = "Unsaved changes in current file" Changed = True End Sub - ' "Save changes ?" ...liefert True wenn User Vorgang abbricht + ' "Save changes? "... Return True if user aborts Private Function ChangeCheckCancel() As Boolean If Changed Then diff --git a/VECTO/GUI/F_AboutBox.vb b/VECTO/GUI/F_AboutBox.vb index f4be9ee1b0f0fb9d3cad8b522c052456010da9e7..4d4dd8a84e3046d8330b6a8b0cc0f74c064541b7 100644 --- a/VECTO/GUI/F_AboutBox.vb +++ b/VECTO/GUI/F_AboutBox.vb @@ -1,7 +1,7 @@ Public Class F_AboutBox - 'Initialisieren + 'Initialize Private Sub F10_AboutBox_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "VECTO " & VECTOvers '& "/ GUI " & GUIvers Me.LabelLic.Text = Lic.LicString @@ -30,7 +30,7 @@ End Sub '---------------------------------------------------------------------------- - 'Bild Links------------------------------------------------------------------ + 'Picture Links------------------------------------------------------------------ Private Sub PictureBoxFVT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBoxFVT.Click System.Diagnostics.Process.Start("http://www.ivt.tugraz.at/") End Sub diff --git a/VECTO/GUI/F_ENG.vb b/VECTO/GUI/F_ENG.vb index 4a9135ad3abff11c7c115b1a697008bccc0c0097..8448c0d2c949879187de3253ec3b51432159a531 100644 --- a/VECTO/GUI/F_ENG.vb +++ b/VECTO/GUI/F_ENG.vb @@ -124,7 +124,7 @@ End Sub - 'Speichern oder Speichern als Function = true wenn Datei gespeichert + 'Save or Save As function = true if file is saved Private Function SaveOrSaveAs(ByVal SaveAs As Boolean) As Boolean If EngFile = "" Or SaveAs Then If fbENG.SaveDialog(EngFile) Then @@ -136,7 +136,7 @@ Return saveENG(EngFile) End Function - 'ENG speichern + 'Save ENG Private Function saveENG(ByVal file As String) As Boolean Dim ENG0 As cENG @@ -177,7 +177,7 @@ #Region "Change Events" - 'Change Status ändern + 'Change Status ändern |@@| Change Status change Private Sub Change() If Not Changed Then Me.LbStatus.Text = "Unsaved changes in current file" @@ -185,7 +185,7 @@ End If End Sub - ' "Save changes ?" ...liefert True wenn User Vorgang abbricht + ' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Return True if User aborts Private Function ChangeCheckCancel() As Boolean If Changed Then @@ -275,4 +275,4 @@ End Sub -End Class \ No newline at end of file +End Class diff --git a/VECTO/GUI/F_GBX.vb b/VECTO/GUI/F_GBX.vb index d9e134a05b6c49abe72321ed4ecfd729abbdb818..8447b3bbe7c2f474fe2eddc545794f7355cf5c90 100644 --- a/VECTO/GUI/F_GBX.vb +++ b/VECTO/GUI/F_GBX.vb @@ -151,7 +151,7 @@ End Sub - 'Speichern oder Speichern als Function = true wenn Datei gespeichert + 'Save or Save As function = true if file is saved Private Function SaveOrSaveAs(ByVal SaveAs As Boolean) As Boolean If GbxFile = "" Or SaveAs Then If fbGBX.SaveDialog(GbxFile) Then @@ -203,7 +203,7 @@ #Region "Change Events" - 'Change Status ändern + 'Change Status ändern |@@| Change Status change Private Sub Change() If Not Changed Then Me.LbStatus.Text = "Unsaved changes in current file" @@ -211,7 +211,7 @@ End If End Sub - ' "Save changes ?" ...liefert True wenn User Vorgang abbricht + ' "Save changes ?" ...liefert True wenn User Vorgang abbricht |@@| Save changes? "... Returns True if user aborts Private Function ChangeCheckCancel() As Boolean If Changed Then @@ -335,4 +335,4 @@ #End Region -End Class \ No newline at end of file +End Class diff --git a/VECTO/GUI/F_GEN.vb b/VECTO/GUI/F_GEN.vb index 5aab3a9e59786a6da2234973f29333b6b3226123..0296822714319e43bfc45d5d941b4e41b5702610 100644 --- a/VECTO/GUI/F_GEN.vb +++ b/VECTO/GUI/F_GEN.vb @@ -20,7 +20,7 @@ Public Class F_GEN Private MyVehMode As tVehMode - 'Coolant System Simulation Zwischenspeicher + 'Cache Coolant System Simulation Private CoolantsimJa As Boolean = False Private CoolantSimPath As String = "" @@ -28,7 +28,7 @@ Public Class F_GEN - 'Initialisiere Form (Lade Verlauf, Combobox-Listen,...) + 'Initialize form (Load Drives, Combo-lists, ...) Private Sub F02_GEN_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim x As Int16 @@ -42,7 +42,7 @@ Public Class F_GEN MyVehMode = tVehMode.StandardMode - 'Damit Combobox-Inhalte aktuell sind + 'Damit Combobox-Inhalte aktuell sind |@@| So Combo-content is current For x = 0 To Me.TabControl1.TabCount - 1 Me.TabControl1.TabPages(x).Show() Next @@ -56,7 +56,7 @@ Public Class F_GEN End Sub - 'Schließen + 'Close Private Sub F02_GEN_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then e.Cancel = ChangeCheckCancel() @@ -72,7 +72,7 @@ Public Class F_GEN #Region "Schaltflächen Ein-/Ausblenden (und ggf. Change() aufrufen)" - 'Änderung der DynKor Checkbox + 'Change the DynKor checkbox Private Sub CheckBoxDynKor_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxDynKor.CheckedChanged Me.ButOpenTRS.Enabled = Me.CheckBoxDynKor.Checked Me.TextBoxTRS.Enabled = Me.CheckBoxDynKor.Checked @@ -80,13 +80,13 @@ Public Class F_GEN Call Change() End Sub - 'Änderung der Kaltstart Checkbox + 'Change the Cold-start checkbox Private Sub CheckBoxColdSt_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxColdSt.CheckedChanged SetCStab(Me.CheckBoxColdSt.Checked) Call Change() End Sub - 'Änderund der SCR Checkbox + 'Change the SCR checkbox Private Sub CheckBoxSCR_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBoxSCR.CheckedChanged Me.ButOpenEXS.Enabled = Me.CheckBoxSCR.Checked Me.TextBoxEXS.Enabled = Me.CheckBoxSCR.Checked @@ -349,7 +349,7 @@ Public Class F_GEN Dim f As String f = fFileRepl(TextBoxVEH.Text, fPATH(Genfile)) - 'Damit Veh-Datei übergeben wird + 'Thus Veh-file is returned F_VEH.GenDir = fPATH(Genfile) F_VEH.AutoSendTo = True @@ -375,7 +375,7 @@ Public Class F_GEN Dim f As String f = fFileRepl(TbENG.Text, fPATH(Genfile)) - 'Damit Veh-Datei übergeben wird + 'Thus Veh-file is returned F_ENG.GenDir = fPATH(Genfile) F_ENG.AutoSendTo = True @@ -401,7 +401,7 @@ Public Class F_GEN Dim f As String f = fFileRepl(TbGBX.Text, fPATH(Genfile)) - 'Damit Veh-Datei übergeben wird + 'Thus Veh-file is returned F_GBX.GenDir = fPATH(Genfile) F_GBX.AutoSendTo = True @@ -517,7 +517,7 @@ Public Class F_GEN #Region "Datei Funktionen" - 'Speichern ("Save" bzw. "Save As" falls neue Datei) + 'Save ("Save" or "Save As" when new file) Private Function Save() As Boolean If Genfile = "" Then If fbGEN.SaveDialog("") Then @@ -529,7 +529,7 @@ Public Class F_GEN Return GENsave(Genfile) End Function - 'GEN in Form laden + 'Load GEN in the form Public Sub GENload2Form(ByVal file As String) Dim x As Int16 Dim Gfile As cGEN @@ -541,7 +541,7 @@ Public Class F_GEN GENnew() - 'GEN einlesen + 'Read GEN Gfile = New cGEN Gfile.FilePath = file Try @@ -556,7 +556,7 @@ Public Class F_GEN End Try - 'Form updaten + 'Update Form If Gfile.PKWja Then Me.ComboBoxVehType.SelectedIndex = 1 Else @@ -584,7 +584,7 @@ Public Class F_GEN Me.ChCreateMap.Checked = Gfile.CreateMap Me.ChEngAnalysis.Checked = Gfile.EngAnalysis - 'Kennfeld Erstellung----------------- + 'Map creation ----------------- Me.TextBoxIncPe.Text = Gfile.Pschrit Me.TextBoxIncn.Text = Gfile.nschrit Me.CheckBoxGS.Checked = Gfile.MapSchaltja @@ -598,14 +598,14 @@ Public Class F_GEN Me.CbDragIntp.SelectedIndex = 0 End If - 'Kalt Start-------------------------- + 'Cold start -------------------------- If Gfile.kaltst1 Then MsgBox("Cold Start is not supported in this version!") Me.CheckBoxColdSt.Checked = False ' Gfile.kaltst1 Me.TextBoxTKat.Text = Gfile.tkat1 Me.TextBoxTKW.Text = Gfile.tkw1 Me.TextBoxTofSt.Text = Gfile.hsstart - 'Dateien----------------------------- + 'Files ----------------------------- TextBoxVEH.Text = Gfile.PathVEH(True) TbENG.Text = Gfile.PathENG(True) @@ -614,7 +614,7 @@ Public Class F_GEN TbGBX.Text = Gfile.PathGBX(True) TextBoxTRS.Text = Gfile.dynspez(True) - 'Kalt Start + 'Cold start TextBoxMAA.Text = Gfile.katmap(True) TextBoxMAC.Text = Gfile.kwmap(True) TextBoxWUA.Text = Gfile.katkurv(True) @@ -696,7 +696,7 @@ Public Class F_GEN End Sub - 'GEN aus Form speichern + 'GEN save from form Private Function GENsave(ByVal file As String) As Boolean Dim g As cGEN @@ -717,7 +717,7 @@ Public Class F_GEN g.EngAnalysis = Me.ChEngAnalysis.Checked - 'Kennfeld Erstellung------------------------------------------------------ + 'Map creation ------------------------------------------------ ------ g.Pschrit = CShort(fTextboxToNumString(Me.TextBoxIncPe.Text)) g.nschrit = CShort(fTextboxToNumString(Me.TextBoxIncn.Text)) g.MapSchaltja = Math.Abs(CInt(Me.CheckBoxGS.Checked)) @@ -727,13 +727,13 @@ Public Class F_GEN g.KFinsertDrag = Me.ChInsertDrag.Checked g.KFDragIntp = (Me.CbDragIntp.SelectedIndex = 1) - 'Kalt Start--------------------------------------------------------------- + 'Cold start ------------------------------------------------ --------------- g.kaltst1 = Me.CheckBoxColdSt.Checked g.tkat1 = CSng(fTextboxToNumString(Me.TextBoxTKat.Text)) g.tkw1 = CSng(fTextboxToNumString(Me.TextBoxTKW.Text)) g.hsstart = CSng(fTextboxToNumString(Me.TextBoxTofSt.Text)) - 'Dateien------------------------------------------------------------------ + 'Files ------------------------------------------------- ----------------- g.PathVEH = Me.TextBoxVEH.Text g.PathENG = Me.TbENG.Text @@ -747,7 +747,7 @@ Public Class F_GEN g.PathGBX = Me.TbGBX.Text g.dynspez = Me.TextBoxTRS.Text - 'Kalt Start + 'Cold start g.katmap = Me.TextBoxMAA.Text g.kwmap = Me.TextBoxMAC.Text g.katkurv = Me.TextBoxWUA.Text @@ -830,7 +830,7 @@ Public Class F_GEN End Function - 'Neue leere GEN + 'New BlankGEN Public Sub GENnew() If ChangeCheckCancel() Then Exit Sub @@ -845,7 +845,7 @@ Public Class F_GEN Me.ChEngAnalysis.Checked = False Me.ChCreateMap.Checked = False - 'Kennfeld Erstellung----------------- + 'Map creation ----------------- Me.TextBoxIncPe.Text = 20 Me.TextBoxIncn.Text = 20 Me.CheckBoxGS.Checked = True @@ -855,14 +855,14 @@ Public Class F_GEN Me.ChInsertDrag.Checked = True Me.CbDragIntp.SelectedIndex = 1 - 'Kalt Start-------------------------- + 'Cold start -------------------------- Me.CheckBoxColdSt.Checked = False Me.TextBoxTKat.Text = 20 Me.TextBoxTKW.Text = 20 Me.TextBoxTofSt.Text = 1 - 'Dateien----------------------------- - 'Kalt Start + 'Files ----------------------------- + 'Cold start 'HEV Me.TbSOCstart.Text = "0.5" @@ -930,7 +930,7 @@ Public Class F_GEN #Region "Event Handler für Formänderungen" - 'Event Handler für Formänderungen + 'Event handler for the form changes Private Sub FormChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ ComboBoxVehType.SelectedIndexChanged, _ ComboBoxGearShift.SelectedIndexChanged, _ @@ -946,13 +946,13 @@ Public Class F_GEN Call Change() End Sub - 'Start/Stop - Checkbox Änderung + 'Start/Stop - checkbox change Private Sub ChBStartStop_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChBStartStop.CheckedChanged SetStStoptab(Me.ChBStartStop.Checked) Change() End Sub - 'Start/Stop - Textbox Änderung + 'Start / Stop - Textbox change Private Sub TBSSspeed_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBSSspeed.TextChanged, TBSStime.TextChanged Change() End Sub @@ -1069,7 +1069,7 @@ Public Class F_GEN #End Region - 'Change Status ändern + 'Change Status Change Private Sub Change() If Not Changed Then Me.ToolStripStatusLabelGEN.Text = "Unsaved changes in current file" @@ -1077,7 +1077,7 @@ Public Class F_GEN End If End Sub - ' "Save changes ?" ...liefert True wenn User Vorgang abbricht + ' "Save changes? "... Returns True if User aborts Private Function ChangeCheckCancel() As Boolean If Changed Then diff --git a/VECTO/GUI/F_MAINForm.vb b/VECTO/GUI/F_MAINForm.vb index bfad1f6bb5e856c07095ad261088a92d0f279757..1679283d273e6ec4e9a5b5b149156f4961b49dce 100644 --- a/VECTO/GUI/F_MAINForm.vb +++ b/VECTO/GUI/F_MAINForm.vb @@ -177,16 +177,16 @@ Public Class F_MAINForm Public Sub PHEM_Launcher() Dim ProgOverall As Boolean - 'Falls Aufruf während PHEM schon läuft + 'Called when PHEM already running If PHEMworker.IsBusy Then GUImsg(tMsgID.Err, "PHEM is already running!") Exit Sub End If - 'GENlist-Selection löschen + 'Delete GENlist-Selection Me.LvGEN.SelectedItems.Clear() - 'Modus festlegen + 'Set Mode Select Case LastModeIndex Case 0 PHEMmode = tPHEMmode.ModeSTANDARD @@ -196,7 +196,7 @@ Public Class F_MAINForm PHEMmode = tPHEMmode.ModeADVANCE End Select - 'Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe + '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 If (PHEMmode = tPHEMmode.ModeBATCH) And ((Me.LvGEN.CheckedItems.Count) * (Me.LvDRI.CheckedItems.Count) > 100) And Me.ChBoxModOut.Checked Then Select Case MsgBox("You are about to run PHEM BATCH with " & (Me.LvGEN.CheckedItems.Count) * (Me.LvDRI.CheckedItems.Count) & " calculations!" & ChrW(10) & "Do you still want to write second-by-second results?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.No @@ -211,18 +211,18 @@ Public Class F_MAINForm Status("Launching PHEM...") - 'Job-Liste definieren + 'Define Job-0list - 'File- / Zylus- Liste definieren + 'Define File / Cycle list SetJobList() - 'Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt) + '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) SetCycleList() - 'Check ob Overall-Progbar benötigt + 'Check whether Overall-progbar is needed ProgOverall = PHEMmode <> tPHEMmode.ModeADVANCE ' JobFileList.Count > 1 Or PHEMmode = tPHEMmode.ModeBATCH - 'Launch über Job_Launcher + 'Launch through Job_Launcher BGjob = tBGjob.PHEM Job_Launcher(ProgOverall) @@ -256,7 +256,7 @@ Public Class F_MAINForm End Sub - 'Datei-Listen definieren + 'Define File-lists Private Sub SetJobList() Dim LV0 As ListViewItem Dim x As Integer @@ -288,30 +288,30 @@ Public Class F_MAINForm End Sub - 'Job-Launcher + 'Job Launcher Private Sub Job_Launcher(ByVal ProgOverallEnabled As Boolean) If PHEMworker.IsBusy Then Exit Sub - 'Options aus Options-Tab laden + 'Load Options from Options Tab SetOptions() - 'Config speichern + 'Save Config Cfg.ConfigSAVE() If DEV.Enabled Then DEV.SaveToFile() - 'Msg-Ausgabe zurück setzen + 'Reset Msg-output ClearMSG() - 'Button umschalten + 'Button switch Me.Button1.Text = "STOP" Me.Button1.Image = My.Resources.Stop_icon - 'Options disablen + 'Disable Options LockGUI(True) - 'ProgBars Start + 'ProgBars start If ProgOverallEnabled Then Me.ToolStripProgBarOverall.Value = 0 Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Marquee @@ -320,7 +320,7 @@ Public Class F_MAINForm ProgSecStart() - 'BG-Worker starten + 'BG-Worker start PHEMworker.RunWorkerAsync() End Sub @@ -336,10 +336,10 @@ Public Class F_MAINForm #Region "BackgroundWorker1" - 'Beginne Arbeit + 'Begin work Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork - 'SLEEP verhindern + 'Prevent SLEEP AllowSleepOFF() If SetCulture Then @@ -374,7 +374,7 @@ Public Class F_MAINForm Case tWorkMsgType.ProgBars Me.ToolStripProgBarOverall.Value = e.ProgressPercentage - 'Bei x.ProgSec = -1 kein Update von ProgBarSec + 'At x.ProgSec = -1 no update of ProgBarSec If x.ProgSec = 0 Then ProgSecStart() ElseIf x.ProgSec > 0 Then @@ -401,18 +401,18 @@ Public Class F_MAINForm End Select End Sub - 'Arbeit fertig + 'Work completed Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted Dim Result As tCalcResult - 'Progbar Reset + 'Progbar reset Me.ToolStripProgBarOverall.Visible = False Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous Me.ToolStripProgBarOverall.Value = 0 ProgSecStop() - 'Damit ListView-Item Farben (Warnung = Gelb, etc..) richtig sichtbar + 'So ListView-Item Colors (Warning = Yellow, etc..) are correctly visible Me.LvGEN.SelectedIndices.Clear() Result = e.Result @@ -421,7 +421,7 @@ Public Class F_MAINForm Case tBGjob.PHEM - 'Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface + '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 If bOptOn Then If Result = tCalcResult.Err Or Result = tCalcResult.Abort Then OptERstat = True OptEND() @@ -433,21 +433,21 @@ Public Class F_MAINForm End Select - 'ShutDown wenn Unexpected Error + 'ShutDown when Unexpected Error If e.Error IsNot Nothing Then MsgBox("An Unexpected Error occurred!" & ChrW(10) & ChrW(10) & _ e.Error.Message.ToString, MsgBoxStyle.Critical, "Unexpected Error") Me.Close() End If - 'Options enablen / GUI Reset + 'Options enable / GUI reset LockGUI(False) Me.Button1.Enabled = True Me.Button1.Text = "START" Me.Button1.Image = My.Resources.Play_icon Status(LastModeName & " Mode") - 'CommandLine Shutdown + 'Command Line Shutdown If ComLineShutDown Then Me.Close() 'Auto Shutdown @@ -461,7 +461,7 @@ Public Class F_MAINForm End If End If - 'SLEEP reaktivieren + 'SLEEP reactivate AllowSleepON() End Sub @@ -474,7 +474,7 @@ Public Class F_MAINForm #Region "Form Init/Close" - 'Initialisieren + 'Initialize Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim x As Integer @@ -487,7 +487,7 @@ Public Class F_MAINForm CheckedItems = New List(Of ListViewItem) - 'Tabs richtig laden (sonst Problem mit Listviews) + 'Load Tabs properly (otherwise problem with ListViews) For x = 0 To Me.TabControl1.TabCount - 1 Me.TabControl1.TabPages(x).Show() Next @@ -518,20 +518,20 @@ Public Class F_MAINForm BatchGenList = New cFileListView(MyConfPath & "batchGENlist.txt") BatchGenList.LVbox = Me.LvGEN - 'GUI Options laden (hier werden die GEN/ADV/DRI Listen geladen) + 'Load GUI Options (here, the GEN/ADV/DRI lists are loaded) LoadOptions() - 'Spalten skalieren... erst nach dem Laden der Dateilisten + 'Resize columns ... after Loading the @file-lists Me.LvGEN.Columns(1).Width = -2 Me.LvDRI.Columns(1).Width = -2 Me.LvMsg.Columns(2).Width = -2 - 'BackgroundWorker initialisieren + 'Initialize BackgroundWorker PHEMworker = Me.BackgroundWorker1 PHEMworker.WorkerReportsProgress = True PHEMworker.WorkerSupportsCancellation = True - 'Lizenz überprüfen + 'License check If Not Lic.LICcheck() Then MsgBox("License File invalid!" & vbCrLf & vbCrLf & Lic.FailMsg) If Lic.CreateActFile(MyAppPath & "ActivationCode.dat") Then @@ -556,7 +556,7 @@ Public Class F_MAINForm End Sub - 'Shown Event (Form-Load abgeschlossen) ...hier werden StartUp-Forms geladen (DEV, GEN/ADV- Editor..) + 'Shown Event (Form-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- Editor ..) Private Sub F01_MAINForm_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown 'DEV Form @@ -584,7 +584,7 @@ Public Class F_MAINForm End Sub - 'Datei mit PHEM öffnen + 'Open file with PHEM Private Sub CmdLineCtrl(ByVal ComLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) Dim bBATCH As Boolean Dim bRUN As Boolean @@ -596,7 +596,7 @@ Public Class F_MAINForm bRUN = False ComFile = sKey.NoFile - 'ComLineArgs auslesen + 'Read Command-Line Args For Each x In ComLineArgs str = Trim(Replace(x.ToString, ChrW(34), "")) Select Case UCase(str) @@ -611,25 +611,25 @@ Public Class F_MAINForm End Select Next - 'Modus umschalten + 'Mode switch If bBATCH Then Me.CBoxMODE.SelectedIndex = 1 Else Me.CBoxMODE.SelectedIndex = 0 End If - 'Falls Datei angegeben + 'If file is specified If ComFile <> sKey.NoFile Then OpenVectoFile(ComFile) End Sub - 'Schließen + 'Close Private Sub F01_MAINForm_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing - 'FileLists speichern + 'Save File-Lists SaveFileLists() - 'Log schließen + 'Login close Try LOGfile.WriteLine("Closing Session " & Now) LOGfile.WriteLine("------------------------------------------------------------------------------------------") @@ -638,12 +638,12 @@ Public Class F_MAINForm End Try - 'Config speichern + 'Config save SetOptions() Cfg.ConfigSAVE() If DEV.Enabled Then DEV.SaveToFile() - 'FileBrowser-Instanzen schließen + 'File browser instances close FB_Close() End Sub @@ -702,7 +702,7 @@ Public Class F_MAINForm ConMenTarget = Me.LvGEN ConMenTarGEN = True - 'Gesperrte Funktionen ein/ausblenden + 'Locked functions show/hide Me.LoadListToolStripMenuItem.Enabled = Not GUIlocked Me.LoadDefaultListToolStripMenuItem.Enabled = Not GUIlocked Me.ClearListToolStripMenuItem.Enabled = Not GUIlocked @@ -788,7 +788,7 @@ Public Class F_MAINForm #End Region - 'Datei aus Liste entfernen + 'Remove File from list Private Sub removeGEN() Dim lastindx As Integer Dim SelIx() As Integer @@ -827,7 +827,7 @@ Public Class F_MAINForm UpdateGENTabText() End Sub - 'Datei zu Liste hinzufügen + 'Append File to List Private Sub addGEN() Dim x As String() Dim Chck As Boolean = False @@ -852,7 +852,7 @@ Public Class F_MAINForm End Sub - 'Datei öffnen + 'Open file Private Sub OpenGenOrAdv() Dim f As String @@ -877,7 +877,7 @@ Public Class F_MAINForm End If End Sub - 'GEN/ADV Liste: Datei hinzufügen + 'GEN/ADV list: Add File Private Sub AddToListViewGEN(ByVal Path As String(), Optional ByVal Txt As String = " ") Dim pDim As Int16 Dim p As Int16 @@ -886,13 +886,13 @@ Public Class F_MAINForm Dim fListDim As Int16 = -1 Dim ListViewItem0 As ListViewItem - 'Falls PHEM läuft: Vorgang abbrechen (weil Modusänderung während Berechnung nix gscheit) + 'If PHEM runs: Cancel operation (because Mode-change during calculation is not very clever) If PHEMworker.IsBusy Then Exit Sub pDim = UBound(Path) ReDim fList(0) 'um Nullverweisausnahme-Warnung zu verhindern - 'Modus umschalten falls nötig + 'Mode-switch if necessary Select Case UCase(fEXT(Path(0))) Case ".GEN" If (LastModeIndex = 2) Then Me.CBoxMODE.SelectedIndex = 0 @@ -920,7 +920,7 @@ Public Class F_MAINForm For f = 0 To fListDim - 'Wenn Datei schon in Liste vorhanden: Nicht hinzufügen (nur wenn einzelne Datei) + 'If file already exists in the list: Do not append (only when a single file) If UCase(Path(p)) = UCase(fList(f)) Then 'Status reset @@ -928,7 +928,7 @@ Public Class F_MAINForm Me.LvGEN.Items(f).BackColor = Color.FromKnownColor(KnownColor.Window) Me.LvGEN.Items(f).ForeColor = Color.FromKnownColor(KnownColor.WindowText) - 'Element auswählen und anhaken + 'Element auswählen und anhaken |@@| Element selection and hook Me.LvGEN.Items(f).Selected = True Me.LvGEN.Items(f).Checked = True Me.LvGEN.Items(f).EnsureVisible() @@ -939,7 +939,7 @@ Public Class F_MAINForm End If - 'Sonst: Datei hinzufügen (ohne WorkDir) + 'Otherwise: Add File (without WorkDir) ListViewItem0 = New ListViewItem(Path(p)) 'fFileWD(Path(p))) ListViewItem0.SubItems.Add(" ") ListViewItem0.Checked = True @@ -953,7 +953,7 @@ lbFound: CheckLock = False '******************************************* End Update '******************************************* - 'Anzahl updaten + 'Number update GENchecked = Me.LvGEN.CheckedItems.Count UpdateGENTabText() @@ -1157,7 +1157,7 @@ lbFound: FileOpen(fFileRepl(Me.LvDRI.SelectedItems(0).SubItems(0).Text, Cfg.WorkDPath)) End Sub - 'DRI Liste: Datei hinzufügen + 'DRI list: Add File Private Sub AddToListViewDRI(ByVal Path As String()) Dim pDim As Int16 Dim p As Int16 @@ -1168,7 +1168,7 @@ lbFound: Me.LvDRI.BeginUpdate() CheckLock = True - 'Modus umschalten falls nötig + 'Mode switch if necessary If (LastModeIndex <> 1) Then Me.CBoxMODE.SelectedIndex = 1 For p = 0 To pDim @@ -1182,7 +1182,7 @@ lbFound: Me.LvDRI.EndUpdate() CheckLock = False - 'Anzahl updaten + 'Number update DRIchecked = Me.LvDRI.CheckedItems.Count UpdateDRITabText() @@ -1290,7 +1290,7 @@ lbFound: Exit Sub End If - 'Worker starten + 'Worker start BGjob = tBGjob.ModFilter Job_Launcher(False) End Sub @@ -1360,7 +1360,7 @@ lbFound: If GUIlocked Then Exit Sub - 'Selected Items zwischenspeichern + 'Cache Selected Items y1 = ListV.SelectedItems.Count - 1 ReDim items(y1) ReDim check(y1) @@ -1381,12 +1381,12 @@ lbFound: ListV.BeginUpdate() - 'Selected Items löschen + 'Delete Selected Items For Each ListViewItem0 In ListV.SelectedItems ListViewItem0.Remove() Next - 'Items einfügen und auswählen + 'Items select and Insert 'For y = y1 To 0 Step -1 For y = 0 To y1 ListViewItem0 = ListV.Items.Insert(index(y), items(y)) @@ -1425,7 +1425,7 @@ lbFound: GENchecked = Me.LvGEN.CheckedItems.Count UpdateGENTabText() Else 'DRI - 'Modus ggf. umschalten (auf BATCH) + 'Mode toggle (from(auf) BATCH) If (LastModeIndex <> 1) Then Me.CBoxMODE.SelectedIndex = 1 DriList.LoadList(fbFileLists.Files(0)) DRIchecked = Me.LvDRI.CheckedItems.Count @@ -1496,13 +1496,13 @@ lbFound: 'PHEM Start/Stop If PHEMworker.IsBusy Then - 'Falls PHEM schon rennt: STOP + 'If PHEM already running: STOP ComLineShutDown = False JobAbort() Else - '...Sonst: START + '...Otherwise: START - 'Listen speichern falls Crash + 'Save Lists if Crash SaveFileLists() 'Start @@ -1512,13 +1512,13 @@ lbFound: End Sub - 'Modus Change + 'Mode Change Private Sub CBoxMODE_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBoxMODE.SelectedIndexChanged Dim xB As Boolean, xA As Boolean xB = (Me.CBoxMODE.SelectedIndex = 1) xA = (Me.CBoxMODE.SelectedIndex = 2) - 'Alte Liste speichern + 'Save Old list Select Case LastModeIndex Case 0 'Standard GenList.SaveList() @@ -1540,7 +1540,7 @@ lbFound: PHEMmode = tPHEMmode.ModeADVANCE End Select - 'Neue Liste laden + 'Load New List Select Case LastModeIndex Case 0 'Standard LastModeName = "STANDARD" @@ -1727,7 +1727,7 @@ lbFound: End Sub - 'GEN Editor öffnen und Datei laden + 'Open GEN-editor and load File Friend Sub OpenGENEditor(ByVal x As String) If Not F_GEN.Visible Then @@ -1747,7 +1747,7 @@ lbFound: End Sub - 'ADV Editor öffnen und Datei laden + 'Open ADV-editor and load file Friend Sub OpenADVEditor(ByVal x As String) If Not F_ADV.Visible Then F_ADV.Show() @@ -1758,7 +1758,7 @@ lbFound: F_ADV.Activate() End Sub - 'FileLists speichern + 'Save File-Lists Private Sub SaveFileLists() Select Case LastModeIndex Case 0 @@ -1771,7 +1771,7 @@ lbFound: End Select End Sub - '*** ComMsgTimer_Tick Tick - Check ob neue Nachricht + '*** ComMsgTimer_Tick Tick - Check whether new Message Private Sub ComMsgTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComMsgTimer.Tick If OptMsgTxt <> "" Then If OptMsgTxt = "START" Then @@ -1853,7 +1853,7 @@ lbFound: Me.ChBoxBatchSubD.Checked = Cfg.BATCHoutSubD Me.ChBoxFCkor.Checked = Cfg.FCcorrection - 'Modus einstellen + 'Set Mode LastModeIndex = Cfg.LastMode Me.CBoxMODE.SelectedIndex = Cfg.LastMode @@ -1872,7 +1872,7 @@ lbFound: Private Sub SetOptions() - 'Allgemein + 'General(Allgemein) Cfg.WegKorJa = Me.ChBoxCyclDistCor.Checked Cfg.GnVorgab = Me.ChBoxUseGears.Checked Cfg.FinalEmOnly = Me.ChBoxFinalEm.Checked @@ -2103,7 +2103,7 @@ lbFound: ' If LvMsg.SelectedItems.Count > 0 Then LvMsg.SelectedItems.Clear() 'End Sub - 'Falls Link => Öffnen + 'If it is a Link => Open it Private Sub LvMsg_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles LvMsg.MouseClick If Me.LvMsg.SelectedIndices.Count > 0 Then If Not Me.LvMsg.SelectedItems(0).Tag Is Nothing Then @@ -2116,7 +2116,7 @@ lbFound: End If End Sub - 'Hand-Cursor für Links + 'Hand cursor for links Private Sub LvMsg_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles LvMsg.MouseMove Dim lv0 As ListViewItem lv0 = Me.LvMsg.GetItemAt(e.Location.X, e.Location.Y) diff --git a/VECTO/GUI/F_ModSplit.vb b/VECTO/GUI/F_ModSplit.vb index 3267fd67324ae72dbe8792e4f6622ad966043734..7015bee2f6b609e8135a8103ce855295b826d7ab 100644 --- a/VECTO/GUI/F_ModSplit.vb +++ b/VECTO/GUI/F_ModSplit.vb @@ -8,10 +8,10 @@ Public Class F_ModSplit Dim FBtemp As cFileBrowser Public Sub New() - ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. + ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. |@@| This call is required by the Windows Form Designer. InitializeComponent() - ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + ' Add any initialization after the InitializeComponent() invocation. FBtemp = New cFileBrowser("temp", False, True) FBtemp.Extensions = New String() {"mod"} End Sub @@ -59,7 +59,7 @@ Public Class F_ModSplit ' Split VehStrList = VehStr.Split(SplitArray.ToArray, StringSplitOptions.RemoveEmptyEntries) - ' Zu Int32 convertieren + ' Convert to Int32 ReDim iVehList(UBound(VehStrList)) For x = 0 To UBound(VehStrList) If IsNumeric(VehStrList(x)) Then @@ -73,7 +73,7 @@ Public Class F_ModSplit LastFile = sMODpath - 'Ende + 'End Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() End Sub diff --git a/VECTO/GUI/F_Options.vb b/VECTO/GUI/F_Options.vb index 67b240ee9f7a4087ea3f33643ae72fe9d5d89f59..abd6677a8c8f16a4fa40c3538a6e2fca7b0538d5 100644 --- a/VECTO/GUI/F_Options.vb +++ b/VECTO/GUI/F_Options.vb @@ -2,7 +2,7 @@ Dim WD As String = " " - 'Initialisiere - Lade Config + 'Initialize - load config Private Sub F03_Options_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load LoadConfig() End Sub @@ -11,7 +11,7 @@ If Not DEV.Options("TestOptions").BoolVal Then Me.TabControl1.Controls.Remove(TabPgTest) End Sub - 'Config laden + 'Load Config Private Sub LoadConfig() Me.TextBoxWorDir.Text = Cfg.WorkDPath WD = Cfg.WorkDPath @@ -58,7 +58,7 @@ Me.Close() End Sub - 'Optionen----------------------------------- + 'Options----------------------------------- Private Sub ButtonWorDir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonWorDir.Click If fbWorkDir.OpenDialog(Me.TextBoxWorDir.Text) Then Me.TextBoxWorDir.Text = fbWorkDir.Files(0) diff --git a/VECTO/GUI/F_TEM_Creator.vb b/VECTO/GUI/F_TEM_Creator.vb index 8cd23162ec5ad71453cd3a683e39a61ccdc1c300..46ccb86cee713111e7153a4b70af5d57169b5638 100644 --- a/VECTO/GUI/F_TEM_Creator.vb +++ b/VECTO/GUI/F_TEM_Creator.vb @@ -1,6 +1,6 @@ Public Class F_TEM_Creator - 'Initialisierung + 'Initialization Private Sub F04_TEM_Creator_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.TextBoxTemp.Text = "20" Me.ComboBoxDrCyc.Items.Add("Average") diff --git a/VECTO/GUI/F_VEH.vb b/VECTO/GUI/F_VEH.vb index d56f05aea06a1d65a6c1ed4bd8829fa5381863d0..193fe76df3baf8bfa18e2e442e5fb57a5307632b 100644 --- a/VECTO/GUI/F_VEH.vb +++ b/VECTO/GUI/F_VEH.vb @@ -96,7 +96,7 @@ Public Class F_VEH #Region "Speichern/Laden/Neue Datei" - 'Speichern oder Speichern als Function = true wenn Datei gespeichert + 'Save or Save As function = true if file is saved Private Function SaveOrSaveAs(ByVal SaveAs As Boolean) As Boolean If VehFile = "" Or SaveAs Then If fbVEH.SaveDialog(VehFile) Then @@ -108,7 +108,7 @@ Public Class F_VEH Return saveVEH(VehFile) End Function - 'Neue VEH + 'New VEH Private Sub newVEH() Dim i As Integer Dim lvi As ListViewItem @@ -161,7 +161,7 @@ Public Class F_VEH End Sub - 'VEH öffnen + 'Open VEH Sub openVEH(ByVal file As String) Dim i As Int16 Dim VEH0 As cVEH @@ -231,7 +231,7 @@ Public Class F_VEH End Sub - 'VEH speichern + 'Save VEH Private Function saveVEH(ByVal file As String) As Boolean Dim VEH0 As cVEH @@ -402,7 +402,7 @@ Public Class F_VEH #Region "Change Events" - 'Change Status ändern + 'Change Status ändern |@@| Change Status change Private Sub Change() If Not Changed Then Me.LbStatus.Text = "Unsaved changes in current file" @@ -410,7 +410,7 @@ Public Class F_VEH End If End Sub - ' "Save changes ?" ...liefert True wenn User Vorgang abbricht + ' "Save changes? "... Returns True if user aborts Private Function ChangeCheckCancel() As Boolean If Changed Then diff --git a/VECTO/GUI/GUI_Subs.vb b/VECTO/GUI/GUI_Subs.vb index 02990573cf4d2b05a929cdbefe726299bb4c9db1..8551ce19a64c1457fe8f580d474dfebde7df285f 100644 --- a/VECTO/GUI/GUI_Subs.vb +++ b/VECTO/GUI/GUI_Subs.vb @@ -30,7 +30,7 @@ PHEMworker.ReportProgress(0, WorkProg) End Sub - 'Job-Status => Jobliste Status-Spalte + 'Job status => Job-list Status-column Public Sub WorkerJobStatus(ByVal JobIndex As Int16, ByVal Msg As String, ByVal Status As tJobStatus) Dim WorkProg As cWorkProg WorkProg = New cWorkProg(tWorkMsgType.JobStatus) @@ -40,7 +40,7 @@ PHEMworker.ReportProgress(0, WorkProg) End Sub - 'Zyklus-Status => Zyklusliste Status-Spalte + 'Cycle status => Cycle-list Status-column Public Sub WorkerCycleStatus(ByVal CycleIndex As Int16, ByVal Msg As String) Dim WorkProg As cWorkProg WorkProg = New cWorkProg(tWorkMsgType.CycleStatus) @@ -49,20 +49,20 @@ PHEMworker.ReportProgress(0, WorkProg) End Sub - 'Worker Progress => Progbar (ProgBarSec Update wenn ProgSec > -1; ProgBarSec-Reset bei ProgSec = 0) + 'Worker Progress => Progbar (ProgBarSec Update when ProgSec > -1; ProgBarSec-Reset at ProgSec = 0) Public Sub WorkerProg(ByVal Prog As Int16, Optional ByVal ProgSec As Integer = -1) Dim WorkProg As New cWorkProg(tWorkMsgType.ProgBars) WorkProg.ProgSec = ProgSec PHEMworker.ReportProgress(Prog, WorkProg) End Sub - 'Progbar auf Continuous setzen + 'Progbar set to Continuous Public Sub WorkerProgInit() Dim WorkProg As New cWorkProg(tWorkMsgType.InitProgBar) PHEMworker.ReportProgress(0, WorkProg) End Sub - 'Abbruch + 'Abort Public Sub WorkerAbort() Dim WorkProg As New cWorkProg(tWorkMsgType.Abort) PHEMworker.ReportProgress(0, WorkProg) @@ -74,24 +74,24 @@ #Region "GUI Steuerung durch GUI direkt - NICHT über BG-Worker" - 'Status Message direkt an GUI - darf nicht durch den Backgroundworker geschehen! + 'Status message directly to GUI - can not be called by the BackgroundWorker! Public Sub GUImsg(ByVal ID As tMsgID, ByVal Msg As String) F_MAINForm.MSGtoForm(ID, Msg, "", "") End Sub - 'Statusbar - Aufruf durch WorkerMSG oder direkt über Form, NIEMALS über Worker + 'Statusbar - called either by WorkerMSG or directly by the form, NEVER by the Worker Public Sub Status(ByVal txt As String) F_MAINForm.ToolStripLbStatus.Text = txt End Sub - 'Status Form zurück setzen - Aufruf NUR durch Events, NIEMALS über Worker + 'Status form reset - ONLY called by Events, NEVER by Worker Public Sub ClearMSG() F_MAINForm.LvMsg.Items.Clear() End Sub #End Region - 'Klasse zum Ãœbergeben von Nachrichten vom Backgroundworker + 'Class used to pass Messages from BackgroundWorker Public Class cWorkProg Private MyTarget As tWorkMsgType Private MyID As tMsgID @@ -173,7 +173,7 @@ '----------------------------------------------------------------------- - 'Falls String nicht Zahl dann Null + 'If string not a number, then Zero Public Function fTextboxToNumString(ByVal txt As String) As String If Not IsNumeric(txt) Then 'GUImsg(tMsgID.Err, "'" & txt & "' is no numeric expression!") @@ -199,7 +199,7 @@ End If End Function - 'Datei in Excel öffnen + 'Open File in Excel Public Function FileOpen(ByVal file As String) As Boolean Dim PSI As New ProcessStartInfo PSI.FileName = ChrW(34) & Cfg.OpenCmd & ChrW(34) @@ -213,37 +213,37 @@ End Function #Region "Dateipfad Funktionen" - 'WorkDir oder MainDir einfügen falls kein Pfad angegeben. Spezial-Ordner einfügen + 'When no path is specified, then insert either WorkDir or MainDir Special-folders Public Function fFileRepl(ByVal file As String, Optional ByVal MainDir As String = "") As String Dim ReplPath As String - 'Pfad trimmen + 'Trim Path file = Trim(file) - 'Falls leere Datei => Abbruch + 'If empty file => Abort If file = "" Then Return "" - 'sKeys ersetzen + 'Replace sKeys file = Microsoft.VisualBasic.Strings.Replace(file, sKey.DefVehPath & "\", MyAppPath & "Default Vehicles\", 1, -1, CompareMethod.Text) file = Microsoft.VisualBasic.Strings.Replace(file, sKey.WorkDir & "\", Cfg.WorkDPath, 1, -1, CompareMethod.Text) file = Microsoft.VisualBasic.Strings.Replace(file, sKey.HomePath & "\", MyAppPath, 1, -1, CompareMethod.Text) - 'Replace - Ordner bestimmen + 'Replace - Determine folder If MainDir = "" Then ReplPath = Cfg.WorkDPath Else ReplPath = MainDir End If - ' "..\" => Eine Ordner-Ebene hoch + ' "..\" => One folder-level up Do While ReplPath.Length > 0 AndAlso Left(file, 3) = "..\" ReplPath = fPathUp(ReplPath) file = file.Substring(3) Loop - 'Pfad ergänzen falls nicht vorhanden + 'Supplement Path, if not available If fPATH(file) = "" Then Return ReplPath & file @@ -254,7 +254,7 @@ End Function - 'Pfad eine Ebene nach oben "C:\temp\ordner1\" >> "C:\temp\" + 'Path one-level-up "C:\temp\ordner1\" >> "C:\temp\" Private Function fPathUp(ByVal Pfad As String) As String Dim x As Int16 @@ -268,7 +268,7 @@ End Function - 'Dateiname ohne Pfad "C:\temp\TEST.txt" >> "TEST.txt" oder "TEST" + 'File name without the path "C:\temp\TEST.txt" >> "TEST.txt" oder "TEST" Public Function fFILE(ByVal Pfad As String, ByVal MitEndung As Boolean) As String Dim x As Int16 x = Pfad.LastIndexOf("\") + 1 @@ -280,12 +280,12 @@ Return Pfad End Function - 'Dateiname ohne Extension "C:\temp\TEST.txt" >> "C:\temp\TEST" + 'Filename without extension "C:\temp\TEST.txt" >> "C:\temp\TEST" Public Function fFileWoExt(ByVal Path As String) As String Return fPATH(Path) & fFILE(Path, False) End Function - 'Dateiname ohne Pfad falls Pfad = WorkDir oder MainDir + 'Filename without path if Path = WorkDir or MainDir Public Function fFileWoDir(ByVal file As String, Optional ByVal MainDir As String = "") As String Dim path As String @@ -302,7 +302,7 @@ End Function - 'Pfad allein "C:\temp\TEST.txt" >> "C:\temp\" + 'Path alone "C:\temp\TEST.txt" >> "C:\temp\" ' "TEST.txt" >> "" Public Function fPATH(ByVal Pfad As String) As String Dim x As Int16 @@ -311,7 +311,7 @@ Return Microsoft.VisualBasic.Left(Pfad, x + 1) End Function - 'Endung allein "C:\temp\TEST.txt" >> ".txt" + 'Extension alone "C:\temp\TEST.txt" >> ".txt" Public Function fEXT(ByVal Pfad As String) As String Dim x As Int16 x = Pfad.LastIndexOf(".") diff --git a/VECTO/Input Files/cAux.vb b/VECTO/Input Files/cAux.vb index a5c62cc0a94940759246f866eb1819d4c9ed8d60..d44451256870ad2c79a8d20f1939a1a97bf378b1 100644 --- a/VECTO/Input Files/cAux.vb +++ b/VECTO/Input Files/cAux.vb @@ -18,13 +18,13 @@ MsgSrc = "Main/ReadInp/Aux" - 'Abbruch wenn's Datei nicht gibt + 'Abort if there's no file If Filepath = "" OrElse Not IO.File.Exists(Filepath) Then WorkerMsg(tMsgID.Err, "Aux file not found (" & Filepath & ") !", MsgSrc) Return False End If - 'Datei öffnen + 'Open file file = New cFile_V3 If Not file.OpenRead(Filepath) Then file = Nothing @@ -32,7 +32,7 @@ Return False End If - 'Kennfeld zurück setzen + 'Map reset EffMap = New cDelaunayMap If file.EndOfFile Then GoTo lbFileEndErr @@ -57,9 +57,9 @@ 'Efficiency Map If file.EndOfFile Then GoTo lbFileEndErr - 'Spalte 1 = Auxiliary speed [rpm] => X-Achse - 'Spalte 2 = Mechanical power [kW] => Z-Achse (!) - 'Spalte 3 = Output power [kW] => Y-Achse (!) + 'Column 1 = Auxiliary speed [rpm] => X-axis + 'Column 2 = Mechanical power [kW] => Z-Axis (!) + 'Column 3 = Output power [kW] => Y-Axis (!) Do While Not file.EndOfFile line = file.ReadLine diff --git a/VECTO/Input Files/cDRI.vb b/VECTO/Input Files/cDRI.vb index d3ed14358be40c79cf9b78bda4b1a7babbc53a08..513b40e548c29710a5eb817206c8020698e122d7 100644 --- a/VECTO/Input Files/cDRI.vb +++ b/VECTO/Input Files/cDRI.vb @@ -27,16 +27,16 @@ Public Class cDRI Public EmComponents As Dictionary(Of String, cEmComp) Public EmDefRef As Dictionary(Of tMapComp, cEmComp) - 'Vorgabe für EXS + 'Defaults(Vorgabe) for EXS Private bExsCompDef As Boolean Public ExsComponents As Dictionary(Of tExsComp, Dictionary(Of Short, List(Of Single))) - 'Parameter für KF-Erstellung + 'Parameters for KF-creation Public MapUnitsNormed As Dictionary(Of String, Boolean) Public MapPfak As Dictionary(Of String, tIntpPeCorMode) Private bCreateMapParDef As Boolean - 'Vorgabe für AUX + 'Defaults(Vorgabe) for AUX Private bAuxDef As Boolean Public AuxComponents As Dictionary(Of String, List(Of Single)) @@ -85,7 +85,7 @@ Public Class cDRI Vvorg = True GradVorg = True Values = New Dictionary(Of tDriComp, List(Of Double)) - 'Values.Add(tDriComp.t, New List(Of Single)) '<= brauchen wir erst wenn bei ADVANCE > 1Hz unterstützt wird + 'Values.Add(tDriComp.t, New List (Of Single)) '<= Needed only if ADVANCE > 1 Hz supported Values.Add(tDriComp.V, New List(Of Double)) Values.Add(tDriComp.Grad, New List(Of Double)) End Sub @@ -123,16 +123,16 @@ Public Class cDRI 'Reset ResetMe() - 'Abbruch wenn's Datei nicht gibt + 'Abort if there's no file If sFilePath = "" OrElse Not IO.File.Exists(sFilePath) Then WorkerMsg(tMsgID.Err, "Cycle file not found (" & sFilePath & ") !", MsgSrc) Return False End If 'EmComp Init - '...jetzt in New() + '...now in New() - 'Datei öffnen + 'Open file file = New cFile_V3 If Not file.OpenRead(sFilePath) Then WorkerMsg(tMsgID.Err, "Failed to open file (" & sFilePath & ") !", MsgSrc) @@ -154,33 +154,33 @@ Public Class cDRI DRIcheck.Add(tDriComp.StopTime, False) ''*** - ''*** Erste Zeile: Version + ''*** First line: Version 'line = file.ReadLine 'txt = Trim(UCase(line(0))) 'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then ' ' "V" entfernen => Zahl bleibt übrig ' txt = txt.Replace("V", "") ' If Not IsNumeric(txt) Then - ' 'Falls Version ungültig: Abbruch + ' 'If invalid Version: Abort ' WorkerMsg(tMsgID.Err, "File Version invalid!", MsgSrc) ' GoTo lbEr ' Else - ' 'Version festgelegt + ' 'Version specified ' FileVersion = CInt(txt) ' End If 'Else - ' 'Falls keine Versionsangabe: Altes Format + ' 'If no version information: Old Format ' file.Close() ' Return ReadOldFormat() 'End If - ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version + ''Version Check: Abort if input file format is newer than PHEM-version 'If FileVersion > FormatVersion Then ' WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc) ' GoTo lbEr 'End If - ''Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben + ''Column 2: added option "+" = parameter for KF-creation 'If UBound(line) > 0 Then ' If Trim(line(1)) = "+" Then ' bCreateMapParDef = True @@ -197,17 +197,17 @@ Public Class cDRI Values = New Dictionary(Of tDriComp, List(Of Double)) '*** - '*** Zweite Zeile: Namen/Identifizierung der Komponenten + '*** Second row: Name/Identification of the Components line = file.ReadLine - 'Spaltenanzahl/Komponenten checken + 'Check Number of Columns/Components s1 = UBound(line) For s = 0 To s1 Comp = fDriComp(line(s)) - 'Falls DRIcomp = Undefined dann wirds als EXS-Comp oder als Emission für KF-Erstellung / Eng-Analysis verwendet + '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 If Comp = tDriComp.Undefined Then ExsComp = fExsComp(line(s)) @@ -242,7 +242,7 @@ Public Class cDRI bEmCompDef = True - 'ERROR wenn Komponente in spitzen Klammern aber nicht bekannt + 'ERROR when component in angle brackets is unknown If MapComp = tMapComp.Undefined And Em0.IDstring.Length > 1 Then If Left(Em0.IDstring, 1) = "<" And Right(Em0.IDstring, 1) = ">" Then WorkerMsg(tMsgID.Err, "'" & Em0.Name & "' is no valid Default Map, Cycle or EXS Component!", MsgSrc) @@ -272,13 +272,13 @@ Public Class cDRI Else - 'Falls erste EXS-Spalte dann Dictionary erstellen + 'if first EXS-column, then create Dictionary If Not bExsCompDef Then ExsSpalten = New Dictionary(Of Integer, List(Of Single)) ExsComponents = New Dictionary(Of tExsComp, Dictionary(Of Short, List(Of Single))) End If - 'Falls EXS-Componenten noch nicht in Dictionary dann erstellen + 'If EXS-Component not yet in Dictionary, create If Not ExsComponents.ContainsKey(ExsComp) Then ExsComponents.Add(ExsComp, New Dictionary(Of Short, List(Of Single))) txt = fCompSubStr(line(s)) @@ -290,7 +290,7 @@ Public Class cDRI ModNr = CShort(txt) End If - 'Check ob ExsComp/Modul-Kombination schon vorhanden => ERROR + 'Check whether ExsComp/Module-combination already exists => ERROR If ExsComponents(ExsComp).ContainsKey(ModNr) Then WorkerMsg(tMsgID.Err, "Component '" & line(s) & "' already defined! Column " & s + 1, MsgSrc) GoTo lbEr @@ -318,7 +318,7 @@ Public Class cDRI Next - 'Gvorg / Nvorg setzen: + 'Set Gvorg/Nvorg: Tvorg = DRIcheck(tDriComp.t) Vvorg = DRIcheck(tDriComp.V) Svorg = DRIcheck(tDriComp.s) @@ -330,10 +330,10 @@ Public Class cDRI VairVorg = DRIcheck(tDriComp.VairVres) And DRIcheck(tDriComp.VairBeta) '*** - '*** Dritte Zeile: Einheiten/Normierung - 'VECTO: nix einlesen. Fixe Units (line = file.ReadLine) + '*** Third row: Units/Normalization + 'VECTO: nothing read. Fixed Units (line = file.ReadLine) - 'Normierungs-Unterstützte DRI-Komponenten + 'Normalization-compatible DRI-components If DRIcheck(tDriComp.Pe) Then 'PeNormed = (UCase(Trim(line(Spalten(tDriComp.Pe)))) = sKey.Normed) PeNormed = False @@ -349,17 +349,17 @@ Public Class cDRI PaddNormed = False End If - 'MAP-Komponenten VECTO: Immer [g/h]! + 'VECTO MAP-components: Always [g/h]! For Each Em0 In EmComponents.Values - ''Unit in String für weitere Checks speichern + ''Store Unit in String for further checks 'txt = Trim(line(Em0.Col)) - ''Klammern entfernen + ''Remove brackets 'txt = txt.Replace("[", "") 'txt = txt.Replace("]", "") - ''Normierung und Unit festlegen + ''Set Scaling and Unit 'If txt.Contains("/") Then @@ -390,22 +390,22 @@ Public Class cDRI Next '*** - '*** Zeile 4, 5: (optional, wenn oben "+"): Einstellungen für KF-Erstellung + '*** Line 4, 5: (optional when "+"): Settings for KF-creation - 'Falls "+" aktiviert + 'If "+" enabled If bCreateMapParDef Then - 'Instanzen erstellen + 'Creating instances MapUnitsNormed = New Dictionary(Of String, Boolean) MapPfak = New Dictionary(Of String, tIntpPeCorMode) - '1. Option "Kennfeld normieren durch Pnenn" + '1. Option "Map normalized by Pnom" line = file.ReadLine For Each Em0 In EmComponents.Values MapUnitsNormed.Add(Em0.IDstring, CBool(line(Em0.Col))) Next - '2. Option "Pfak anwenden" + '2. Option "PfAK apply" line = file.ReadLine For Each Em0 In EmComponents.Values @@ -426,7 +426,7 @@ Public Class cDRI End If '*** - '*** Ab 4.Zeile bzw. Ab 6.Zeile: Werte (derzeit keine unterschiedlichen Einheiten/Normierungen unterstützt) + '*** 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) Try Do While Not file.EndOfFile tDim += 1 'wird in ResetMe zurück gesetzt @@ -487,7 +487,7 @@ lbEr: MsgSrc = "Main/ReadInp/DRI" - 'Datei öffnen + 'Open file File = New cFile_V3 If Not File.OpenRead(sFilePath, ",", True, True) Then File = Nothing @@ -549,7 +549,7 @@ lbEr: File.Close() - 'Nvorg / Gvorg wird in ResetMe zurück gesetzt + 'ResetMe resets Nvorg / Gvorg If GNok Then @@ -604,7 +604,7 @@ lbEr: Dim s As Integer Dim L As List(Of Double) - 'Geschw. umrechnen in m/s + 'Convert Speed to m/s If Vvorg Then For s = 0 To tDim Values(tDriComp.V)(s) /= 3.6 @@ -612,7 +612,7 @@ lbEr: Next End If - 'Normieren, falls notwendig + 'Normalize, if necessary If Nvorg Then If Not nNormed Then L = Values(tDriComp.nn) @@ -622,7 +622,7 @@ lbEr: End If End If - 'Padd entnormieren, falls notwendig + 'Padd unnormalised, if neccesary If PaddVorg Then If PaddNormed Then L = Values(tDriComp.Padd) @@ -632,7 +632,7 @@ lbEr: End If End If - 'Pe normieren, falls notwendig + 'Pe normalize, if necessary If Pvorg Then If Not PeNormed Then L = Values(tDriComp.Pe) @@ -644,7 +644,7 @@ lbEr: L = Nothing - '!!!!!!!! Emissionen werden nur in x/h oder x akzeptiert (siehe ReadFile) !!!!!!!! + '!!!!!!!! Emissions are only accepted in x/h or x (see ReadFile)!!!!!!!! End Sub @@ -756,7 +756,7 @@ lbEr: Next End If - '*********************************** Verzögerung limitieren ******************************** + '*********************************** Deceleration(Verzögerung) limit ******************************** For i = tDim To 1 Step -1 ds = Dist(i) - Dist(i - 1) @@ -783,7 +783,7 @@ lbEr: Next - '*********************************** Zeitreihe erstellen '*********************************** + '*********************************** Create Time-sequence '*********************************** t = 0 s = Dist(0) @@ -888,7 +888,7 @@ lbEr: Next - '*********************************** Umrechnen in 1Hz '*********************************** + '*********************************** Convert to 1Hz '*********************************** i = 0 j = -1 tDim = Time.Count - 1 @@ -1006,7 +1006,7 @@ lbEr: fTime = Values(tDriComp.t) - 'Check ob Zeit nicht rückwärts + 'Check whether Time is not reversed For z = 1 To tDim If fTime(z) < fTime(z - 1) Then WorkerMsg(tMsgID.Err, "Time step invalid! t(" & z - 1 & ") = " & fTime(z - 1) & "[s], t(" & z & ") = " & fTime(z) & "[s]", MsgSrc) @@ -1014,11 +1014,11 @@ lbEr: End If Next - 'Zeitgrenzen definieren + 'Define Time-range t0 = CInt(Math.Round(fTime(0), 0, MidpointRounding.AwayFromZero)) t1 = fTime(tDim) - 'Ausgabe-, Summen- und Anz- Dictionaries erstellen + 'Create Output, Total and Num-of-Dictionaries NewValues = New Dictionary(Of tDriComp, List(Of Double)) Summe = New Dictionary(Of tDriComp, Double) @@ -1057,7 +1057,7 @@ lbEr: Next End If - 'Startwerte + 'Start-values tMin = fTime(0) tMid = CInt(tMin) tMax = tMid + 0.5 @@ -1074,18 +1074,18 @@ lbEr: For z = 0 To tDim - 'Nächster Zeitschritt + 'Next Time-step Time = fTime(z) lb10: - 'Falls Zeitschritt > tMax: + 'If Time-step > tMax: If Time >= tMax Or z = tDim Then - 'Sekunde abschließen + 'Conclude Second NewValues(tDriComp.t).Add(tMid) - 'Falls keine Werte in Summe: Interpolieren + 'If no values ​​in Sum: Interpolate If Anz = 0 Then For Each KVd In Summe @@ -1137,7 +1137,7 @@ lb10: End If Else - 'Falls nur ein Wert: Inter- / Extrapolieren + 'If only one Value: Inter- /Extrapolate If Anz = 1 Then If z < 2 OrElse fTime(z - 1) < tMid Then @@ -1220,18 +1220,18 @@ lb10: If Not Finish Then - 'Neuen Bereich festlegen + 'Set New Area(Bereich) tMid = tMid + 1 tMin = tMid - 0.5 tMax = tMid + 0.5 - 'Check ob letzte Sekunde + 'Check whether last second If tMax > t1 Then tMax = t1 Finish = True End If - 'Neue Summe/Anz beginnen + 'New Sum /Num no start For Each KV In Values If KV.Key <> tDriComp.t Then Summe(KV.Key) = 0 Next @@ -1288,7 +1288,7 @@ lb10: Next - 'Neue Felder übernehmen + 'Accept New fields Values = NewValues tDim = Values(tDriComp.t).Count - 1 diff --git a/VECTO/Input Files/cEMO.vb b/VECTO/Input Files/cEMO.vb index 87994dcb04f6e55657629f99cce9e10a773d4a4a..be6636f6e3f8c07ef74e3aa0787d2bc0f773cc0f 100644 --- a/VECTO/Input Files/cEMO.vb +++ b/VECTO/Input Files/cEMO.vb @@ -37,21 +37,21 @@ Public Class cEMO EtaKF = New cCustomMap - 'Abbruch wenn's Datei nicht gibt + 'Abort if there's no file If sFilePath = "" Then Return False If Not IO.File.Exists(sFilePath) Then Return False - 'Datei öffnen + 'Open file file = New cFile_V3 If Not file.OpenRead(sFilePath) Then file = Nothing Return False End If - 'Kennfeld-Konfig + 'Map-Config EtaKF.Init() - 'FLD und MAP einlesen + 'Read FLD and MAP FLDdone = False Do While Not file.EndOfFile line = file.ReadLine @@ -73,18 +73,18 @@ Public Class cEMO file.Close() - 'Kennfeld normieren + 'Normalize Map EtaKF.Norm() Return True End Function - 'Ãœbergibt aktuell mögliche Antriebsleistung für geg. Drehzahl + 'Returns the maximum available Drivetrain-power for given Revolutions Public Function PeMax(ByVal nU As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If lnU(0) >= nU Then If lnU(0) > nU Then MODdata.ModErrors.FLDextrapol = "EMO: nU= " & nU i = 1 @@ -96,7 +96,7 @@ Public Class cEMO i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If lnU(i) < nU Then MODdata.ModErrors.FLDextrapol = "EMO: nU= " & nU End If @@ -111,11 +111,11 @@ lbInt: End Function - 'Ãœbergibt aktuell mögliche Generatorleistung für geg. Drehzahl + 'Returns the maximum available Generator-power for the given Revolutions Public Function PeMin(ByVal nU As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If lnU(0) >= nU Then If lnU(0) > nU Then MODdata.ModErrors.FLDextrapol = "EMO: nU= " & nU i = 1 @@ -127,7 +127,7 @@ lbInt: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If lnU(i) < nU Then MODdata.ModErrors.FLDextrapol = "EMO: nU= " & nU End If diff --git a/VECTO/Input Files/cFLD.vb b/VECTO/Input Files/cFLD.vb index 7d33f8058f74221f94ec4995e802faae2e069ce5..ececd0ba77970e2bef3d599968551b418dd7f1d5 100644 --- a/VECTO/Input Files/cFLD.vb +++ b/VECTO/Input Files/cFLD.vb @@ -64,13 +64,13 @@ Public Class cFLD 'Reset ResetMe() - 'Abbruch wenn's Datei nicht gibt + 'Stop if there's no file If sFilePath = "" OrElse Not IO.File.Exists(sFilePath) Then WorkerMsg(tMsgID.Err, "FLD file '" & sFilePath & "' not found!", MsgSrc) Return False End If - 'Datei öffnen + 'Open file file = New cFile_V3 If Not file.OpenRead(sFilePath) Then WorkerMsg(tMsgID.Err, "Failed to open file (" & sFilePath & ") !", MsgSrc) @@ -78,7 +78,7 @@ Public Class cFLD Return False End If - 'Listen initialisieren + 'Initialize Lists LPfull = New System.Collections.Generic.List(Of Single) LPdrag = New System.Collections.Generic.List(Of Single) Lnn = New System.Collections.Generic.List(Of Single) @@ -88,28 +88,28 @@ Public Class cFLD sEmDrag = New Dictionary(Of String, Integer) ''*** - ''*** Erste Zeile: Version + ''*** First line: Version 'line = file.ReadLine 'txt = Trim(UCase(line(0))) 'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then ' ' "V" entfernen => Zahl bleibt übrig ' txt = txt.Replace("V", "") ' If Not IsNumeric(txt) Then - ' 'Falls Version ungültig: Abbruch + ' 'If invalid version: Abort ' WorkerMsg(tMsgID.Err, "File Version invalid!", MsgSrc) ' GoTo lbEr ' Else - ' 'Version festgelegt + ' 'Set Version ' FileVersion = CInt(txt) ' End If 'Else - ' 'Falls keine Versionsangabe: Altes Format + ' 'If no version information: Old format ' file.Close() ' Return ReadOldFormat() 'End If - ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version + ''Version Check: Abort if input file format is newer than PHEM-version 'If FileVersion > FormatVersion Then ' WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc) ' GoTo lbEr @@ -118,13 +118,13 @@ Public Class cFLD '*** - '*** Zweite Zeile: Namen/Identifizierung der Komponenten (Schlepp-Emissionen f. KF-Erstellung) + '*** Second Line: Name/Identification of components (Drag-Emissions create-KF) 'line = file.ReadLine - ''Spaltenanzahl checken + ''Column count check, 's1 = UBound(line) - ''Abbruch falls weniger als 3 Spalten + ''Abort if less than 3 columns 'If s1 < 3 Then ' WorkerMsg(tMsgID.Err, "Format invalid!", MsgSrc) ' GoTo lbEr @@ -165,16 +165,16 @@ Public Class cFLD ' Next 'End If - 'VECTO: Keine Header/Unit-Spalte. Immer PT1! + 'VECTO: No Header/Unit column. Always PT1! s1 = 3 sPT1 = 3 bEmDef = False '*** - '*** Dritte Zeile: Normierung/Einheit + '*** Third Line: Normalized/Measured 'line = file.ReadLine - ''Abbruch falls weniger Spalten als in zweiter Zeile + ''Abort when fewer Columns than in the second Line 'If UBound(line) < s1 Then ' WorkerMsg(tMsgID.Err, "Format invalid!", MsgSrc) ' GoTo lbEr @@ -186,7 +186,7 @@ Public Class cFLD 'If Not nNormed Then ' Select Case Trim(UCase(line(0))) ' Case "[U/MIN]", "RPM", "[1/MIN]", "[MIN^-1]" - ' 'Alles okay + ' 'Everything is okay ' Case Else ' WorkerMsg(tMsgID.Err, "Engine Speed Unit '" & line(0) & "' unknown! '[U/min]' expected.", MsgSrc) ' End Select @@ -228,17 +228,17 @@ Public Class cFLD 'End If - ''Zusatzkomponenten + ''Additional Components 'If bEmDef Then ' For Each EmKV In sEmDrag ' txt = line(EmKV.Value) - ' 'Klammern entfernen + ' 'Remove brackets ' txt = txt.Replace("[", "") ' txt = txt.Replace("]", "") - ' 'Normierung und Unit festlegen + ' 'Set Scaling and Unit ' If txt.Contains("/") Then ' Select Case UCase(Right(txt, txt.Length - txt.IndexOf("/") - 1)) ' Case "H" @@ -257,12 +257,12 @@ Public Class cFLD 'End If - 'Ab Zeile 4: Werte + 'From Line 4: Values Try Do While Not file.EndOfFile - 'Zeile einlesen + 'Read Line line = file.ReadLine 'VECTO: M => Pe @@ -273,7 +273,7 @@ Public Class cFLD LPdrag.Add(nMtoPe(nU, CDbl(line(2)))) If PtargetDef Then LPtarget.Add(CSng(line(sTarget))) - 'Falls PT1 nicht vorgegeben wird Defaultwert verwendet (siehe oben) + 'If PT1 not given, use default value (see above) If sPT1 > -1 Then PT1 = CSng(line(sPT1)) @@ -293,7 +293,7 @@ Public Class cFLD Next End If - 'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt) + 'Line-counter up (was reset in ResetMe) iDim += 1 Loop @@ -306,13 +306,13 @@ Public Class cFLD End Try - 'Datei schließen + 'Close file file.Close() Return True - 'ERROR-Label für sauberen Abbruch + 'ERROR-label for clean Abort lbEr: file.Close() file = Nothing @@ -325,7 +325,7 @@ lbEr: Dim File As cFile_V3 Dim line As String() - 'Datei öffnen + 'Open file File = New cFile_V3 If Not File.OpenRead(sFilePath, ",", True, True) Then File = Nothing @@ -345,12 +345,12 @@ lbEr: LPT1.Add(0) - 'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt) + 'Line counter up (was reset in ResetMe) iDim += 1 Loop - 'Datei schließen + 'Close file File.Close() Return True @@ -368,35 +368,35 @@ lbEr: nleerl = VEH.nLeerl nnenn = VEH.nNenn - 'Drehzahl normieren + 'Normalized Revolutions If Not nNormed Then For i = 0 To iDim Lnn(i) = (Lnn(i) - nleerl) / (nnenn - nleerl) Next End If - 'Leistung normieren + 'Normalized Power If Not PfullNormed Then For i = 0 To iDim LPfull(i) /= Pnenn Next End If - 'Leistung normieren + 'Normalized Power If Not PdragNormed Then For i = 0 To iDim LPdrag(i) /= Pnenn Next End If - 'Pe-Target normieren + 'Normalized Pe-Target If PtargetDef AndAlso Not PtargetNormed Then For i = 0 To iDim LPtarget(i) /= Pnenn Next End If - 'Em ent-normieren + 'Em ent-normalize If bEmDef Then For Each EmKV In EmDragNormed If EmKV.Value Then @@ -412,7 +412,7 @@ lbEr: Public Function Pdrag(ByVal nnorm As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If Lnn(0) >= nnorm Then If Lnn(0) > nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" i = 1 @@ -424,7 +424,7 @@ lbEr: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If Lnn(i) < nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" End If @@ -441,7 +441,7 @@ lbInt: Dim PfullStat As Single Dim PT1 As Single - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If Lnn(0) >= nnorm Then If Lnn(0) > nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" i = 1 @@ -453,7 +453,7 @@ lbInt: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If Lnn(i) < nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" End If @@ -463,7 +463,7 @@ lbInt: PfullStat = (nnorm - Lnn(i - 1)) * (LPfull(i) - LPfull(i - 1)) / (Lnn(i) - Lnn(i - 1)) + LPfull(i - 1) PT1 = (nnorm - Lnn(i - 1)) * (LPT1(i) - LPT1(i - 1)) / (Lnn(i) - Lnn(i - 1)) + LPT1(i - 1) - 'Dynamische Volllast + 'Dynamic Full-load Return Math.Min(VEH.Pnenn * (1 / (PT1 + 1)) * (PfullStat + PT1 * LastPenorm), PfullStat * VEH.Pnenn) End Function @@ -472,7 +472,7 @@ lbInt: Public Function Pfull(ByVal nnorm As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If Lnn(0) >= nnorm Then If Lnn(0) > nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" i = 1 @@ -484,7 +484,7 @@ lbInt: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If Lnn(i) < nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" End If @@ -497,7 +497,7 @@ lbInt: Public Function Ptarget(ByVal nnorm As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If Lnn(0) >= nnorm Then If Lnn(0) > nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" i = 1 @@ -509,7 +509,7 @@ lbInt: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If Lnn(i) < nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" End If @@ -527,7 +527,7 @@ lbInt: EmL = EmDragD(EmComp) - 'Extrapolation für x < x(1) + 'Extrapolation for x <x(1) If Lnn(0) >= nnorm Then If Lnn(0) > nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" i = 1 @@ -539,7 +539,7 @@ lbInt: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If Lnn(i) < nnorm Then MODdata.ModErrors.FLDextrapol = "n= " & nnormTonU(nnorm) & " [U/min]" End If diff --git a/VECTO/Input Files/cGEN.vb b/VECTO/Input Files/cGEN.vb index 162ae14ea0d4e904e723236a110856ccbc4e5923..858b492d96ca696690edef5f85863be2c4c57353 100644 --- a/VECTO/Input Files/cGEN.vb +++ b/VECTO/Input Files/cGEN.vb @@ -9,7 +9,7 @@ Public Class cGEN Private MyPath As String - 'Modus + 'Mode Public VehMode As tVehMode Public EngAnalysis As Boolean Public CreateMap As Boolean @@ -151,7 +151,7 @@ Public Class cGEN End If ''*** - ''*** Erste Zeile: Version + ''*** First line: Version 'line = file.ReadLine 'txt = Trim(UCase(line(0))) 'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then @@ -169,15 +169,15 @@ Public Class cGEN ' Return ReadOldFormat() 'End If - ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version + ''Version Check: abort if Input-file's format is newer than PHEM-version 'If FileVersion > FormatVersion Then ' WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc) ' GoTo lbEr 'End If - '**** GEN Datei einlesen **** + '**** GEN Datei einlesen **** |@@| Read GEN file **** - 'Allgemein + 'Allgemein |@@| Common 'boPKWja = CBool(file.ReadLine(0)) 'bodynkorja = CBool(file.ReadLine(0)) 'ineklasse = CShort(file.ReadLine(0)) @@ -205,7 +205,7 @@ Public Class cGEN 'ModeHorEV = (VehMode = tVehMode.HEV Or VehMode = tVehMode.EV) - 'KF Erstellung + 'KF creation 'line = file.ReadLine 'inPschrit = CShort(line(0)) 'innschrit = CShort(line(1)) @@ -250,7 +250,7 @@ Public Class cGEN 'stdynspez.Init(MyPath, file.ReadLine(0)) - 'Kaltstart + 'Cold start 'stkatmap.Init(MyPath, file.ReadLine(0)) 'stkwmap.Init(MyPath, file.ReadLine(0)) 'stkatkurv.Init(MyPath, file.ReadLine(0)) @@ -294,7 +294,7 @@ Public Class cGEN 'If file.EndOfFile Then GoTo lbClose - 'Einzelne Nebenverbraucher + 'Einzelne Nebenverbraucher |@@| Individual next consumer Do While Not file.EndOfFile line = file.ReadLine @@ -330,7 +330,7 @@ Public Class cGEN pspar = CSng(file.ReadLine(0)) pmodell = CSng(file.ReadLine(0)) - 'Schaltmodell-Verteilung + 'Schaltmodell-Verteilung |@@| Gear-shifting Model Distribution If (pspar > 1) Then pspar = 1 ElseIf (pspar < 0) Then @@ -354,7 +354,7 @@ lbClose: Return True - 'ERROR-Label für sauberen Abbruch + 'ERROR-label for clean Abort lbEr: file.Close() file = Nothing @@ -377,7 +377,7 @@ lbEr: End If - '**** GEN Datei einlesen **** + '**** Read GEN file **** boPKWja = CBool(file.ReadLine(0)) @@ -387,7 +387,7 @@ lbEr: inizykwael = CShort(file.ReadLine(0)) ialt = CShort(file.ReadLine(0)) - 'Alten Rechenmodus in neue Modus-Schalter umwandeln + 'Convert Old Calculation-mode into New-one EngAnalysis = False CreateMap = False ModeHorEV = False @@ -544,7 +544,7 @@ lbClose: 's &= "," & Math.Abs(CInt(CreateMap)) 'fGEN.WriteLine(s) - 'Kennfeld Erstellung------------------------------------------------------ + 'Map creation ------------------------------------------------ ------ 'fGEN.WriteLine("c Settings for Emission Map Creation Mode:") 'fGEN.WriteLine("c Increment Pe, n:") 'fGEN.WriteLine(inPschrit & "," & innschrit) @@ -787,7 +787,7 @@ lbClose: End Sub - 'Liest Sub Input Files ein die keine eigene Klasse haben, etc. + 'This Sub reads those Input-files that do not have their own class, etc. Public Function Init() As Boolean Dim file As cFile_V3 Dim line As String() @@ -1324,7 +1324,7 @@ lbClose: Public Function aDesMax(ByVal v As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If laDesV(0) >= v Then If laDesV(0) > v Then MODdata.ModErrors.DesMaxExtr = "v= " & v i = 1 @@ -1336,7 +1336,7 @@ lbClose: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If laDesV(i) < v Then MODdata.ModErrors.DesMaxExtr = "v= " & v End If @@ -1350,7 +1350,7 @@ lbInt: Public Function aDesMin(ByVal v As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If laDesV(0) >= v Then If laDesV(0) > v Then MODdata.ModErrors.DesMaxExtr = "v= " & v i = 1 @@ -1362,7 +1362,7 @@ lbInt: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If laDesV(i) < v Then MODdata.ModErrors.DesMaxExtr = "v= " & v End If diff --git a/VECTO/Input Files/cMAP.vb b/VECTO/Input Files/cMAP.vb index 5b822802fd27ff946cf79517d5b42a36b0b290c3..7ac3acc7e22d5820f19728a2a5db01b1f21bbcfe 100644 --- a/VECTO/Input Files/cMAP.vb +++ b/VECTO/Input Files/cMAP.vb @@ -137,13 +137,13 @@ Public Class cMAP 'Reset ResetMe() - 'Abbruch wenn's Datei nicht gibt + 'Stop if there's no file If sFilePath = "" OrElse Not IO.File.Exists(sFilePath) Then WorkerMsg(tMsgID.Err, "Map file not found! (" & sFilePath & ")", MsgSrc) Return False End If - 'Datei öffnen + 'Open file file = New cFile_V3 If Not file.OpenRead(sFilePath) Then file = Nothing @@ -151,7 +151,7 @@ Public Class cMAP Return False End If - 'Listen initialisieren (vor Version-Check damit ReadOldFormat funktioniert) + 'Initi Lists (before version check so ReadOldFormat works) MyEmList = New List(Of String) EmComponents = New System.Collections.Generic.Dictionary(Of String, cEmComp) EmDefRef = New System.Collections.Generic.Dictionary(Of tMapComp, cEmComp) @@ -160,11 +160,11 @@ Public Class cMAP Ln = New System.Collections.Generic.List(Of Single) SwitchOn = False - 'Check ob MEP oder MAP - '...wird jetzt weiter unten gecheckt beim Einlesen. + 'Now checking whether MIP or MAP + '...is Read. ''*** - ''*** Erste Zeile: Version + ''*** First line: Version 'line = file.ReadLine 'txt = Trim(UCase(line(0))) 'If Microsoft.VisualBasic.Left(txt, 1) = "V" Then @@ -174,7 +174,7 @@ Public Class cMAP ' WorkerMsg(tMsgID.Err, "File Version invalid!", MsgSrc) ' GoTo lbEr ' Else - ' 'Version festgelegt + ' 'Specify Version ' FileVersion = CInt(txt) ' End If 'Else @@ -182,13 +182,13 @@ Public Class cMAP ' Return ReadOldFormat() 'End If - ''Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version + ''Version Check: abort if input file format is newer than version PHEM 'If FileVersion > FormatVersion Then ' WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc) ' GoTo lbEr 'End If - ''Spalte 2: Option "+" = Parameter für KF-Erstellung gegeben + ''Column 2: Option "+" = parameter for KF creation 'If UBound(line) > 0 Then ' If Trim(line(1)) = "+" Then ' SwitchOn = True @@ -197,22 +197,22 @@ Public Class cMAP 'End If '*** - '*** Zweite Zeile: Namen/Identifizierung der Komponenten (Nur Em. Leistung, Drehzahl ist fix!) + '*** Second Line: Name/Identification of Components (Only Em. Power, Revolutions is fixed!) 'line = file.ReadLine - ''Spaltenanzahl checken + ''Column-count check 's1 = UBound(line) s1 = 2 - ''Abbruch falls weniger als 3 Spalten + ''Abort if less than 3 columns 'If s1 < 2 Then GoTo lbEr - ' ''Check ob Leistung/Drehzahl vertauscht + ' ''Check whether Power/Revolutions swapped ''If UCase(line(0)).Contains("PE") Then '' If MsgOutput Then WorkerMsg(tMsgID.Warn, "Expected Emission Map format: 1st column = Engine Speed, 2nd column = Engine Power (Header Check failed)", MsgSrc) ''End If - ''Em-Komponenten initialisieren + ''Em-components initialize 'For s = 3 To s1 ' Em0 = New cEmComp @@ -221,8 +221,8 @@ Public Class cMAP ' Em0.IDstring = Trim(UCase(line(s))) ' Em0.MapCompID = fMapComp(Em0.Name) ' Em0.NormID = tEmNorm.x 'wird ggf. weiter unten korrigiert! - ' 'Default-Interpolator definiert in Em0 = New cEmComp - ' 'Default Pe-Correction definiert in Em0 = New cEmComp + ' 'Default interpolator defined in Em0 = New cEmComp + ' 'Default Correction Pe defined in Em0 = New cEmComp ' If EmComponents.ContainsKey(UCase(Em0.Name)) Then @@ -232,23 +232,23 @@ Public Class cMAP ' Else - ' 'Dictionary füllen.... + ' 'Dictionary .... fill ' If Em0.MapCompID = tMapComp.Undefined Then - ' 'ERROR wenn Komponente in spitzen Klammern aber nicht bekannt + ' 'ERROR when Component in angle brackets but unknown ' If Em0.IDstring.Length > 1 Then ' If Left(Em0.IDstring, 1) = "<" And Right(Em0.IDstring, 1) = ">" Then ' If MsgOutput Then WorkerMsg(tMsgID.Err, "'" & Em0.Name & "' is no valid Default Map Component!", MsgSrc) ' End If ' End If - ' 'Custom Em-Komponenten Dictionary: + ' 'Custom Em-Components Dictionary: ' EmComponents.Add(Em0.IDstring, Em0) ' MyEmList.Add(Em0.IDstring) ' Else - ' '*** Default Em-Komponenten *** + ' '*** Default Em components *** ' 'Default-Interpolator ' Em0.IntpolV2 = fDefIntpV2(Em0.MapCompID) @@ -259,24 +259,24 @@ Public Class cMAP ' 'Default-Name ' Em0.Name = fMapCompName(Em0.MapCompID) - ' 'TC-Komponenten werden nicht ausgegeben + ' 'TC-components are not dumped ' If fMapCompIsTC(Em0.MapCompID) Then ' TransMap = True ' Em0.WriteOutput = False ' End If - ' 'Custom Em-Komponenten Dictionary: + ' 'Custom Em-Components Dictionary: ' EmComponents.Add(Em0.IDstring, Em0) ' MyEmList.Add(Em0.IDstring) - ' 'Eintrag in Referenz-Dictionary + ' 'Entry in Reference-dictionary ' EmDefRef.Add(Em0.MapCompID, Em0) ' End If ' End If 'Next - 'VECTO: Spalte 3 immer Verbrauch + 'VECTO: Column 3 alwaysd consumption(Verbrauch) s = 2 Em0 = New cEmComp Em0.Col = s @@ -286,7 +286,7 @@ Public Class cMAP Em0.MapCompID = tMapComp.FC Em0.NormID = tEmNorm.x_h If EmComponents.ContainsKey(UCase(Em0.Name)) Then - 'Abbruch falls schon definiert + 'Abort if already defined WorkerMsg(tMsgID.Err, "Component '" & Em0.Name & "' already defined! Col. " & s + 1, MsgSrc) GoTo lbEr Else @@ -299,26 +299,26 @@ Public Class cMAP End If '*** - '*** Dritte Zeile: Normierung/Einheit + '*** Read Normalized/Measured 'line = file.ReadLine - ''Abbruch falls weniger Spalten als in zweiter Zeile + ''Abort when fewer columns than in the second Line 'If UBound(line) < s1 Then GoTo lbEr - ''Normierung/Einheit einlesen + ''Read Normalized/Measured 'For Each EmKV In EmComponents - ' 'EM-Komp Referenz + ' 'EM-component reference ' Em0 = EmKV.Value - ' 'Unit in String für weitere Checks speichern + ' 'Store Unit in String for further checks ' txt = Trim(line(Em0.Col)) - ' 'Klammern entfernen + ' 'Remove brackets ' txt = txt.Replace("[", "") ' txt = txt.Replace("]", "") - ' 'Normierung und Unit festlegen + ' 'Normalize and set Unit ' If txt.Contains("/") Then ' Select Case UCase(Right(txt, txt.Length - txt.IndexOf("/") - 1)) @@ -350,11 +350,11 @@ Public Class cMAP nNormed = False PeNormed = False - ''Check ob n/Pe Einheiten OK: + ''Check whether n/Pe measured(Einheiten) OK: 'If Not nNormed Then ' Select Case Trim(UCase(line(0))) ' Case "[U/MIN]", "RPM", "[1/MIN]", "[MIN^-1]" - ' 'Alles okay + ' 'Everything is okay ' Case Else ' If MsgOutput Then WorkerMsg(tMsgID.Err, "Engine Speed Unit '" & line(0) & "' unknown! '[U/min]' expected.", MsgSrc) ' End Select @@ -372,14 +372,14 @@ Public Class cMAP '*** - '*** Zeile 4,5: (optional, wenn oben "+"): Einstellungen für Pe-Cor (altes Pfak) - ' Falls nicht "+" werden Default Interpolatoren verwendet (s.o.) + '*** Line 4.5: (optional when "+"): Settings for Pe-Cor (old PfAK) + ' If not "+", use default Interpolators (see above) If SwitchOn Then - 'Zeile 4 einlesen + 'Line 4 Reading line = file.ReadLine - 'Schleife über Em-Komponenten + 'Loop over Em-components For Each EmKV In EmComponents If UBound(line) < EmKV.Value.Col Then @@ -405,10 +405,10 @@ Public Class cMAP Next - 'Zeile 5 einlesen + 'Line 5 Reading line = file.ReadLine - 'Schleife über Em-Komponenten + 'Loop over Em-components For Each EmKV In EmComponents If UBound(line) < EmKV.Value.Col Then @@ -433,22 +433,22 @@ Public Class cMAP End If - 'Ab Zeile 4 (bzw. 6): Werte + 'From line 4 (or 6): Values Try Do While Not file.EndOfFile - 'Zeile einlesen + 'Line read line = file.ReadLine - 'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt) + 'Line counter up (was reset in ResetMe) iMapDim += 1 - 'Drehzahl + 'Revolutions nU = CDbl(line(0)) Lnn.Add(nU) - 'Leistung + 'Power 'If Trim(UCase(line(1))) = sKey.MAP.Drag Then ' If PeNormed Then ' LPe.Add(FLD.Pdrag(Lnn(iMapDim)) / VEH.Pnenn) @@ -459,7 +459,7 @@ Public Class cMAP LPe.Add(nMtoPe(nU, CDbl(line(1)))) 'End If - 'Emissionen + 'Emissions For Each EmKV In EmComponents EmKV.Value.RawVals.Add(CSng(line(EmKV.Value.Col))) Next @@ -474,7 +474,7 @@ Public Class cMAP 'Shep-Init MapIntp = New cMapInterpol(Me) - 'Datei schließen + 'Close file file.Close() file = Nothing @@ -484,7 +484,7 @@ Public Class cMAP Return True - 'ERROR-Label für sauberen Abbruch + 'ERROR-label for clean Abort lbEr: file.Close() file = Nothing @@ -503,14 +503,14 @@ lbEr: Dim s1 As Integer Dim s As Integer - 'Datei öffnen + 'Open file File = New cFile_V3 If Not File.OpenRead(sFilePath, ",", True, True) Then File = Nothing Return False End If - 'Alte Kennfelder haben immer TC-Faktoren (sind halt evtl. Null) + 'Old maps have always TC-factors are (possibly null) TransMap = True Em0 = New cEmComp @@ -773,23 +773,23 @@ lbEr: nNormed = True PeNormed = True - 'Werte + 'Values Do While Not File.EndOfFile - 'Zeile einlesen + 'Line read line = File.ReadLine - 'Zeilen-Zähler hoch (wurde in ResetMe zurück gesetzt) + 'Line counter up (was reset in ResetMe) iMapDim += 1 - 'Drehzahl + 'Revolutions Lnn.Add(CSng(line(1))) - 'Leistung + 'Power LPe.Add(CSng(line(0))) If iMapDim = 0 Then s1 = UBound(line) - 'Emissionen + 'Emissions For Each EmKV In EmComponents s = EmKV.Value.Col If s > s1 Then @@ -803,7 +803,7 @@ lbEr: 'Shep-Init MapIntp = New cMapInterpol(Me) - 'Datei schließen + 'Close file File.Close() Return True @@ -818,14 +818,14 @@ lbEr: ID = fMapComp(sK) StringID = Trim(UCase(sK)) - 'Abbruch falls Em-Komponente nicht in MAP + 'Abort when Em-component not in MAP If ID = tMapComp.Undefined Then If Not EmComponents.ContainsKey(StringID) Then Return False Else If Not EmDefRef.ContainsKey(ID) Then Return False End If - 'Abbruch falls TC-Faktoren für die Komponente schon definiert + 'Abort if TC-factors for the component already defined If EmComponents(StringID).TCdef Then Return False EmComponents(StringID).InitTC() @@ -856,27 +856,27 @@ lbEr: nleerl = VEH.nLeerl nnenn = VEH.nNenn - 'Drehzahl normieren + 'Speed Normalized If Not nNormed Then For i = 0 To iMapDim Lnn(i) = (Lnn(i) - nleerl) / (nnenn - nleerl) Next End If - ' "anders" normierte Drehzahl berechnen + ' "otherwise calculate normalized Revolutions For i = 0 To iMapDim Ln.Add((Lnn(i) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / VEH.nNenn) Next - 'Leistung normieren + 'Normalized Power If Not PeNormed Then For i = 0 To iMapDim LPe(i) /= Pnenn Next End If - '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! + '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! For Each Em0 In EmComponents.Values Select Case Em0.NormID Case tEmNorm.x_hPnenn @@ -888,12 +888,12 @@ lbEr: Em0.RawVals(i) *= LPe(i) * Pnenn Next Case Else - 'Werte sind bereits absolut angegeben - 'Unterscheidung in [x] und [x/h] derzeit nicht verwendet/unterstützt + 'Values are already specified in absolute + 'Distinction between [x] and [x/h] currently not used/supported End Select Next - 'Check ob Drehzahl/Leistung vertauscht + 'Check whether Revolutions/Power reversed For i = 0 To iMapDim If Lnn(i) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl < 0 Then @@ -955,7 +955,7 @@ lbEr: End Try End Function - 'Kennfeld-Erstellung + 'Map creation Public Function CreateMAP() As Boolean Dim file As cFile_V3 @@ -1022,7 +1022,7 @@ lbEr: End If '****************************************************************** - '***************** Initialisiere Em-Komponenten ******************* + '***************** Initialize Em-components ******************* MyEmList = New List(Of String) EmComponents = New Dictionary(Of String, cEmComp) TCcomponents = New Dictionary(Of tMapComp, cEmComp) @@ -1064,7 +1064,7 @@ lbEr: Em0.NormID = EmKV.Value.NormID Em0.IDstring = EmKV.Value.IDstring - 'PeCorMode: Falls nicht in MES/NPI vorgegeben gilt bei Nicht-Default-Em was in cEmComp.New() eingestellt ist + '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() If DRI.CreateMapParDef Then Em0.PeCorMode = DRI.MapPfak(EmKV.Key) ElseIf Em0.MapCompID <> tMapComp.Undefined Then @@ -1075,16 +1075,16 @@ lbEr: If fMapCompIsTC(Em0.MapCompID) Then - 'Falls TC angegeben dann Abbruch + 'If TC specified, then Abort WorkerMsg(tMsgID.Err, "Component '" & Em0.Name & "' is invalid (Trans.Corr. Parameter)!", MsgSrc) Return False Else - 'Interpolator auswählen + 'Select interpolator Em0.IntpolV2 = fDefIntpV2(Em0.MapCompID) - 'Eintrag in Referenz-Dictionary (Es wird nicht überprüft ob Em-Comp. doppelt vorkommt weil das schon in DRI.ReadFile passiert) + 'Entry in Reference Dictionary (It does not check whether Em-Comp occurs twice since it has been caught in DRI.ReadFile) EmDefRef.Add(Em0.MapCompID, Em0) End If @@ -1094,12 +1094,12 @@ lbEr: EmComponents.Add(EmKV.Key, Em0) MyEmList.Add(EmKV.Key) - 'Infos ausgeben + 'Dump Infos WorkerMsg(tMsgID.Normal, " '" & Em0.Name & "': Unit = " & Em0.Unit & ", PeCorMode = " & fPwCorName(Em0.PeCorMode), MsgSrc) Next - 'Dynamikparameter und Extrapol kommen noch dazu + 'Dynamic parameters and Extrapol to be added Em0 = New cEmComp Em0.Col = s + 1 Em0.NormID = tEmNorm.x @@ -1244,7 +1244,7 @@ lbEr: '****************************************************************** - '************* Mittelwert-Dictionary initialisieren *************** + '************* Initialize Mean-value Dictionary *************** For Each EmKV In EmComponents EmMW.Add(EmKV.Key, New List(Of Single)) @@ -1268,12 +1268,12 @@ lbEr: Next '****************************************************************** - '********************* Mittelwerte berechnen ********************** + '********************* Calculate Mean-values ********************** - 'Haupt-Schleife + 'Main-loop If GEN.iMsek > 1 Then - 'Listen erstellen + 'Create Lists For i = 0 To MODdata.tDim pe.Add(0) @@ -1288,12 +1288,12 @@ lbEr: Next - 'Schleife über Messwerte + 'Loop over Measurement-values For i = 0 To MODdata.tDim If i + 1 < GEN.iMsek Then - 'Bereich unter iMsek mit Messwert belegen + 'Fill the Area below iMsek with Measurement-values pe(i) = MODdata.Pe(i) nn(i) = MODdata.nn(i) @@ -1307,7 +1307,7 @@ lbEr: Else - 'Bereich über iMsek mit Mittelwerten der Messwerte belegen + 'Fill the Area above iMsek with the Mean-values of the Measurement-values For j = 0 To (GEN.iMsek - 1) pe(i) += MODdata.Pe(i - j) / GEN.iMsek @@ -1328,7 +1328,7 @@ lbEr: Else - 'Keine Mittelwertbildung + 'No averaging For i = 0 To MODdata.tDim pe.Add(MODdata.Pe(i)) @@ -1344,13 +1344,13 @@ lbEr: End If - 'EmCheck: False = Wert noch nicht verwendet, True = Wert wurde bereits in Kennfeld verwurschtet + '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 For j = 0 To MODdata.tDim EmCheck.Add(False) Next '****************************************************************** - '*************************** Rasterung **************************** + '*************************** Rasterung **************************** |@@| Grd-ing(Rasterung) **************************** dnn = 1.2 / (GEN.nschrit) dp = 1.4 / (GEN.Pschrit) @@ -1415,7 +1415,7 @@ lbEr: Loop - 'Schlepp hinzufügen mit halber nn-Schrittweite. Wird für Pfak benötigt. Falls GEN.KFinsertDrag deaktiviert wird sie später wieder gelöscht. + 'Add Drag at half nn-increments. Needed for PfAK. If GEN.KFinsertDrag is disabled, it will be deleted later. nnx = 0 - dnn / 2 Do While nnx + dnn / 2 <= 1.20001 nnx += dnn / 2 @@ -1425,63 +1425,63 @@ lbEr: iMapDim += 1 Loop - 'Leerlaufpunkt hinzufügen + 'Add Idle-point LPe.Add(0) Lnn.Add(0) IsDrag.Add(False) iMapDim += 1 '****************************************************************** - '**************** NrUsed Erstellung / Null setzen ***************** + '**************** Create NrUsed / Set to zero set ***************** For j = 0 To MODdata.tDim NrUsed.Add(0) Used.Add(False) Next '****************************************************************** - '**************** Messwerte in Raster reinrechnen ***************** + '**************** Expect pure Measurement-values in Grid ***************** - 'Basis Schrittweite zwischenspeichern + 'Basis Schrittweite zwischenspeichern |@@| Basis for step-size buffering dnn0 = dnn dp0 = dp - 'Schleife über Rasterpunkte (i) + 'Loop over Grid-points(i) For i = 0 To iMapDim - 'Summen/Anzahl/Flags zurücksetzen + 'Return Totals/Numbers/Flags Extra = False dnn = dnn0 dp = dp0 - 'Schlepp-Leistung + 'Drag-Power pm = FLD.Pdrag(Lnn(i)) / VEH.Pnenn - 'Schleife bis genug Werte im Radius gefunden + 'Loop until enough Values found in Radius Do - 'Zähler/Summen zurück setzen + 'Reset Counter/Totals anz = 0 For Each EmMW0 In EmMW EmSum(EmMW0.Key) = 0 Next IntpPe = 0 - 'Schleife über Messwerte (j) + 'Loop over Measured-values ​​(j) For j = 0 To MODdata.tDim - 'Falls innerhalb von Radius... + 'If within Radius ... If Math.Abs(pe(j) - LPe(i)) <= dp / 2 And Math.Abs(nn(j) - Lnn(i)) <= dnn / 2 Then - 'Anz + 1 + 'Num + 1 anz += 1 - 'Schleife über alle Em-Komp. + 'Loop over all Em-comp. For Each EmMW0 In EmMW - 'Summe + + 'Total + EmSum(EmMW0.Key) += EmMW0.Value(j) - 'Min/Max belegen (für Log-Ausgabe) + 'Calculate Min/Max (for Log-output) If anz = 1 Then ValMin(EmMW0.Key) = EmMW0.Value(j) ValMax(EmMW0.Key) = EmMW0.Value(j) @@ -1492,10 +1492,10 @@ lbEr: Next - 'Interpolierte Leistung aufsummieren (wird dann durch Anz dividiert) + 'Interpolierte Leistung aufsummieren (wird dann durch Anz dividiert) |@@| Sum-up Interpolated Power (then divided by Num) IntpPe += pe(j) - 'Zählen wieviel Messwerte für Rasterpunkt verwendet werden (Log-Ausgabe) + 'Count how many Measurement-values exist for the Grid-points (Log-output) Used(j) = True Else @@ -1506,7 +1506,7 @@ lbEr: Next - 'Falls keine Messwerte im Radius (Anz=0) dann Radius vergrößern und Extra-Flag setzen + 'If none Measured-value in Radius (Num = 0), then enlarge Radius and set Extra-flag If anz < 2 Then Extra = True dp *= 1.1 @@ -1515,17 +1515,17 @@ lbEr: Loop Until anz > 1 - 'NrUsed belegen + 'Allocate NrUsed For j = 0 To MODdata.tDim If Used(j) Then NrUsed(j) += 1 Next - 'Interpolierte Leistung = Summe / Anz + 'Interpolated-Power = Sum / number IntpPe /= 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 + '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 If LPe(i) > pm Then If (IntpPe - pm) > 0.05 Then Pfak.Add(Math.Abs((LPe(i) - pm) / (IntpPe - pm))) @@ -1536,24 +1536,24 @@ lbEr: Pfak.Add(0) End If - 'Extrapol-Flag in Extrapol-Spalte (1/0) übernehmen + 'Get the Extrapol flag from the Extrapol-column (1/0) If Extra Then EmExtra.RawVals.Add(1) Else EmExtra.RawVals.Add(0) End If - 'Für Log-Ausgabe + 'For Log-output KFanz.Add(anz) KFradproz.Add(dnn / dnn0) - 'Schleife über Em-Comp (innerhalb Rasterpunkt Schleife) + 'Loop through Em-Comp (within Grid-points-loop) For Each EmKV In EmComponents - 'Falls Option 'Schlepp-Em aus .FLD' belegen und Rasterpunkt-Leistung <= Schleppleistung + 'Falls Option 'Schlepp-Em aus .FLD' belegen und Rasterpunkt-Leistung <= Schleppleistung |@@| If Option 'Drag-Em' from .FLD 'and Power-gridpoints <= Drag-power If Not GEN.KFDragIntp And LPe(i) <= pm + 0.0001 Then - 'Falls Schlepp-Em in .FLD vorhanden dann nehmen sonst mit Null belegen + 'If Drag-Em exists in .FLD, then use it otherwise alocate with zero If FLD.EmDef(EmKV.Key) Then EmKV.Value.RawVals.Add(FLD.EmDrag(EmKV.Key, Lnn(i))) Else @@ -1562,18 +1562,18 @@ lbEr: Else 'Option 'Schlepp-Em aus Messwerten' bzw. Punkte über Schleppleistung - 'Em-Belegung ohne Pfak (=> Pfak wird später gemacht) + 'Em-allocation without PfAK (=> PfAK is crafted later) EmKV.Value.RawVals.Add(CSng(EmSum(EmKV.Key) / anz)) End If - 'Für Log-Ausgabe + 'For Log-output KFmin(EmKV.Key).Add(ValMin(EmKV.Key)) KFmax(EmKV.Key).Add(ValMax(EmKV.Key)) Next - 'TC-Faktoren ohne Pfak übernehmen + 'Assume TC-factors without Pfak For Each Em0 In TCcomponents.Values Em0.RawVals.Add(CSng(EmSum(Em0.Name) / anz)) Next @@ -1583,30 +1583,30 @@ lbEr: '****************************************************************** '***************************** 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. + '!!! 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. - 'Schleife über Em-Comp + 'Loop through Em-Comp For Each EmKV In EmComponents - 'Falls keine Create Map Einstellungen (in .NPI/.MES) oder Pfak explizit aktiviert => Pfak verwenden + '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 If EmKV.Value.PeCorMode <> tIntpPeCorMode.PeCorOff Then - 'Schleife über Rasterpunkte (i) + 'Loop over Grid-points (i) For i = 0 To iMapDim If EmKV.Value.PeCorMode = tIntpPeCorMode.PeCorNull Then - 'Altes Pfak mit Extrapolation von Null weg + 'Altes Pfak mit Extrapolation von Null weg |@@| Old PfAK with Extrapolation from Zero route? EmDrag = 0 Else 'PeCorMode = tIntpPeCorMode.PeCorEmDrag - '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.) + 'Schlepp-Emission raus suchen |@@| Pick Drag-Emission + ' 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 + ' 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) !! + ' 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) EmDrag = 0 nnAb = dnn0 For j = 0 To iMapDim @@ -1620,7 +1620,7 @@ lbEr: End If - 'Pfak anwenden + 'Apply PfAK EmKV.Value.RawVals(i) = CSng(Pfak(i) * (EmKV.Value.RawVals(i) - EmDrag) + EmDrag) Next @@ -1630,15 +1630,15 @@ lbEr: Next '****************************************************************** - '******************* Normieren (Wert und Unit) ******************** + '******************* Normalize (Value and Unit) ******************** For Each EmKV In EmComponents - 'Falls Vorgabe in MES/NPI-Datei dann verwenden + 'Use them If specified in MES/NPI-files If DRI.CreateMapParDef Then If DRI.MapUnitsNormed(EmKV.Key) Then - 'Werte normieren + 'Values normalized For i = 0 To iMapDim EmKV.Value.RawVals(i) /= VEH.Pnenn Next @@ -1649,12 +1649,12 @@ lbEr: Else - 'Sonst Standard-Normierung verwenden + 'Otherwise, use a standard normalization If EmKV.Value.MapCompID <> tMapComp.Undefined Then If fDefEmNormID(EmKV.Value.MapCompID) = tEmNorm.x_hPnenn Then - 'Werte normieren + 'Normalized Values For i = 0 To iMapDim EmKV.Value.RawVals(i) /= VEH.Pnenn Next @@ -1670,7 +1670,7 @@ lbEr: Next '****************************************************************** - '****************** EmComponents zusammenfassen ******************* + '****************** EmComponents zusammenfassen ******************* |@@| Summarized EmComponents ******************* For Each Em0 In TCcomponents.Values EmComponents.Add(Em0.Name, Em0) MyEmList.Add(Em0.Name) @@ -1685,10 +1685,10 @@ lbEr: '****************************************************************** - '*********** Schleppkurve wieder raus nehmen (optional) *********** + '*********** Schleppkurve wieder raus nehmen (optional) *********** |@@| Get Load-curve again (optional) *********** If Not GEN.KFinsertDrag Then - 'Schleife über Rasterpunkte (i). Keine For-Schleife weil iMapDim reduziert wird + 'Schleife über Rasterpunkte (i). Keine For-Schleife weil iMapDim reduziert wird |@@| Loop over Grid-points(i). No For-loop because iMapDim is reduced i = -1 Do While i < iMapDim i += 1 @@ -1710,7 +1710,7 @@ lbEr: '****************************************************************** - '************************** Ausgabe Map '************************** + '************************** Dump Map '************************** str = New System.Text.StringBuilder @@ -1729,7 +1729,7 @@ lbEr: str.Append("n_norm,Pe_norm") For Each Key In KeyListFull - 'ACHTUNG: Nicht Name sondern sKey !!! + 'CAUTION: Not Name but sKey !!! str.Append("," & EmComponents(Key).IDstring) Next @@ -1748,7 +1748,7 @@ lbEr: Next file.WriteLine(str.ToString) - 'Werte + 'Values For i = 0 To iMapDim str.Length = 0 str.Append(CStr(Lnn(i))) @@ -1762,7 +1762,7 @@ lbEr: file.Close() '****************************************************************** - '********************** Ausgabe Zusatzinfo '*********************** + '********************** Dump Extended-Info '*********************** If Not file.OpenWrite(fFileWoExt(sFilePath) & ".log") Then WorkerMsg(tMsgID.Err, "Cannot access file (" & fFileWoExt(sFilePath) & ".log" & ")!", MsgSrc) @@ -1801,7 +1801,7 @@ lbEr: Next file.WriteLine(str.ToString) - 'Werte + 'Values str.Length = 0 For i = 0 To iMapDim @@ -1861,7 +1861,7 @@ lbEr: End Function - 'Default Shepard wie in intpshep() + 'Default Shepard in intpshep () Private Class cMapInterpol Private iMapDim As Integer @@ -1921,28 +1921,28 @@ lbEr: ReDim abOK(iMapDim) - 'Abstand berechnen und korrigieren. + 'Calculate Distance and Correction. For i = 0 To iMapDim If (Pnorm < 0.05 And Pnorm >= 0.0) Then - 'Um Nullleistung werden Kennfeldpunkte um Pe=0 hoeher gewichtet und Drehzahlabstand geringer, - ' da Interpolation aus Punkten mit hoeherer last dort schlecht passt: + '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, + ' da Interpolation aus Punkten mit hoeherer last dort schlecht passt: |@@| because interpolation of Points with higher Load is fitted badly: ab0(i) = (Pnorm - myMap.LPe(i)) ^ 2 + (n0 - myMap.Ln(i)) ^ 2 * 888.9 * (Math.Abs(Pnorm) ^ 3 + 0.001) ab0(i) = ab0(i) * (Math.Abs(Pnorm) + Math.Abs(myMap.LPe(i)) + 0.005) * 9.52 Else - 'Quadrat des Abstandes: + 'Square of the distance: ab0(i) = (Pnorm - myMap.LPe(i)) ^ 2 + (n0 - myMap.Ln(i)) ^ 2 - 'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten: + '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: If Pnorm * myMap.LPe(i) < 0 Then ab0(i) *= 50 End If Next - 'Punkte innerhalb Radius zählen und ggf. Radius erhöhen + 'Punkte innerhalb Radius zählen und ggf. Radius erhöhen |@@| Points are within radius and possibly within a bigger Radius Radius = 0.01 '<= Startwert ist Radius * 2 weil in Do-Schleife gleich verdoppelt wird! iminMin = 2 @@ -1959,7 +1959,7 @@ lbEr: Next Loop Until inim >= iminMin - 'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur + 'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur |@@| Distance array and create Power interpolate for Pe-correction ReDim ab(inim - 1) i0 = -1 sumo = 0 @@ -1971,13 +1971,13 @@ lbEr: End If Next - 'Berechnung von wisum + 'Calculation of Wisum wisum = 0 For i = 0 To inim - 1 wisum = wisum + 1.0 / ab(i) Next - 'Interpolierte Leistung berechnen + 'Calcluate Interpolated Power PeIntp = sumo / wisum @@ -1989,15 +1989,15 @@ lbEr: ReDim abOKV2(iMapDim) - 'Abstand berechnen und korrigieren. + 'Calculate Distance and Correction. For i = 0 To iMapDim - 'Quadrat des Abstandes: + 'Square of the distance: ab0(i) = (Pnorm - myMap.LPe(i)) ^ 2 + (nnorm - myMap.Lnn(i)) ^ 2 Next - 'Punkte innerhalb Radius zählen und ggf. Radius erhöhen + 'Punkte innerhalb Radius zählen und ggf. Radius erhöhen |@@| Points are within radius and possibly within a bigger Radius Radius = 0.0001 '<= Startwert ist Radius * 2 weil in Do-Schleife gleich verdoppelt wird! '0.0001 iminMin = 3 @@ -2014,7 +2014,7 @@ lbEr: Next Loop Until inim >= iminMin - 'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur + 'Abstand-Array erstellen und Leistung interpolieren für Pe-Korrektur |@@| Distance array and create Power interpolate for Pe-correction ReDim abV2(inim - 1) i0 = -1 sumo = 0 @@ -2026,13 +2026,13 @@ lbEr: End If Next - 'Berechnung von wisumV2 + 'Calculation of wisumV2 wisumV2 = 0 For i = 0 To inim - 1 wisumV2 = wisumV2 + 1.0 / abV2(i) Next - 'Interpolierte Leistung berechnen + 'Calculate Interpolated Power PeIntpV2 = sumo / wisumV2 End Sub @@ -2109,7 +2109,7 @@ lbEr: End Function - 'Berechnet Emission an Schleppkurve + 'Berechnet Emission an Schleppkurve |@@| Calculated Emission on Drag-curve Private Function fEmDrag(ByRef EmComp As cEmComp) As Single Dim ab0 As Double() Dim abOK_loc As Boolean() @@ -2126,24 +2126,24 @@ lbEr: ReDim abOK_loc(iMapDim) Dim inim As Integer - 'Es wird an Schleppkurve gesucht + 'Es wird an Schleppkurve gesucht |@@| Search on Drag-curve Pnorm = PeDrag - 'n0 ist schon in Init definiert worden + 'n0 has already been defined in Init - 'Abstand berechnen und korrigieren. + 'Calculate Distance and Correction. For i = 0 To iMapDim - 'Quadrat des Abstandes: + 'Square of the Distances: ab0(i) = (Pnorm - myMap.LPe(i)) ^ 2 + (n0 - myMap.Ln(i)) ^ 2 - 'Falls Vorzeichen von Pe unterschiedlich (Last/Schlepp-Trennung) wird Abstand vergroessert um Schlepp bei Schlepp mehr zu gewichten: + '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: If Not EmComp.IntpolV2 Then If Pnorm * myMap.LPe(i) < 0 Then ab0(i) *= 50 End If Next - 'Punkte innerhalb Radius zählen und ggf. Radius erhöhen + 'Punkte innerhalb Radius zählen und ggf. Radius erhöhen |@@| Points are within radius and possibly within a bigger Radius Radius = 0.0001 '<= Startwert ist Radius * 2 weil in Do-Schleife gleich verdoppelt wird! '0.0001 iminMin = 3 @@ -2160,7 +2160,7 @@ lbEr: Next Loop Until inim >= iminMin - 'Abstand-Array erstellen + 'Create Distances-array ReDim ab_loc(inim - 1) i0 = -1 For i = 0 To iMapDim @@ -2170,13 +2170,13 @@ lbEr: End If Next - 'Berechnung von wisum + 'Calculation of wisum wisum_loc = 0 For i = 0 To inim - 1 wisum_loc = wisum_loc + 1.0 / ab_loc(i) Next - 'Emission berechnen + 'Calculate emission sumo = 0 i0 = -1 For i = 0 To iMapDim diff --git a/VECTO/Input Files/cTRS.vb b/VECTO/Input Files/cTRS.vb index 29a817b01e52fc6383cb304c4facb41dc2420547..4cf5ad20c39663fa4eb2798c66f6ea953ef92c52 100644 --- a/VECTO/Input Files/cTRS.vb +++ b/VECTO/Input Files/cTRS.vb @@ -29,13 +29,13 @@ 'Reset ResetMe() - 'Abbruch wenn's Datei nicht gibt + 'Stop if there's no file If sFilePath = "" OrElse Not IO.File.Exists(sFilePath) Then WorkerMsg(tMsgID.Err, "TRS file not found! (" & sFilePath & ")", MsgSrc) Return False End If - 'Datei öffnen + 'Open file file = New cFile_V3 If Not file.OpenRead(sFilePath) Then file = Nothing @@ -44,27 +44,27 @@ End If '*** - '*** Erste Zeile: Version + '*** First Line: Version line = file.ReadLine txt = Trim(UCase(line(0))) If Microsoft.VisualBasic.Left(txt, 1) = "V" Then - ' "V" entfernen => Zahl bleibt übrig + ' "Remove "V" => Number remains txt = txt.Replace("V", "") If Not IsNumeric(txt) Then - 'Falls Version ungültig: Abbruch + 'If invalid version: Abort WorkerMsg(tMsgID.Err, "File Version invalid!", MsgSrc) GoTo lbEr Else - 'Version festgelegt + 'Version set FileVersion = CInt(txt) End If Else - 'Falls keine Versionsangabe: Altes Format + 'If no version information: Old format file.Close() Return ReadOldFormat() End If - 'Version-Check: Abbruch falls Inputdateiformat neuer ist als PHEM-Version + 'Version Check: Abort if Input-file-format is newer than PHEM-version If FileVersion > FormatVersion Then WorkerMsg(tMsgID.Err, "File Version not supported!", MsgSrc) GoTo lbEr @@ -76,11 +76,11 @@ '*** - '*** Zweite Zeile: Check welche TC-Faktoren in welcher Spalte stehen (ab Spalte 1!!) + '*** Second Line: Check which TC-factors exist in any column (from column 1!) line = file.ReadLine s1 = UBound(line) - 'Abbruch falls weniger als 2 Spalen: + 'Abort if less than 2 Columns: If s1 < 1 Then WorkerMsg(tMsgID.Err, "Format invalid!", MsgSrc) GoTo lbEr @@ -88,18 +88,18 @@ For s = 1 To s1 MapC = fMapComp(line(s)) - 'Abbruch wenn unbekannter TC-Faktor + 'Abort if unknown TC-factor If MapC = tMapComp.Undefined Then WorkerMsg(tMsgID.Err, "Component '" & line(s) & "' is invalid!", MsgSrc) GoTo lbEr End If - 'Zu Dict hinzufügen + 'Add to Dict sTC.Add(MapC, s) Next '*** - '*** Ab Zeile 3: TC-Faktoren für die einzelnen Em-Komponeten - ' l ist nur für Fehlerausgabe + '*** From Line 3: TC-factors for each Em-component + ' l is for Error-output l = 0 Try @@ -160,7 +160,7 @@ lbEr: Dim Em0 As cEmComp Dim x As Short - 'Datei öffnen + 'Open file File = New cFile_V3 If Not File.OpenRead(sFilePath) Then File = Nothing @@ -204,7 +204,7 @@ lbEr: Next End If - 'Abbruch falls weniger als 11 Spalen: + 'Abort if less than 11 Columns: If UBound(line) < 10 Then GoTo lbEr TCvals = New System.Collections.Generic.Dictionary(Of tMapComp, Double) diff --git a/VECTO/Input Files/cVEH.vb b/VECTO/Input Files/cVEH.vb index 83d147475f73e82421a096ef60316d521d18efcb..a69d087c037addbe033dbc078ae4d662faf81e09 100644 --- a/VECTO/Input Files/cVEH.vb +++ b/VECTO/Input Files/cVEH.vb @@ -218,7 +218,7 @@ Public Class cVEH 'If ((sipspar + sipmodell) > 1.0) Then sipmodell = 1.0 - sipspar 'Update 07.08.2012 (CO2 Demo) - 'Einzelne Nebenverbraucher + 'Einzelne Nebenverbraucher |@@| Individual next consumer 'Do While Not file.EndOfFile ' line = file.ReadLine @@ -246,7 +246,7 @@ Public Class cVEH If file.EndOfFile Then GoTo lbError - 'Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo) + 'Zugkraftunterbrechung - Update 09.08.2012 (CO2 Demo) |@@| Interruption of Traction - Update 09/08/2012 (CO2 demo) 'Try ' TracIntrSi = CSng(file.ReadLine(0)) 'Catch ex As Exception @@ -257,7 +257,7 @@ Public Class cVEH If file.EndOfFile Then GoTo lbError - 'Cd Modus / Input Datei - Update 14.08.2012 (CO2 Demo) + 'Cd mode / Input File - Update 08/14/2012 (CO2 demo) Try line = file.ReadLine CdMode = CType(CInt(line(0)), tCdMode) @@ -313,7 +313,7 @@ Public Class cVEH End Try - '************************ Ende Einlesen **************************** + '************************ End reading **************************** file.Close() Return True @@ -398,7 +398,7 @@ lbError: 'Next 'file.WriteLine(sKey.Break) - 'Zugkraftunterbrechung (Update 09.08.2012 - CO2 Demo) + 'Interruption of traction (Update 09.08.2012 - CO2 demo) 'file.WriteLine("c Traction Interruption") 'file.WriteLine(CStr(TracIntrSi)) @@ -448,7 +448,7 @@ lbError: MsgSrc = "VEH/Init" - 'Fehlermeldung innerhalb AuxInit + 'Error-message within AuxInit If Not AuxInit() Then Return False 'Cd-Init @@ -528,13 +528,13 @@ lbError: Return False End If - 'Getriebe-Nenndrehzahl + 'Transmission Nominal-Revolutions 'n_norm = CSng(file.ReadLine(0)) - 'Getriebe-Nennleistung + 'Transmission Nominal-Power 'Pe_norm = CSng(file.ReadLine(0)) - 'Wenn nix angegeben: Motor-Nennleistung und Nenndrehzahl zur Normierung + 'If nothing specified: Engine's Nominal-power and Nominal-Revolutions from Normalized ones 'If n_norm < 0.0001 Then ' n_norm = sinNenn ' Pe_norm = siPnenn @@ -548,9 +548,9 @@ lbError: l += 1 line = file.ReadLine Try - '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 + 'PHEM: n, PeIn, PeOut => x=n, y=PeOut, z=PeIn |@@| 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) |@@| 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 |@@| VECTO: n, M_in, M_loss => x=n, y=PeOut, z=PeIn nU = CDbl(line(0)) M_in = CDbl(line(1)) M_loss = CDbl(line(2)) @@ -616,14 +616,14 @@ lbError: GBmap = MyGBmaps(Gear) Try - 'Interpolieren mit Original Werten + 'Interpolate with Original Values PeIn = GBmap.Intpol(nU, PeOut) Catch ex As Exception - 'Falls Fehler: Extrapolation versuchen + 'If error: try extrapolation - 'Suche nach nächstgelegenen Kennfeldpunkt + 'Search for the nearest Map point AbMin = ((GBmap.ptList(0).X - nU) ^ 2 + (GBmap.ptList(0).Y - PeOut) ^ 2) ^ 0.5 iMin = 0 For i = 1 To GBmap.ptDim @@ -637,18 +637,18 @@ lbError: PeOutX = GBmap.ptList(iMin).Y PeIn = GBmap.ptList(iMin).Z - 'Wirkungsgrad + 'Efficiency If PeOutX > 0 Then If PeIn > 0 Then - 'Antrieb => Antrieb + 'Drivetrain=> Drivetrain If PeIn = 0 Then Return 0 WG = PeOutX / PeIn Else - 'Schlepp => Antrieb: ERROR! + 'Drag => Drivetrain: ERROR! WorkerMsg(tMsgID.Err, "Transmission Loss Map invalid! Gear= " & Gear & ", nU= " & nU.ToString("0.00") & ", PeIn=" & PeIn.ToString("0.0") & ", PeOut=" & PeOutX.ToString("0.0"), MsgSrc) WorkerAbort() Return 0 @@ -658,14 +658,14 @@ lbError: Else If PeIn > 0 Then - 'Antrieb => Schlepp: ERROR! + 'Drivetrain => Drag: ERROR! WorkerMsg(tMsgID.Err, "Transmission Loss Map invalid! Gear= " & Gear & ", nU= " & nU.ToString("0.00") & ", PeIn=" & PeIn.ToString("0.00") & ", PeOut=" & PeOutX.ToString("0.00"), MsgSrc) WorkerAbort() Return 0 Else - 'Schlepp => Schlepp + 'Drag => Drag If PeOutX = 0 Then Return 0 WG = PeIn / PeOutX @@ -674,7 +674,7 @@ lbError: End If - 'Mit Wirkungsgrad PeIn für original PeOut ausrechnen + 'Calculate efficiency with PeIn for original PeOut PeIn = PeOut / WG MODdata.ModErrors.TrLossMapExtr = "Gear= " & Gear & ", nU= " & nU.ToString("0.00") & " [U/min], MeOut=" & PToM(nU, PeOut).ToString("0.00") & " [Nm]" @@ -717,14 +717,14 @@ lbError: GBmap = MyGBmaps(Gear) Try - 'Interpolieren mit Original Werten + 'Interpolate with original values PeOut = GBmap.IntpolXZ(nU, PeIn) Catch ex As Exception - 'Falls Fehler: Extrapolation versuchen + 'If error: try extrapolation - 'Suche nach nächstgelegenen Kennfeldpunkt + 'Search for the nearest Map-point AbMin = ((GBmap.ptList(0).X - nU) ^ 2 + (GBmap.ptList(0).Z - PeIn) ^ 2) ^ 0.5 iMin = 0 For i = 1 To GBmap.ptDim @@ -738,16 +738,16 @@ lbError: PeInX = GBmap.ptList(iMin).Z PeOut = GBmap.ptList(iMin).Y - 'Wirkungsgrad + 'Efficiency If PeOut > 0 Then If PeInX > 0 Then - 'Antrieb => Antrieb + 'Drivetrain => Drivetrain WG = PeOut / PeInX Else - 'Schlepp => Antrieb: ERROR! + 'Drag => Drivetrain: ERROR! WorkerMsg(tMsgID.Err, "Transmission Loss Map invalid! Gear= " & Gear & ", nU= " & nU.ToString("0.00") & ", PeIn=" & PeInX.ToString("0.00") & ", PeOut=" & PeOut.ToString("0.00"), MsgSrc) WorkerAbort() Return 0 @@ -757,21 +757,21 @@ lbError: Else If PeInX > 0 Then - 'Antrieb => Schlepp: ERROR! + 'Drivetrain => Drag: ERROR! WorkerMsg(tMsgID.Err, "Transmission Loss Map invalid! Gear= " & Gear & ", nU= " & nU.ToString("0.00") & ", PeIn=" & PeInX.ToString("0.00") & ", PeOut=" & PeOut.ToString("0.00"), MsgSrc) WorkerAbort() Return 0 Else - 'Schlepp => Schlepp + 'Drag => Drag WG = PeInX / PeOut End If End If - 'Mit Wirkungsgrad PeIn für original PeOut ausrechnen + 'Calculate efficiency with PeIn for original PeOut PeOut = PeIn * WG MODdata.ModErrors.TrLossMapExtr = "Gear= " & Gear & ", nU= " & nU.ToString("0.00") & " [U/min], MeIn=" & PToM(nU, PeIn).ToString("0.00") & " [Nm] (fwd)" @@ -835,7 +835,7 @@ lbError: Aux0.Filepath = AuxPathKV.Value.Path.FullPath If Not Aux0.Readfile Then - 'Meldung in Readfile() + 'Notificationin ReadFile() Return False End If @@ -931,7 +931,7 @@ lbAuxError: MsgSrc = "VEH/CdInit" - 'Falls Vair-Vorgabe in DRI aber nicht CdType= CdOfBeta dann Warnung + 'Warn If Vair specified in DRI but CdType != CdOfBeta If DRI.VairVorg Xor CdMode = tCdMode.CdOfBeta Then If DRI.VairVorg Then @@ -943,10 +943,10 @@ lbAuxError: End If - 'Falls konstanter Cd-Wert dann is nix zu tun + 'If Cd-value is constant then do nothing If CdMode = tCdMode.ConstCd0 Then Return True - 'Inputdatei einlesen + 'Read Inputfile file = New cFile_V3 If Not file.OpenRead(CdFile.FullPath) Then @@ -993,7 +993,7 @@ lbAuxError: Private Function CdIntpol(ByVal x As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If CdX(0) >= x Then If CdX(0) > x Then If CdMode = tCdMode.CdOfBeta Then @@ -1011,7 +1011,7 @@ lbAuxError: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x > x(imax) If CdX(i) < x Then If CdMode = tCdMode.CdOfBeta Then MODdata.ModErrors.CdExtrapol = "β= " & x @@ -1039,7 +1039,7 @@ lbInt: If RtType = tRtType.None Then Return True - 'Inputdatei einlesen + 'Read Inputfile file = New cFile_V3 If Not file.OpenRead(RtFile.FullPath) Then WorkerMsg(tMsgID.Err, "Failed to read Retarder input file! (" & RtFile.FullPath & ")", MsgSrc) @@ -1101,7 +1101,7 @@ lbInt: Private Function RtIntpol(ByVal nU As Single) As Single Dim i As Int32 - 'Extrapolation für x < x(1) + 'Extrapolation for x < x(1) If RtnU(0) >= nU Then If RtnU(0) > nU Then MODdata.ModErrors.RtExtrapol = "n= " & nU & " [U/min]" i = 1 @@ -1113,7 +1113,7 @@ lbInt: i += 1 Loop - 'Extrapolation für x > x(imax) + 'Extrapolation for x> x(imax) If RtnU(i) < nU Then MODdata.ModErrors.RtExtrapol = "n= " & nU & " [U/min]" lbInt: diff --git a/VECTO/MODcalc/Em Calc.vb b/VECTO/MODcalc/Em Calc.vb index 60ee2f2702a48a6840466dc01ac9da368822a242..fd4f66bc13dc0487c69580b650e80e7e26aa6666 100644 --- a/VECTO/MODcalc/Em Calc.vb +++ b/VECTO/MODcalc/Em Calc.vb @@ -98,7 +98,7 @@ Public Class cEm EmL = New List(Of Single) - 'Ersten zwei sekunden keine Korrektur: + 'Normal interpolation EmL.Add(KV.Value.RawVals(0)) If MODdata.tDim > 0 Then @@ -182,7 +182,7 @@ Public Class cEm Return False End If - 'Dictionaries erstellen + 'First two seconds, no correction: For Each EmKV0 In DRI.EmComponents If EmComp.ContainsKey(EmKV0.Key) Then EmMesMW.Add(EmKV0.Key, 0) @@ -205,7 +205,7 @@ Public Class cEm TCMW.Add(TCKV.Key, 0) Next - 'Summen ermitteln + 'Create Dictionaries For Each EAcomp0 In EAcomp DriEmRef = DRI.EmComponents(EAcomp0) @@ -217,7 +217,7 @@ Public Class cEm Next - 'Mittelwerte + 'Calculate sums For Each EAcomp0 In EAcomp EmMesMW(EAcomp0) /= MODdata.tDim + 1 @@ -240,7 +240,7 @@ Public Class cEm file.WriteLine("Cycle average results") file.WriteLine("EmComp,Unit,Meas,Sim,Diff,Delta,R" & ChrW(178)) - '************************************ 'Zyklus-Mittelwerte '************************************ + '************************************ 'Mean-values For Each EAcomp0 In EAcomp s.Length = 0 @@ -255,13 +255,13 @@ Public Class cEm s.Append("," & DRI.EmComponents(EAcomp0).Unit) End If - '***** Messwert + '***** Cycle Mean-values ************************************ s.Append("," & EmMesMW(EAcomp0)) - '***** PHEM-Wert + '***** Measurement-value s.Append("," & EmSimMW(EAcomp0)) - '***** Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur! + '***** PHEM value s.Append("," & EmSimMW(EAcomp0) - EmMesMW(EAcomp0)) '***** Delta @@ -276,23 +276,23 @@ Public Class cEm a = New List(Of Double) b = New List(Of Double) - 'Über x Sekunden gemittelte Werte berechnen und sofort au + 'Diff - CAUTION: No Pnom normalization! Beware of the Dynamic-correction! For t = isinterv To MODdata.tDim Step isinterv - 'Null setzen + 'Average values over x seconds and imediately put au EmMesMW(EAcomp0) = 0 EmSimMW(EAcomp0) = 0 - 'Aufsummieren + 'Set to zero For t1 = (t - isinterv) To t - 1 EmMesMW(EAcomp0) += DRI.EmComponents(EAcomp0).RawVals(t1) / isinterv EmSimMW(EAcomp0) += EmComp(EAcomp0).FinalVals(t1) / isinterv Next - 'Messwert + 'Messwert |@@| Accumulate(Aufsummieren) a.Add(CDbl(EmMesMW(EAcomp0))) - 'PHEM-Wert + 'Measurement-value b.Add(CDbl(EmSimMW(EAcomp0))) Next @@ -308,7 +308,7 @@ Public Class cEm Next - '************************************ Modale Ausgabe '************************************ + '************************************ PHEM-value file.WriteLine(" ") file.WriteLine("Modal results averaged over " & isinterv & " seconds.") @@ -321,15 +321,15 @@ Public Class cEm DriEmRef = DRI.EmComponents(EAcomp0) - 'Messwert + 'Dump Modal '************************************ s.Append("," & DriEmRef.Name & "_Meas") sU.Append("," & DriEmRef.Unit) - 'PHEM-Wert + 'Measurement-value s.Append("," & EmComp(EAcomp0).Name & "_PHEM") sU.Append("," & EmComp(EAcomp0).Unit) - 'Diff - ACHTUNG: Keine Pnenn-Normierung! Vorsicht bei Dynamik-Korrektur! + 'PHEM-value s.Append("," & DriEmRef.Name & "_Diff") If UnitsErr.ContainsKey(EAcomp0) Then sU.Append(",?!") @@ -348,14 +348,14 @@ Public Class cEm sU.Append("," & "-") Next - 'Header und Units schreiben + 'Diff - CAUTION: No Pnominal-normalized! Beware of the Dynamic-correction! file.WriteLine(s.ToString) file.WriteLine(sU.ToString) - 'Über x Sekunden gemittelte Werte berechnen und sofort au + 'Header and write units For t = isinterv To MODdata.tDim Step isinterv - 'Null setzen + 'Average Values over x seconds and imediately set au For Each EAcomp0 In EAcomp EmMesMW(EAcomp0) = 0 EmSimMW(EAcomp0) = 0 @@ -368,7 +368,7 @@ Public Class cEm TCMW(TCKV.Key) = 0 Next - 'Aufsummieren + 'to zero For t1 = (t - isinterv) To t - 1 pe += MODdata.Pe(t1) / isinterv @@ -385,7 +385,7 @@ Public Class cEm Next - 'Ausgabe + 'Ausgabe |@@| Accumulati(Aufsummieren) s.Length = 0 s.Append(CStr(DRI.t0 + t - ((isinterv - 1) / 2) - 1)) @@ -396,10 +396,10 @@ Public Class cEm For Each EAcomp0 In EAcomp - 'Messwert + 'Output s.Append("," & EmMesMW(EAcomp0)) - 'PHEM-Wert + 'Measurement-values s.Append("," & EmSimMW(EAcomp0)) 'Diff @@ -560,8 +560,8 @@ Public Class cTC For i = 1 To MODdata.tDim Pfind = 0 - 'C Lastwechsel (allgemeine Bedingung ausser bei Intervallen mit - 'C Konstantfahrt: + 'C PHEM-value + 'C Konstantfahrt: |@@| Load-cycle(lastwechsel) (general Qualification(Bedingung ) except for Intervals with 'C If i = MODdata.tDim Then LWja = 0 @@ -569,10 +569,10 @@ Public Class cTC LWja = (Pe(i + 1) - Pe(i)) * (Pe(i) - Pe(i - 1)) End If 'C - 'C Damit werden Trapezfoermige Zyklen nicht als lastwechsel erkannt - 'C da LWje = 0. In diesem fall wird voraus der naechste Wert gesucht, - 'C der nicht gleich Pe(jz) ist. Dieser wird anstelle von Pe(jz+1) - 'C gesetzt: + 'C Damit werden Trapezfoermige Zyklen nicht als lastwechsel erkannt |@@| Constant-traveling: + 'C da LWje = 0. In diesem fall wird voraus der naechste Wert gesucht, |@@| Thus Trapezoid-Cycles are not recognized as Load-cycle(lastwechsel) + '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, + 'C gesetzt: |@@| which is not equal to Pe(jz). If i = MODdata.tDim Then For js = i + 2 To MODdata.tDim If (Pe(js) <> Pe(i)) Then @@ -600,23 +600,23 @@ Public Class cTC End If 'C - 'C lastwechsel werden nur als solche gezaehlt, wenn sie mehr als 0.05% von - 'C Pnenn betragen (sonst ist Ergebnis viel zu wackelig): - 'C (Lastwechsel wird gezaehlt, wenn LWja < 0) + 'C lastwechsel werden nur als solche gezaehlt, wenn sie mehr als 0.05% von |@@| This will replace Pe(jz +1): + 'C Pnenn betragen (sonst ist Ergebnis viel zu wackelig): |@@| Load-cycles(lastwechsel) are accounted as such only if they exceed 0.05% of Pnom + 'C (Lastwechsel wird gezaehlt, wenn LWja < 0) |@@| otherwise Outcome is too unstable): 'C If (LWja > -0.0005) Then LWja = 0.1 'C - 'C (1) Mittlere Amplitude vom Pe-Verlauf ("Ampl") - 'C Zwischenrechnung fue Zyklusmittelwert: + 'C (1) Mittlere Amplitude vom Pe-Verlauf ("Ampl") |@@| accounted as Load-cycle(lastwechsel) when LWja < 0) + 'C Zwischenrechnung fue Zyklusmittelwert: |@@| 1) Mean Amplitude of the running(Verlauf) Pe ("Ampl") 'C If (LWja < 0) Then LWzahl = LWzahl + 1 maxmin(LWzahl) = Pe(i) End If 'C - 'C Berechnung der mittleren Amplitude in 3 Sekunden vor Emission (Ampl3s) - 'C und der Anzahl der Pe-Sekundenschritten ueber 3% der Nennleistung - 'C (LW3p3s): + 'C Berechnung der mittleren Amplitude in 3 Sekunden vor Emission (Ampl3s) |@@| Intermediate calculation of Cycle-average: + 'C und der Anzahl der Pe-Sekundenschritten ueber 3% der Nennleistung |@@| Calculate the mean Amplitude in 3 seconds of(vor) Emissions (Ampl3s) + 'C (and the number of Second-steps where Pe is 3% above the Nominal-power LW3p3s(i) = 0 If (i < 2) Then Ampl3s(i) = Pe(i) - Pe(i - 1) @@ -661,7 +661,7 @@ Public Class cTC If (Ppos(i) <= 0) Then Ppos(i) = 0 End If - 'C Mittelwert 3 sec. vor Emission: + 'C 2) Change the current Engine-power (dP_2s): If (i >= 2) Then Ppos3s(i) = (Ppos(i) + Ppos(i - 1) + Ppos(i - 2)) / 3 ElseIf (i = 2) Then @@ -669,7 +669,7 @@ Public Class cTC ElseIf (i = 1) Then Ppos3s(i) = Ppos(i) End If - 'C Gezaehlt nur bei dynamischem betrieb: + 'C Gezaehlt nur bei dynamischem betrieb: |@@| Average 3 sec of(vor) Emission: xcheck = dP_2s(i) * dP_2s(i) If (xcheck >= 0.0000001) Then Ppos3s(i) = Ppos3s(i) @@ -678,13 +678,13 @@ Public Class cTC End If 'C 'C - 'C (4) Mittelwert der negativen Motorleistung ("PnegMW"): + 'C (Counted only in dynamic operation: 'C Pneg(i) = Pe(i) If (Pneg(i) >= 0) Then Pneg(i) = 0 End If - 'C Mittelwert 3 sec. vor Emission: + 'C 4) Average of the negative Engine-power ("PnegMW"): If (i >= 2) Then Pneg3s(i) = (Pneg(i) + Pneg(i - 1) + Pneg(i - 2)) / 3 ElseIf (i = 2) Then @@ -692,7 +692,7 @@ Public Class cTC ElseIf (i = 1) Then Pneg3s(i) = Pneg(i) End If - 'C Gezaehlt nur bei dynamischem betrieb: + 'C Gezaehlt nur bei dynamischem betrieb: |@@| Average 3 sec of(vor) Emission: xcheck = dP_2s(i) * dP_2s(i) If (xcheck >= 0.0000001) Then Pneg3s(i) = Pneg3s(i) @@ -704,17 +704,17 @@ Public Class cTC 'C 'C - 'C Berechnung der absoluten Dynamikkenngroessen: - 'C Addition der Amplituden von Pe (1. Pe-Wert - 'C wird fuer Amplitude auch als Maxima bzw. Minima gezaehlt) - 'C 1. Sekunde: + 'C Counted only in dynamic operation: + 'C Addition der Amplituden von Pe (1. Pe-Wert |@@| Calculation of absolute Dynamic-map sizes: + 'C Addition of Pe Amplitudes (1 Pe-Value + 'C is counted also for Maxima and for Minima Amplitudes ) If (LWzahl >= 1) Then 'C - 'C 2. Sekunde bis Ende: + 'C First Second: For i = 2 To LWzahl Ampl0(i) = maxmin(i) - maxmin(i - 1) - 'C Absolutwert: + 'C 2. Second to End: If (Ampl0(i) < 0) Then Ampl0(i) = Ampl0(i) * (-1) End If @@ -789,7 +789,7 @@ Public Class cTC Next i - 'Geschw./Beschl.-abhängige Parameter nur wenn nicht Eng-Only + 'Absolute-value: If Not GEN.VehMode = tVehMode.EngineOnly Then For i = 0 To MODdata.tDim dynV(i) = MODdata.Vh.V(i) @@ -802,14 +802,14 @@ Public Class cTC Next i End If - 'Dynamikparameter als Differenz zu Dynamik in Kennfeld - ' ...war früher hier. Jetzt eigene Methode weil bei KF-Erstellung ungültig + 'Speed/Accel-dependent parameters only when not Eng-Only + ' ...Dynamic-parameters as the Differential of Dynamics of the Map Calculated = True End Sub - 'Dynamikparameter als Differenz zu Dynamik in Kennfeld: + 'was here before. Now in its own method because of KF-creation invalidity Public Sub CalcDiff() Dim i As Integer @@ -835,7 +835,7 @@ Public Class cTC End Class ''' <summary> -''' Klasse zur Berchnung der Abgastemperaturen +''' Dynamic parameters as the Differential of Dynamics in the Map: ''' </summary> ''' <remarks></remarks> Public Class cEXS @@ -843,7 +843,7 @@ Public Class cEXS Private TempMod() As cTempMod Private ModAnz As Int16 - '! Felder für Größen aus PHEM Hauptprogramm + '! Class for calculating the Exhaust-temperatures Private vehspe(izykt) As Single Private nnorm As List(Of Single) Private p_norm As List(Of Single) @@ -892,9 +892,9 @@ Public Class cEXS Public Xis(100) As Single Public Yis(100) As Single - '**** Einlesen von tgas aus .npi (Projekt HERO) **** - ' => überschreibt tgas(jz) aus HtMass() - ' Luz/Rexeis 16.05.2011 + '**** Einlesen von tgas aus .npi (Projekt HERO) **** |@@| Fields for Quantities from PHEM main-program + ' => Reading about tgas from .npi (Project HERO) **** + ' Luz/Rexeis 16.05.2011 |@@| overwrites tgas(jz) over(aus) HtMass() Private t_gas1npi() As Single Private t_gas2npi() As Single '*************************************************** @@ -913,12 +913,12 @@ Public Class cEXS ''' </summary> ''' <remarks></remarks> Public Function Exs_Main() As Boolean 'aufzurufen im PHEM-Ablauf nach Dynamikkorrektur und vor Summenbildung - '! Aufruf von Exs_Main(true) -> Developer Version ohne PHEM Hauptprogramm + '! Main-routine for EXS module Dim ii As Long, ij As Long, Diff As Single Dim t1 As Long - '! Felder für Größen aus exs-File + '! Calling from Exs_Main(true) -> Developer Version without PHEM main-program Dim iMod As Int16, iSchad As Int16 Dim efm_mode As Int16, cap_norm As Single, t_inl As Single, p_rel_inl As Single, fp4_efm As Single Dim dummy As String = "" @@ -948,33 +948,33 @@ Public Class cEXS MsgSrc = "EmCalc/EXS/Main" '------------------------------------------------------------------------------------------ - 'Allgemeine Konstanten + 'Fields for Quantities from exs-file Pi_ = 3.1416 St_Boltz = 0.0000000567 'Stephan-Boltzmann Konstante R_air = 287.0 '!Gaskonstante Luft [J/(kg*K)] - '!Stoffwerte Abgas: - '!unempfindlich gg. lambda, siehe "Stoffwerte_vollständigeVerbrennung_neu.xls" + '!General Constants + '!Exhaust Physical-values: R_exh = 288.2 '!Gaskonstante Abgas [J/(kg*K)] - '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 + 'insensitive vs. lambda, see "Stoffwerte_vollständigeVerbrennung_neu.xls" Pr_exh = 0.73 '!Prandtlzahl [-] '! cp_steel = 460.0 '!Wärmekapazität Edelstahl [J/(kg*K)] rho_steel = 7860.0 '!Dichte Edelstahl [[kg/m3] hc_soot = 0.15 '!Wärmeleitfähigkeit Russ [W/(mK)] "in loser Schichtung" - '!Anmerkung: Mittelwertwert aus Internetrecherche, in Literatur keine Angaben gefunden - '!kalibriert anhand Test an Thermoelement unter Annahme von Schichtdicke 0.1mm + '!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 - 'Reaktionsenthalpien in J/mol + 'Reaktionsenthalpien in J/mol |@@| calibrated based on Test Thermocouple assuming Coating-thickness(Schichtdicke) 0.1mm H_reak_co = 283200.0 H_reak_nox = 1928000.0 H_reak_hc = 483000.0 - 'Molmassen + 'Molmassen |@@| Reaction-enthalpies in J/mol M_co = 28.0 M_nox = 46.0 M_hc = 42.0 - 'Kompatibilität mit alter EXS-Strkutur. Bevor neues Konzept für Em-Komponenten mit cMAP-Klasse, tMapComp, etc. eingeführt wurde + 'Molecular-weights eNOxOK = MODdata.Em.EmDefComp.ContainsKey(tMapComp.NOx) eHCOK = MODdata.Em.EmDefComp.ContainsKey(tMapComp.HC) eCOOK = MODdata.Em.EmDefComp.ContainsKey(tMapComp.CO) @@ -982,7 +982,7 @@ Public Class cEXS eEk1OK = MODdata.Em.EmDefComp.ContainsKey(tMapComp.PN) eEk2OK = MODdata.Em.EmDefComp.ContainsKey(tMapComp.NO) - 'Verweise auf Emissionen: Gegebene falls vorhanden sonst die berechneten + 'Compatibility with old EXS-structure Introduced before the new Concept for Em-components with cMap-class tMAP-class, etc. If DRI.EmComponents.ContainsKey(sKey.MAP.HC) Then HC = DRI.EmComponents(sKey.MAP.HC).FinalVals Else @@ -1003,7 +1003,7 @@ Public Class cEXS t1 = MODdata.tDim - 'Dimensionieren: + 'References for Emissions: The given, if available, otherwise the calculated ReDim vehspe(t1) @@ -1022,8 +1022,8 @@ Public Class cEXS n_iter = 0 'Zählvariable für Iterationen zur Berechnung der zyklusrepräsentativen Starttemperaturen - 'Übergabe der relevanten Größen aus dem PHEM Hauptprogramm - 'In DEV direkt aus der Datei *.phe eingelesen + 'Dimensioning: + 'In DEV direkt aus der Datei *.phe eingelesen |@@| Return of the relevant Quantities from(aus) the PHEM main-program PathTer = MODdata.ModOutpName & ".ter" 'Left(JobFile, Len(JobFile) - 4) & ".ter" p_rated = VEH.Pnenn @@ -1042,7 +1042,7 @@ Public Class cEXS rpm = MODdata.nU tqs = MODdata.Em.EmDefComp(tMapComp.ExhTemp).FinalVals - 'Lambda + 'Read in DEV directly from the *. phe file If MAP.EmDefRef.ContainsKey(tMapComp.Lambda) Then LambdaGegJa = True lambda = MODdata.Em.EmDefComp(tMapComp.Lambda).FinalVals @@ -1053,7 +1053,7 @@ Public Class cEXS End If '------------------------------------------------------------------------------------------ - 'Anfang exs-File einlesen + 'Anfang exs-File einlesen |@@| It is allocated below because there must be further mpexh If Not DatExs.OpenRead(GEN.PathExs) Then WorkerMsg(tMsgID.Err, "Failed to open file '" & GEN.PathExs & "'!", MsgSrc) DatExs = Nothing @@ -1069,23 +1069,23 @@ Public Class cEXS cap_norm = CSng(DatExs.ReadLine(0)) t_inl = CSng(DatExs.ReadLine(0)) p_rel_inl = CSng(DatExs.ReadLine(0)) - 'dummy = DatExs.ReadLine(0) 'alte dummy zeilen: auf exs-file kompatibilität achten + 'Begin readning exs-file 'dummy = DatExs.ReadLine(0) 'dummy = DatExs.ReadLine(0) fp4_efm = CSng(DatExs.ReadLine(0)) cap = cap_norm * p_rated 'Hubraum in [liter] - 'Initialisieren der entsprechenden Anzahl an Modulen + 'dummy = DatExs.ReadLine(0) 'old dummy line: caution for exs-file compatibility ReDim TempMod(ModAnz) For iMod = 1 To ModAnz TempMod(iMod) = New cTempMod(iMod, Me) Next - 'Lesen der Datenblöcke je Modul + 'Initialize the respective Number of Modules For iMod = 1 To ModAnz If Not TempMod(iMod).Read(DatExs) Then 'Dabei werden auch KonvMods initialisiert & Fileköpfe der entsprechenden Ausgabefiles geschrieben - 'Fehlermelderung in TempMod(iMod).Read(DatExs) + 'Reading of the Data-blocks for each Module DatExs.Close() DatExs = Nothing Return False @@ -1093,11 +1093,11 @@ Public Class cEXS Next DatExs.Close() - 'Ende exs-File einlesen + 'Error-message in TempMod(iMod).Read(DatExs) '------------------------------------------------------------------------------------------ If GEN.CoolantsimJa Then - 'Anfang csy-File einlesen + 'End reading exs-file If Not DatCsy.OpenRead(GEN.CoolantSimPath) Then WorkerMsg(tMsgID.Err, "Failed to open file '" & GEN.CoolantSimPath & "'!", MsgSrc) Return False @@ -1118,7 +1118,7 @@ Public Class cEXS t_start_m1_m2 = CSng(DatCsy.ReadLine(0)) 'Starttemperatur für Masse 1 und 2 DatCsy.Close() - 'Ende csy-File einlesen + 'Beginning reading csy-file '------------------------------------------------------------------------------------------ End If @@ -1130,13 +1130,13 @@ Public Class cEXS lb100: 'Rücksprunglabel für iterativen Berechnungsmodus '------------------------------------------------------------------------------------------ - 'Berechnungsschleife: je Zeitschritt /je Modul: 1. Temperaturen, 2.Konvertierungen + 'End reading csy-file While True - 'Sekündliche Ergebnisse werden in jeder Iteration ausgegeben + 'Calculation loop: Per Time-step / per Module: 1. Temperatures, 2. Conversions If Not (PHEMmode = tPHEMmode.ModeADVANCE) Then If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then - ' Header *.ter schreiben + ' Display per-second Results on each iteration Results DatTer.OpenWrite(PathTer, ",") DatTer.WriteLine("result-file for temperatures in the exhaust system") DatTer.WriteLine("VECTO " & VECTOvers) @@ -1156,7 +1156,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus DatTer.WriteLine(line1) DatTer.WriteLine(line2) - ' Header der KonvMods schreiben + ' Write Header *.ter For ii = 1 To ModAnz If TempMod(ii).ModTyp = 1 Or TempMod(ii).ModTyp = 2 Then TempMod(ii).KonvMod.Header() @@ -1166,12 +1166,12 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If End If - 'startwerte für kühlersimulation: + 'Write the Header for KonvMods t_mass1(0) = t_start_m1_m2 t_mass2(0) = t_start_m1_m2 - 'Wärmeeintrag ins Kühlsystem (Kennfeld) + 'Start-values ​​for Cooling-system simulation: If GEN.CoolantsimJa Then If MODdata.Em.EmDefComp.ContainsKey(tMapComp.Qp_coolant) Then qp_coolant = MODdata.Em.EmDefComp(tMapComp.Qp_coolant).FinalVals @@ -1186,26 +1186,26 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus For jz = 0 To t1 - 'Kühlsystem Simulation + 'Heat transfer into the Cooling-system (Map) If GEN.CoolantsimJa Then - 'Wärmeeinträge in Massen 1 und 2 + 'Cooling-System Simulation qp_coolant1(jz) = ratio_h_to_m1 * qp_coolant(jz) qp_coolant2(jz) = ratio_h_to_m2 * qp_coolant(jz) - 'Wärmeübergang Masse 1 und 2 ins Kühlsystem + 'Heat inputs in Masses 1 and 2 qp_loss1(jz) = alpha_A1 * (t_mass1(jz) - t_coolant) qp_loss2(jz) = alpha_A2 * (t_mass2(jz) - t_coolant) - 'Massentemperaturen für nächsten Zeitschritt + 'The Heat-transfer Mass 1 and 2 for Cooling -system If jz <> t1 Then t_mass1(jz + 1) = t_mass1(jz) + (qp_coolant1(jz) - qp_loss1(jz)) / (eng_mass1 * h_cap_mass1) t_mass2(jz + 1) = t_mass2(jz) + (qp_coolant2(jz) - qp_loss2(jz)) / (eng_mass2 * h_cap_mass2) End If - 'Wärmeverlust nach außen + 'Bulk-temperatures for the next Time-step qp_out(jz) = 0.21 * vehspe(jz) * surf_engine * (surf_temp_eng - t_amb) - 'Gesamtwärmeeintrag ins Kühlsystem (Ausgabewert der Kühlersimulation) + 'Heat-loss to the outside qp_loss(jz) = qp_loss1(jz) + qp_loss2(jz) - qp_out(jz) End If @@ -1215,20 +1215,20 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus mpexh(jz) = 0 Else If efm_mode = 0 Then - '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 + '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] mpexh_fc = ((14.7 * lambda(jz)) + 1) * fc(jz) / 3600000 - '!Fall 2: Berechnung aus durch Motor gepumpter Luftmenge + '!Case 1: Calculation of Consumption and lambda Vpexh_mot = ((cap / 1000) / 2) * (rpm(jz) / 60) zaehler = ((1 + (p_rel_inl / 1000)) * 100000) * Vpexh_mot nenner = (R_air * (t_inl + 273.15)) mpexh_mot = zaehler / nenner mpexh(jz) = Math.Max(mpexh_fc, mpexh_mot) ElseIf efm_mode = 1 Then - 'Es fehlt: Methodik Massenstromberechnung für AGR Motoren BMW HERO Projekt + 'Case 2: Calculation of pumped Airflow through engine mpexh(jz) = MODdata.Em.EmDefComp(tMapComp.MassFlow).FinalVals(jz) Else WorkerMsg(tMsgID.Err, "Ungültige Auswahl für Abgasmassenstromberechnung", MsgSrc) @@ -1236,7 +1236,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If End If - 'Lambda berechnen falls nicht explizit gegeben + 'Missing: Methodology for Mass-flow calculation for EGR Engines BMW HERO Project If Not LambdaGegJa Then If fc(jz) < 1 Then lambda.Add(1000) @@ -1249,8 +1249,8 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus '-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!- '------------------------------------------------------------------------------------------ - 'Erstes Modul im Abgasstrang kann kein katalytisch aktives Element sein, - 'daher sind die Emissionen immer gleich der Rohemissionen aus dem PHEM-Hauptprogramm + 'Calculate Lambda if not explicitly given + 'The First Module in the Exhausts-system may not be a catalytically active Element, If eNOxOK Then TempMod(1).eEmKomp(2, jz) = NOx(jz) If eHCOK Then TempMod(1).eEmKomp(3, jz) = HC(jz) If eCOOK Then TempMod(1).eEmKomp(4, jz) = CO(jz) @@ -1266,15 +1266,15 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus TempMod(iMod).KonvMod.Konv(jz) 'Berechnung Konvertierung der Emissionskomponenten If (TempMod(iMod).ModTyp = 2) Then - 'Qp_reak berechnen: massenstrom * konvertierungsrate * reaktionsenthalpie / molmasse + 'therefore, emissions are always equal to the untreated emissions from the PHEM main-program TempMod(iMod).Qp_reak(jz) = CO(jz) / 3600 * TempMod(iMod).KonvMod.KonvRate(tMapComp.CO)(jz) * H_reak_co / M_co + _ HC(jz) / 3600 * TempMod(iMod).KonvMod.KonvRate(tMapComp.HC)(jz) * H_reak_hc / M_hc + _ NOx(jz) / 3600 * TempMod(iMod).KonvMod.KonvRate(tMapComp.NOx)(jz) * H_reak_nox / M_nox - 'Schadstoffkomponente berechnen + 'Calculate Qp_reak: Mass-flow-rate * Conversion * Reactive-enthalpy / molar-mass For iSchad = 2 To 8 TempMod(iMod).eEmKomp(iSchad, jz) = TempMod(iMod - 1).eEmKomp(iSchad, jz) Next iSchad - 'Konvertierung von NOx, CO, HC -> alter Wert * (1-Konvertierungsrate) + 'Compute Pollutant-components TempMod(iMod).eEmKomp(2, jz) = TempMod(iMod - 1).eEmKomp(2, jz) * (1 - TempMod(iMod).KonvMod.KonvRate(tMapComp.NOx)(jz)) TempMod(iMod).eEmKomp(3, jz) = TempMod(iMod - 1).eEmKomp(3, jz) * (1 - TempMod(iMod).KonvMod.KonvRate(tMapComp.HC)(jz)) TempMod(iMod).eEmKomp(4, jz) = TempMod(iMod - 1).eEmKomp(4, jz) * (1 - TempMod(iMod).KonvMod.KonvRate(tMapComp.CO)(jz)) @@ -1288,7 +1288,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If Else - 'Falls Modul kein Konv-Element hat ändert sich nix (Anmerkung: Modul 1 hat immer ModTyp0) + 'Conversion of NOx, CO, HC -> old value * (1-conversion-rate) If iMod > 1 Then TempMod(iMod).Qp_reak(jz) = 0 @@ -1301,7 +1301,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Next - 'Zeile in *.ter schreiben + 'Zeile in *.ter schreiben |@@| If Module has no Conv-element changes nothing (Note: Module 1 has always ModTyp0) If Not (PHEMmode = tPHEMmode.ModeADVANCE) Then If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then line1 = jz & "," & vehspe(jz) & "," & nnorm(jz) & "," & p_norm(jz) & "," & rpm(jz) & "," & fc(jz) & "," & lambda(jz) & "," & mpexh(jz) & "," & tqs(jz) @@ -1320,10 +1320,10 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus '------------------------------------------------------------------------------------------ Next - 'Ende Berechnungsschleife + 'Write Line in *.ter. '---------------------------------------------------------------------------------------------- - 'Alle sekündlichen Ergebnisfiles zumachen + 'End Calculation-loop If Not (PHEMmode = tPHEMmode.ModeADVANCE) Then If Not (PHEMmode = tPHEMmode.ModeBATCH) Or Cfg.ModOut Then DatTer.Close() @@ -1335,10 +1335,10 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If End If - '---------- Abfrage Rücksprung im iterativen Berechnungsmodus für Starttemp ------------------- + '---------- Close all second-by-second Result-files If (iter_mode = True) Then - 'Abbruchbedingung: Temperatur des Massenelementes "t_m" des in "iter_pos" spezifizierten Moduls - 'am Beginn und am Ende des Zyklus innerhalb vorzugebender Bandbreite "iter_tol" + 'Abbruchbedingung: Temperatur des Massenelementes "t_m" des in "iter_pos" spezifizierten Moduls |@@| Query return in the iterative Calculation-mode for Starttemp ------------------- + '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 Diff = Math.Abs(TempMod(iter_pos).t_m(t1) - TempMod(iter_pos).t_m(0)) If (Diff > iter_tol) Then n_iter = n_iter + 1 @@ -1414,12 +1414,12 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus MODdata.Em.EmDefComp(tMapComp.NO).FinalVals = Em0 End If - '--- Ausgabefile *.ter schreiben ---------------------------------------------------------- + '--- Ausgabefile *.ter schreiben ---------------------------------------------------------- |@@| at the Beginning and End of the Cycle within vorzugebender bandwidth "iter_tol" - '--- Ende Ausgabefile *.ter schreiben ----------------------------------------------------- + '--- Write Output-file *. Ter --------------------------------------------- ------------- - 'Aufräumen + 'End wrtting Output-file *. ter -------------------------------------------- --------- TempMod = Nothing Return True @@ -1428,9 +1428,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ''' <summary> - ''' Klasse für Temperaturmodule + ''' Clean up ''' </summary> - ''' <remarks>Art des Moduls wird mit ModTyp definiert</remarks> + ''' <Class for Temperature-modules Class cTempMod Dim Id As Int16 Public ModTyp As Int16, PathConv As String, m_norm As Single, heat_cap_m As Single, t_m_init As Single 'Normierte Masse, Wärmekapazität Masse, Starttemp. Masse @@ -1489,9 +1489,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End Sub ''' <summary> - ''' Einlesen der EXS-Datei + ''' remarks>Type of module is defined with Mod\typ </remarks> ''' </summary> - ''' <param name="Datei">Dateihandler</param> + ''' <Reading the EXS file ''' <remarks></remarks> Public Function Read(ByVal Datei As cFile_V3) As Boolean Dim TmAbkPfad As String = "" @@ -1509,7 +1509,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ModTyp = CShort(Datei.ReadLine(0)) End If - 'Pfad für Konvertierungsraten bei Modulen mit Konvertierung + 'Pfad für Konvertierungsraten bei Modulen mit Konvertierung |@@| param name="Datei"> File-handler </param> If ModTyp = 1 Or ModTyp = 2 Then PathConv = Datei.ReadLine(0) PathConv = fFileRepl(PathConv, fPATH(GEN.PathExs)) @@ -1517,7 +1517,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus PathConv = "" End If - 'Initialisieren der Module & Einlesen des Parameterfiles je nach Modul + 'Path to Conversion-rates for Modules with Conversion Select Case ModTyp Case 0 'nach Turbolader m_norm = CSng(Datei.ReadLine(0)) @@ -1558,29 +1558,29 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus heat_cap_m = CSng(Datei.ReadLine(0)) t_m_init = CSng(Datei.ReadLine(0)) FlowTyp = CShort(Datei.ReadLine(0)) - 'Wärmeübergangsfaktor + 'Initialize the modules & Read the Parameter-files, depending on Module cht_norm = CSng(Datei.ReadLine(0)) - 'Oberfläche außen + 'Heat-transfer factor ext_surface = CSng(Datei.ReadLine(0)) - 'Emissivität + 'surface of exterior emissivity = CSng(Datei.ReadLine(0)) - 'Faktoren für Wärmeübergänge nach außen + 'Faktoren für Wärmeübergänge nach außen |@@| Emissivity A_fak = CSng(Datei.ReadLine(0)) B_fak = CSng(Datei.ReadLine(0)) C_fak = CSng(Datei.ReadLine(0)) - 'Faktoren für Temperaturzusammenhang t_katsubstrat <-> t_kat_außen + 'Factors for Heat-transfer to the outside T_relation_k = CSng(Datei.ReadLine(0)) T_relation_d = CSng(Datei.ReadLine(0)) - 'Abkühlkurve Masse + 'Factors for Temperature related t_katsubstrat <-> t_kat_außen TmAbkPfad = Datei.ReadLine(0) - 'normierte Querschnittsfläche + 'Cooling-mass curve cs_norm = CSng(Datei.ReadLine(0)) - 'durchschnittlicher Gegendruck + 'Normalized Cross-sectional area p_rel_bk = CSng(Datei.ReadLine(0)) - 'Durchmesser Thermoelement + 'Durchmesser Thermoelement |@@| average backpressure(Gegendruck) d_tc = CSng(Datei.ReadLine(0)) d_soot = CSng(Datei.ReadLine(0)) - 'Abkühlkurve Thermoelement + 'Thermocouple Diameter TtcAbkPfad = Datei.ReadLine(0) Case 3 'Rohrmodul @@ -1592,7 +1592,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus t_m_init = CSng(Datei.ReadLine(0)) cht_norm = CSng(Datei.ReadLine(0)) emissivity = CSng(Datei.ReadLine(0)) - 'Faktoren für Wärmeübergänge nach außen + 'Thermocouple Cooling-curve A_fak = CSng(Datei.ReadLine(0)) B_fak = CSng(Datei.ReadLine(0)) TmAbkPfad = Datei.ReadLine(0) @@ -1618,7 +1618,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus TtcAbkPfad = Datei.ReadLine(0) End Select - 'Check ob Tgas in Zyklus gegeben: + 'Heat-transfer-Factors to the outside If Id > 1 Then bTgasGegJa = DRI.ExsCompDef(tExsComp.Tgas, Id) If bTgasGegJa = True Then @@ -1626,7 +1626,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If End If - 'Entnormierungen und Berechnung weiterer Größen + 'Check whether Tgas given in Cycle: If ModTyp <> 3 Then @@ -1635,7 +1635,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus d_pipe = ((4 * cs_pipe) / myEXS.Pi_) ^ 0.5 'Rohrdurchmesser in mm Cht = cht_norm * d_pipe 'WÜ-Faktor prop. Rohrdurchmesser Else - 'Zusätzlich berechnete Parameter für Rohrmodule: + 'Zusätzlich berechnete Parameter für Rohrmodule: |@@| Normalize(Entnormierungen) and Calculating other Variables ext_surface = d_pipe * 0.001 * myEXS.Pi_ * l_pipe * 0.001 'Oberfläche in m^2 mass = ext_surface * thickness_pipe * 0.001 * density 'Masse in kg cs_pipe = (d_pipe * 0.5) ^ 2 * myEXS.Pi_ 'Querschnitt in mm^2 @@ -1647,20 +1647,20 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Crad = crad_norm * myEXS.p_rated 'Abstrahlung prop. Nennleistung (Begründung siehe Diss) End If - 'Für Strömungsberechnungen in SI-Einheiten wird Querschnittsfäche in m2 umgerechnet + 'Additionally calculated parameters for Pipe-module: cs_pipe = cs_pipe * (0.001 ^ 2) - 'Geometrische Größen berechnen - 'Anmerkung: es wird davon ausgegangen, dass Temperatursensoren - 'mittig ins Rohr stehen + 'Geometrische Größen berechnen |@@| For Flow-calculations in SI-units is Querschnittsfäche converted into m2 + 'Geometrical Quantities calculated + 'Note: it is assumed that temperature sensors are cl_cyl = (d_tc * 0.001) * myEXS.Pi_ * 0.5 'char. Länge umström Zyl cs_tc = (((d_tc * 0.001) / 2) ^ 2) * myEXS.Pi_ 'QS-Fläche t-sensor [m2] m_tc = cs_tc * ((d_pipe / 2) * 0.001) * myEXS.rho_steel 'Masse t_sensor [kg] surf_tc = (d_tc * 0.001) * myEXS.Pi_ * (d_pipe * 0.001) / 2 'Oberfläche t-sensor - ' Anmerkung: Kugelkalotte an t-sensor spitze wird in der Betrachtung als - ' umströmter Zylinder vernachlässigt + ' centered in the Pipe + ' umströmter Zylinder vernachlässigt |@@| Note: Ball joint on t-sensor tip is neglected - 'Abkühlkurven einlesen + 'Abkühlkurven einlesen |@@| in the analysis of Airstream-cylinder If Trim(UCase(TmAbkPfad)) = sKey.NoFile Then If myEXS.n_iter = 0 And PHEMmode = tPHEMmode.ModeSTANDARD Then WorkerMsg(tMsgID.Warn, "EXS-Module " & Id & ": No cool down curve for mass component defined. Cool down calculation disabled.", MsgSrc) NoCoolDown = True @@ -1688,7 +1688,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End Function ''' <summary> - ''' Wärmeübergang Masse + ''' Read Cooling-curves ''' </summary> ''' <param name="jz">Zeit</param> ''' <remarks></remarks> @@ -1705,10 +1705,10 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Dim T_aussen As Single Dim Nus_exh As Single, Re_exh As Single - 'Festlegung Schwellwert für Genauigkeit der Temperaturberechnung (wird wegen iterativem Berechnungsmodus benötigt) + 'Heat-transfer mass dt_schwell = 0.01 - 'Übergabe Eintrittstemperatur des Abgases aus oberhalb liegendem Modul bzw. dem Motor + 'Setting Threshold for Precision of the Temperature-calculation (needed for iterative Calculation-mode) If Id = 1 Then t_gas_in = myEXS.tqs(jz) 'Motor Else @@ -1727,16 +1727,16 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ht_exp = 0.8 'Turbulente Strömung. Keine Abhängigkeit Wärmeübergang von Volume Flow End If - 'Berechnung der aktuellen Massentemperatur + 'Return the Inlet-temperature of the Exhaust-gas from the Module above or from the Engine If ((jz = 0) And (myEXS.n_iter = 0)) Then t_m(jz) = t_m_init '!Sekunde 1: Temperatur auf Startwert setzen - '! bei n_iter > 0 ist bereits der Endwert der letzten Iteration zugewiesen + '! Calculation of the current Mass-temperature ElseIf (jz > 0) Then dt_m = (Qp_exh(jz - 1) + Qp_loss(jz - 1) - Qp_reak(jz - 1)) / (mass * heat_cap_m) 'Reaktionswärme geht derzeit zu 100% in die Katmasse t_m(jz) = t_m(jz - 1) - dt_m End If - 'Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen: + '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 If MODdata.EngState(jz) = tEngState.Stopped Then t_gas(jz) = -1 Qp_exh(jz) = -1 @@ -1758,7 +1758,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus t_gas_out = 0.5 * (t_gas_in + t_m(jz)) t_gas_mid = 0.5 * (t_gas_in + t_gas_out) - 'Wärmekapazität (vgl. Bogdanic) + 'Wärmekapazität (vgl. Bogdanic) |@@| If Engine-OFF, wait Cooling-curve and exit method: cp_exh = 144.7 * (-3 * (0.0975 + (0.0485 / myEXS.lambda(jz) ^ 0.75)) * (t_gas_mid) ^ 2 / (10 ^ 6) + 2 * (7.768 + 3.36 / (myEXS.lambda(jz) ^ 0.8)) * (t_gas_mid) / (10 ^ 4) + (4.896 + 0.464 / (myEXS.lambda(jz) ^ 0.93))) + 287.7 Qp_exh(jz) = myEXS.mpexh(jz) * cp_exh * (t_gas_out - t_gas_in) t_gas(jz) = t_gas_out @@ -1777,7 +1777,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus t_unter = t_gas_in End If - 'Schleife für Iteration Wärmeübergang + 'Heat-capacity (see Bogdanic) While True i_iter = i_iter + 1 If i_iter > 1 Then @@ -1785,13 +1785,13 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If t_gas_out = 0.5 * (t_ober + t_unter) 'Solver halbiert fortschreitend Intervall, in dem die Temperatur des aus der Masse austretenden Abgases sein muss - ' Abbruchkriterium siehe unten + ' Iteration-loop for Heat-transfer If i_iter > 1 Then dt_konv = Math.Abs(t_gas_out - t_gas_out_alt) End If - 'Ermittlung der Temperatur des Abgases in der Mitte der Masse ("t_gas_mid") aus einem nichtlinearem (logaritmisch) Temperaturverlauf + 'Termination-criterion below delta_tin = t_m(jz) - t_gas_in delta_tout = t_m(jz) - t_gas_out delta_t = (delta_tin - delta_tout) / Math.Log(delta_tin / delta_tout) @@ -1800,24 +1800,24 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus vp_exh_mid = (myEXS.mpexh(jz) * myEXS.R_exh * (t_gas_mid + 273.15)) / ((1 + (p_rel_bk / 1000)) * 100000) If ModTyp <> 3 Then - 'Wärmeübergang Konvektion innen für alle Module (außer Rohr) + 'Determining the Temperature of the Exhaust-gas at the Center of Mass ("t_gas_mid") consists of a non-linear (logarithmic) Temperature-curve(verlauf) ht_factor = myEXS.hc_exh(t_gas_mid) * ((vp_exh_mid / myEXS.kv_exh(t_gas_mid)) ^ ht_exp) Qp_ht = Cht * ht_factor * delta_t 'Cht -> hier: Faktor für Wärmeübergang Else - 'für Rohrmodule: + 'Heat-transfer Convection inside all Modules (except for Pipe) Re_exh = d_pipe * 0.001 * (vp_exh_mid / cs_pipe) / myEXS.kv_exh(t_gas_mid) 'd_pipe in m - 'Nusselt Zahl: Dichte = 345/t_gas_mid, Term in Klammer: mu_Rohr / mu_Mitte + 'for Pipe-modules: Nus_exh = 0.027 * Re_exh ^ 0.8 * myEXS.Pr_exh ^ 0.333 * ((myEXS.kv_exh(t_gas_mid) * 345 / t_gas_mid) / (myEXS.kv_exh(t_m(jz)) * 345 / t_m(jz))) ^ 0.14 - 'Wärmeübergang (Konvektion innen), d_pipe in m: char. Länge + 'Nusselt Number: Density = 345/t_gas_mid, Term in Parenthesis: mu_Rohr / mu_Mitte Qp_ht = Cht * Nus_exh * ext_surface * (myEXS.hc_exh(t_gas_mid) / (d_pipe * 0.001)) * delta_t 'Cht -> hier: Faktor für Rohrkrümmung End If - 'Wärmekapazität (vgl. Bogdanic) + 'Heat-transfer (Convection inside) d_pipe, in m: char. Length cp_exh = 144.7 * (-3 * (0.0975 + (0.0485 / myEXS.lambda(jz) ^ 0.75)) * (t_gas_mid) ^ 2 / 10 ^ 6 + 2 * (7.768 + 3.36 / myEXS.lambda(jz) ^ 0.8) * (t_gas_mid) / 10 ^ 4 + (4.896 + 0.464 / myEXS.lambda(jz) ^ 0.93)) + 287.7 Qp_thd = myEXS.mpexh(jz) * cp_exh * (t_gas_out - t_gas_in) diffQp = Qp_ht - Qp_thd - 'Abbruchkriterium: Änderung der Abgas-Austrittstemperatur im Vergleich zum letzten Iterationsschritt kleiner Schwellwert + 'Heat-capacity (see Bogdanic) If dt_konv < dt_schwell Then AbbruchIter = True If AbbruchIter Then @@ -1835,55 +1835,55 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If - 'Berechnung der Wärmeverluste der "thermischen Masse" nach außen + 'Termination-criterion: Change of the Exhaust Outlet-temperature compared to the last Iteration-step smaller than Threshold If ModTyp = 2 Then '3-W Kat - '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 + '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 ' A = 7, B = 0.21, C = 8, k = 1, d = -340 - 'Empirische Formel, passt für alle Rollentests recht gut + 'Empirische Formel, passt für alle Rollentests recht gut |@@| Emiss = 0.5 'emissivity T_aussen = t_m(jz) - 340 - 'Anm.: Versuch mit direkter Abhängigkeit von t_m -> funktioniert nicht gut + 'Anm.: Versuch mit direkter Abhängigkeit von t_m -> funktioniert nicht gut |@@| Empirical formula, suitable for all OK Roll-tests - 'Wärmeverlust durch Strahlung + 'Note: Tests with direct Dependence on t_m -> does not work well Qp_loss_rad = C_fak * ext_surface * myEXS.St_Boltz * emissivity * ((T_aussen + 273.15) ^ 4 - (myEXS.t_amb + 273.15) ^ 4) - 'Wärmeverlust durch Konvektion + 'Heat-loss by Radiation Qp_loss_konv = (B_fak * myEXS.vehspe(jz) + A_fak) * ext_surface * (T_aussen - myEXS.t_amb) ElseIf ModTyp = 3 Then 'Rohr - '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 + '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 ' A = 7 ' B = 0.42 - ' Modul Nr. 4: - ' Oberfl_Mod4 = 0.103596481 'Oberfläche für Wärmeübergang in m^2 - ' Emiss = 0.9 'Emissivität + ' Modul Nr. 4: |@@| Emiss = 0.5 'emissivity + ' Module 4: + ' Emiss = 0.9 'Emissivität |@@| Oberfl_Mod4 = 0.103596481 'Surface for Heat-transfer in m^2 ' A = 7 ' B = 0 - 'Wärmeverlust durch Strahlung = Sichtfaktor * Emissivität * St.-Boltzm.-Konst * Oberfläche * (T_Rohr^4 - T_Umgebung^4) + 'Wärmeverlust durch Strahlung = Sichtfaktor * Emissivität * St.-Boltzm.-Konst * Oberfläche * (T_Rohr^4 - T_Umgebung^4) |@@| Emiss = 0.9 'emissivity Qp_loss_rad = emissivity * myEXS.St_Boltz * ext_surface * ((t_m(jz) + 273.15) ^ 4 - (myEXS.t_amb + 273.15) ^ 4) - 'Wärmeverlust durch Konvektion = Wärmeübergangskoeffizient * Oberfläche * (T_Rohr - T_Umgebung) + 'Heat-loss by Radiation = View_factor * Emissivity * St.-Boltzm.-const * Surface * (T_Pipe^4 - T_Environ^4) Qp_loss_konv = (B_fak * myEXS.vehspe(jz) + A_fak) * ext_surface * (t_m(jz) - myEXS.t_amb) Else - 'Standard: Crad konstant, keine Verluste durch Konvektion + 'Heat-loss by Convection = Heat_transfer_coefficient * Surface * (T_Pipe - T_Environ) Qp_loss_rad = Crad * (((t_m(jz) + 273.15) ^ 4) - ((myEXS.t_amb + 273.15) ^ 4)) Qp_loss_konv = 0 End If - 'Gesamtwärmeverlust + 'Standard: Crad constant, no Loss by Convection Qp_loss(jz) = Qp_loss_rad + Qp_loss_konv End Sub ''' <summary> - ''' Wärmeübergang Thermoelement + ''' Total-heat-loss ''' </summary> ''' <param name="jz">Zeit</param> ''' <remarks></remarks> @@ -1896,7 +1896,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus t_tc(0) = t_m(0) 'Als Startwert für das Thermoelement wird die Temperatur der thermischen Masse verwendet Else - 'Falls Motor Aus wird nach Abkühlkurve gerechnet und Methode verlassen: + 'Thermocouple-Heat-transfer If MODdata.EngState(jz) = tEngState.Stopped Then If NoCoolDown Then t_tc(jz) = t_tc(jz - 1) @@ -1909,7 +1909,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus vp_exh_tc = (myEXS.mpexh(jz) * myEXS.R_exh * (t_gas(jz) + 273.15)) / ((1 + (p_rel_bk / 1000)) * 100000) '!lokaler Volumenstrom im [m3/s] vms = vp_exh_tc / cs_pipe '!lokale Strömungsgeschwindigkeit [m/s] - '!Formelwerk Berechnung Wärmeübergang am umströmten Zylinder + '!Formelwerk Berechnung Wärmeübergang am umströmten Zylinder |@@| If Engine-OFF, wait for Cooling-curve and exit method: Re = (cl_cyl * vms) / myEXS.kv_exh(t_gas(jz)) Nu_lam = 0.664 * (Re ^ 0.5) * (myEXS.Pr_exh ^ 0.333) 'Nusselt laminar Nu_turb = 0.037 * ((Re ^ 0.8) * myEXS.Pr_exh) / (1 + 2.443 * (Re ^ (-0.1)) * ((myEXS.Pr_exh ^ 0.667) - 1)) 'Nusselt turbulent @@ -1918,10 +1918,10 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus alpha_conv = Nu_ave * myEXS.hc_exh(t_gas(jz)) / cl_cyl alpha_tot = 1 / ((1 / alpha_conv) + ((d_soot * 0.001) / myEXS.hc_soot)) - 'Vereinfachte Lösung der Wärmeflussgleichung für den t-sensor - 'entspricht einer Diffgl. für ein PT1 glied + 'Formula Calculating Heat-transfer-flow around the Cylinder + 'Simplified solution of the Heat-flow-equation for the t-sensor k_pt1 = (m_tc * myEXS.cp_steel) / (alpha_tot * surf_tc) - 'Zeitdiskrete Lösung der PT1-Diffgl + 'Zeitdiskrete Lösung der PT1-Diffgl |@@| corresponds to a Diffgl. for a PT1 section(glied) t_tc(jz) = (1 / (k_pt1 + 1)) * (t_gas(jz) + (k_pt1 * t_tc(jz - 1))) End If @@ -1988,7 +1988,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus i = 1 End If - ''Extrapolation für LastTemp > TempAr(0) + ''Discrete-time Solution of the PT1-Diffgl 'If TempAr(0) < LastTemp Then ' 'TODO: StatusMSG(8, "Extrapolation of Cool Down Temperature! t = " & jz & ", Temp(t-1) = " & LastTemp) ' i = 1 @@ -2000,9 +2000,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ' i += 1 'Loop - 'Extrapolation für LastTemp < TempAr(Adim) + 'Extrapolation for LastTemp > TempAR(0) - 'lbInt: + 'Extrapolation for LastTemp < TempAR(Adim) 'Interpolation If TempAr(i) - TempAr(i - 1) = 0 Then t = tAr(i - 1) @@ -2038,19 +2038,19 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Implements KonvInterf - 'Klasse initialisiert als Unterelement von TempMod + 'Klasse initialisiert als Unterelement von TempMod |@@| One Time-step forward(vor)( =1 second) Dim DatKonvOut As New cFile_V3 'PHEM SCR model result file Dim PathKonvOut As String = "" Dim t_SCR As Single - 'c Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur + 'c Class initialized as a Subelement of TempMod Dim ct_up As Single, cNOxraw As Single, cNOx60s As Single, cSV As Single - 'c Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird) + 'c Prefix "c" means: use Cycle-value for Characteristic-correction Dim denox_cc As Single, t_up_cc As Single, NOxraw_cc As Single, NOx60s_cc As Single, SV_cc As Single, deNOxmin As Single Dim deNOx_cor As Single '! deNOx-Wert nach Korrektur as single, vor End-Filterung as single Dim deNOx As Single '! Endwert zur Berechnung von NOx-tailpipe as single - 'Filename sekündliches Ausgabefile spezifizieren + 'Index "cc" means: Value of Charachteristic-curve (-> "c" - "cc" is the Derivative, corrected) Dim pt_SCR(izykt) As Single Dim pdeNOx(izykt) As Single @@ -2102,7 +2102,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Return False End If - 'Abbruch wenn kein NOx gegeben + 'Specify Filename for per-second Output-file If Not MAP.EmDefRef.ContainsKey(tMapComp.NOx) Then WorkerMsg(tMsgID.Err, "'NOx' not defined in emission map!", MsgSrc) Return False @@ -2123,7 +2123,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus DatKonvIn.ReadLine() iz = 0 - '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) + 'Abort if given no NOx Do While Not DatKonvIn.EndOfFile iz = iz + 1 line = DatKonvIn.ReadLine @@ -2146,9 +2146,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Public Sub Konv(ByVal jz As Integer) Implements KonvInterf.Konv ' ----------------------------------------------------------------------- - ' Programm zur Simulation SCR-Flottendurchschnitt - ' Anmerkung: deNOx-Werte kleiner als Null sind möglich: - ' dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld + ' 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: ' ----------------------------------------------------------------------- ' Dim is0 As Long @@ -2159,18 +2159,18 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus eNOx = MODdata.Em.EmDefComp(tMapComp.NOx).FinalVals ' ' ----------------------------------------------------------------- - ' 1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell + ' this corresponds to higher NOx-raw level than in the Base-map ' - ' 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 + ' 1.) Calculation of per-second Values ​​for Input-variables of the SCR-model + ' a.) t_SCR: combined-weight of t_upstream and t_downstream + ' Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben |@@| SCR-model-internally there are Temperatures between 50 ° C and 500 ° C limits t_SCR = ((1 - Sharetdown) * myEXS.TempMod(id - 1).t_tc(jz)) + (Sharetdown * myEXS.TempMod(id).t_tc(jz)) t_SCR = Math.Max(50.001, t_SCR) t_SCR = Math.Min(499.999, t_SCR) ' - ' b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit - ' Formel gilt auch für die ersten 20 Sekunden + ' Temperature-model-values (eg Cold-start) will not be overwritten + ' b.) t_up, NOxraw, SV. 20s Moving-average in the past ' ct_up = 0 cNOxraw = 0 @@ -2184,21 +2184,21 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus cNOxraw = cNOxraw / (jz - Math.Max(0, jz - 19) + 1) cSV = cSV / (jz - Math.Max(0, jz - 19) + 1) ' - ' c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen - ' Formel gilt auch für die ersten 60 Sekunden + ' Formula applied also to the first 20 seconds + ' c.) NOx60s: Sum over the last 60s of the specific NOx-raw emissions cNOx60s = 0 For is0 = Math.Max(0, jz - 59) To jz cNOx60s = cNOx60s + (eNOx(is0) / myEXS.p_rated) Next is0 - ' Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden + ' Formula applied to the first 60 seconds cNOx60s = cNOx60s / (Math.Min(60, jz + 1) / 60.0) ' ----------------------------------------------------------------- ' ' ' - ' Berechnung deNOxmin aus Kennlinien-Wert bei 50°C + ' for seconds 1-59 must Extrapolate total-value For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pdeNOx(is0) @@ -2210,9 +2210,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ' ' ' ----------------------------------------------------------------- - ' 2.) Berechnung deNOx + ' Calculation of deNOxmin value from Characteristic-curves at 50 ° C ' - ' a.) deNOx aus Kennlinie: + ' 2.) Calculation deNOx For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pdeNOx(is0) @@ -2222,10 +2222,10 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) denox_cc = such - 'c b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie + 'c a.) deNOx of characteristic: If ((t_SCR > tminCor) And (t_SCR < tmaxCor)) Then 'c - 'c t_up aus Kennlinie: + 'c b.) If correction criteria are met: deNOx-correction compared against Characteristic For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pt_up(is0) @@ -2235,7 +2235,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) t_up_cc = such 'c - 'c NOx_raw aus Kennlinie: + 'c t_up from characteristics: For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pNOxraw(is0) @@ -2245,7 +2245,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) NOxraw_cc = such 'c - 'c Summe NOxraw in den letzten 60 Sekunden aus Kennlinie: + 'c NOx_raw of characteristics: For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pNOx60s(is0) @@ -2255,7 +2255,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) NOx60s_cc = such 'c - 'c Raumgeschwindigkeit aus Kennlinie: + 'c Sum of the NOxraw in the last 60 seconds from characteristics: For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pSV(is0) @@ -2273,7 +2273,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus deNOx = Math.Max(Math.Min(denox_cc, DeNOxMax), deNOxmin) End If - 'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz) + 'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz) |@@| Space/Velocity from(aus) characteristics: For iSchad = 2 To 8 KonvRate(iSchad) = 0 Next iSchad @@ -2309,26 +2309,26 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ''' <summary> - ''' SCR Modell + ''' SCR Modell |@@| Write the results on the standardized variables eEmKomp (iSchad, jz) and Qp_reak (jz) ''' </summary> ''' <remarks></remarks> Class cScrMod_10sMW 'SCR Modell Implements KonvInterf - 'Klasse initialisiert als Unterelement von TempMod + 'SCR model Dim DatKonvOut As New cFile_V3 'PHEM SCR model result file Dim PathKonvOut As String = "" Dim t_SCR As Single - 'c Prefix "c" bedeutet: Zykluswert verwendet für Kennlinien-Korrektur + 'c Class initialized as a Subelement of TempMod Dim ct_up As Single, cNOxraw As Single, cNOx30s As Single, cSV As Single - 'c Index "cc" bedeutet: Wert aus Kennlinie (-> "c" - "cc" ist die Differenz, mit der Korrigiert wird) + 'c Prefix "c" means: use Cycle value for Characteristic-correction Dim denox_cc As Single, t_up_cc As Single, NOxraw_cc As Single, NOx30s_cc As Single, SV_cc As Single, deNOxmin As Single Dim deNOx_cor As Single '! deNOx-Wert nach Korrektur as single, vor End-Filterung as single Dim deNOx As Single '! Endwert zur Berechnung von NOx-tailpipe as single - 'Filename sekündliches Ausgabefile spezifizieren + 'Index "cc" means: Value of Characteristic (-> "c" - "cc" is the Derivative, corrected) Dim pt_SCR(izykt) As Single Dim pdeNOx(izykt) As Single @@ -2382,7 +2382,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Return False End If - 'Abbruch wenn kein NOx gegeben + 'Specify Filename for per-second Output-file If Not MAP.EmDefRef.ContainsKey(tMapComp.NOx) Then WorkerMsg(tMsgID.Err, "'NOx' not defined in emission map!", MsgSrc) Return False @@ -2402,7 +2402,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus DatKonvIn.ReadLine() iz = 0 - '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) + 'Abort if no NOx given Do While Not DatKonvIn.EndOfFile iz = iz + 1 line = DatKonvIn.ReadLine @@ -2426,9 +2426,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Public Sub Konv(ByVal jz As Integer) Implements KonvInterf.Konv ' ----------------------------------------------------------------------- - ' Programm zur Simulation SCR-Flottendurchschnitt - ' Anmerkung: deNOx-Werte kleiner als Null sind möglich: - ' dies entspricht höherem Roh-Nox-Niveau als im Basiskennfeld + ' 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) + ' Program to Simulate SCR-fleet-model + ' Note: deNOx with values less than zero are possible: ' ----------------------------------------------------------------------- ' Dim is0 As Long @@ -2440,18 +2440,18 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ' ' ----------------------------------------------------------------- - ' 1.) Berechnung der sekündlichen Werte für Eingangsgrößen SCR-Modell + ' this corresponds to higher NOx-raw level than in the Base-map ' - ' 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 + ' 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 + ' Temperaturmodelwerte (zB bei Kaltstart) werden nicht überschrieben |@@| SCR model internally there are temperatures between 50 ° C and 500 ° C limits t_SCR = ((1 - Sharetdown) * myEXS.TempMod(id - 1).t_tc(jz)) + (Sharetdown * myEXS.TempMod(id).t_tc(jz)) t_SCR = Math.Max(50.001, t_SCR) t_SCR = Math.Min(499.999, t_SCR) ' - ' b.) t_up, NOxraw, SV: 20s gleitender Mittelwert in die Vergangenheit - ' Formel gilt auch für die ersten 20 Sekunden + ' Temperature-model values (eg cold start) will not be overwritten + ' b.) t_up, NOxraw, SV. 20s moving average in the past ' ct_up = 0 cNOxraw = 0 @@ -2467,8 +2467,8 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus cNOxraw = cNOxraw / (jz - Math.Max(1, jz - 9) + 1) cSV = cSV / (jz - Math.Max(1, jz - 9) + 1) ' - ' c.) NOx60s: Summe über letzten 60s der spezifischen NOx-Rohemissionen - ' Formel gilt auch für die ersten 60 Sekunden + ' Formula applies to the first 20 seconds + ' c.) NOx60s: Sum over the last 60s of the specific NOx-raw emissions cNOx30s = 0 For is0 = Math.Max(0, jz - 29) To jz @@ -2476,14 +2476,14 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus cNOx30s = cNOx30s + (eNOx(is0) / myEXS.p_rated) End If Next is0 - ' Für Sekunde 1 bis 59 muss summenwert hochgerechnet werden + ' Formula applies to the first 60 seconds cNOx30s = cNOx30s / (Math.Min(30, jz + 1) / 30.0) ' ----------------------------------------------------------------- ' ' ' - ' Berechnung deNOxmin aus Kennlinien-Wert bei 50°C + ' For seconds 1 to 59 must sum the projected values For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pdeNOx(is0) @@ -2495,9 +2495,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ' ' ' ----------------------------------------------------------------- - ' 2.) Berechnung deNOx + ' Calculation of the Characteristic-curves for deNOxmin values at 50 ° C ' - ' a.) deNOx aus Kennlinie: + ' 2.) Calculation of deNOx For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pdeNOx(is0) @@ -2507,10 +2507,10 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) denox_cc = such - 'c b.) Falls Korrekturkriterien erfüllt sind: deNOx-Korrektur gegenüber Kennlinie + 'c a.) Characteristic of deNOx: If ((t_SCR > tminCor) And (t_SCR < tmaxCor)) Then 'c - 'c t_up aus Kennlinie: + 'c b.) If Correction-criteria are met: Correct deNOx against the Characteristic For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pt_up(is0) @@ -2520,7 +2520,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) t_up_cc = such 'c - 'c NOx_raw aus Kennlinie: + 'c Characteristic of t_up: For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pNOxraw(is0) @@ -2530,7 +2530,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) NOxraw_cc = such 'c - 'c Summe NOxraw in den letzten 60 Sekunden aus Kennlinie: + 'c Characteristic-curve of the NOx_raw: For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pNOx60s(is0) @@ -2540,7 +2540,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Call myEXS.Intlin(such, izpl) NOx30s_cc = such 'c - 'c Raumgeschwindigkeit aus Kennlinie: + 'c Sum of NOxraw in the last 60 seconds of Characteristic-curve: For is0 = 1 To iSCRAnz myEXS.Xis(is0) = pt_SCR(is0) myEXS.Yis(is0) = pSV(is0) @@ -2558,7 +2558,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus deNOx = Math.Max(Math.Min(denox_cc, DeNOxMax), deNOxmin) End If - 'Schreiben der Ergebnisse auf die standardisierten Variablen eEmKomp (iSchad, jz) und Qp_reak(jz) + 'Characteristic-curve of Distnace-Speed(Raumgeschwindigkeit): For iSchad = 2 To 8 KonvRate(iSchad) = 0 Next iSchad @@ -2590,20 +2590,20 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ''' <summary> - ''' KAT-Modell + ''' Write the results on the standardized variables eEmKomp(iSchad, jz) and Qp_reak(jz) ''' </summary> ''' <remarks></remarks> Class c3WayCatMod 'DOC Modell Implements KonvInterf - 'Klasse initialisiert als Unterelement von TempMod + 'KAT-model Dim iSchad As Long Dim id As Int16 Private myEXS As cEXS - 'Kennfelddaten + 'Class initialized as a Sub-element of TempMod 'Private Massflow As List(Of Single) 'Private Temp_KAT As List(Of Single) 'Private Massflow_Norm As List(Of Single) @@ -2624,7 +2624,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ''' <summary> - ''' Erstellen eines neuen KAT-Moduls + ''' Mapped-data ''' </summary> ''' <param name="i">ID</param> ''' <param name="EXSref">EXS-Klasse</param> @@ -2639,13 +2639,13 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ''' <summary> - ''' Interpolationsfunktion + ''' Creating a new CAT module ''' </summary> - ''' <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> + ''' <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> Private Function Intpol(ByVal x As Double, ByVal y As Double, ByVal MapID As tMapComp) As Double Try Return KonvRateMap(MapID).Intpol(x, y) @@ -2657,9 +2657,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ''' <summary> - ''' Einlesen der Kennfelder für Konvertierungsraten + ''' remarks> It calculates the converted rate of the appropriate Exhaust-gas-component from the Mass-flow temperature Map</remarks> ''' </summary> - ''' <param name="Name">Dateiname</param> + ''' <Reading the Maps for Conversion-rates ''' <remarks></remarks> Public Function Read(ByVal Name As String) As Boolean Implements KonvInterf.Read Dim DatKonv As New cFile_V3 @@ -2713,10 +2713,10 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Next - 'Units (wird nicht ausgewertet) + 'param name="Name">Filename</param> line = DatKonv.ReadLine - 'Werte + 'Units (are not evaluated) Do While Not DatKonv.EndOfFile line = DatKonv.ReadLine @@ -2728,7 +2728,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus KonvRateMap(Sp0.Key).AddPoints(Massflow, Temp_KAT, CDbl(line(Sp0.Value))) Next - 'KonvRaten Null setzen wenn Komponente nicht gegeben + 'Values For Each KonvRate0 In KonvRateMap If Not Spalten.ContainsKey(KonvRate0.Key) Then KonvRate0.Value.AddPoints(Massflow, Temp_KAT, 0) @@ -2739,7 +2739,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus DatKonv.Close() - 'Triangulieren + 'Set KonvRaten to Zero when no component given For Each KonvRate0 In KonvRateMap If Not KonvRate0.Value.Triangulate() Then WorkerMsg(tMsgID.Err, "Triangulation-ERROR", MsgSrc) @@ -2747,7 +2747,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If Next - 'Dic. für modale Konvrate definieren + 'Triangulating KonvRate = New Dictionary(Of tMapComp, List(Of Single)) KonvRate.Add(tMapComp.NOx, New List(Of Single)) KonvRate.Add(tMapComp.HC, New List(Of Single)) @@ -2760,12 +2760,12 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus ''' <summary> - ''' Berechnung der Konvertierungsrate aus Kennfeld + ''' define Dic. for modal Konvrate ''' </summary> - ''' <param name="jz">Zeit</param> - ''' <remarks>Für die Berechnung wird die Temperatur des Thermoelements am Kateingang (entspricht Modulnummer i-1) verwendet!!!</remarks> + ''' <Calculation of the Conversion-rate from Map + ''' <param name="jz">Time</param> Public Sub Konv(ByVal jz As Integer) Implements KonvInterf.Konv - 'Konvertierungsrate aus Kennfeld berechnen + 'remarks> Used to calculate the temperature of the Thermoelements on Kateingang (corresponds to Module-number i-1)!</remarks> Dim massflow As Single Dim temp As Single @@ -2781,7 +2781,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End Sub ''' <summary> - ''' Header für Ausgabedatei + ''' Conversion-rate calculated from Map ''' </summary> ''' <remarks></remarks> Public Sub Header() Implements KonvInterf.Header @@ -2793,9 +2793,9 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End Sub ''' <summary> - ''' Daten für Ausgabedatei + ''' Header for Output-file ''' </summary> - ''' <param name="jz">Zeit</param> + ''' <Data for Output-file ''' <remarks></remarks> Public Sub Write(ByVal jz As Integer) Implements KonvInterf.Write DatKonvOut.WriteLine(jz & "," & MODdata.Em.EmDefComp(tMapComp.MassFlow).FinalVals(jz) & "," _ @@ -2816,7 +2816,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End Class ''' <summary> - ''' Interface zur Konverter-Klasse cScrMod, cDocMod , usw... + ''' param name="jz">Time</param> ''' </summary> ''' <remarks></remarks> Interface KonvInterf @@ -2832,11 +2832,11 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Sub Intlin(ByRef such As Single, ByVal izpl As Long) ''C - 'C Unterprogramm zu PHEM zur linearen INterpolation aus einem Polygonzug (z.B. in Vissimzs.for aufgerufen) - 'C uebergeben wid "such" als X-Wert, der dann als berechneter Y-Wert wieder zurueck gegeben wird - 'C Zu Belegen sind vorher: - 'C Xis(j) und Yis(j) - 'c Zu uebergeben der gesuchte Wert (such) und die Anzahl an vorhandenen Polyginpunkten (izpl) + 'C Interface to Converter-classes cScrMod, cDocMod, etc. .. + '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) + 'C Zu Belegen sind vorher: |@@| It is given the X-value to "search", and it gives back the calculated Y-value + 'C Xis(j) und Yis(j) |@@| for previous Allocation: + 'c Xis(j) and Yis(j) 'c 'C ' INCLUDE "com.inc"<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -2847,8 +2847,8 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus Dim x As Single 'C 'c - 'C Suche der naechstgelegenen Drehzahlpunkte aus eingegebener Vollastkurve: - 'c Abstand zu Eingabepunkten und Suche des Punktes mit geringstem Abstand: + 'C Given the desired Value(search) and the Number of the existing Polygon-points (izpl) + 'c Search the closest points of the Revolutions from the input Full-load curve: aminabst = Math.Abs(such - Xis(1)) + 1 For ji = 1 To izpl x = such - Xis(ji) @@ -2859,24 +2859,24 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus End If Next ji 'c - 'C Festlegung des zweiten INterpolationspunktes (nur interpolieren, nicht extrapolieren) + 'C Distance to Input-points and Search those Points with the smallest Distance: 'C x = such - Xis(i1min) If (x >= 0) Then i2min = i1min + 1 If (i2min > izpl) Then - '!Extrapolation nach oben + '!Fix the second Interpolation-points (only interpolation, no extrapolation) i2min = izpl - 1 End If Else i2min = i1min - 1 If (i2min < 1) Then - '!Extrapolation nach unten + '!Extrapolation up i2min = 2 End If End If 'c - 'c Sortieren der 2 Werte nach aufsteigendem n: + 'c Extrapolation down 'c If (Xis(i2min) < Xis(i1min)) Then igel = i2min @@ -2884,7 +2884,7 @@ lb100: 'Rücksprunglabel für iterativen Berechnungsmodus i1min = igel End If 'c - 'c Interpolation der zugehoerigen Maximalleistung (P/Pnenn) + 'c Sort the 2 Values by ascending n: 'c If ((Xis(i2min) - Xis(i1min)) = 0) Then Xis(i2min) = Xis(i2min) + 0.000001 diff --git a/VECTO/MODcalc/cBatModel.vb b/VECTO/MODcalc/cBatModel.vb index 9240de7e8c34b2fbf0c9048927bc81e970fcef18..1b3a6b79b2980d97c333d88d795e2304fdb1e9a7 100644 --- a/VECTO/MODcalc/cBatModel.vb +++ b/VECTO/MODcalc/cBatModel.vb @@ -18,7 +18,7 @@ Public SOC_MAX As Single Public SOC_MIN As Single - 'Aktuelle Daten (d.h. zum aktuellen (zuletzt berechneten) Zeitschritt) + 'Current data (ie the current (last calculated) Time-step) Public TempBat As Single Public Ubat As Single 'Spannung [V] (Array) @@ -52,14 +52,14 @@ End Function - 'Maximal zulässige Leistung zum Antreiben (Batterie entladen) [kW] Vorzeichen positiv (PHEM Standard) + 'Maximum allowable Power for driving (Battery discharged) [kW] positive sign (PHEM Standard) Public ReadOnly Property PmaxAntr As Single Get Return -PmaxEntl End Get End Property - 'Maximal zulässige Leistung zum Generieren/Rekuperiren (Batterie laden) [kW] Vorzeichen negativ (PHEM Standard) + 'Maximum allowable power for Generating/Rekuperiren (Battery-charging) [kW] negative sign (PHEM Standard) Public ReadOnly Property PmaxLaden As Single Get Return -PmaxLad @@ -69,9 +69,9 @@ '-------------------------------------------------------------------------------------------- - '--------------------------------- ~Batteriemodell Renhart~ --------------------------------- + '--------------------------------- ~Renhart Battery model ~ --------------------------------- '-------------------------------------------------------------------------------------------- - 'Methode zur Initialisierung - wird einmal aufgerufen + 'Method for initializaztion - it is called once Public Function Bat_Init() As Boolean Dim BFile As New cFile_V3 @@ -79,7 +79,7 @@ Dim U0_E As Single ' Ubatt(SOC(T), Ibatt=0), Entladekurve Dim U0_L As Single ' Ubatt(SOC(T), Ibatt=0), Ladekurve - 'Abbruch wenn's Datei nicht gibt + 'Abort if there's no file If sFilePath = "" Then Return False If Not IO.File.Exists(sFilePath) Then Return False @@ -88,7 +88,7 @@ Return False End If - 'Einlesen der Parameter: + 'Read the Parameters: a0 = BFile.ReadLine(0) a1 = BFile.ReadLine(0) a2 = BFile.ReadLine(0) @@ -129,13 +129,13 @@ SOC = GEN.SOCstart LastSOC = MyEV.SOCstart ' ---------------------------------------------------------------------------------------- - ' Berechnung der Batteriespannung bei TempBat und SOC(0), Entladekurve + ' Calculation of the Battery-voltage at TempBat and SOC(0), Discharge curve ' ---------------------------------------------------------------------------------------- FunkTemp = Ftemp(TempBat) U0_E = Uent(SOC) - (Uent(1) - Uent(0)) * 1.1 * (1 - FunkTemp) Ubat = U0_E ' ---------------------------------------------------------------------------------------- - ' Berechnung der Batteriespannung bei TempBat und SOC(0), Ladekurve + ' Calculation of the Battery-voltage at TempBat and SOC(0), Charging-curve ' ---------------------------------------------------------------------------------------- U0_L = Ulad(SOC) - (Uent(1) - Uent(0)) * 1.1 * (1 - FunkTemp) ' ---------------------------------------------------------------------------------------- @@ -145,7 +145,7 @@ End Function - 'Methode zur Berechnung der zulässigen Leistung - sekündlicher Aufruf + 'Method of calculating the allowable power - Invoked second by second Public Sub Bat_Pzul(ByVal t As Integer) Dim FunkTemp As Single ' Temp-Funktion für Ri(Temp) Dim U0_E As Single ' Ubatt(SOC(T), Ibatt=0), Entladekurve @@ -171,7 +171,7 @@ End Sub - 'Methode zur Berechnung der Batterieveluste und SOC für geg. Leistung - sekündlicher Aufruf + 'Method of calculating the Batterie-losses and SOC for the given Power - Invoked second by second Public Sub Bat_Calc(ByVal Perf As Single, ByVal t As Integer) Dim epsilon As Single = 0.001 ' Abfrageschranke @@ -199,10 +199,10 @@ '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 + ' 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 'Output: ' SOC(jz) @@ -222,7 +222,7 @@ End Sub - 'Übergibt PeBat für geg. PiBat (Vorzeichen nach PHEM) + 'Returns PeBat for the given PiBat (sign from PHEM) Public Function fPeBat(ByVal PiBat As Single) As Single If PiBat < 0 Then Return -fPbatLad(-PiBat) @@ -247,82 +247,82 @@ '----------------------------------------- PRIVATE ------------------------------------------ '-------------------------------------------------------------------------------------------- - 'Batterie entladen + 'Battery discharged Private Sub Bat_Ent(ByVal Perf As Single) Dim FunkTemp As Single ' Temp-Funktion für Ri(Temp) Dim U0_E As Single ' Ubatt(SOC(T), Ibatt=0), Entladekurve Dim Ri_T As Single ' Ri bei Temperatur T, lokal - 'Temperaturfunktion + 'Temperature Function FunkTemp = Ftemp(LastTempBat) - 'Ri bestimmen abhängig von Temperatur + 'Determine Ri depending on temperature Ri_T = RiTemp(LastTempBat) - 'Spannung bestimmen aus SOC und Spannungskurve + 'Voltage determined from SOC and Voltage-curve U0_E = Uent(LastSOC) - (Uent(1) - Uent(0)) * 1.1 * (1 - FunkTemp) - 'Strom berechnen + 'Current calculation Ibat = -U0_E / 2 / Ri_T + Math.Sqrt((U0_E / 2 / Ri_T) ^ 2 + Perf * 1000 / Ri_T) - 'Batterieverluste + 'Battery-losses PbatV = Ibat ^ 2 * Ri_T / 1000.0 - 'Batterietemperatur + 'Battery-temperature TempBat = LastTempBat + PbatV * 1000.0 * 1.0 / CP / MB If TempBat >= T_MAX Then TempBat = T_MAX End If - 'SOC berechnen + 'SOC calculation SOC = LastSOC + Ibat * 1.0 / (SOC_Kap * 3600) - 'Korrektur für den aktuellen Zeitschritt + 'Adjustment for the current time-step FunkTemp = Ftemp(TempBat) U0_E = Uent(SOC) - (Uent(1) - Uent(0)) * 1.1 * (1 - FunkTemp) Ri_T = RiTemp(TempBat) Ubat = U0_E + Ibat * Ri_T End Sub - 'Batterie laden + 'Charging Battery Private Sub Bat_Lad(ByVal Perf As Single) Dim FunkTemp As Single ' Temp-Funktion für Ri(Temp) Dim U0_L As Single ' Ubatt(SOC(T), Ibatt=0), Entladekurve Dim Ri_T As Single ' Ri bei Temperatur T, lokal - 'Temperaturfunktion + 'Temperature-Function FunkTemp = Ftemp(LastTempBat) - 'Ri bestimmen abhängig von Temperatur + 'Determine Ri depending on temperature Ri_T = RiTemp(LastTempBat) - 'Spannung bestimmen aus SOC und Spannungskurve + 'Voltage determined from SOC and Voltage-curve U0_L = Ulad(LastSOC) - (Ulad(1) - Ulad(0)) * 1.1 * (1 - FunkTemp) - 'Strom berechnen + 'Current calculation Ibat = +U0_L / 2 / Ri_T - Math.Sqrt((U0_L / 2 / Ri_T) ^ 2 - Perf * 1000 / Ri_T) - 'Batterieverluste + 'Battery-losses PbatV = Ibat ^ 2 * Ri_T / 1000.0 - 'Batterietemperatur + 'Battery-temperature TempBat = LastTempBat + PbatV * 1000.0 * 1.0 / CP / MB If TempBat >= T_MAX Then TempBat = T_MAX End If - 'SOC berechnen + 'SOC calculation SOC = LastSOC + Ibat * 1.0 / (SOC_Kap * 3600) - 'Korrektur für den aktuellen Zeitschritt + 'Adjustment for the current time-step FunkTemp = Ftemp(TempBat) U0_L = Ulad(SOC) - (Ulad(1) - Ulad(0)) * 1.1 * (1 - FunkTemp) Ri_T = RiTemp(TempBat) Ubat = U0_L + Ibat * Ri_T End Sub - 'Batterie nix tun + 'Battery do nothing Private Sub Bat_Nix() 'Dim SocProz As Single ' lokal, SOC in Prozent 'Dim FunkTemp As Single ' Temp-Funktion für Ri(Temp) @@ -337,7 +337,7 @@ End Sub - 'Übergibt PeBat beim Laden mit PEmot (Vorzeichen nach Renhart) + 'Returns PeBat when invoked(Laden) with PEmot (sign from(nach)Renhart) Private Function fPbatLad(ByVal PEmot As Single) As Single Dim FunkTemp As Single Dim U0_L As Single @@ -359,7 +359,7 @@ End Function - 'Übergibt PeBat beim Entladen mit PEmot (Vorzeichen nach Renhart) + 'Return PeBat when Unloaded(Entladen) with PEmot (sign from(nach) Renhart) Private Function fPbatEnt(ByVal PEmot As Single) As Single Dim FunkTemp As Single Dim U0_E As Single diff --git a/VECTO/MODcalc/cMOD.vb b/VECTO/MODcalc/cMOD.vb index aa89c4e010f995d395c1aa1d294162f2c6e3caa6..e575124c80b45ebe67a1ae1664803462618155f6 100644 --- a/VECTO/MODcalc/cMOD.vb +++ b/VECTO/MODcalc/cMOD.vb @@ -16,7 +16,7 @@ Public Class cMOD Public ModOutpName As String Public ModErrors As cModErrors - 'Leistungen + 'Power Public Psum As List(Of Single) Public Proll As List(Of Single) Public Pstg As List(Of Single) @@ -33,7 +33,7 @@ Public Class cMOD Public EngState As List(Of tEngState) - 'Fahrzeug + 'Vehicle Public Gear As List(Of Single) Public VehState As List(Of tVehState) @@ -189,13 +189,13 @@ Public Class cMOD Dim Exs0 As List(Of Single) Dim AuxKV As KeyValuePair(Of String, List(Of Single)) - 'Zykluslänge definieren (Um 1s kürzer als Original weil Zwischensekunden) + 'Define Cycle-length (shorter by 1sec than original because of Interim-seconds) tDim = DRI.tDim - 1 - 'Hier wird der eigentliche Zyklus eingelesen: + 'Here the actual cycle is read: Vh.VehCylceInit() - 'Drehzahl-Vorgabe + 'Revolutions-setting If DRI.Nvorg Then MODdata.nUvorg = New List(Of Single) @@ -203,19 +203,19 @@ Public Class cMOD L = DRI.Values(tDriComp.nn) - 'Drehzahl + 'Revolutions For s = 0 To tDim MODdata.nUvorg.Add(((L(s + 1) + L(s)) / 2) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) Next - 'Winkelbeschleunigung + 'Angular acceleration For s = 0 To tDim MODdata.dnUvorg.Add(L(s + 1) - L(s)) Next End If - 'Em-Komponenten mitteln (Zwischensekunden) für KF-Erstellung oder Eng-Analysis + 'Average EM-components (between-seconds) for KF-creation or Eng-Analysis If DRI.EmCompDef Then For Each EmKV In DRI.EmComponents For s = 0 To tDim @@ -224,7 +224,7 @@ Public Class cMOD Next End If - 'EXS Vorgaben mitteln + 'Specify average EXS If DRI.ExsCompDef Then For Each ExsKV In DRI.ExsComponents For Each Exs0 In ExsKV.Value.Values @@ -235,7 +235,7 @@ Public Class cMOD Next End If - 'Aux Vorgaben mitteln und Aux-Listen falls Aux in Dri und Veh vorhanden + 'Specify average Aux and Aux-lists, when Au8x present in DRI and VEH If DRI.AuxDef Then For Each AuxKV In DRI.AuxComponents @@ -255,13 +255,13 @@ Public Class cMOD Dim s As Integer Dim L As List(Of Double) - 'Zykluslänge definieren: Gleiche Länge wie Zyklus (nicht reduziert weil keine "Zwischensekunden") + '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") tDim = DRI.tDim - 1 - 'Hier wird der eigentliche Zyklus eingelesen: + 'Here the actual cycle is read: Vh.EngCylceInit() - 'Drehzahl-Vorgabe + 'Revolutions-setting If DRI.Nvorg Then MODdata.nUvorg = New List(Of Single) @@ -269,12 +269,12 @@ Public Class cMOD L = DRI.Values(tDriComp.nn) - 'Drehzahl + 'Revolutions For s = 0 To MODdata.tDim MODdata.nUvorg.Add(L(s) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) Next - 'Winkelbeschleunigung + 'Angular acceleration MODdata.dnUvorg.Add(L(1) - L(0)) For s = 1 To MODdata.tDim - 1 MODdata.dnUvorg.Add((L(s + 1) - L(s - 1)) / 2) @@ -312,7 +312,7 @@ Public Class cMOD MsgSrc = "MOD/Output" - '*********** Initialisierung / Datei öffnen ************** + '*********** Initialization / Open File ************** If ModOutpName = "" Then WorkerMsg(tMsgID.Err, "Invalid output path!", MsgSrc) Return False @@ -367,7 +367,7 @@ Public Class cMOD - '*** ID-Zeile (Nur ADVANCE) + '*** ID line (Only ADVANCE) If ADVmode Then s.Append("VehNr: " & ADV.aVehNr) s.Append(",Input File: " & fFILE(GenFile, True)) @@ -428,7 +428,7 @@ Public Class cMOD End If - 'ADVANCE-spezifisch + 'ADVANCE-specific If ADVmode Then s.Append(",WorldX,WorldY,StrId") @@ -476,7 +476,7 @@ Public Class cMOD End If - 'Berechnete Dynamikparameter (Diff zu Kennfeld) + 'Berechnete Dynamikparameter (Diff zu Kennfeld) |@@| Calculated dynamics parameters (Diff to Map) 'If TC.Calculated Then ' For Each TcKey In TcList ' s.Append(Sepp & fMapCompName(TcKey)) @@ -485,7 +485,7 @@ Public Class cMOD 'End If - 'In Datei schreiben + 'Write to File ' Header f.WriteLine(s.ToString) ' Units @@ -494,7 +494,7 @@ Public Class cMOD '*********************************************************************************************** '*********************************************************************************************** '*********************************************************************************************** - '*** Werte ************************************************************************************* + '*** Values ************************************************************************************* With MODdata @@ -502,25 +502,25 @@ Public Class cMOD s.Length = 0 - 'Zeit + 'Time s.Append(t + DRI.t0 + tdelta) If Not GEN.VehMode = tVehMode.EngineOnly Then - 'Strecke + 'Strecke |@@| Route dist += .Vh.V(t) / 1000 s.Append(Sepp & dist) - 'Ist-Geschw. + 'Actual-speed. s.Append(Sepp & .Vh.V(t) * 3.6) - 'Soll-Geschw. + 'Target-speed s.Append(Sepp & .Vh.Vsoll(t) * 3.6) - 'Beschl. + 'Acc. s.Append(Sepp & .Vh.a(t)) - 'Steigung + 'Slope s.Append(Sepp & .Vh.Grad(t)) End If @@ -529,36 +529,36 @@ Public Class cMOD If Not GEN.VehMode = tVehMode.EV Then - 'Drehzahl + 'Revolutions s.Append(Sepp & .nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) - 'Leistung + 'Power s.Append(Sepp & .Pe(t) * VEH.Pnenn) - 'Drehzahl normiert + 'Revolutions normalized s.Append(Sepp & .nn(t)) - 'Leistung normiert + 'Power normalized s.Append(Sepp & .Pe(t)) End If - 'Drehzahl in U/min + 'Revolutions in U/min s.Append(Sepp & .nU(t)) - 'EM-Leistung in kW + 'EM-power in kW s.Append(Sepp & .Px.PeEMot(t)) - 'Effektive Batterieleistung + 'Effective Battery-power s.Append(Sepp & .Px.PeBat(t)) - 'Innere Batterieleistung + 'Internal Battery-power s.Append(Sepp & .Px.PiBat(t)) - 'Batteriespannung + 'Battery-voltage s.Append(Sepp & .Px.Ubat(t)) - 'Batteriestrom + 'Battery-Power s.Append(Sepp & .Px.Ibat(t)) 'SOC @@ -566,19 +566,19 @@ Public Class cMOD Else - 'Drehzahl + 'Revolutions s.Append(Sepp & .nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) - 'Leistung + 'Power s.Append(Sepp & .Pe(t) * VEH.Pnenn) - 'Drehzahl normiert + 'Revolutions normalized s.Append(Sepp & .nn(t)) - 'Leistung normiert + 'Power normalized s.Append(Sepp & .Pe(t)) - 'Volllast und Schlepp + 'Full-load and Drag If .EngState(t) = tEngState.Stopped Then s.Append(Sepp & "-" & Sepp & "-") Else @@ -589,7 +589,7 @@ Public Class cMOD End If End If - 'Leistung an Kupplung + 'Power to Clutch s.Append(Sepp & .Pe(t) * VEH.Pnenn - .PaEng(t) - .PauxSum(t)) @@ -597,16 +597,16 @@ Public Class cMOD If Not GEN.VehMode = tVehMode.EngineOnly Then - 'Gang + 'Gear s.Append(Sepp & .Gear(t)) - 'Getriebeverluste + 'Transmission-losses s.Append(Sepp & .PlossGB(t)) - 'Diff-Verluste + 'Diff-losses s.Append(Sepp & .PlossDiff(t)) - 'Retarder-Verluste + 'Retarder-losses s.Append(Sepp & .PlossRt(t)) 'PaEng @@ -621,19 +621,19 @@ Public Class cMOD 'Roll.. s.Append(Sepp & .Proll(t)) - 'Luft.. + 'Drag s.Append(Sepp & .Pluft(t)) - 'Steigung.. + 'Slope .. s.Append(Sepp & .Pstg(t)) 'Aux.. s.Append(Sepp & .PauxSum(t)) - 'Radleistung + 'Wheel-power s.Append(Sepp & .Psum(t)) - 'Bremse + 'Brake s.Append(Sepp & .Pbrake(t)) 'Auxiliaries @@ -643,7 +643,7 @@ Public Class cMOD End If - 'ADVANCE-spezifisch + 'ADVANCE-specific If ADVmode Then 'X @@ -659,7 +659,7 @@ Public Class cMOD If Cfg.FinalEmOnly Then - 'Final-Emissionen (Tailpipe) + 'Final-emissions (tailpipe) For Each StrKey In EmList Em0 = .Em.EmComp(StrKey) @@ -677,13 +677,13 @@ Public Class cMOD Em0 = .Em.EmComp(StrKey) If Em0.WriteOutput Then - 'Roh-Emissionen + 'Raw-emissions s.Append(Sepp & Em0.RawVals(t)) - 'TC-Emissionen + 'TC-Emissions If Em0.TCdef Then s.Append(Sepp & Em0.TCVals(t)) - 'AT-Emissionen (EXS) + 'AT-Emissions (EXS) If Em0.ATdef Then s.Append(Sepp & Em0.ATVals(t)) End If @@ -691,7 +691,7 @@ Public Class cMOD End If - 'Berechnete Dynamikparameter (Diff zu Kennfeld) + 'Calculated Dynamics-parameters (Diff from(zu) Map) 'If TC.Calculated Then ' For Each TcKey In TcList ' TC0 = MODdata.TC.TCcomponents(TcKey) @@ -699,7 +699,7 @@ Public Class cMOD ' Next 'End If - 'In Datei schreiben + 'Write to File f.WriteLine(s.ToString) Next @@ -713,7 +713,7 @@ Public Class cMOD End Function - 'Errors/Warnings die sekündlich auftreten können + 'Errors/Warnings die sekündlich auftreten können |@@| Errors/Warnings occuring every second Public Class cModErrors Public TrLossMapExtr As String Public AuxMapExtr As String @@ -731,7 +731,7 @@ Public Class cMOD 'Reset-Hierarchie: ' ResetAll ' DesMaxExtr - ' -GeschRedReset + ' -GeschRedReset(Speed-Reduce-Reset) ' CdExtrapol ' -PxReset ' TrLossMapExtr @@ -739,20 +739,20 @@ Public Class cMOD ' AuxNegative ' FLDextrapol - 'Kompletter Reset (am Beginn jedes Sekundenschritts) + 'Full reset (at the beginning of each second step) Public Sub ResetAll() DesMaxExtr = "" GeschRedReset() End Sub - 'Reset von Errors nach Geschw.-Reduktion (innerhalb Iteration) + 'Reset Errors related to Speed Reduction (within iteration) Public Sub GeschRedReset() CdExtrapol = "" RtExtrapol = "" PxReset() End Sub - 'Reset von Errors die mit der Leistungsberechnung zu tun haben (nach Schaltmodell durchzuführen) + '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) Public Sub PxReset() TrLossMapExtr = "" AuxMapExtr = "" @@ -760,7 +760,7 @@ Public Class cMOD FLDextrapol = "" End Sub - 'Errors ausgeben + 'Emit Errors Public Function MsgOutputAbort(ByVal Second As String, ByVal MsgSrc As String) As Boolean Dim Abort As Boolean diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb index 57fde02f8066560afa60d6ce81876fd89f8c3b6e..e3df71518b51f42fcf8914cae2a31269020c0151 100644 --- a/VECTO/MODcalc/cPower.vb +++ b/VECTO/MODcalc/cPower.vb @@ -18,7 +18,7 @@ Public Class cPower Private Bobi As Single Private Cobi As Single - 'Sekündliche Daten + 'Data per second Private Clutch As tEngClutch Private VehState0 As tVehState Private EngState0 As tEngState @@ -30,7 +30,7 @@ Public Class cPower Private aist As Single - 'Zugkraftunterbrechung + 'Interruption of traction Private TracIntrI As Integer Private TracIntrIx As Integer Private TracIntrOn As Boolean @@ -84,15 +84,15 @@ Public Class cPower Private WGL As List(Of Single) Private Ldim As Integer - 'Rekuperation - ' Projekt HERO - BMW Mini Hybrid - ' Standard Mini One D Radstand 2467 mm + 'Recuperation + ' Project HERO - BMW Mini Hybrid + ' Standard Mini One D Wheelbase 2467 mm Private lSHv As Single = 1.2335 'Annahme 50/50 (Laut Internet Gewichtsverteilung vom MINI E) Private lSHh As Single = 1.2335 - 'Annahme für Schwerpunkthöhe - ' nach http://www.colliseum.net/wiki/Schwerpunkth%C3%B6he + 'Specification of Center-of-gravity height (approximation) + ' from http://www.colliseum.net/wiki/Schwerpunkth% C3% B6he ' X = 0.2 * m / 1000 = h/R - ' mit R = 2.467 [m] und m = 1335 [kg] + ' with R = 2467 [m], and m = 1335 [kg] Private hSH As Single = 0.659 Private RekupVorne As Boolean = True Private muReifStr As Single = 1 @@ -186,62 +186,62 @@ Public Class cPower End Function - 'Bat einlesen + 'Read Bat Private Function BATread() As Boolean BAT.FilePath = GEN.Batfile SOCstart = GEN.SOCstart Return BAT.Bat_Init() End Function - 'Maximale effektive EM-Leistung beim Antreiben abhängig von Überlast und Batteriezustand + 'Maximum effective EM-Power in driving depends on Overload and Battery-status Private Function fPeEMmax(ByVal nn As Single) As Single Dim PeFLD As Single Dim PeBAT As Single - 'Basis: Volllastkurve + 'Based: Full-load-curve PeFLD = FLD.Pfull(nn) - 'Falls Überlast möglich: auf ÜL-Leistung hochskalieren + 'If Overload possible, upscale Overload(ÜL)-power If ULok Then PeFLD *= PeUL / VEH.Pnenn - '=> PeFLD = maximale EM-Leistung nach FLD und ÜL + '=> PeFLD = maximum EM-Power by(nach) FLD and Overload(ÜL) - 'PeMax aus PeBatMax berechnen + 'Calculate PeMax from PeBatMax PeBAT = 0.9 * fPefromPi(nn, PeBatMax) - '=> PeBAT = maximale EM-Leistung nach Batterie + '=> PeBAT = maximum EM-power to Battery - 'Übergeben wird maximal die Leistung die die Batterie erlaubt + 'Return the maximum Power allowed by the Battery Return Math.Min(PeFLD, PeBAT) End Function - 'Maximale effektive EM-Leistung beim Laden abhängig von Überlast und Batteriezustand + 'Maximum effective EM charging power depending on Overload and Battery-state Private Function fPeEMmin(ByVal nn As Single) As Single Dim PeFLD As Single Dim PeBAT As Single - 'Basis: Schleppkurve + 'Base: Drag-curve PeFLD = FLD.Pdrag(nn) - 'Falls Überlast möglich: auf ÜL-Leistung hochskalieren + 'If Overload possible, upscale to Overload(ÜL)-power If ULok Then PeFLD *= PeUL / VEH.Pnenn - '=> PeFLD = maximale EM-Leistung nach FLD und ÜL + '=> PeFLD = maximum EM-Power by(nach) FLD and Overload(ÜL) - 'PeMax aus PeBatMax berechnen + 'Calculate PeMax from PeBatMax PeBAT = 0.9 * fPefromPi(nn, PeBatMin) - '=> PeBAT = maximale EM-Leistung nach Batterie + '=> PeBAT = maximum EM-power to Battery - 'Übergeben wird maximal die Leistung die die Batterie erlaubt + 'Return the maximum Power allowed by the Battery Return Math.Max(PeFLD, PeBAT) End Function - 'Umrechnung von PeBat(=PiEM) auf PeEM + 'Conversion of PeBat (=PiEM) to PeEM Private Function fPefromPi(ByVal nn As Single, ByVal Pi As Single) As Single Dim wisum As Double = 0 Dim sumo As Double = 0 @@ -253,7 +253,7 @@ Public Class cPower Pinorm = Pi / VEH.Pnenn For i = 0 To Ldim - 'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen + 'When sign of x an y is not-equal to the sign of xA(i) and yA(i) respectively, then skip Row i If nn * nnL(i) < 0 Or Pi * PiL(i) < 0 Then Continue For ab = (nn - nnL(i)) ^ 2 + (Pinorm - PiL(i)) ^ 2 If ab = 0 Then @@ -278,7 +278,7 @@ lb10: End Function - 'Umrechnung von PeEM auf PeBat(=PiEM) + 'Conversion of PeEM to PeBat (=piEM) Private Function fPifromPe(ByVal nn As Single, ByVal Pe As Single) As Single Dim wisum As Double = 0 Dim sumo As Double = 0 @@ -290,7 +290,7 @@ lb10: Penorm = Pe / VEH.Pnenn For i = 0 To Ldim - 'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen + 'When sign of x and y is not-equal to the sign of xA(i) and yA(i) respectively, then skipp Row i If nn * nnL(i) < 0 Or Pe * PeL(i) < 0 Then Continue For ab = (nn - nnL(i)) ^ 2 + (Penorm - PeL(i)) ^ 2 If ab = 0 Then @@ -315,42 +315,42 @@ lb10: End Function - 'Maximale Rekup-Leistung + 'Maximum Recuparation-power Private Function fPrekupMax() As Single Dim Fz As Single Dim Fx As Single Dim Prekup As Single - 'Falls unter V-Untergrenze dann gleich Null übergeben + 'If speed is already under ceiling then return Zero If Vist < RekupVu Then Return 0 - 'Radaufstandskraft + 'Wheel contact If RekupVorne Then Fz = ((VEH.Mass + VEH.MassExtra + VEH.Loading) * (9.81F * lSHh - aist * hSH)) / (lSHv + lSHh) Else Fz = ((VEH.Mass + VEH.MassExtra + VEH.Loading) * (9.81F * lSHv + aist * hSH)) / (lSHv + lSHh) End If - 'Vorzeichen "sollte" immer + sein + 'Sign "should" always be + Fz = Math.Max(0, Fz) - 'Längskraft am Reifen + 'Longitudinal-force on the Tire Fx = Fz * muReifStr - 'Sicherheitsfaktor mitnehmen + 'Consider Safety-factor Fx /= RekupS - 'Leistung + 'Power Prekup = -Fx * Vist / 1000 - 'Falls unter V-Obergrenze dann linear runter skalieren + 'If below upper V-upper-limit, then scale down linearly If Vist <= RekupVo Then Prekup *= (Vist - RekupVu) / (RekupVo - RekupVu) Return Prekup End Function - ''PeEM-Max reduzieren bis es die Batterie aushaltet + ''Reduce PeEM-Max until battery current is okay 'Private Function RedPiToPbatMax(ByVal PeEM As Single) As Single ' Dim PiEM As Single @@ -368,7 +368,7 @@ lb10: 'End Function - ''PeEM-Min reduzieren bis es die Batterie aushaltet + ''Reduce PeEM-Min until battery current is okay 'Private Function RedPiToPbatMin(ByVal PeEM As Single) As Single ' Dim PiEM As Single @@ -403,7 +403,7 @@ lb10: Dim jz As Integer - 'Start/Stop Steuerung + 'Start/Stop Control Dim StStAus As Boolean Dim StStTx As Single @@ -441,13 +441,13 @@ lb10: StdMode = (PHEMmode = tPHEMmode.ModeSTANDARD) NotAdvMode = Not (PHEMmode = tPHEMmode.ModeADVANCE) - 'Abbruch wenn keine Geschw. gegeben + 'Abort if no speed given If Not DRI.Vvorg Then WorkerMsg(tMsgID.Err, "Driving cycle is not valid! Vehicle Speed required.", MsgSrc) Return False End If - ' Initialisieren + ' Initialize Vh = MODdata.Vh If Cfg.GnVorgab Then Gvorg = DRI.Gvorg @@ -483,7 +483,7 @@ lb10: KupplEta = 1 End If - 'Schaltpunkte für NEDC/FTP Schaltung + 'Gear-shifting points for NEDC / FTP Select Case GEN.izykwael Case 0 'Nefzja = True GnachV = True @@ -518,7 +518,7 @@ lb10: avl(6) = 200 / 3.6 Case Else GnachV = False - 'Schaltparameter initialisieren + 'Initialize Gear-shifting parameters 'Standard Aaufi = 0.3 @@ -530,13 +530,13 @@ lb10: End Select - 'Theoretische Höchstgeschwindigkeit [m/s] - gesetzt auf Geschw. bei 1.2 x NennDrehzahl im höchsten Gang + 'Theoretical maximum speed [m/s] - set to Speed ​​at 1.2 x Nominal-Revolutions in top-Gear GVmax = 1.2 * VEH.nNenn * VEH.Dreifen * Math.PI / (VEH.AchsI * VEH.Igetr(VEH.ganganz) * 60) jz = -1 '*********************************************************************************************** - '*********************************** Zeitschleife **************************************** + '*********************************** Time-loop **************************************** '*********************************************************************************************** Do @@ -547,21 +547,21 @@ lb10: GVset = False FirstSecItar = True - 'Sekundäre Progressbar + 'Secondary Progressbar If NotAdvMode Then ProgBarCtrl.ProgJobInt = CInt(100 * jz / MODdata.tDim) - ' Zustand bestimmen + ' Determine State lbGschw: - 'Reset der sekündlichen Errors + 'Reset the second by second Errors MODdata.ModErrors.GeschRedReset() - 'Geschw. / Beschl. berechnen------------------- - 'Jetzt durch DRI-Klasse + 'Calculate Speed​/Acceleration ------------------- + 'Now through DRI-class Vist = Vh.V(jz) aist = Vh.a(jz) - 'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren + 'If Speed over Top theoretical Speed => Reduce If Vist > GVmax + 0.0001 And Not GVset Then Vh.SetSpeed0(jz, GVmax) GVset = True @@ -571,7 +571,7 @@ lbGschw: 'a_DesMax If GEN.DesMaxJa Then - 'Check ob Beschleunigung zu hoch + 'Check if Acceleration is too high If jz = 0 Then amax = GEN.aDesMax(Vist) @@ -590,9 +590,9 @@ lbGschw: GoTo lbGschw - '- Verzögerung limitieren --------------------------- + '- Deceleration limit --------------------------- 'Else - ' 'Check ob Verzögerung zu hoch + ' 'Check whether Deceleration too high ' amax = GEN.aDesMin(Vist) ' If amax > -0.001 Then ' WorkerMsg(tMsgID.Err, "aDesMax(dec) invalid! v= " & Vist & ", aDesMax(dec) =" & amax, MsgSrc) @@ -611,7 +611,7 @@ lbGschw: - 'Aus Leistg----- + 'From Power ----- If aist < 0 Then If (Vist < 0.025) Then 'Vh.SetSpeed(jz, 0) @@ -621,7 +621,7 @@ lbGschw: End If '--------------- - 'Fahrzustand bestimmen------------------------- + 'Determine Driving-state ------------------------- Pplus = False Pminus = False @@ -646,14 +646,14 @@ lbGschw: Pminus = True End Select - 'Schneller Check ob Leistung viel zu hoch + 'Faster check if Power is too high If PvorD > 2 * VEH.Pnenn Then Vh.ReduceSpeed(jz, 0.98) GoTo lbGschw End If - '************************************ Gangwahl ************************************ + '************************************ Gear selection ************************************ If VehState0 = tVehState.Stopped Or TracIntrOn Then If TracIntrTurnOff Then @@ -672,7 +672,7 @@ lbGschw: End If Else - 'Checken ob Kupplung schleift (wichtig für Schaltmodell): + 'Check whether Clutch will slip (important for Gear-shifting model): If fnn(Vist, 1, False) < Kuppln_norm And Pplus Then Clutch = tEngClutch.Slipping Else @@ -680,33 +680,33 @@ lbGschw: End If If Gvorg Then - 'Gang-Vorgabe + 'Gear-settings Gear = Math.Min(Vh.GearVorg(jz), VEH.ganganz) ElseIf Nvorg Then - 'Drehzahlvorgabe + 'Revolutions-setting Gear = fGearByU(MODdata.nUvorg(jz), Vist) ElseIf VEH.ganganz = 1 Then Gear = 1 Else If GnachV Then - 'Gang nach Geschwindigkeit + 'Gear by speed dependent function Gear = fGearBySpeed(jz) Else - 'Schaltmodell + 'Gear-shifting Model If PKWja Then Gear = fGearPKW(jz) Else Gear = fGearLKW(jz) End If - 'Muss hier nochmal zurück gesetzt werden weil im Schaltmodell kann (und darf) das passieren + 'Must be reset here because the Gear-shifting model may cause changes MODdata.ModErrors.PxReset() End If End If - 'Schaltmodell/Vorgabe kann Clutch öffnen + 'Gear shifting-model / gear input can open Clutch If Gear < 1 Then Clutch = tEngClutch.Opened End If @@ -717,25 +717,25 @@ lbGschw: End If - ' Wichtige Checks + ' Important checks lbCheck: - '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... ? + 'Check whether to reduce speed + ''If GeschwRed Then GoTo lbGeschwRed - 'Checken ob Kupplung offen: - ''bKupplOffen = (bStehen Or Gang(jz) = 0) <= bereits durch Clutch bekannt + 'Check whether Clutch is open: + ''bKupplOffen = (bStehen Or Gear(jz) = 0) <= Already known by Clutch - 'Falls konventionell dann ICE-Kupplung = Hauptkupplung - ''bICEKupOffen = bKupplOffen <= Brauch i nix mehr + 'If conventionall then ICE-clutch = master clutch + ''bICEKupOffen = bKupplOffen <= i need nothing more - 'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten: + '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: If Clutch = tEngClutch.Closed Then If fnn(Vist, Gear, False) < Kuppln_norm And Not VehState0 = tVehState.Dec And Gear > 1 Then Gear -= 1 End If - 'Checken ob Leerlauf obwohl Leistung > 0 - ' wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren! + 'Check whether idling although Power > 0 + ' wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren! |@@| when Power before?(vor) Diff > 0.1% of Nominal-power, then Correct! If Clutch = tEngClutch.Opened Then If PvorD > 0.001 * VEH.Pnenn Then @@ -756,14 +756,14 @@ lbCheck: End If End If - '************************************ Drehzahl ************************************ + '************************************ Revolutions ************************************ - '*** Wenn Drehzahl vorgegeben dann wird der nächste Block übersprungen *** + '*** If Revolutions specified then the next block is skipped *** If Nvorg Then nn = (MODdata.nUvorg(jz) - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl) - 'Falls Start/Stop dann wird gleich bei nn < -0.05 auf nU = 0 gesetzt + 'If Start/Stop then it will be set at the same nn < -0.05 to nU = 0 If GEN.StartStop And nn < Cfg.nnormEngStop Then If Pplus Then nn = 0 @@ -781,7 +781,7 @@ lbCheck: End If - 'Drehzahlabfall beim Auskuppeln + 'Revolutions drop when decoupling If Clutch = tEngClutch.Opened Then If jz = 0 Then nn = 0 @@ -803,11 +803,11 @@ lbCheck: Do PminX = Pmin Pmin = FLD.Pdrag((nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl)) - '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) + '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) + ' aus Auswertung ETC des Motors mit dem dynamische Volllast parametriert wurde |@@| of the evaluated ETC of the Enginges with the dynamic parametrized Full-load + ' 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) ' Luz/Rexeis 21.08.2012 - ' Iterations-Schleife: 01.10.2012 + ' Iteration loop: 01.10.2012 P = MODdata.Pe(jz - 1) * VEH.Pnenn - 0.75 * (MODdata.Pe(jz - 1) * VEH.Pnenn - Pmin) M = -P * 1000 * 60 / (2 * Math.PI * nU) 'original: M = -Pmin * 1000 * 60 / (2 * Math.PI * ((nU + nUx) / 2)) @@ -815,14 +815,14 @@ lbCheck: omega2 = omega1 - omega_p nU = omega2 * 60 / (2 * Math.PI) i += 1 - '01.10.12 Luz: Drehzahl darf nicht höher werden als zuvor + '01:10:12 Luz: Revolutions must not be higher than previously If nU > nUx Then nU = nUx Exit Do End If Loop Until Math.Abs(Pmin - PminX) < 0.001 Or nU <= VEH.nLeerl Or i = 999 - 'TODO: Auschalten?! + 'TODO: Switch off? If i = 999 Then WorkerMsg(tMsgID.Warn, "i=999", MsgSrc & "/t= " & jz + 1) nn = (Math.Max(VEH.nLeerl, nU) - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl) @@ -835,15 +835,15 @@ lbCheck: nn = fnn(Vist, Gear, Clutch = tEngClutch.Slipping) - '*** Beginn: Drehzahl-Check + '*** Start: Revolutions Check - 'Checken ob Drehzahl zu hoch! => Hochschalten + 'Check whether Revolutions too high! => Upshift Do While nn > 1.2 And Gear < VEH.ganganz Gear += 1 nn = fnn(Vist, Gear, Clutch = tEngClutch.Slipping) Loop - 'Checken ob Drehzahl zu niedrig mit geschlossener Kupplung + 'Check whether Revolutions too low with the Clutch closed If Clutch = tEngClutch.Closed Then If nn < 0.0001 Then Gear -= 1 @@ -860,31 +860,31 @@ lbCheck: lb_nOK: - '************************************ Motor-Zustand bestimmen ************************************ - ' nn ist ab hier fix! + '************************************ Determine Engine-state ************************************ + ' fix nn here! nU = nn * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl - 'Nebenverbrauch bestimmen (aus VEH und DRI) + 'Determine next Consumption (from VEH and DRI) Paux = fPaux(jz, nU) - 'ICE-Trägheit + 'ICE-inertia If Clutch = tEngClutch.Opened Then If jz = 0 Then PaMot = 0 Else - 'Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum + 'Not optimal since jz-1 to jz not the right interval PaMot = (VEH.I_mot * (nU - MODdata.nU(jz - 1)) * 0.01096 * nU) * 0.001 End If Else If Nvorg Then - 'Drehzahlvorgabe + 'Revolutions-setting PaMot = (VEH.I_mot * MODdata.dnUvorg(jz) * 0.01096 * MODdata.nUvorg(jz)) * 0.001 Else PaMot = ((VEH.I_mot * (VEH.AchsI * VEH.Igetr(Gear) / (0.5 * VEH.Dreifen)) ^ 2) * aist * Vist) * 0.001 End If End If - 'Gesamt-Motorleistung + 'Total Engine-power ' => Pantr ' => P ' => Pkup @@ -954,15 +954,15 @@ lb_nOK: - '*************** Leistungsverteilung usw. ****************** + '*************** Leistungsverteilung usw. ****************** |@@| Power distribution, etc. ****************** - 'Volllast- / Schleppkurve + 'Full-Load/Drag curve If EngState0 = tEngState.Stopped Then Pmin = 0 Pmax = 0 - 'Drehzahl korrigieren + 'Revolutions Correction nU = 0 nn = (nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl) @@ -976,7 +976,7 @@ lb_nOK: Pmax = FLD.Pfull(nn, MODdata.Pe(jz - 1)) End If - 'Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error! + 'If Pmax < 0 or Pmin > 0 then Abort with Error! If Pmin >= 0 And P < 0 Then WorkerMsg(tMsgID.Err, "Pe_drag > 0! n_norm= " & nn, MsgSrc & "/t= " & jz + 1) Return False @@ -1006,10 +1006,10 @@ lb_nOK: MODdata.ModErrors.TrLossMapExtr = "" - 'VKM an Schleppkurve + 'VKM to Drag-curve P = Pmin - 'Forwärtsrechnung bis Rad (PvorD) + 'Forward-calculation to Wheel (PvorD) Pkup = P - Paux - PaMot PaGetr = fPaG(Vist, aist) PlossGB = fPlossGBfwd(Pkup, Vist, Gear) @@ -1025,10 +1025,10 @@ lb_nOK: End If End If - 'Check ob Abbruch (vor Geschw.Red-Iteration sonst kann sichs aufhängen) + 'Check or Abort (before Speed-reduce-iteration, otherwise it hangs) If PHEMworker.CancellationPending Then Return True - 'Check ob P über Volllast => Geschw.-Reduktion + 'Check whether P above Full-load => Reduce Speed If Pplus And P > Pmax Then If EngState0 = tEngState.Load Or EngState0 = tEngState.FullLoad Then If Vist > 0.01 Then @@ -1043,12 +1043,12 @@ lb_nOK: FirstSecItar = False GoTo lbGschw Else - 'FEHLER: Geschw.-Red. bringt nix?!... + 'ERROR: Speed Reduction brings nothing? ... WorkerMsg(tMsgID.Err, "Speed reduction failed!", MsgSrc & "/t= " & jz + 1) Return False End If Else 'tEngState.Idle, tEngState.Stopped, tEngState.Drag - 'FEHLER: Motor nicht in Antrieb ...kann nicht sein?! + 'ERROR: Engine not in Drivetrain ... can it be? If FirstSecItar Then If P > 0.1 Then WorkerMsg(tMsgID.Warn, "Pwheel > 0 but EngState undefined ?!", MsgSrc & "/t= " & jz + 1) End If @@ -1056,7 +1056,7 @@ lb_nOK: End If - 'Zugkraftunterbrechung + 'Interruption of traction(Zugkraftunterbrechung) If TracIntrI > 0 Then If Not TracIntrOn Then @@ -1090,9 +1090,9 @@ lb_nOK: '-------------------------------------------------------------------------------------------------- '------------------------- PNR -------------------------------------------------------------------- '-------------------------------------------------------------------------------------------------- - ' Sekunde abschließen + ' Finish Second - 'Start / Stop - Aktivierung-Geschw. Steuerung + 'Start / Stop - Activation-Speed Control If GEN.StartStop Then If StStAus Then If Not EngState0 = tEngState.Stopped Then @@ -1107,7 +1107,7 @@ lb_nOK: End If End If - 'Modalwerte-Felder schreiben + 'Write Modal-values Fields MODdata.Pe.Add(P / VEH.Pnenn) MODdata.nn.Add(nn) MODdata.nU.Add(nU) @@ -1138,7 +1138,7 @@ lb_nOK: If Cfg.WegKorJa Then Vh.DistCorrection(jz) - 'Zugkraftunterbrechung + 'Interruption of traction(Zugkraftunterbrechung) If TracIntrTurnOff Then TracIntrOn = False @@ -1169,7 +1169,7 @@ lb_nOK: If Vh.Vsoll(jz) - Vist > 1.5 Then SecSpeedRed += 1 - 'Meldungen (Abbruch falls Error) + 'Notify (abort if error) If MODdata.ModErrors.MsgOutputAbort(jz + 1, MsgSrc) Then Return False If Clutch = tEngClutch.Closed And Nvorg Then @@ -1182,10 +1182,10 @@ lb_nOK: Loop Until jz >= MODdata.tDim '*********************************************************************************************** - '*********************************** Zeitschleife ENDE *********************************** + '*********************************** Time loop END *********************************** '*********************************************************************************************** - 'Meldungen (wenn nicht ADVANCE) + 'Notify (When not ADVANCE) If NotAdvMode Then If Cfg.WegKorJa Then @@ -1222,7 +1222,7 @@ lb_nOK: StdMode = (PHEMmode = tPHEMmode.ModeSTANDARD) NotAdvMode = Not (PHEMmode = tPHEMmode.ModeADVANCE) - 'Abbruch falls Leistung/Drehzahl nicht gegeben + 'Abort if Power/Revolutions not given If Not (DRI.Nvorg And DRI.Pvorg) Then WorkerMsg(tMsgID.Err, "Load cycle is not valid! rpm and load required.", MsgSrc) Return False @@ -1233,35 +1233,35 @@ lb_nOK: nnDRI = DRI.Values(tDriComp.nn) PeDRI = DRI.Values(tDriComp.Pe) - 'Drehzahlen vorher weil sonst scheitert die Pmr-Berechnung bei MODdata.nU(t + 1) + 'Drehzahlen vorher weil sonst scheitert die Pmr-Berechnung bei MODdata.nU(t + 1) |@@| Revolutions previously, otherwise Pmr-calculation fails at MODdata.nU(t + 1) For t = 0 To t1 - 'Modalwerte-Felder schreiben - ' MODdata.Pe wird unten belegt + 'Write Modal value Fields + ' Allocate MODdata.Pe MODdata.nn.Add(nnDRI(t)) MODdata.nU.Add(Math.Max(0, nnDRI(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl)) Next - 'Leistung berechnen + 'Power calculation For t = 0 To t1 - 'Sekundäre Progressbar + 'Secondary Progressbar If NotAdvMode Then ProgBarCtrl.ProgJobInt = CInt(100 * t / t1) - 'Reset der sekündlichen Errors + 'Reset the second-by-second Errors MODdata.ModErrors.ResetAll() - '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 + '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 If t > 0 And t < t1 Then Pmr = 0.001 * (VEH.I_mot * (2 * Math.PI / 60) ^ 2 * MODdata.nU(t) * 0.5 * (MODdata.nU(t + 1) - MODdata.nU(t - 1))) / VEH.Pnenn Else Pmr = 0 End If - 'Leistung aus Zyklus korrigiert um P_clutch + 'Power of the Cycle corrected by P_clutch MODdata.Pe.Add(PeDRI(t) + Pmr) - 'Drehzhal aus Zyklus => Durch CycleInit bestimmt - 'Falls Drehzahl unter Leerlauf wir Motor als abgestellt angenommen + 'Revolutions of the Cycle => Determined in Cycle-init + 'If Revolutions under idle, assume Engine is stopped If MODdata.nn(t) < Cfg.nnormEngStop Then EngState0 = tEngState.Stopped Else @@ -1273,7 +1273,7 @@ lb_nOK: PmaxN = FLD.Pfull(MODdata.nn(t), MODdata.Pe(t - 1)) / VEH.Pnenn End If - 'Falls Pmax < 0 oder Pmin > 0 dann Abbruch mit Error! + 'If Pmax < 0 or Pmin > 0 then Abort with Error! If PminN >= 0 AndAlso MODdata.Pe(t) < 0 Then WorkerMsg(tMsgID.Err, "Pe_drag > 0! n_norm= " & MODdata.nn(t), MsgSrc & "/t= " & t + 1) Return False @@ -1311,7 +1311,7 @@ lb_nOK: MODdata.EngState.Add(EngState0) - 'Meldungen + 'Notify If MODdata.ModErrors.MsgOutputAbort(t + 1, MsgSrc) Then Return False Next @@ -1333,7 +1333,7 @@ lb_nOK: Dim jz As Integer Dim Tzykl As Integer - 'Start/Stop Steuerung + 'Start/Stop Control Dim StStAus As Boolean Dim StStTx As Single @@ -1364,7 +1364,7 @@ lb_nOK: Dim GVset As Boolean - 'WegKorrektur + 'WegKorrektur |@@| Route-correction Dim WegIst As Single Dim WegX As Integer Dim SecSpeedRed As Integer @@ -1378,13 +1378,13 @@ lb_nOK: StdMode = (PHEMmode = tPHEMmode.ModeSTANDARD) NotAdvMode = Not (PHEMmode = tPHEMmode.ModeADVANCE) - 'Abbruch wenn keine Geschw. gegeben + 'Abort if no speed given If Not DRI.Vvorg Then WorkerMsg(tMsgID.Err, "Driving cycle is not valid! Vehicle Speed required.", MsgSrc) Return False End If - ' Initialisieren + ' Initialize Vh = MODdata.Vh WegIst = 0 WegX = 0 @@ -1412,7 +1412,7 @@ lb_nOK: KupplEta = 1 End If - 'WG-Kennfeld aus MAP übernehmen und Pi-Liste berechnen + 'Take WG-map from MAP and calculate Pi-list PeL = MAP.LPe nnL = MAP.Lnn Ldim = PeL.Count - 1 @@ -1429,7 +1429,7 @@ lb_nOK: End If Next - 'Schaltpunkte für NEDC/FTP Schaltung + 'Gear-shifting points for NEDC/FTP Select Case GEN.izykwael Case 0 'Nefzja = True GnachV = True @@ -1446,7 +1446,7 @@ lb_nOK: End Select - 'Theoretische Höchstgeschwindigkeit [m/s] + 'Theoretical Maximum-speed [m/s] GVmax = VEH.nNenn * VEH.Dreifen * Math.PI / (VEH.AchsI * VEH.Igetr(VEH.ganganz) * 60) jz = -1 @@ -1454,7 +1454,7 @@ lb_nOK: TzyklOgl = Tzykl '*********************************************************************************************** - '*********************************** Zeitschleife **************************************** + '*********************************** Time-loop **************************************** '*********************************************************************************************** Do @@ -1462,26 +1462,26 @@ lb_nOK: GVset = False - 'Sekundäre Progressbar + 'Secondary Progressbar If NotAdvMode Then ProgBarCtrl.ProgJobInt = CInt(100 * jz / MODdata.tDim) - ' Zustand bestimmen + ' Determine State lbGschw: - 'Geschw. / Beschl. berechnen------------------- - 'Jetzt durch DRI-Klasse + 'Calculate Speed/Acceleration ------------------- + 'Now by DRI-class Vist = Vh.V(jz) aist = Vh.a(jz) - 'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren + 'If Speed over the theoretical Top-Speed => Reduce If Vist > GVmax + 0.0001 And Not GVset Then Vh.SetSpeed0(jz, GVmax) GVset = True GoTo lbGschw End If - 'Aus Leistg----- + 'From Power ----- If aist < 0 Then If (Vist < 0.025) Then Vist = 0 @@ -1491,7 +1491,7 @@ lbGschw: PbrakeRek = 0 - 'Fahrzustand bestimmen------------------------- + 'Determine Driving-state ------------------------- Pplus = False Pminus = False @@ -1516,17 +1516,17 @@ lbGschw: Pminus = True End Select - 'Maximal zulässige Batterieleistung + 'Maximum allowable Battery-power BAT.Bat_Pzul(jz) PeBatMax = BAT.PmaxAntr PeBatMin = BAT.PmaxLaden - '************************************ Gangwahl ************************************ + '************************************ Gear selection ************************************ If VehState0 = tVehState.Stopped Then Gear = 0 Clutch = tEngClutch.Opened Else - 'Checken ob Kupplung schleift (wichtig für Schaltmodell): + 'Check whether Clutch-lock (important for Gear-shifting model): If fnn(Vist, 1, False) < Kuppln_norm And Pplus Then Clutch = tEngClutch.Slipping Else @@ -1534,23 +1534,23 @@ lbGschw: End If If Gvorg Then - 'Gang-Vorgabe + 'Gear-setting Gear = Math.Min(Vh.GearVorg(jz), VEH.ganganz) ElseIf Nvorg Then - 'Drehzahlvorgabe + 'Revolutions-setting Gear = fGearByU(MODdata.nUvorg(jz), Vist) ElseIf VEH.ganganz = 1 Then Gear = 1 Else If GnachV Then - 'Gang nach Geschwindigkeit wird hier nicht unterstützt + 'Gear from Speed is not supported here WorkerMsg(tMsgID.Err, "Geary-By-Speed not supported in EV mode!", MsgSrc) Return False Else - 'Schaltmodell + 'Gear-shifting Model Gear = fGearEV(jz) - 'EV: Kein Leerlauf wegen Rekuperation + 'EV: No idle due to recuperation If Gear = 0 Then Gear = 1 End If End If @@ -1563,20 +1563,20 @@ lbGschw: If Gear < 1 Then Clutch = tEngClutch.Opened - 'Falls Rekuperation laut Radleistung möglich: PrekupMax berechnen + 'If regenerative braking is possible according to Wheel-power: Calculate PrekupMax If Pminus And Clutch = tEngClutch.Closed Then - 'Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.) + 'Calculate Maximum Recuperation-power (depending on Wheel-load/Friction-coefficient) PrekupMax = fPrekupMax() If PrekupMax > -0.000001 Then Clutch = tEngClutch.Opened End If - 'Falls vor Gangwahl festgestellt wurde, dass nicht KupplSchleif, dann bei zu niedriger Drehzahl runterschalten: + '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: If Clutch = tEngClutch.Closed Then If fnn(Vist, Gear, False) < Kuppln_norm And Not VehState0 = tVehState.Dec And Gear > 1 Then Gear -= 1 End If - 'Checken ob Leerlauf obwohl Leistung > 0 - ' wenn Leistung vor Diff > 0.1% von Nennleistung dann Korrigieren! + 'Check whether Idling although Power > 0 + ' When Power before Diff > 0.1% of Nominal-power then Correct! If Clutch = tEngClutch.Opened Then If PvorD > 0.001 * VEH.Pnenn Then Gear = 1 @@ -1588,9 +1588,9 @@ lbGschw: End If End If - '************************************ Drehzahl ************************************ + '************************************ Revolutions ************************************ - '*** Wenn Drehzahl vorgegeben (Gemess = 2) dann wird der nächste Block übersprungen *** + '*** If the Revolutions is specified (Gemess = 2) then the next block is skipped *** If Nvorg Then nn = (MODdata.nUvorg(jz) - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl) GoTo lb_nOK @@ -1598,7 +1598,7 @@ lbGschw: lb10: - 'Drehzahlabfall beim Auskuppeln + 'Revolutions drop when decoupling If Clutch = tEngClutch.Opened Then If jz = 0 Then nn = 0 @@ -1619,15 +1619,15 @@ lb10: nn = fnn(Vist, Gear, Clutch = tEngClutch.Slipping) - '*** Beginn: Drehzahl-Check wenn keine Vorgabe + '*** Start: Revolutions-Check if not specified - 'Checken ob Drehzahl zu hoch! => Hochschalten + 'Check whether Revolutions too high! => Upshift Do While nn > 1 And Gear < VEH.ganganz Gear += 1 nn = fnn(Vist, Gear, Clutch = tEngClutch.Slipping) Loop - 'Checken ob Drehzahl zu niedrig mit geschlossener Kupplung + 'Check whether Revolutions too low with the Clutch-closed If Clutch = tEngClutch.Closed Then If nn < 0.001 Then Gear = 0 @@ -1639,31 +1639,31 @@ lb10: lb_nOK: - '************************************ Motor-Zustand bestimmen ************************************ - ' nn ist ab hier fix! + '************************************ Determine Engine-state ************************************ + ' nn fix is here! nU = nn * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl - 'Nebenverbrauch bestimmen (aus VEH und DRI) + 'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next Consumption (from VEH and DRI) Paux = fPaux(jz, nU) - 'MotorTrägheit + 'Engine-inertia If Clutch = tEngClutch.Opened Then If jz = 0 Then PaMot = 0 Else - 'Nicht optimal da jz-1 bis jz nicht der richtige Zeitraum + 'Not optimal since jz-1 to jz not the right Interval PaMot = (VEH.I_mot * (nU - MODdata.nU(jz - 1)) * 0.01096 * (nU + MODdata.nU(jz - 1) / 2)) * 0.001 End If Else If Nvorg Then - 'Drehzahlvorgabe + 'Revolutions-setting PaMot = (VEH.I_mot * MODdata.dnUvorg(jz) * 0.01096 * MODdata.nUvorg(jz)) * 0.001 Else PaMot = ((VEH.I_mot * (VEH.AchsI * VEH.Igetr(Gear) / (0.5 * VEH.Dreifen)) ^ 2) * aist * Vist) * 0.001 End If End If - 'Gesamt-Motorleistung + 'Total Engine-power ' => Pantr ' => P ' => Pkup @@ -1704,9 +1704,9 @@ lb_nOK: End Select - '*************** Leistungsverteilung usw. ****************** + '*************** Power distribution, etc. ****************** - 'Volllast- / Schleppkurve + 'Full-load/Drag-curve If EngState0 = tEngState.Stopped Then Pmin = 0 Pmax = 0 @@ -1726,21 +1726,21 @@ lb_nOK: If Math.Abs(P / Pmax - 1) < 0.02 Then EngState0 = tEngState.FullLoad Case tEngState.Drag - 'Maximale Rekuperations-Leistung berechnen (abh. von Radlast/Reibkoef.) + 'Calculate Maximum Recuperation power (depending on Wheel-load/Friction-coefficient) 'PrekupMax = fPrekupMax() - 'Falls RekupMax überschritten muss Pe neu berechnet werden + 'If RecupMax exceeded, then must recalculate Pe If PrekupMax > PvorD And Clutch = tEngClutch.Closed Then - 'PbrakeRek = Leistung die zusätzlich mechanisch gebremst werden muss wegen Überschreitung von RekupMax - 'wird schon oben nach Gangwahl erledigt: PbrakeRek = Pantr - PrekupMax + 'PbrakeRek = power which must be additionally hampered mechanical overrun of RekupMax + 'wird schon oben nach Gangwahl erledigt: PbrakeRek = Pantr - PrekupMax |@@| is already done by top gear selection: PbrakeRek = Pantr - PrekupMax - 'Neue EM-Leistung + 'New EM-Power P = PrekupMax + fPlossGB(PrekupMax, Vist, Gear) + fPlossDiff(PrekupMax, Vist) + fPaG(Vist, aist) + PaMot End If - 'Check ob Leistung aufgenommen werden kann (abh. von FLD und Batterie). Bremsleistung berechnen. + '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. If P < Pmin Then Pbrake = P - Pmin P = Pmin @@ -1749,7 +1749,7 @@ lb_nOK: Pbrake = 0 End If - 'RekupMax-Bremsleistung dazu addieren + 'Addup RekupMax-Braking-power Pbrake += PbrakeRek Case Else 'tEngState.Idle, tEngState.Stopped @@ -1761,11 +1761,11 @@ lb_nOK: End Select - 'Check ob P über Volllast => Geschw.-Reduktion + 'Check whether above Full-load => Speed-reduction If Pplus And P > Pmax Then If EngState0 = tEngState.Load Or EngState0 = tEngState.FullLoad Then - 'Falls Pmax=0 muss Batterie leer sein + 'When Pmax = 0 then Battery must be empty If Pmax < 0.0001 Then GoTo lbBatLeer If Vist > 0.01 Then @@ -1779,7 +1779,7 @@ lb_nOK: End Select GoTo lbGschw Else - 'FEHLER: Geschw.-Red. bringt nix?!... + 'ERROR: Velocity reduction brings nothing? ... WorkerMsg(tMsgID.Err, "P > Pmax ?!", MsgSrc) Return False End If @@ -1789,7 +1789,7 @@ lb_nOK: '------------------------------------------------------- '------------------------- PNR ------------------------- '------------------------------------------------------- - ' Sekunde abschließen + ' Finish Second If PHEMworker.CancellationPending Then Return True @@ -1802,7 +1802,7 @@ lb_nOK: End If '************************************************** - '***************** Batterie *********************** + '***************** Battery *********************** If EngState0 = tEngState.Stopped Or P = 0 Then PeBat0 = Paux Else @@ -1814,7 +1814,7 @@ lb_nOK: PiBat0 = PeBat0 + BAT.PbatV '************************************************* - '****** Modalwerte-Felder schreiben ************** + '****** Write Modal-value Fields ************** MODdata.Pe.Add(P / VEH.Pnenn) MODdata.nn.Add(nn) MODdata.nU.Add(nU) @@ -1856,17 +1856,17 @@ lb_nOK: If Vh.Vsoll(jz) - Vist > 1.5 Then SecSpeedRed += 1 - 'Meldungen + 'Notify If MODdata.ModErrors.MsgOutputAbort(jz + 1, MsgSrc) Then Return False Loop Until jz >= Tzykl '*********************************************************************************************** - '********************************* Zeitschleife ENDE ************************************* + '********************************* Time loop END ************************************* '*********************************************************************************************** - 'Meldungen (nicht ADV) + 'Notify (not ADV) If NotAdvMode Then If Cfg.WegKorJa Then @@ -1884,7 +1884,7 @@ lb_nOK: lbBatLeer: - 'TODO.... Fehlermeldung etc + 'TODO Error message etc MODdata.tDim = jz - 1 WorkerMsg(tMsgID.Warn, "SOC-Min reached! Calculation aborted!", MsgSrc) @@ -1930,7 +1930,7 @@ lbDone: Dim GVset As Boolean - 'WegKorrektur + 'Route(Weg) correction Dim WegIst As Single Dim WegX As Integer @@ -2030,13 +2030,13 @@ lbDone: ModeCheck.Add(tHEVparMode.ICEonly, False) ModeCheck.Add(tHEVparMode.Rekup, False) - 'Abbruch wenn keine Geschw. gegeben + 'Abort when no speed given If Not DRI.Vvorg Then WorkerMsg(tMsgID.Err, "Driving cycle is not valid! Vehicle Speed required.", MsgSrc) Return False End If - ' Initialisieren + ' Initialize Vh = MODdata.Vh If Cfg.GnVorgab Then Gvorg = DRI.Gvorg @@ -2059,7 +2059,7 @@ lbDone: KupplEta = 1 End If - 'Schaltpunkte für NEDC/FTP Schaltung + 'Gear-shifting points for NEDC/FTP Select Case GEN.izykwael Case 0 'Nefzja = True GnachV = True @@ -2094,7 +2094,7 @@ lbDone: avl(6) = 200 / 3.6 Case Else GnachV = False - 'Schaltparameter initialisieren + 'Gear-shifting parameters initialization Aaufi = 0.3 Baufi = 0.3 Caufi = 0.4 @@ -2103,7 +2103,7 @@ lbDone: Cobi = 0.46 End Select - 'Theoretische Höchstgeschwindigkeit [m/s] + 'Theoretical maximum speed [m/s] GVmax = VEH.nNenn * VEH.Dreifen * Math.PI / (VEH.AchsI * VEH.Igetr(VEH.ganganz) * 60) 'HEV @@ -2124,33 +2124,33 @@ lbDone: TzyklOgl = MODdata.tDim '*********************************************************************************************** - '*********************************** Zeitschleife **************************************** + '*********************************** Time-loop **************************************** '*********************************************************************************************** Do jz += 1 GVset = False - 'Sekundäre Progressbar + 'Secondary Progressbar If NotAdvMode Then ProgBarCtrl.ProgJobInt = CInt(100 * jz / MODdata.tDim) - ' Zustand bestimmen + ' Determine State lbGschw: - 'Geschw. / Beschl. berechnen------------------- - 'Jetzt durch DRI-Klasse + 'Speed / Acceleration calculation ------------------- + 'Now by DRI-class Vist = Vh.V(jz) aist = Vh.a(jz) - 'Wenn Geschw. über theoretischer Höchstgeschw. => Reduzieren + 'If Speed over Theoretical-top-speed => Reduce If Vist > GVmax + 0.0001 And Not GVset Then Vh.SetSpeed0(jz, GVmax) GVset = True GoTo lbGschw End If - 'Aus Leistg----- + 'From Power ----- If aist < 0 Then If (Vist < 0.025) Then 'Vh.SetSpeed(jz, 0) @@ -2161,9 +2161,9 @@ lbGschw: '--------------- '******************************************************************************* - '*************************** Fahrzustand bestimmen ***************************** + '*************************** Determine Driving-state ***************************** - 'Fahrzustand bestimmen------------------------- + 'Determine Driving-state------------------------- Pplus = False Pminus = False @@ -2246,12 +2246,12 @@ lbGschw: Pminus = True End Select - '************************************ Gangwahl ************************************ + '************************************ Gear selection ************************************ If VehState0 = tVehState.Stopped Then Gear = 0 Clutch = tEngClutch.Opened Else - 'Checken ob Kupplung schleift (wichtig für Schaltmodell): + 'Check whether Clutch Locks (important for Gear-shifting model): If fnn(Vist, 1, False) < Kuppln_norm And Pplus Then Clutch = tEngClutch.Slipping Else @@ -2259,19 +2259,19 @@ lbGschw: End If If Gvorg Then - 'Gang-Vorgabe + 'Gear-settings Gear = Math.Min(Vh.GearVorg(jz), VEH.ganganz) ElseIf Nvorg Then - 'Drehzahlvorgabe + 'Revolutions-setting Gear = fGearByU(MODdata.nUvorg(jz), Vist) ElseIf VEH.ganganz = 1 Then Gear = 1 Else If GnachV Then - 'Gang nach Geschwindigkeit + 'Gear from Speed Gear = fGearBySpeed(jz) Else - 'Schaltmodell + 'Gear-shifting Model If PKWja Then Gear = fGearPKW(jz) Else @@ -2286,10 +2286,10 @@ lbGschw: Return False End If - 'Nebenverbrauch bestimmen (aus VEH und DRI) + 'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next Consumption (from VEH and DRI) Paux = fPaux(jz, 0) - 'HEV-Teil kommt erst nach Gangwahl weil Getr./Diff-Loss den benötigt und EM zwischen ICE und GB liegt + '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 If VehState0 = tVehState.Stopped Then PeICE = 0 @@ -2297,23 +2297,23 @@ lbGschw: ICEclutch = False EMclutch = False - 'Nebenverbrauch bestimmen (aus VEH und DRI) + 'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next consumption (from VEH and DRI) Paux = fPaux(jz, 0) Else If Nvorg Then - 'Wenn Drehzahl vorgegeben + 'If Revolutions specified nU = MODdata.nUvorg(jz) Else - 'Sonst aus Vist und Gear + 'Otherwise from Vist and Gear nU = fnU(Vist, Gear, Clutch = tEngClutch.Slipping) End If - 'Normierte Drehzahl + 'Normalized Revolutions nn = (nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl) - 'Maximale Leistung der ICE + 'Maximum power of the ICE If jz = 0 Then ICEmax = FLD.Pfull(nn) Else @@ -2322,15 +2322,15 @@ lbGschw: ICEmin = FLD.Pdrag(nn) - 'Nebenverbrauch bestimmen (aus VEH und DRI) + 'Nebenverbrauch bestimmen (aus VEH und DRI) |@@| Determine next consumption (from VEH and DRI) Paux = fPaux(jz, nU) - 'Maximal zulässige Batterieleistung + 'Maximum allowable Battery-power BAT.Bat_Pzul(jz) PeBatMax = Math.Max(BAT.PmaxAntr - Paux, 0) 'Paux reduziert maximale Entlade-Leistung PeBatMin = Math.Min(BAT.PmaxLaden - Paux, 0) 'Paux erhöht (!) maximale Lade-Leistung - 'Maximale EM-Leistung. (Batterieleistung limitiert EM-Leistung) + 'Maximale EM-Leistung. (Batterieleistung limitiert EM-Leistung) |@@| Maximum EM-Power (Battery-power limited by EM power) EMmax = EMO.PeMax(nU) Do While EMO.PiEM(nU, EMmax) > PeBatMax EMmax *= 0.995 @@ -2341,18 +2341,18 @@ lbGschw: EMmax *= 0.995 Loop - 'Leistung bis ICE/EM (= an Kupplung) berechnen + 'Leistung bis ICE/EM (= an Kupplung) berechnen |@@| Power to ICE/EM (= coupling to) get PlossGB = fPlossGB(PvorD, Vist, Gear) PlossDiff = fPlossDiff(PvorD, Vist) PlossRt = fPlossRt(Vist, Gear) PaGetr = fPaG(Vist, aist) - 'Leistung an Kupplung + 'Power to clutch Pkup = PvorD + PlossGB + PlossDiff + PaGetr + PlossRt 'PaMot If Nvorg Then - 'Drehzahlvorgabe + 'Revolutions-setting PaICE = (VEH.I_mot * MODdata.dnUvorg(jz) * 0.01096 * MODdata.nUvorg(jz)) * 0.001 PaEM = (EMO.I_mot * MODdata.dnUvorg(jz) * 0.01096 * MODdata.nUvorg(jz)) * 0.001 Else @@ -2360,28 +2360,28 @@ lbGschw: PaEM = ((EMO.I_mot * (VEH.AchsI * VEH.Igetr(Gear) / (0.5 * VEH.Dreifen)) ^ 2) * aist * Vist) * 0.001 End If - '***** Notwendige Leistung im EV-Betrieb - ' Leistung an Kupplung plus EM-Trägheit + '***** Power required in EV-mode + ' Power to Clutch plus EM-inertia PeEV = Pkup + PaEM - '! ACHTUNG: Wenn ICE eingekuppelt dann muss PaICE auch noch dazu ! => Später bei Leistungsverteilung + '! CAUTION: If ICE is engaged then PaICE must also be ! => Later in power distribution - '***** Notwendige Leistung im ICE+EM-Betrieb + '***** Power required in the ICE+EM-operation PeKomb = Pkup + PaICE + PaEM - '***** Notwendige Leistung im ICE-Betrieb + '***** Power required in ICE-operation PeICEonly = Pkup + PaICE - '***** Check ob EV möglich + '***** Check whether EV possible ' => Bat <> Low - ' => EM-Leistung >= Antriebsleistung + ' => EM-Power >= Drivetrain-power ' => v < vEVo If BatLvl <> tBatLvl.Empty And BatLvl <> tBatLvl.Low And PeEV <= EMmax And Under_vEVo Then ModeCheck(tHEVparMode.EV) = True - '***** Falls EV möglich: Check ob kritisch + '***** If EV possible: check whether critical If ModeCheck(tHEVparMode.EV) And PeEV > 0.9 * EMmax Then EVcrit = True - '***** Check ob Assist / LPI / ICEonly möglich und ob Boost erforderlich - ' => ICE-Ein muss möglich sein (ICElock) + '***** Check whether Assist / LPI / ICEonly is possible and if Boost is needed + ' => ICE-On must be possible (ICElock) If ICElock <> tICElock.OffLock Then 'Assist / Boost @@ -2389,7 +2389,7 @@ lbGschw: If BatLvl <> tBatLvl.Empty Then ModeCheck(tHEVparMode.Assist) = True 'Boost - ' => ICE an Volllast + ' => ICE at Full-load If PeICEonly > ICEmax Then NeedBoost = True End If @@ -2402,28 +2402,28 @@ lbGschw: End If - '***** Check ob Rekup möglich + '***** Check whether Recuparation possible ModeCheck(tHEVparMode.Rekup) = (BatLvl <> tBatLvl.Full) Pbrake = 0 '*********************************************************************************************** - '********************************* Fahrzustands-Unterscheidung ********************************* + '********************************* Driving-state distinction ********************************* '*********************************************************************************************** If Pplus Then '**************************************************************************************** - '***************************** Betriebsmodus Vor-Auswahl ******************************** + '***************************** Transmission-Mode pre-selection ******************************** If NeedBoost Then - 'Wenn Boost notwendig (und möglich), dann keine Wahl + 'if Boost necessary (and possible), then no Choice HEVmode0 = tHEVparMode.Assist ElseIf ModeCheck(tHEVparMode.EV) Then - 'EV Mode wenn... + 'EV mode when ... If Not ModeCheck(tHEVparMode.ICEonly) Or Under_vEVu Or BatLvl = tBatLvl.High Then 'ICE nicht möglich, Vist unter EVu oder Batterieladung hoch HEVmode0 = tHEVparMode.EV @@ -2432,7 +2432,7 @@ lbGschw: Else - 'Wenn EV & ICE nicht möglich dann EV-Modus bis ICE wieder startet.... sollte nie vorkommen weil keine ICE-Abschaltung wenn wenig SOC + 'If EV & ICE is not possible then EV-mode till ICE starts again .... should never happen because no ICE-shutdown when little SOC If Not ModeCheck(tHEVparMode.ICEonly) Then HEVmode0 = tHEVparMode.EV @@ -2442,20 +2442,20 @@ lbGschw: End If - 'Falls Einsatz von HEV-Strategie: - ' Ke's berechnen + 'If use of HEV strategy: + ' Ke's calculation If HEVmode0 = tHEVparMode.Undefined Then - '************** Optimale Ke's berechnen und Leistungen dazu ************ + '************** Calculate optimal Ke's and Power for it ************ - 'Emission/Verbrauch in g/h + 'Emission/Consumption in g/h FCbasis = MAP.GetSingleValue(tMapComp.FC, nn, PeICEonly / VEH.Pnenn) '*********************************************************************** '******************************* KeSTE ********************************* '*********************************************************************** - 'KeSTE aus STE-Kurve... + 'KeSTE from STE-curve ... KeSTE = HEV.STEintp(SOC0) @@ -2473,33 +2473,33 @@ lbGschw: Pel += PelStep Pvkm = PeKomb - Pel - 'Unter Max-Pe bleiben + 'Remain under Max-Pe If Pvkm > ICEmax Then Continue Do - 'Wenn Pvkm negativ: Berechnung für reinen EM-Betrieb + 'If Pvkm negative: Calculation of the pure EM-transmission?(Betrieb) If Pvkm <= 0 Then - ' ...nicht gültig falls Batlvl <= Low oder ICEonLock + ' ...not valid if Batlvl <= Low or ICEonLock If Not ModeCheck(tHEVparMode.EV) Or ICElock = tICElock.OnLock Then Exit Do - 'EM-Leistung = P-Antrieb + 'EM-Power = P-Drivetrain Pel = PeEV Pvkm = 0 - 'Verbrauchseinsparung in g/h + 'Consumption-reduction in g/h FCminus = FCbasis - 'Abbruch nach dieser Berechnung (mehr EM-Leistung macht keinen Sinn da hier schon rein elektrischer Antrieb) + 'Abort according to this calculation (more EM-power makes no sense because Drivetrain already pure electric) bAbort = True Else - 'Verbrauchseinsparung in g/h + 'Consumption-savings in g/h FCminus = FCbasis - MAP.GetSingleValue(tMapComp.FC, nn, Pvkm / VEH.Pnenn) End If - 'Leistung nach E-Motor in kW + 'Power to electric motor in kW Pmot = EMO.PiEM(nU, Pel) If Pmot > PeBatMax Then @@ -2510,18 +2510,18 @@ lbGschw: End If End If - 'Leistung in Batterie + 'Power in battery Pbat = BAT.PiBat(Pmot) If Pbat = 0 Then Stop - 'Div/0 und Vorzeichen-Check + 'Div/0 and Sign checks If FCminus > 0 Then - 'KeA berechnen in kWh/kg + 'KeA calculated in kWh/kg KeA = 1000 * Pbat / FCminus - 'Check ob Optimum + 'Check whether Optimum If KeA < KeAmin Then KeAmin = KeA PelOpt = Pel @@ -2529,7 +2529,7 @@ lbGschw: End If End If - 'Abbruch falls reiner EM-Betrieb schon erreicht + 'Abort when already reached pure EM-mode If bAbort Then Exit Do Loop @@ -2562,24 +2562,24 @@ lbGschw: Pel -= PelStep Pvkm = PeKomb - Pel - 'Falls Pvkm an Volllast: + 'If Pvkm at Full-load: If Pvkm > 0.99 * ICEmax Then - 'Pvkm auf Volllast setzen + 'Put Pvkm on full load Pvkm = 0.99F * ICEmax - 'Elektromotor in Generatorbetrieb (Pges1 - Pvkm < 0) + 'EM in generator-mode (Pges1 - Pvkm < 0) Pel = PeKomb - Pvkm - 'Abbruch nach diesem Durchgang weil mehr Generieren nicht möglich + 'Abort after this pass because Generating more impossible bAbort = True End If - 'Zusatzverbrauch in g/h + 'Additional consumption in g/h FCplus = MAP.GetSingleValue(tMapComp.FC, nn, Pvkm / VEH.Pnenn) - FCbasis - 'Leistung nach E-Motor in kW + 'Power to Electric-motor in kW Pmot = EMO.PiEM(nU, Pel) If Pmot < PeBatMin Then @@ -2590,18 +2590,18 @@ lbGschw: End If End If - 'Leistung in Batterie + 'Power in battery Pbat = BAT.PiBat(Pmot) If Pbat = 0 Then Exit Do - 'Div/0 und Vorzeichen-Check + 'Div/0 and Sign checks If FCplus > 0 Then - 'KeG berechnen in kWh/kg + 'Calculate KeG in kWh/kg KeG = -1000 * Pbat / FCplus - 'Check ob Optimum + 'Check whether Optimum If KeG > KeGmax Then KeGmax = KeG PelOpt = Pel @@ -2610,7 +2610,7 @@ lbGschw: End If - 'Abbruch falls VKM-Volllast schon erreicht + 'Abort when already reached VKM-full-load If bAbort Then Exit Do Loop @@ -2619,7 +2619,7 @@ lbGschw: KeG = KeGmax - 'Abstand Eta zu Kurve berechnen + 'Abstand Eta zu Kurve berechnen |@@| Calculate Distance Eta from Curve DeltaG = KeG - KeSTE Else @@ -2629,7 +2629,7 @@ lbGschw: End If '*********************************************************************** - '********************** KeSTE, Deltas auswerten ************************ + '********************** Evaluate KeSTE, Deltas ************************ '*********************************************************************** If DeltaG < 0 And DeltaA < 0 Then @@ -2658,7 +2658,7 @@ lbGschw: '*********************************************************************** - '************************* Betriebsstrategie *************************** + '************************* Operating strategy *************************** '*********************************************************************** 'LastHEVmode-Check @@ -2687,20 +2687,20 @@ lbGschw: End If - '** Ke-Modus einsetzen wenn... + '** Ke-mode used when ... If HEVmodeByKe = LastHEVmode Or StateChange Or LastHEVnotPossible Then - '...Gleicher Modus wie vorher, Fahrzustands-Änderung oder Letzter Modus unmöglich + '...Same mode as before, change Driving-state or last mode impossible HEVmode0 = HEVmodeByKe Else - '...wenn Motor nicht läuft + '...when Engine is not running If LastEngState = tEngState.Stopped Then HEVmode0 = HEVmodeByKe - '...wenn PeICE-Leistungsänderung mit neuen Modus am geringsten + '...if the PeICE Power-change is lowest with the new Mode Else Select Case HEVmodeByKe @@ -2725,23 +2725,23 @@ lbGschw: End If '******************************************************************************************** - '****************************** Leistungen je nach Modus verteilen ************************** + '****************************** Distribute Power to each Mode ************************** '******************************************************************************************** Select Case HEVmode0 Case tHEVparMode.EV - 'EM übernimmt gesamte Leistung + 'EM assumes the entire Power PeEM = PeEV - 'Geschw. reduzieren falls Leistung zu hoch für EM oder Bat + 'Speed reduced if power is too high for EM or Bat If PeEM > EMmax Or EMO.PiEM(nU, PeEM) > PeBatMax Then Vh.ReduceSpeed(jz, 0.995) GoTo lbGschw End If - 'Falls ICElock oder EVcrit dann ICE ein (aber ausgekuppelt) + 'If ICElock or EVcrit then ICE on (but disconnected) If ICElock = tICElock.OnLock Or (EVcrit And ICElock <> tICElock.OffLock) Then EngState0 = tEngState.Idle Else @@ -2755,7 +2755,7 @@ lbGschw: Case tHEVparMode.ICEonly - 'ICE übernimmt gesamten Antrieb + 'ICE assumes the entire Drivetrain If PeICEonly > ICEmax Then Vh.ReduceSpeed(jz, 0.995) GoTo lbGschw @@ -2823,14 +2823,14 @@ lbGschw: HEVmode0 = tHEVparMode.Rekup - 'ACHTUNG: ICEclutch ist standardmäßig 'False' deshalb hier keine weiteren Statements mehr + 'CAUTION: ICEclutch defaults to 'false' so here no more statements - 'Maximale Rekup-Leistung berechnen + 'Calculate maximum Recuparation-Power PrekupMax = fPrekupMax() If PrekupMax > PvorD Then 'Falls Rekup-Limit erreicht - 'Mit PrekupMax auf EM/ICE zurück rechnen + 'Mit PrekupMax auf EM/ICE zurück rechnen |@@| Calculate back PrecupMax from(auf) EM/ICE PlossGB = fPlossGB(PrekupMax, Vist, Gear) PlossDiff = fPlossDiff(PrekupMax, Vist) PlossRt = fPlossRt(Vist, Gear) @@ -2839,12 +2839,12 @@ lbGschw: PeICEonly = Pkup + PaICE PeEV = Pkup + PaEM - 'Den Rest gleich auf die Bremse + 'Den Rest gleich auf die Bremse |@@| The Residual equals that to(auf) the Brakes Pbrake = PvorD - PrekupMax End If - 'Default für ICE (damit man sich die "Else"-Statements spart) + 'Default for ICE (so as to save the "Else" statement) PeICE = 0 EngState0 = tEngState.Stopped @@ -2852,32 +2852,32 @@ lbGschw: If ICElock = tICElock.OnLock Then 'Falls ICElock, dann ICE-Schub dazu wenn EM nicht ausreicht. Basis ist immer PeKomb - 'EM-Leistung berechnen + 'Compute EM-power PeEM = PeKomb If PeEM < EMmin Then 'Falls maximale EM-Max-Rekup überschritten... - 'EM-Leistung neu + 'New EM-performance PeEM = EMmin - 'Restliche Leistung an ICE + 'Residual power to ICE PeICE = PeKomb - PeEM EngState0 = tEngState.Drag - 'Falls ICE über Schleppkurve + 'If ICE over Drag-curve If PeICE < ICEmin Then - 'ICE-Leistung neu + 'New ICE power PeICE = ICEmin - 'Rest an Bremse + 'Rest to Brakes Pbrake += PeKomb - PeEM - PeICE End If Else 'Falls EM-Max-Rekup nicht überschritten - 'ICE in Leerlauf (weil On-Lock) + 'ICE is idle (because On-Lock) EngState0 = tEngState.Idle End If @@ -2886,27 +2886,27 @@ lbGschw: Else 'Falls nicht ICElock, dann ICE-Schub nur dazu wenn ICE nicht aus. Basis ist PeEV - 'EM-Leistung berechnen + 'Compute EM-power PeEM = PeEV If PeEM < EMmin Then 'Falls maximale EM-Max-Rekup überschritten... - 'EM-Leistung neu + 'New EM-performance PeEM = EMmin If LastEngState <> tEngState.Stopped And PeKomb < EMmin Then 'Falls ICE nicht aus und kombinierte Leistung unter EM-Max-Rekup dann ICE in Schub - 'ICE im Schubbetrieb + 'ICE im Schubbetrieb |@@| ICE on the overrun PeICE = PeKomb - PeEM EngState0 = tEngState.Drag - 'Falls ICE über Schleppkurve + 'If ICE over Drag-curve If PeICE < ICEmin Then - 'ICE-Leistung neu + 'New ICE-power PeICE = ICEmin - 'Rest an Bremse + 'The rest to Brakes Pbrake += PeKomb - PeEM - PeICE End If @@ -2929,17 +2929,17 @@ lbGschw: If LastEngState <> tEngState.Stopped Then 'Falls ICE nicht aus dann Schub - 'ICE im Schubbetrieb + 'ICE on the Overrun(Schubbetrieb) PeICE = PeICEonly EngState0 = tEngState.Drag - 'Falls ICE über Schleppkurve + 'When ICE above Drag-curve If PeICE < ICEmin Then - 'ICE-Leistung neu + 'New ICE-power PeICE = ICEmin - 'Rest an Bremse + 'The rest of on Brakes Pbrake += PeKomb - PeEM - PeICE End If @@ -2959,7 +2959,7 @@ lbGschw: Else - 'Leistung Null + 'Power zero PeICE = 0 PeEM = 0 ICEclutch = False @@ -2970,10 +2970,10 @@ lbGschw: End If '************************************************************************************ - '****************************** Clutch und Drehzahlen ******************************* + '****************************** Clutch and Revolutions ******************************* '************************************************************************************ - 'Haupt-Kupplung => muss hier schon bekannt sein! + 'Main clutch => must already be known here! 'If ICEclutch Then ' If PeICE > 0 And fnn(Vist, Gear, False) < Kuppln_norm Then ' Clutch = tEngClutch.Slipping @@ -2986,7 +2986,7 @@ lbGschw: ' Clutch = tEngClutch.Opened 'End If - '************************************ Drehzahl ICE ************************************ + '************************************ ICE Revolutions************************************ If ICEclutch Then nnICE = fnn(Vist, Gear, Clutch = tEngClutch.Slipping) @@ -3031,7 +3031,7 @@ lbGschw: End If - '************************************ Drehzahl EM ************************************* + '************************************ EM Revolutions ​​************************************* If EMclutch Then nUEM = fnU(Vist, Gear, Clutch = tEngClutch.Slipping) Else @@ -3057,12 +3057,12 @@ lbGschw: If PHEMworker.CancellationPending Then Return True - ' Sekunde abschließen + ' Finish Second If FirstSec Then FirstSec = False 'ICE-Lock - ' ACHTUNG: Die beiden If-Schleifen nicht verbinden weil LockCount sich sonst verzählt + ' 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 If ICElock <> tICElock.NoLock Then LockCount += 1 If LockCount > GEN.StStT Then @@ -3079,7 +3079,7 @@ lbGschw: End If End If - 'Modalwerte-Felder schreiben + 'Write Modal-values Fields MODdata.Pe.Add(PeICE / VEH.Pnenn) MODdata.nn.Add(nnICE) MODdata.nU.Add(nUICE) @@ -3127,16 +3127,16 @@ lbGschw: If Vh.Vsoll(jz) - Vist > 1.5 Then SecSpeedRed += 1 - 'Meldungen + 'Notify If MODdata.ModErrors.MsgOutputAbort(jz + 1, MsgSrc) Then Return False Loop Until jz >= MODdata.tDim '*********************************************************************************************** - '********************************* Zeitschleife ENDE ************************************** + '********************************* Time-loop END ************************************** '*********************************************************************************************** - 'Meldungen (Nicht ADVANCE) + 'Notify (Not ADVANCE) If NotAdvMode Then If Cfg.WegKorJa Then @@ -3252,8 +3252,8 @@ lbGschw: Dim nx As Single Dim Vist0 As Single - '-----------------------------------Sekunde 1-------------------------------------- - 'Erste Sekunde: Gang finden / Initialisierung + '-----------------------------------Second 1 -------------------------------------- + 'First second: find Gear / Initialization If t = 0 Then gangX = -1 If (Vist <= 1.5) Then @@ -3280,27 +3280,27 @@ lbGschw: Return Gear End If - '--------------------------------Ab Sekunde 2-------------------------------------- + '--------------------------------From second 2 -------------------------------------- - '---------Startwerte--------- - 'gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell + '---------Start-values --------- + 'gangX = Last Gang ie Basis for Gear-shiftching model LastGear = MODdata.Gear(t - 1) gangX = LastGear Gear = LastGear t1 = MODdata.tDim itgangwL = -1 - 'Kuppelschleif-check << Schon passiert in Power.Calc + 'Clutch-lock(Kuppelschleif) check << already happened in Power.Calc ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True - '-------------------Gang für die nächsten 6 Sekunden berechnen--------------------- + '-------------------Calculate Gear for the next 6 seconds --------------------- '------------------------------------------------------------- Pvorher = MODdata.Pe(t - 1) tx = t Do - '-----------Schaltfunktion---------- + '-----------Gear-shifting function ---------- Vist0 = MODdata.Vh.V(t) V_norm = Vist0 / GVmax nx = fnU(Vist0, gangX, False) / VEH.nNenn @@ -3338,23 +3338,23 @@ lbGschw: Loop Until ix = 11 Or t > t1 t = t - ix + jpm + 1 - 'Drehzahlschranke Hinaufschalten n_normiert (leerl = 0, Nenndrehzahl = 1) + 'Revolutions-limit for Upshifting n_normiert (Idle = 0, Nominal-revolutions = 1) nnsaufi = Aaufi + Baufi * V_norm + Caufi * AP10 If (nnsaufi > 0.95) Then nnsaufi = 0.95 - 'Drehzahlschranke Hinunterschalten n_normiert (leerl = 0, Nenndrehzahl = 1) + 'Revolutions-limit for Downhifting n_normiert (Idle = 0, Nominal-revolutions = 1) nnsobi = Aobi + Bobi * V_norm + Cobi * AP10 - 'Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85 - 'Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn): + 'Deleted by LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85 + 'Convert here the Revolutions-units (n/n_nom): nsa = (VEH.nLeerl / VEH.nNenn) + nnsaufi * (1 - (VEH.nLeerl / VEH.nNenn)) nsd = (VEH.nLeerl / VEH.nNenn) + nnsobi * (1 - (VEH.nLeerl / VEH.nNenn)) - 'Drehzahl mit letzten Gang (gangX) + 'Revolutions with last Gear (gangX) 'nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn '----------------------------------- - ' ''Schalten Maximal alle 2 Sekunden schalten zulaessig: + ' ''Maximum permissible Gear-shift every 2 seconds: If (t - itgangwL) < 3 And itgangwL > -1 Then GoTo lb10 - 'Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt + 'Check whether Downshift, only when Speed decreases or Power increases bCheck = False Pjetzt = fPeGearMod(gangX, t) If Vist0 < Valt Then bCheck = True @@ -3363,7 +3363,7 @@ lbGschw: If nx < nsd Then gangX -= 1 End If - 'Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt + 'Check whether Upshift, only when Speed increases or Power decreases bCheck = False If (Vist0 > Valt) Then bCheck = True If (Pjetzt < Pvorher) Then bCheck = True @@ -3371,7 +3371,7 @@ lbGschw: If nx > nsa Then gangX += 1 End If - 'Gangwahl korrigieren + 'Correct Gear-selection If gangX > VEH.ganganz Then gangX = VEH.ganganz ElseIf gangX < 1 Then @@ -3380,16 +3380,16 @@ lbGschw: lb10: - 'Kein Leerlauf wenn Leistung > 0 + 'Not Idle when Power > 0 If gangX = 0 Then If Pjzx > 0.001 Then gangX = 1 End If - 'Drehzahl neu + 'New Revolutions ''nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping) nn = fnn(Vist0, gangX, False) - 'Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet + 'Check whether Gear within the Power/Revolutions limits. Drag is not respected Select Case nn Case Is < Kuppln_norm If gangX > 1 Then @@ -3403,7 +3403,7 @@ lb10: End If End Select - 'Speichere Gänge in Feld für spätere Checks + 'Save for Gear in Field for further checks Gcheck(t - tx) = gangX If gangX <> Gear Then itgangwL = t @@ -3415,7 +3415,7 @@ lb10: Loop Until t = tx + 11 Or t > t1 t = tx '------------------------------------------------------------- - 'Gang wird übernommen + 'Gear accepted gangX = Gcheck(0) For ix = t To t + 10 Gears(ix - t) = Gcheck(ix - t) @@ -3423,14 +3423,14 @@ lb10: Gear = Gears(0) - 'Gang-Verlauf hinzufügen + 'Gang-Verlauf hinzufügen |@@| Add to Gears-sequence '---------------------------------------------------------------------------------- - '--------------------------------Checks Teil 1------------------------------------- - 'Checks zur Saeuberung unsinniger Schlatmanoever: + '--------------------------------Checks Part 1 ------------------------------------- + 'Checks to Purge non-sensible Gear-shift: - ''Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen: + ''Division into "iphase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3): 'iphase = 0 'Select Case (beschl(jz - 2) + beschl(jz - 1) + beschl(jz)) / 3 ' Case Is >= 0.125 @@ -3440,9 +3440,9 @@ lb10: ' Case Else ' iphase = 3 'End Select - ' ============>> Schon bestimmt durch VehState0 + ' ============>> Already determined by VehState0 - 'Suche nach letztem Gangwechsel + 'Search by last Gear-change itgangwL = -1 If t > 2 Then For ix = t - 1 To 1 Step -1 @@ -3453,16 +3453,16 @@ lb10: Next End If - 'Schaltvorgaenge max. alle 3 Sekunden zulaessig: + 'Maximum permissible Gear-shifts every 3 seconds: If t - itgangwL <= 2 And t > 2 And LastGear <> 0 Then Return LastGear '<<< keine weiteren Checks!!! End If If Gear <> LastGear Then - '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 + '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 itgangwL = -1 Then itgangwL = 0 bCheck = False Pjetzt = fPeGearMod(Gear, t) @@ -3483,8 +3483,8 @@ lb10: If bCheck Then Gear = LastGear Else - 'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang - 'durchgehend beibehalten + 'If within 6 seconds it Shifts back to the previous-Gear, + 'then maintain the previous-Gear throughout. bCheck = False For ix = t + 1 To t + 6 If ix > t1 Then Exit For @@ -3496,8 +3496,8 @@ lb10: If bCheck Then Gear = LastGear Else - 'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang - 'geschaltet wird, wird voriger Gang durchgehend beibehalten + '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, + 'geschaltet wird, wird voriger Gang durchgehend beibehalten |@@| then maintain the previous-Gear throughout. a = 0 b = 0 For ix = t To t + 6 @@ -3514,14 +3514,14 @@ lb10: End If End If - '--------------------------------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 + '--------------------------------Checks Part 2 ------------------------------------- + 'Gear-shift from 2 to 1 are suppressed when v > 2.5 m/s + 'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl |@@| NEW LUZ 040210: Upshifting only when in 2nd Gear over Cluch-Revolutions If Gear = 1 And LastGear > 1 And Vist >= 2.5 Then If fnn(Vist, 2, False) > Kuppln_norm Then Gear = 2 End If - 'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet + 'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| at decelerations below 2.5 m/s, shift to idle bCheck = True For ix = t To t + 2 If ix > t1 Then Exit For @@ -3535,22 +3535,22 @@ lb10: Return 0 '<<< keine weiteren Checks!!! End If - '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 |@@| wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet If t < t1 Then If (Vist < 0.1 And MODdata.Vh.V(t + 1) < 0.1) Then Return 0 '<<< keine weiteren Checks!!! End If End If - 'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet + '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 If Vist < 1.5 And t < t1 Then If (Vist > 0.01 + MODdata.Vh.V(t - 1) And MODdata.Vh.V(t + 1) > 0.01 + Vist) Then Gear = 1 End If End If - 'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden - 'sonst fehlt die leistung! + 'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden |@@| at Beschleunigungsvorgaengen below 1.5 m/s is used in 1 Gear is engaged + 'checking if Revolutions above Nominal-Revolutions, then always Upshift Do While fnn(Vist, Gear, Clutch = tEngClutch.Slipping) > 1 And Gear < VEH.ganganz Gear += 1 Loop @@ -3559,7 +3559,7 @@ lb10: End Function - 'EV-Schaltmodell (auf Basis PKW) + 'otherwise lack the power! Private Function fGearEV(ByVal t As Integer) As Integer Dim gangX As Int16 @@ -3589,8 +3589,8 @@ lb10: Dim nx As Single Dim Vist0 As Single - '-----------------------------------Sekunde 1-------------------------------------- - 'Erste Sekunde: Gang finden / Initialisierung + '-----------------------------------EV-Gear-shifting model (based on Cars(PKW)) + 'Second 1 -------------------------------------- If t = 0 Then gangX = -1 If (Vist <= 1.5) Then @@ -3617,27 +3617,27 @@ lb10: Return Gear End If - '--------------------------------Ab Sekunde 2-------------------------------------- + '--------------------------------First second: Find Gear / initialization - '---------Startwerte--------- - 'gangX = Letzter Gang d.h. Ausgangsbasis für Schaltmodell + '---------From second 2 -------------------------------------- + 'Start-values --------- LastGear = MODdata.Gear(t - 1) gangX = LastGear Gear = LastGear t1 = MODdata.tDim itgangwL = -1 - 'Kuppelschleif-check << Schon passiert in Power.Calc + 'gangX = Last Gear ie Starting-base for Shifting-model ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True - '-------------------Gang für die nächsten 6 Sekunden berechnen--------------------- + '-------------------Clutch-lock check << already happened in Power.Calc '------------------------------------------------------------- Pvorher = MODdata.Pe(t - 1) tx = t Do - '-----------Schaltfunktion---------- + '-----------Calculate Gear for the next 6 seconds --------------------- Vist0 = MODdata.Vh.V(t) V_norm = Vist0 / GVmax nx = fnU(Vist0, gangX, False) / VEH.nNenn @@ -3675,23 +3675,23 @@ lb10: Loop Until ix = 11 Or t > t1 t = t - ix + jpm + 1 - 'Drehzahlschranke Hinaufschalten n_normiert (leerl = 0, Nenndrehzahl = 1) + 'Shifting-function ---------- nnsaufi = Aaufi + Baufi * V_norm + Caufi * AP10 If (nnsaufi > 0.95) Then nnsaufi = 0.95 - 'Drehzahlschranke Hinunterschalten n_normiert (leerl = 0, Nenndrehzahl = 1) + 'Revolutions-limit for Upshift, n_normiert (Idle = 0, Nominal-Revolutions = 1) nnsobi = Aobi + Bobi * V_norm + Cobi * AP10 'Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85 - 'Umrechnung in hier verwendete Drehzahleinheit (n/n_nenn): + 'Revolutions-limit for Downshift, n_normiert (Idle = 0, Nominal-Revolutions = 1) nsa = (VEH.nLeerl / VEH.nNenn) + nnsaufi * (1 - (VEH.nLeerl / VEH.nNenn)) nsd = (VEH.nLeerl / VEH.nNenn) + nnsobi * (1 - (VEH.nLeerl / VEH.nNenn)) - 'Drehzahl mit letzten Gang (gangX) + 'Convert here of Revolutions units to use (n/n_nominal): 'nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn '----------------------------------- - ' ''Schalten Maximal alle 2 Sekunden schalten zulaessig: + ' ''Revolutions with last Gear (gangX) If (t - itgangwL) < 3 And itgangwL > -1 Then GoTo lb10 - 'Ueberpruefen ob hinunterschalten, nur wenn Geschw. abnimmt oder leistung zunimmt + 'Maximum permissible Gear-shifting every 2 seconds: bCheck = False Pjetzt = fPeGearEV(gangX, t) If Vist0 < Valt Then bCheck = True @@ -3700,7 +3700,7 @@ lb10: If nx < nsd Then gangX -= 1 End If - 'Ueberpruefen ob hinaufschalten, nur wenn Geschw. zunimmt oder leistung abnimmt + 'Check whether Downshifting-gear, only when Revolutions decrease or Power increases bCheck = False If (Vist0 > Valt) Then bCheck = True If (Pjetzt < Pvorher) Then bCheck = True @@ -3708,7 +3708,7 @@ lb10: If nx > nsa Then gangX += 1 End If - 'Gangwahl korrigieren + 'Check whether Upshifting-gear, only when Revolutions increase or Power decreases If gangX > VEH.ganganz Then gangX = VEH.ganganz ElseIf gangX < 1 Then @@ -3717,16 +3717,16 @@ lb10: lb10: - 'Kein Leerlauf wenn Leistung > 0 + 'Correct Gear-selection If gangX = 0 Then If Pjzx > 0.001 Then gangX = 1 End If - 'Drehzahl neu + 'Not idle when Power > 0 ''nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping) nn = fnn(Vist0, gangX, False) - 'Überprüfe ob Gang innerhalb der Leistungs-/Drehzahl Grenzen. Schleppbetrieb wird nicht beachtet + 'New Revolutions Select Case nn Case Is < Kuppln_norm If gangX > 1 Then @@ -3740,7 +3740,7 @@ lb10: End If End Select - 'Speichere Gänge in Feld für spätere Checks + 'Check if Gear within Power/Revolutions limits. Drag-operation is not respected Gcheck(t - tx) = gangX If gangX <> Gear Then itgangwL = t @@ -3752,7 +3752,7 @@ lb10: Loop Until t = tx + 11 Or t > t1 t = tx '------------------------------------------------------------- - 'Gang wird übernommen + 'Save Gears in field for later checks gangX = Gcheck(0) For ix = t To t + 10 Gears(ix - t) = Gcheck(ix - t) @@ -3760,14 +3760,14 @@ lb10: Gear = Gears(0) - 'Gang-Verlauf hinzufügen + 'Accept Gear '---------------------------------------------------------------------------------- - '--------------------------------Checks Teil 1------------------------------------- - 'Checks zur Saeuberung unsinniger Schlatmanoever: + '--------------------------------Checks Teil 1------------------------------------- |@@| Add to Gang-sequence + 'Checks Part 1 ------------------------------------- - ''Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen: + ''Checks to Purge non-sensible Gear-shift: 'iphase = 0 'Select Case (beschl(jz - 2) + beschl(jz - 1) + beschl(jz)) / 3 ' Case Is >= 0.125 @@ -3777,9 +3777,9 @@ lb10: ' Case Else ' iphase = 3 'End Select - ' ============>> Schon bestimmt durch VehState0 + ' ============>> Division into "IPhase(j)" stages: acceleration(=1), Deceleration(=2) and Cruise(=3): - 'Suche nach letztem Gangwechsel + 'Already determined by VehState0 itgangwL = -1 If t > 2 Then For ix = t - 1 To 1 Step -1 @@ -3790,16 +3790,16 @@ lb10: Next End If - 'Schaltvorgaenge max. alle 3 Sekunden zulaessig: + 'Search by last Gear-change If t - itgangwL <= 2 And t > 2 And LastGear <> 0 Then Return LastGear '<<< keine weiteren Checks!!! End If If Gear <> LastGear Then - '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 + 'Max permissible Gear-change every 3 seconds: + 'Cruise-phases: + 'Verzoegerungsphasen: Hochschalten wird unterdrückt |@@| As long Speed-change since last Gear-shift is under 6% and Pe/Pnom below 6%, do not run: + 'Deceleration phases: Upshift suppressed If itgangwL = -1 Then itgangwL = 0 bCheck = False Pjetzt = fPeGearEV(Gear, t) @@ -3820,8 +3820,8 @@ lb10: If bCheck Then Gear = LastGear Else - 'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang - 'durchgehend beibehalten + 'Acceleration phases: Downshift?(Zurückschalten) suppressed + 'durchgehend beibehalten |@@| If within 6 seconds switched back again to the previous Gear, stick bCheck = False For ix = t + 1 To t + 6 If ix > t1 Then Exit For @@ -3833,8 +3833,8 @@ lb10: If bCheck Then Gear = LastGear Else - 'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang - 'geschaltet wird, wird voriger Gang durchgehend beibehalten + 'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang |@@| to the previous Gear + 'geschaltet wird, wird voriger Gang durchgehend beibehalten |@@| If within 6 seconds it Shifts once above and once below the previous-Gear, a = 0 b = 0 For ix = t To t + 6 @@ -3851,14 +3851,14 @@ lb10: End If End If - '--------------------------------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 + '--------------------------------Checks Teil 2------------------------------------- |@@| then maintain the previous-Gear throughout. + 'Checks Part 2 ------------------------------------- + 'Suppress Gear-shift from 2 to 1 when v > 2.5 m/s If Gear = 1 And LastGear > 1 And Vist >= 2.5 Then If fnn(Vist, 2, False) > Kuppln_norm Then Gear = 2 End If - 'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet + 'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| NEW LUZ 040210: Upshift only when in 2 Gear over Clutch-revolutions bCheck = True For ix = t To t + 2 If ix > t1 Then Exit For @@ -3872,22 +3872,22 @@ lb10: Return 0 '<<< keine weiteren Checks!!! End If - '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 |@@| at decelerations below 2.5 m/s, shift to Idle If t < t1 Then If (Vist < 0.1 And MODdata.Vh.V(t + 1) < 0.1) Then Return 0 '<<< keine weiteren Checks!!! End If End If - 'bei Beschleunigungsvorgaengen unter 1,5 m/s wird in 1. Gang geschaltet + '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 If Vist < 1.5 And t < t1 Then If (Vist > 0.01 + MODdata.Vh.V(t - 1) And MODdata.Vh.V(t + 1) > 0.01 + Vist) Then Gear = 1 End If End If - 'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden - 'sonst fehlt die leistung! + '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 + 'Check whether Revolutions over Nominal-Revolutions, then should always Upshift, Do While fnn(Vist, Gear, Clutch = tEngClutch.Slipping) > 1 And Gear < VEH.ganganz Gear += 1 Loop @@ -3941,8 +3941,8 @@ lb10: - '-----------------------------------Sekunde 1-------------------------------------- - 'Erste Sekunde: Gang finden / Initialisierung + '-----------------------------------otherwise Power not enough! + 'Second 1 -------------------------------------- If t = 0 Then gangX = -1 If (MODdata.Vh.V(t) <= 1.5) Then @@ -3979,9 +3979,9 @@ lb10: End If - '--------------------------------Ab Sekunde 2-------------------------------------- + '--------------------------------First second: Find Gear/Initialization - '---------Startwerte--------- + '---------From second 2 -------------------------------------- gangX = MODdata.Gear(t - 1) LastGear = gangX GangXl = GangL(t - 1) @@ -4011,7 +4011,7 @@ lb10: - 'Leistung berechnen von jz bis jz + 6----------------- + 'Start-values --------- tx = t For t = tx To tx + 6 If t > t1 Then Exit For @@ -4024,13 +4024,13 @@ lb10: '----------------------------------------------------------------- ' - ' Berechnung nach Drehzahl/Leistung-Modell + ' Compute power from jz to (jz + 6) ----------------- ' ' -------------------------------------------------------------- - '(1) Nach Variante "schnelle Fahrweise" + '(1) Nach Variante "schnelle Fahrweise" |@@| Calculated towards a Revolutions/Power model - 'Schaltmanoever erfolgt nur, wenn v-aenderung 5% seit letztem Gangwechsel, - 'VECTO: Auskommentiert START + '1) "Fast Driving" variant + 'Gear-shift only if v-change 5% since last Gear-shift 'achek = 1 'If (MODdata.Vh.V(itgangwH) <> 0) Then ' avchek = Math.Abs(Vist0 / MODdata.Vh.V(itgangwH) - 1) @@ -4042,26 +4042,26 @@ lb10: 'Else ' achek = 1 'End If - 'VECTO: Auskommentiert ENDE + 'VECTO: Commented out START - 'in ersten 10 Zyklussekunden kann zum Einregulieren immer geschlatet werden: + 'VECTO: Commented out END If (t <= 9) Then achek = -1 - 'Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden: + 'Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden: |@@| the first 10 seconds of the cycle can always be used for balancing gear-shifting: achstg = Math.Abs(MODdata.Vh.Grad(t) - MODdata.Vh.Grad(itgangwH)) If (achstg > 0.001) Then achek = -1 - 'Hinunterschalten: + 'A Change in the Slope can always result in Gear-shift: If (n0 <= VEH.hinunter) Then If (achek < 0.9) Then gangX = gangX - 1 End If End If - '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: + 'Downshift: + ' Upshift: + ' 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 + ' hochschalten erlaubt: |@@| sometimes Gear is too high -> Revolutions and P_max too low, so only at low Power If (Pe0 > 0.8) Then If (n0 < 0.9) Then achek = 1 @@ -4080,11 +4080,11 @@ lb10: GangH(t) = gangX ' ----------------------------------------------------------------- - '(2) Nach Variante "sparsame Fahrweise" + '(2) Nach Variante "sparsame Fahrweise" |@@| Upshift allowed: - ' Zurueckschalten erfolgt nur, wenn Geschwindigkeitsaenderung > 6% - ' Hochschalten geht immer - 'VECTO: Auskommentiert START + ' 2) "Economical Driving" Variant + ' Downshift?(Zurueckschalten) happens only when Speed-change > 6% + 'Always Upshift 'achek = 1 'If (MODdata.Vh.V(itgangwL) <> 0) Then ' avchek = Math.Abs(Vist0 / MODdata.Vh.V(itgangwL) - 1) @@ -4096,15 +4096,15 @@ lb10: 'Else ' achek = 1 'End If - 'VECTO: Auskommentiert ENDE + 'VECTO: Commented out START - ' in ersten 10 Zyklussekunden kann zum einregulieren immer geschlatet werden: + ' VECTO: Commented out END If (t <= 9) Then achek = -1 - ' Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden: + ' Bei Aenderung der Steigung kann ebenfalls immer geschaltet werden: |@@| The first 10 seconds cycle can always be used for balancing Gear-shift: achstg = Math.Abs(MODdata.Vh.Grad(t) - MODdata.Vh.Grad(itgangwL)) If (achstg > 0.001) Then achek = -1 - ' Hinunterschalten: + ' When slope changes always may result in Gear-shift: If (GangXl > 1) Then cnl = fnU(Vist0, GangXl, False) / VEH.nNenn If (cnl <= VEH.lhinunter) Then @@ -4114,7 +4114,7 @@ lb10: End If End If - 'Hinaufschalten, nur ueberprueft wenn nicht schon hoechster Gang: + 'Downshift: If (GangXl < VEH.ganganz) Then 'C If (Pe0 > 0.8) Then @@ -4123,7 +4123,7 @@ lb10: End If End If 'C - 'C relevante Drehzahlen: + 'C Upshift, only if checked not the highest Gear: cnl = fnU(Vist0, GangXl + 1, False) / VEH.nNenn @@ -4134,12 +4134,12 @@ lb10: GangL(t) = GangXl - ' Auswahl des Drehzahlverhaeltnisses aus der "schnellen (..h)" und - ' der "sparsamen (..l)" Variante: + ' Relative Revolutions: + ' der "sparsamen (..l)" Variante: |@@| Select Revolutions-relationship for the "fast (h ..)" and - ' Drehzahlverhhealtnisse nach "Modellmix": - ' anhand der erforderlichen maximalen Motorleistung ueber die - ' naechsten 6 Sekunden + ' Drehzahlverhhealtnisse nach "Modellmix": |@@| the "economical (.. l)" Variant: + ' anhand der erforderlichen maximalen Motorleistung ueber die |@@| Revolutions-relationship for "Modelmix": + ' naechsten 6 Sekunden |@@| according to the required maximum Engine-power over the P_maxg = Pe0 For ix = t To t + 5 If ix > t1 Then Exit For @@ -4147,28 +4147,28 @@ lb10: If (PeX > P_maxg) Then P_maxg = PeX Next - ' Festlegung der Anteile von schneller und sparsamer Fahrweise - ' (Modell Hausberger): + ' next 6 seconds + ' (Determine the proportions between the Fast and the Economical Driving-style pschnellm = 3.3333 * P_maxg - 1.6667 If (pschnellm > 1) Then pschnellm = 1 If (pschnellm < 0) Then pschnellm = 0 psparm = 1.0 - pschnellm - ' Mix der berechneten Gaenge gemaess Vorgabe in Eingabefile: - ' (pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl - ' nach "reales Modell" bestehen soll) + ' Hausberger model): + ' (pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl |@@| Mix the calculated Gears as specified in the input file: + ' nach "reales Modell" bestehen soll) |@@| from the Input-file it is read the pmodell = ratios of the revolutions psparist = VEH.pspar + psparm * VEH.pmodell pschist = 1.0 - psparist - ' Ermittlung des "virtuellen" aktuellen Ganges nach Modell + ' Ermittlung des "virtuellen" aktuellen Ganges nach Modell |@@| towards a "real model") Gear = Math.Round((pschist) * GangH(t) + (psparist) * GangL(t), 0, MidpointRounding.AwayFromZero) If (Gear > VEH.ganganz) Then Gear = VEH.ganganz If (Gear < 1) Then Gear = 1 - ' ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden - ' sonst fehlt die leistung! + ' ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden |@@| Determine the "virtual" up-to-date Gears from the Model + ' check if Revolutions over Nominal-Revolutions, then must always upshift, lb88: n0 = fnU(Vist0, Gear, False) / VEH.nNenn If (n0 > 1) Then @@ -4178,8 +4178,8 @@ lb88: End If End If - ' ueberpruefung, ob erforderliche leistung ueber P_max(n) liegt - ' dann wird zurueckgeschaltet: + ' otherwise Power not enough! + ' Check whether required Power is over P_max (s) For ix = 1 To VEH.ganganz n0 = fnU(Vist0, ix, False) / VEH.nNenn @@ -4205,17 +4205,17 @@ lb88: End If Next - ' Eigentliche Ueberpruefung ob ueber P_max(n) + ' then Downshift?(zurueckgeschaltet): lb909: Pivoll = FLD.Pfull(fnn(MODdata.Vh.V(t), Gear, ClutchSlip), LastPe) / VEH.Pnenn - 'falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert: + 'falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert: |@@| Check whether Actual over P_max (s) If (Pivoll < 0.06) Then Pivoll = 0.06 - ' Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh - ' dann wird zurueckgeschaltet: + ' Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh |@@| if bad Full-load-curve without Torque, then correct in Idle: + ' dann wird zurueckgeschaltet: |@@| Checking whether required Power is higher than maximum power at nh If (Pe0 > Pivoll) Then If t = tx Then OverPfull = True @@ -4253,16 +4253,16 @@ lb909: '' Exit Function ''End If - 'c Ende "Modell"-Basisgangwahl + 'c Ende "Modell"-Basisgangwahl |@@| then Gear-shift-back?(zurueckgeschaltet): '--------------------------------------------------- - 'Kuppelschleif-check + 'Kuppelschleif-check |@@| End "model"-Gear-selection basis ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True - '--------------------------------Checks Teil 1------------------------------------- - 'Checks zur Saeuberung unsinniger Schlatmanoever: - 'Unterteilung in "iphase(j)" Beschleunigungs- (=1), Verzoegerungs- (=2) und Cruise (=3) -Phasen: + '--------------------------------Checks Teil 1------------------------------------- |@@| Clutch-lock check + 'Checks Part 1 ------------------------------------- + 'Checks to Purge non-sensible Gear-shift: iphase = 0 If t > 1 Then Select Case (MODdata.Vh.a(t - 2) + MODdata.Vh.a(t - 1) + MODdata.Vh.a(t)) / 3 @@ -4287,7 +4287,7 @@ lb909: End Select End If - 'Suche nach letztem Gangwechsel + 'Division into "IPhase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3): itgangwL = 0 For ix = t - 1 To 1 Step -1 If MODdata.Gear(ix) <> MODdata.Gear(ix - 1) Then @@ -4296,15 +4296,15 @@ lb909: End If Next - 'Schaltvorgaenge max. alle 3 Sekunden zulaessig: + 'Search by last Gear-change If t - itgangwL <= 3 And t > 2 Then Return LastGear '<<< keine weiteren Checks!!! End If - '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 + '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 bCheck = False Pjetzt = fPeGearMod(Gear, t) Pvorher = MODdata.Pe(itgangwL) @@ -4323,9 +4323,9 @@ lb909: If (iphase = 2) And Gear > MODdata.Gear(t - 1) Then bCheck = True If bCheck Then Gear = LastGear - 'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang - 'durchgehend beibehalten - 'VECTO: Ausnahme: Über Volllastkurve + 'Acceleration phases: Downshift?(Zurückschalten) suppressed + 'If within 6 seconds switched back again to the previous Gear, then + 'stick to previous Gear If Not OverPfull Then bCheck = False For ix = t + 1 To t + 6 @@ -4336,8 +4336,8 @@ lb909: End If - 'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang - 'geschaltet wird, wird voriger Gang durchgehend beibehalten + '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 a = 0 b = 0 If (Gear <> LastGear) Then @@ -4353,14 +4353,14 @@ lb909: End If End If - '--------------------------------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 + '--------------------------------stick to the previous Gear. + 'Checks Part 2 ------------------------------------- + 'Shifting from 2nd to 1st Gear is suppressed when v > 1.5 m/s If Gear = 1 And LastGear > 1 And Vist >= 1.5 Then If fnn(Vist, 2, False) > Kuppln_norm Then Gear = 2 End If - 'bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet + 'bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet |@@| NEW LUZ 040210: Upshifting only when in 2nd Gear over the Clutch-revolutions bCheck = False For ix = t To t + 2 If ix > t1 Then Exit For @@ -4372,7 +4372,7 @@ lb20: Return 0 '<<< keine weiteren Checks!!! End If - '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 |@@| at decelerations below 1.5 m/s, shift to Idle If t < t1 Then If (Vist < 0.1 And MODdata.Vh.V(t + 1) < 0.1) Then Return 0 '<<< keine weiteren Checks!!! @@ -4380,8 +4380,8 @@ lb20: End If - 'ueberpruefung, ob Drehzahl ueber nenndrehzahl, dann muss immer hochgeschaltet werden - 'sonst fehlt die leistung! + '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, Do While fnn(Vist, Gear, ClutchSlip) > 1 And Gear < VEH.ganganz Gear += 1 Loop @@ -4421,7 +4421,7 @@ lb20: End If End If - 'Geschwindigkeit vorausschauen + 'otherwise Power not enough! If t = MODdata.tDim Then v1 = v v2 = v @@ -4434,8 +4434,8 @@ lb20: End If End If - 'Checks aus PKWgear.... - 'Schalten von 2. in 1. Gang wird bei v>2,5 m/s unterdrueckt + 'Speed look-ahead + 'Checks Gears for Cars(PKW) .... If (g = 1) Then If (g0 > g) Then If (v >= 2.5) Then @@ -4444,7 +4444,7 @@ lb20: End If End If - 'Bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet + '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 If (v < 2.5) Then If (v <= v0 And v1 <= v) Then If (v2 <= v1) Then @@ -4453,12 +4453,12 @@ lb20: End If End If - '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 |@@| At decelerations below 2.5 m/s, shift to Idle If (v < 0.1 And v1 < 0.1) Then g = 0 End If - '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 If (v < 1.5) Then If v > v0 And v1 > v Then g = 1 @@ -4485,12 +4485,12 @@ lb20: Return g0 End Function - 'Funktion zur einfachen Leistungsberechnung für Schaltmodelle + 'When Speed?(Beschleunigungsvorgaengen) below 1.5 m/s, then shift to 1st Gear Private Function fPeGearMod(ByVal Gear As Integer, ByVal t As Integer) As Single Return fPvD(t) / VEH.Pnenn End Function - 'Funktion zur einfachen Leistungsberechnung für EV-Schaltmodell + 'Function calculating the Power easily for Gear-shift-model Private Function fPeGearEV(ByVal Gear As Integer, ByVal t As Integer) As Single Dim PaM As Single Dim nU As Single @@ -4505,7 +4505,7 @@ lb20: nU = fnU(V, Gear, False) If Nvorg Then - 'Drehzahlvorgabe + 'Function calculating the Power easily for EV-shift-model PaM = (VEH.I_mot * MODdata.dnUvorg(t) * 0.01096 * MODdata.nUvorg(t)) * 0.001 Else PaM = ((VEH.I_mot * (VEH.AchsI * VEH.Igetr(Gear) / (0.5 * VEH.Dreifen)) ^ 2) * a * V) * 0.001 @@ -4549,7 +4549,7 @@ lb20: #Region "Leistungsberechnung" - '--------------Leistung vor Diff = Am Rad------------- + '--------------Revolutions-setting Private Function fPvD(ByVal t As Integer) As Single Return fPr(MODdata.Vh.V(t)) + fPair(MODdata.Vh.V(t), t) + fPaFZ(MODdata.Vh.V(t), MODdata.Vh.a(t)) + fPs(MODdata.Vh.V(t), t) End Function @@ -4558,12 +4558,12 @@ lb20: Return fPr(v) + fPair(v, t) + fPaFZ(v, a) + fPs(v, t) End Function - '----------------Rollwiderstand---------------- + '----------------Power in-front?(vor) of Diff = At Wheel ------------- Private Function fPr(ByVal v As Single) As Single Return CSng((VEH.Loading + VEH.Mass + VEH.MassExtra) * 9.81 * (VEH.Fr0 + VEH.Fr1 * v + VEH.Fr2 * v ^ 2 + VEH.Fr3 * v ^ 3 + VEH.Fr4 * v ^ 4) * v * 0.001) End Function - '----------------Luftwiderstand---------------- + '----------------Rolling-resistance---------------- Private Function fPair(ByVal v As Single, ByVal t As Integer) As Single Dim vair As Single Dim Cd As Single @@ -4588,24 +4588,24 @@ lb20: End Function - '--------Beschleunigungsleistung Fahrzeug-------- + '--------Drag-resistance---------------- Private Function fPaFZ(ByVal v As Single, ByVal a As Single) As Single - '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 + '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 Return CSng(((VEH.Mass + VEH.MassExtra + VEH.m_raeder_red + VEH.Loading) * a * v) * 0.001) End Function - '----------------Steigungswiderstand---------------- + '----------------The missing part (I_Getriebe * (Iachs / (0.5 * Dreifen)) ^ 2) is now considered by fPaG(V,a) Private Function fPs(ByVal v As Single, ByVal t As Integer) As Single fPs = CSng(((VEH.Loading + VEH.Mass + VEH.MassExtra) * 9.81 * MODdata.Vh.Grad(t) * 0.01 * v) * 0.001) End Function - '----------------Nebenaggregate---------------- + '----------------Slope resistance ---------------- Private Function fPaux(ByVal t As Integer, ByVal nU As Single) As Single Return CSng(VEH.Paux0 * VEH.Pnenn + MODdata.Vh.Padd(t) + VEH.PauxSum(t, nU)) End Function - '-------------------Getriebe------------------- + '-------------------Ancillaries(Nebenaggregate) ---------------- Private Function fPlossGB(ByVal PvD As Single, ByVal V As Single, ByVal Gear As Integer) As Single Dim Pdiff As Single Dim P As Single @@ -4630,12 +4630,12 @@ lb20: n = nU / VEH.nNenn - 'Leistung nach Getriebe (Getriebeausgang) + 'Transmission(Getriebe)------------------- P = Math.Abs(PvD) + Pdiff - 'Verluste berechnet (eignet sich nur für Schaltgetriebe) - ' Interpolation der Getriebeverlustleistung - ' Zwischen 1. und 8. gang sowie 9. und 16. Gang: + 'Verluste berechnet (eignet sich nur für Schaltgetriebe) |@@| Power to Transmission (Transmission-output) + ' Calculate Losses (suitable only for Manual-transmission(Schaltgetriebe)) + ' Interpolation of the Transmission-power-loss If (Gear <= 8) Then iTemp = VEH.Igetr(1) P1_getr = VEH.Pnenn * 0.0025F * (-0.45F + 36.03F * (n / iTemp) + 14.97F * (P / VEH.Pnenn)) @@ -4659,8 +4659,8 @@ lb20: Case Else 'tTransLossModel.Detailed - '***Differenzial - ' Leistung nach Diff (vor Getriebe) + '***Between 1 and 8 Gear, as well as between 9 and 16 Gear: + ' Differential P = PvD + Pdiff Return Math.Max(VEH.IntpolPeLoss(Gear, nU, P), 0) @@ -4679,7 +4679,7 @@ lb20: Case tTransLossModel.Basic - 'Pdiff + 'Power after Differential (before Transmission) anrad = (60 * V) / (VEH.Dreifen * Math.PI) Pdiff = VEH.fGetr * VEH.Pnenn * 0.0025 * (-0.47 + 8.34 * (anrad / VEH.nNenn) + 9.53 * (Math.Abs(PvD) / VEH.Pnenn)) If (Pdiff <= 0) Then Pdiff = 0 @@ -4689,7 +4689,7 @@ lb20: Case Else 'tTransLossModel.Detailed '***Differenzial - ' Leistung vor Diff + ' Differential Return Math.Max(VEH.IntpolPeLoss(0, (60 * V) / (VEH.Dreifen * Math.PI) * VEH.Igetr(0), PvD), 0) End Select @@ -4741,7 +4741,7 @@ lb20: Return VEH.RtPeLoss(Vist, Gear) End Function - '----------------Getriebe Trägheit---------------- + '----------------Power before Differential Private Function fPaG(ByVal V As Single, ByVal a As Single) As Single Dim Mred As Single Mred = CSng(VEH.I_Getriebe * (VEH.AchsI / (0.5 * VEH.Dreifen)) ^ 2) diff --git a/VECTO/MODcalc/cVh.vb b/VECTO/MODcalc/cVh.vb index d1a71d6f0fa3517bacd19fb93577e7d3bc39146f..3156c26e7668faa9e0e251d7df2515b1363fd29d 100644 --- a/VECTO/MODcalc/cVh.vb +++ b/VECTO/MODcalc/cVh.vb @@ -12,10 +12,10 @@ Public Class cVh Private lVairVres As List(Of Single) Private lVairBeta As List(Of Single) - 'Berechnet + 'From DRI file Private la As List(Of Single) - 'WegKor + 'Calculated Private WegIst As Single Private Weg As List(Of Single) Private WegX As Integer @@ -55,7 +55,7 @@ Public Class cVh Dim L As List(Of Double) Dim Val As Single - 'Geschwindigkeit + 'Geschwindigkeit |@@| Route(Weg)Correct If DRI.Vvorg Then L = DRI.Values(tDriComp.V) @@ -66,7 +66,7 @@ Public Class cVh If lV(s) < 0.001 Then lV(s) = 0 '<= aus Leistg Next - 'Original-Geschwindigkeit ist um 1 länger + 'Speed lV0.Add(DRI.Values(tDriComp.V)(MODdata.tDim + 1)) If DRI.Scycle Then For s = 0 To MODdata.tDim + 1 @@ -76,7 +76,7 @@ Public Class cVh lV0ogl.Add(DRI.Values(tDriComp.V)(MODdata.tDim + 1)) End If - 'Strecke (aus Zwischensekunden sonst passiert Fehler) + 'Original-speed is longer by 1 Weg.Add(lV(0)) For s = 1 To MODdata.tDim Weg.Add(Weg(s - 1) + lV(s)) @@ -84,7 +84,7 @@ Public Class cVh End If - 'Steigung + 'Steigung |@@| Segment (from Intermediate-seconds, otherwise Error) If DRI.GradVorg Then L = DRI.Values(tDriComp.Grad) For s = 0 To MODdata.tDim @@ -96,7 +96,7 @@ Public Class cVh Next End If - 'Gang - nicht Mittelwert sondern Gang(t) = DRI.Gang(t) + 'Slope If DRI.Gvorg Then L = DRI.Values(tDriComp.Gears) For s = 0 To MODdata.tDim @@ -109,7 +109,7 @@ Public Class cVh Next End If - 'Padd + 'Gear - but not Averaged, rather Gang(t) = DRI.Gear(t) If DRI.PaddVorg Then L = DRI.Values(tDriComp.Padd) For s = 0 To MODdata.tDim @@ -129,7 +129,7 @@ Public Class cVh Next End If - 'Vair-Vorgaben: Nicht in Zwischensekunden!! + 'Calculate Acceleration If DRI.VairVorg Then L = DRI.Values(tDriComp.VairVres) @@ -154,7 +154,7 @@ Public Class cVh Dim s As Integer Dim L As List(Of Double) - 'Geschwindigkeit + 'Vair specifications: Not in Intermediate-seconds! If DRI.Vvorg Then L = DRI.Values(tDriComp.V) @@ -166,7 +166,7 @@ Public Class cVh If lV(s) < 0.001 Then lV(s) = 0 '<= aus Leistg Next - 'Strecke + 'Speed Weg.Add(lV(0)) For s = 1 To MODdata.tDim Weg.Add(Weg(s - 1) + lV(s)) @@ -174,7 +174,7 @@ Public Class cVh End If - 'Steigung + 'Steigung |@@| Segment If DRI.GradVorg Then L = DRI.Values(tDriComp.Grad) For s = 0 To MODdata.tDim @@ -186,7 +186,7 @@ Public Class cVh Next End If - 'Gang - nicht Mittelwert sonder Gang(t) = DRI.Gang(t) + 'Slope If DRI.Gvorg Then L = DRI.Values(tDriComp.Gears) For s = 0 To MODdata.tDim @@ -199,7 +199,7 @@ Public Class cVh Next End If - 'Padd + 'Gear - not Averaged, rather Gear(t) = DRI.Gear(t) If DRI.PaddVorg Then L = DRI.Values(tDriComp.Padd) For s = 0 To MODdata.tDim @@ -254,7 +254,7 @@ Public Class cVh Public Sub DistCorrection(ByVal t As Integer) - 'TODO: Wenn Fzg schneller als Zyklus... + 'Calculate Acceleration Dim v As Single Dim a As Single @@ -270,13 +270,13 @@ Public Class cVh - 'Falls Zeitschritt wiederholen näher an Wegvorgabe als aktueller Weg => Zeitschritt wiederholen + 'TODO: If veh faster than cycle ... If (Math.Abs(WegIst + Vsoll(t) - Weg(WegX)) < Math.Abs(WegIst - Weg(WegX))) And v > 0.1 Then Duplicate(t + 1) MODdata.tDim += 1 - 'Falls nächsten Zeitschritt löschen näher an Wegvorgabe als aktueller Weg => Nächsten Zeitschritt löschen + '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 '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 ' Do @@ -288,7 +288,7 @@ Public Class cVh Else - 'Keine Korrektur + 'Keine Korrektur |@@| If the next Time-step to Delete closer to specified Route than the Actual-route => Delete Next Time-step WegX += 1 End If diff --git a/VECTO/M_FCCor.vb b/VECTO/M_FCCor.vb index c82bfe62ac0601ec13e36f349140413f6a14e4d6..1b217a3b00e0c0de29b40dcd36fa6430aea27b7f 100644 --- a/VECTO/M_FCCor.vb +++ b/VECTO/M_FCCor.vb @@ -2,8 +2,8 @@ 'C 'C - 'C Unterprogramm zur Korrektur der verbrauchswerte nach Motorgroesse (fuer HBEFA-Berechnungen, da dort - 'C alle LKW-Groessen mit gleichem *.mep gerechnet werden + 'C Subroutine to correct the Consumption-values from Engine-size (HBEFA-calculations because + 'C all HDV(LKW)-sizes are calculated from the same *. mep 'C 'C Sub FcCorr() @@ -29,14 +29,14 @@ L = MODdata.Em.EmDefComp(tMapComp.FC).FinalVals 'C - 'c Korrektur des Kraftstoffverbrauches - 'c nur für Handbuchrechnungen und LKW + 'c Correction of the Fuel-consumption + 'c only for manual calculations and HDV(LKW) If (GEN.eklasse = 0) Then - 'c für Euro0 und früher werden größenabhängig 3 verschiedene KF verwendet - 'c daher hier keine Größenkorrektur + 'c for Euro0 and earlier, 3 different KF used depending on the size + 'c therefore no Size-correction here corr = 1 ElseIf (GEN.eklasse = 1) Then - 'c Korrekturfunktion für Euro1 und Euro 2 1:1 von Stand ARTEMIS übernommen + 'c Correction-function for EUR1 and EUR 2 adopted 1:1 from ARTEMIS standard fc_pnen = 230.55 - 0.0798 * Pnenn fc_pnen = Math.Max(fc_pnen, 206.2) fc_ave = 213.9 @@ -47,13 +47,13 @@ fc_ave = 206.8 corr = (fc_pnen / fc_ave) ElseIf (GEN.eklasse = 3) Then - 'c Korrekturfunktion Euro 3 gg. ARTEMIS geringfügig adaptiert (siehe FcCorr_Eu3ff.xls) + '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) fc_pnen = 239.4 - (0.08465 * (Math.Min(Pnenn, 345))) fc_ave = 239.4 - (0.08465 * 273.5) corr = (fc_pnen / fc_ave) ElseIf ((GEN.eklasse = 4) Or (GEN.eklasse = 5)) Then - 'c Korrekturfunktion für Euro 4 ff analog zu Euro3 - 'c lediglich adaptiert: Durchschnittsnennleistung der ins mep verwursteten Motoren + 'c Correction function for Euro 4 similar to Euro3 + 'c but lightly adapted: Average Nominal-Power of the engines into mep verwursteten fc_pnen = 239.4 - (0.08465 * (Math.Min(Pnenn, 345))) fc_ave = 239.4 - (0.08465 * 287.1) corr = (fc_pnen / fc_ave) diff --git a/VECTO/M_Lese.vb b/VECTO/M_Lese.vb index 8eb1cf0492e7ccca62d372ef9f01ce9967e0fc22..ebd305814c9320bba925701b2d35d311dcdba888 100644 --- a/VECTO/M_Lese.vb +++ b/VECTO/M_Lese.vb @@ -13,7 +13,7 @@ Module M_Lese MsgSrc = "Main/ReadInp" '----------------------------- ~GEN~ ----------------------------- - 'GEN einlesen + 'Read GEN If UCase(fEXT(GenFile)) <> ".VECTO" Then WorkerMsg(tMsgID.Err, "Only .VECTO files are supported in this mode", MsgSrc) Return False @@ -32,7 +32,7 @@ Module M_Lese Return False End Try - 'VECTO: Defaultwerte für Parameter die nicht mehr in der .GEN/.VECTO sind werden beim Einlesen über SetDefault belegt. + '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. CycleFiles.Clear() @@ -43,12 +43,12 @@ Module M_Lese SOCnJa = GEN.SOCnJa And GEN.VehMode = tVehMode.HEV SOCstart = GEN.SOCstart - 'Fehlermeldung in Init() + 'Error message in init() If Not GEN.Init Then Return False '----------------------------- ~VEH~ ----------------------------- - 'Einlesen der KFZ-Spezifikationen aus 'KFZspez' + 'Einlesen der KFZ-Spezifikationen aus 'KFZspez' |@@| Read the Vehicle(KFZ)-specifications from 'KFZspez' VEH = New cVEH VEH.FilePath = GEN.PathVEH Try @@ -128,7 +128,7 @@ Module M_Lese '----------------------------- ~FLD~ ----------------------------- - ' FLD muss jetzt vor MAP/MEP eingelesen werden falls dort <DRAG> Einträge sind! + ' 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! FLD = New cFLD FLD.FilePath = ENG.PathFLD @@ -139,17 +139,17 @@ Module M_Lese Return False End Try - 'Normieren + 'Normalize FLD.Norm() '----------------------------- ~MAP~ ----------------------------- - ' 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 + ' 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) If Not GEN.CreateMap Then - 'Kennfeld einlesen + 'Kennfeld read MAP = New cMAP(GEN.PKWja) MAP.FilePath = ENG.PathMAP @@ -160,21 +160,21 @@ Module M_Lese Return False End Try - 'Normieren + 'Normalize MAP.Norm() End If '----------------------------- ~DRI~ ----------------------------- - ' Einlesen des KFZ-Fahrzyklus (Nicht in ADVANCE). - ' LUZ: 04.02.2011: Ab jetzt ausserhalb von LESE wegen neuer BATCH-Struktur + ' Reading the Vehicle Driving-cycle (Not in ADVANCE). + ' LUZ: 04.02.2011: From now outside of READING because of new BATCH structure '----------------------------- ~TRS~ ----------------------------- - ' 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 + ' Dynamik-Korrekturparameter, falls dynamokkorrektur ausgewählt: |@@| Dynamic correction parameter, if exclusively Dynamic-correction(dynamokkorrektur): + ' Parameter aus multipler Regressionsanalyse, Differenz zu stationär in |@@| 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 If GEN.dynkorja Then TRS = New cTRS TRS.FilePath = GEN.dynspez @@ -189,10 +189,10 @@ Module M_Lese End If '----------------------------------------------------------------------- - 'Einlesen der Daten fuer Hybridsimulation: + 'Reading data for hybrid simulation: If (GEN.ModeHorEV) Then - 'TODO: EV/HEV Init hierher! + 'TODO: Init EV/HEV here! End If '----------------------------------------------------------------------- diff --git a/VECTO/M_MAIN.vb b/VECTO/M_MAIN.vb index 99189cb216c9a760b7c1213d994f73721ab32ecb..3af8c5bfde66150612abe8f1f64fac9a71139095 100644 --- a/VECTO/M_MAIN.vb +++ b/VECTO/M_MAIN.vb @@ -28,7 +28,7 @@ Module M_MAIN Public Function PHEM() As tCalcResult - 'Hauptprogramm für alle Modi + 'Main program for all modes Dim MsgStrBuilder As System.Text.StringBuilder @@ -45,13 +45,13 @@ Module M_MAIN MsgStrBuilder = New System.Text.StringBuilder - 'Falls es zu "ungeplanten" Abbruch kommt + 'If there are any "unplanned" Aborts PHEM = tCalcResult.Err - 'Fehler zurücksetzen + 'Reset the fault ''ClearErrors() - 'Modus festlegen und Meldung + 'Specify Mode and Notification-msg Select Case PHEMmode Case tPHEMmode.ModeSTANDARD WorkerMsg(tMsgID.Normal, "Starting PHEM STANDARD...", MsgSrc) @@ -67,7 +67,7 @@ Module M_MAIN MsgOut = (PHEMmode = tPHEMmode.ModeSTANDARD) - 'Lizenz checken + 'License check LicErrorFeat = 0 If (PHEMmode = tPHEMmode.ModeBATCH) Then If Not Lic.LicFeature(1) Then LicErrorFeat = 1 @@ -90,7 +90,7 @@ Module M_MAIN GoTo lbErrBefore End If - 'BATCH-Ausgabeordner erstellen falls notwendig + 'Create BATCH Output-folder if necessary If (PHEMmode = tPHEMmode.ModeBATCH) Then Select Case UCase(Cfg.BATCHoutpath) Case sKey.WorkDir @@ -111,11 +111,11 @@ Module M_MAIN End If lbSkip0: - 'MOD-Daten Klasse initialisieren + 'MOD-Data class initialization MODdata = New cMOD - 'TEST: Schaun ob's auch ohne dem geht: MODdata.Init() + 'TEST: Schaun ob's auch ohne dem geht: MODdata.Init() |@@| TEST: Just look whether it's even without the: MODdata.Init() - 'ERG-Klasse initialisieren + 'ERG-class initialization WorkerMsg(tMsgID.Normal, "Analyzing input files", MsgSrc) ERG = New cERG VSUM = New cVSUM @@ -125,10 +125,10 @@ lbSkip0: If Not ERG.ErgEntryInit() Then GoTo lbErrBefore End If - 'Warnung wenn ungültige/unrealistische Einstellungen + 'Warning on invalid/unrealistic settings If Cfg.AirDensity > 2 Then WorkerMsg(tMsgID.Err, "Air Density = " & Cfg.AirDensity & " ?!", MsgSrc) - 'Meldungen + 'Notify If Cfg.FCcorrection Then WorkerMsg(tMsgID.Normal, "HDV FC Correction ON", MsgSrc) 'Progbar-Init @@ -136,10 +136,10 @@ lbSkip0: '-------------------------------------------------------------------------------------------- - ' Schleife zur Berechnung fuer alle vorgegebenen Zyklen und Fahrzeuge: + ' Calculation Loop for all Preset-cycles and Vehicles: ' '********************************************************************************************** - '**************************************** Job-Schleife **************************************** + '**************************************** Job loop **************************************** '********************************************************************************************** For jgen = 0 To FilesDim @@ -189,21 +189,21 @@ lbADV: End If End If - 'Check ob Abbruch + 'Check if Abort If PHEMworker.CancellationPending Then GoTo lbAbort - 'Falls Error beim GEN einlesen + 'If error when read GEN CurrentCycleFile = "" - 'Einlesen der Inputfiles - ' BATCH: Zyklus aus DRI-Liste - ' ADVANCE: Zyklus wird nicht eingelesen + 'Reading the input files + ' BATCH: Cycle from DRI list + ' ADVANCE: Cycle is not read If Not LESE() Then JobAbortedByErr = True GoTo lbNextJob End If - 'Überprüfe ob alle Modi in der GEN Datei lizenziert sind + 'Check if all the modes are licensed in the GEN file LicErrorFeat = 0 If GEN.VehMode = tVehMode.HEV Then @@ -226,10 +226,10 @@ lbADV: GoTo lbNextJob End If - 'Falls Optimierer aktiv werden hier die Parameter eingelesen + 'If optimizer is active, then read parameters here If bOptOn Then OptInput() - 'BATCH: Sub-Dir Ausgabeordner erstellen + 'BATCH: Create Output-sub-folder If (PHEMmode = tPHEMmode.ModeBATCH) And Cfg.ModOut And Cfg.BATCHoutSubD Then Select Case UCase(Cfg.BATCHoutpath) Case sKey.WorkDir @@ -252,7 +252,7 @@ lbADV: End If '********************************************************************************************** - '************************************** Zylus-Schleife **************************************** + '************************************** Cycle-loop **************************************** '********************************************************************************************** For jzkl = 0 To CyclesDim @@ -265,7 +265,7 @@ lbADV: ProgBarCtrl.ProgOverallStartInt = 100 * (jgen * (CyclesDim + 1) + jzkl) / ((FilesDim + 1) * (CyclesDim + 1)) ProgBarCtrl.PgroOverallEndInt = 100 * (jgen * (CyclesDim + 1) + jzkl + 1) / ((FilesDim + 1) * (CyclesDim + 1)) - 'BATCH-Modus: Fahrzyklus nicht aus GEN-Datei sondern aus DRI-Liste + 'BATCH mode: Cycle from GEN-file but not from DRI list CycleFiles.Clear() CycleFiles.Add(fFileRepl(JobCycleList(jzkl))) @@ -274,7 +274,7 @@ lbADV: WorkerStatus("Current Job: " & (NrOfRunStr()) & " / " & ((FilesDim + 1) * (CyclesDim + 1)) & " | " & fFILE(JobFile, True) & " | " & fFILE(CycleFiles(0), True)) WorkerJobStatus(jgen, "running... " & jzkl + 1 & "/" & (CyclesDim + 1), tJobStatus.Running) - 'Ausgabe-Name definieren + 'Output name definition Select Case UCase(Cfg.BATCHoutpath) Case sKey.WorkDir path0 = Cfg.WorkDPath @@ -293,7 +293,7 @@ lbADV: End If '****************************************************************************************** - '********************************** VECTO-Zylus-Schleife ********************************** + '********************************** VECTO-Cycle-loop ********************************** jsubcyclecount = CycleFiles.Count jsubcycle = 0 For Each CurrentCycleFile In CycleFiles @@ -318,21 +318,21 @@ lbADV: VSUM.FilePath = MODdata.ModOutpName & ".vres" - 'TODO: Loading Schleife - '***************************** VECTO-Loading-Schleife ********************************* + 'TODO: Loading-loop + '***************************** VECTO-loading-loop ********************************* '************************************************************************************** - 'Einstiegspunkt für SOC-Start Iteration + 'Entry point for SOC-start iteration If GEN.ModeHorEV And SOCnJa Then SOCfirst = True - 'Aufraumen + 'Clean up MODdata.Init() - 'Zyklus einlesen + 'Read cycle If (Not (PHEMmode = tPHEMmode.ModeADVANCE)) Then - 'Einlesen + 'Read in DRI = New cDRI DRI.FilePath = CurrentCycleFile @@ -341,7 +341,7 @@ lbADV: GoTo lbAusg End If - 'v(s) in v(t) konvertieren (optional) + 'convert v(s) into v(t) (optional) If DRI.Scycle Then If Not DRI.ConvStoT() Then CyclAbrtedByErr = True @@ -349,17 +349,17 @@ lbADV: End If End If - 'In 1Hz konvertieren (optional) + 'Convert to 1Hz (optional) If DRI.Tvorg Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Converting cycle to 1Hz", MsgSrc) If Not DRI.ConvTo1Hz() Then - 'Fehlermeldung in DRI.Convert() + 'Error-notification in DRI.Convert() CyclAbrtedByErr = True GoTo lbAusg End If End If - 'Entnormieren + 'Unnormalised DRI.DeNorm() End If @@ -367,14 +367,14 @@ lbADV: '---------------------------------------------------------------------------- '---------------------------------------------------------------------------- - 'Zyklus-Vorgaben initialisieren (Geschw, Beschl, ...) + 'Initialize Cycle-specs (Speed, Accel, ...) MODdata.CycleInit() If GEN.VehMode = tVehMode.EngineOnly Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Engine Only Calc", MsgSrc) - 'Rechne .npi-Leistung in Pe und P_clutch um + 'Rechne .npi-Leistung in Pe und P_clutch um |@@| Expect Npi-Power into Pe and P_clutch If Not MODdata.Px.Eng_Calc() Then CyclAbrtedByErr = True GoTo lbAusg @@ -382,9 +382,9 @@ lbADV: Else - 'ACHTUNG: VehmodeInit benötigt Infos aus GEN und DRI! + 'CAUTION: VehmodeInit() requires information from GEN and DRI! If Not VEH.VehmodeInit() Then - 'Fehlermeldung innerhalb VehmodeInit() + 'Error-notification within VehmodeInit() JobAbortedByErr = True GoTo lbNextJob End If @@ -413,7 +413,7 @@ lbADV: If MsgOut Then WorkerMsg(tMsgID.Normal, "HEV Init", MsgSrc) If Not MODdata.Px.HEVinit Then - 'TODO: Meldung... + 'TODO: notification... WorkerMsg(tMsgID.Err, "ERROR in HEV Init!", MsgSrc) JobAbortedByErr = True GoTo lbNextJob @@ -441,7 +441,7 @@ lbADV: If PHEMworker.CancellationPending Then GoTo lbAbort - 'CycleKin (für erg/sum usw.) berechnen + 'Calculate CycleKin (for erg/sum, etc.) MODdata.CylceKin.Calc() End If @@ -449,15 +449,15 @@ lbADV: '---------------------------------------------------------------------------- - 'Emissionen und Nachbehandlung - wird bei EV-Modus nicht ausgeführt + 'Emissionen und Nachbehandlung - wird bei EV-Modus nicht ausgeführt |@@| Emissions and After-treatment - it will not run in EV mode If Not GEN.VehMode = tVehMode.EV Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Calculating Transient Correction Factors", MsgSrc) - 'Sekündliche TC Parameter ermittlen + 'Determine TC parameters per second MODdata.TC.Calc() - 'Kennfeld Erstellung + 'Map creation If GEN.CreateMap Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Creating Emission Map", MsgSrc) @@ -473,25 +473,25 @@ lbADV: If MsgOut Then WorkerMsg(tMsgID.Normal, "Em Calc: Raw", MsgSrc) - 'Rohemissionen berechnen + 'Calculate Raw emissions MODdata.Em.Raw_Calc() - 'TC Parameter umrechnen in Differenz zu Kennfeld-TC-Parameter + 'TC Parameter umrechnen in Differenz zu Kennfeld-TC-Parameter |@@| Convert TC parameters to differences with Map-TC-parameters If MAP.TransMap Then MODdata.TC.CalcDiff() - 'Dynamik-Korrektur + 'Dynamic correction If GEN.dynkorja Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Em Calc: Transient Correction", MsgSrc) MODdata.Em.TC_Calc() End If - 'Korrektur der Verbrauchswerte kleiner LKW-Motoren bei HBEFA + 'Korrektur der Verbrauchswerte kleiner LKW-Motoren bei HBEFA |@@| Correction of consumption values smaller HDV(LKW) engines by HBEFA If (Not GEN.PKWja) And Cfg.FCcorrection Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Em Calc: FC-Correction", MsgSrc) FcCorr() End If - 'Exhaust System Simulation + 'Exhaust system simulation If GEN.EXSja Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Em Calc: EXS", MsgSrc) EXS = New cEXS @@ -501,7 +501,7 @@ lbADV: End If End If - 'Summen / Durchschnitte bilden + 'Totals / Averages form MODdata.Em.SumCalc() 'Engine Analysis @@ -517,7 +517,7 @@ lbADV: If PHEMworker.CancellationPending Then GoTo lbAbort - '*** Sekündliche Ausgabe *** + '*** Output Every second *** If Cfg.ModOut Then If MsgOut Then WorkerMsg(tMsgID.Normal, "Writing modal output", MsgSrc) If Not MODdata.Output() Then @@ -529,19 +529,19 @@ lbADV: End If - 'VECTO Ausgabe - 'TODO: Loadings umschalten... + 'VECTO Output + 'TODO: Loadings umschalten... |@@| TODO: Loadings Gear-shift ... If Not VSUM.SetVals(tVSUM.UserDefLoaded) Then CyclAbrtedByErr = True GoTo lbAusg End If - 'Ausgabe für BATCH und ADVANCE + 'Output for BATCH and ADVANCE lbAusg: If (PHEMmode = tPHEMmode.ModeADVANCE) Then - 'In ADVANCE ist Zyklus-Abbruch = Job-Abbruch + 'In ADVANCE, Cycle-cancel = Job-cancel If CyclAbrtedByErr Then JobAbortedByErr = True GoTo lbNextJob @@ -557,14 +557,14 @@ lbAusg: Else - 'Ausgabe in Erg (Erste Berechnung - Initialisieren & Header) + 'Output in Erg (first Calculation - Initialization & Header) If Not ERG.AusgERG(NrOfRunStr, fFILE(GenFile, True), fFILE(CurrentCycleFile, True), CyclAbrtedByErr) Then GoTo lbErrInJobLoop End If - 'Daten aufräumen + 'Data Cleanup MODdata.CleanUp() 'Status-Update @@ -574,8 +574,8 @@ lbAusg: WorkerProg(100 * (jgen * (CyclesDim + 1) + jzkl + 1) / ((FilesDim + 1) * (CyclesDim + 1)), 0) End If - 'TODO: Loading Schleife - '******************** ENDE *** VECTO-Loading-Schleife *** ENDE ************************ + 'TODO: Loading Loop + '******************** END *** VECTO-loading loop *** END ************************ '************************************************************************************** If Not VSUM.Output() Then @@ -585,14 +585,14 @@ lbAusg: Next - '************************* ENDE *** VECTO-Zylus-Schleife *** ENDE ************************* + '************************* END *** VECTO Cycle-loop *** END ************************* '****************************************************************************************** Next '********************************************************************************************** - '****************************** ENDE *** Zylus-Schleife *** ENDE ****************************** + '****************************** END *** Cycle-loop *** END ****************************** '********************************************************************************************** lbNextJob: @@ -638,13 +638,13 @@ lbNextJob: End If - 'Check ob Abbruch + 'Check whether Abort If PHEMworker.CancellationPending Then GoTo lbAbort Next '********************************************************************************************** - '******************************* ENDE *** Job-Schleife *** ENDE ******************************* + '******************************* END *** Job loop *** END ******************************* '********************************************************************************************** WorkerMsg(tMsgID.Normal, "Summary Results written to: " & fFILE(ERG.ErgFile, True), MsgSrc, ERG.ErgFile) diff --git a/VECTO/M_OptInterface.vb b/VECTO/M_OptInterface.vb index 45658d4d9b15f18e6d798837921fe7b90d40af3e..e6851f0a48ea4a3945c89df96d62d5bc1ed3d25f 100644 --- a/VECTO/M_OptInterface.vb +++ b/VECTO/M_OptInterface.vb @@ -18,10 +18,10 @@ Module M_OptInterface Public SlB_nU_opt As Single Public SlB_Pe_opt As Single - 'Korrigierte Emissionen (wird von SOC-Iterations-Modul bestimmt) + 'Corrected Emissions (determined by SOC-iteration-module) Public OptEMkor() As Single - '*** Opt_Interface Ein/Ausschalten + '*** Opt_Interface On/Off Public Sub OptOnOff() If bOptOn Then bOptOn = False @@ -29,7 +29,7 @@ Module M_OptInterface OptStatus("OFF") Else Try - 'Initialisierung + 'Initialization OptInit() Catch ex As Exception GUImsg(tMsgID.Err, ex.Message.ToString) @@ -37,19 +37,19 @@ Module M_OptInterface End If End Sub - '*** Initialisierung + '*** Initialization Private Sub OptInit() - 'Zähler null setzen + 'Count to Zero OptZaehl = 0 - 'Korr. Em. löschen + 'Delete Corr. Em. ReDim OptEMkor(10) OptERstat = False - 'TODO: I/O-Verzeichnis festlegen + 'TODO: I/O-Verzeichnis festlegen |@@| TODO: Specify I/O-directory OptDir = "TODO" ' Früher: F_DEV.TbOptInOut.Text If Right(OptDir, 1) <> "\" Then OptDir &= "\" @@ -82,20 +82,20 @@ Module M_OptInterface 'file.Close() 'file = Nothing - 'Timer initialisieren/starten + 'Timer Initialization/Start F_MAINForm.ComMsgTimer.Start() GUImsg(tMsgID.Normal, "Warte auf START-Signal...") End Sub - '*** Parameter einlesen + '*** Read Parameters Public Sub OptInput() Dim file As New cFile_V3 GUImsg(tMsgID.Normal, "Lese Opt_In.txt") - '**** Einlesen der Input-Datei mit Opt-Parameter + '**** Reading the Input-file with Opt-parameter file.OpenRead(OptDir & "Opt_In.txt") '... @@ -105,13 +105,13 @@ Module M_OptInterface End Sub - '*** Parameter ausgeben + '*** Dump parameters Private Sub OptOutput() Dim StreamF As System.IO.StreamWriter Dim Zielf As Single - '**** Ausgabe der Output-Datei mit Zielfunktion + '**** Ausgabe der Output-Datei mit Zielfunktion |@@| Dump the output file along with the Objective-function(Zielfunktion) GUImsg(tMsgID.Normal, "Schreibe Opt_Out.txt") Try @@ -121,7 +121,7 @@ Module M_OptInterface Exit Sub End Try - 'Ausgabe StatusString + 'Dump the StatusString If OptERstat Then StreamF.WriteLine("ER") OptERstat = False @@ -130,10 +130,10 @@ Module M_OptInterface StreamF.WriteLine("OK") End If - 'Berechnung der Zielfunktion + 'Berechnung der Zielfunktion |@@| Calculation of the Objective-function(Zielfunktion) Zielf = OptEMkor(1) / 40 + (OptEMkor(2) / 0.2) ^ 4 - 'Ausgabe der Zielfunktion + 'Ausgabe der Zielfunktion |@@| Dump the Objective-function(Zielfunktion) StreamF.WriteLine(Zielf) StreamF.Close() @@ -141,7 +141,7 @@ Module M_OptInterface End Sub - '*** Opt Deaktivieren + '*** Opt Deactivation Private Sub OptClose() F_MAINForm.ComMsgTimer.Stop() ChannelServices.UnregisterChannel(ipcCh) @@ -150,44 +150,44 @@ Module M_OptInterface GUImsg(tMsgID.Normal, "OptInterface deaktiviert") End Sub - '*** Status-Meldung (darf nicht von BGWorker aufgerufen werden) + '*** Status-notification (must not be called by BGWorker) Private Sub OptStatus(ByVal txt As String) 'F_DEV.LbOptStatus.Text = txt End Sub - '*** Starte PHEM - wird von F_MAINForm.ComMsgTimer aufgerufen wenn Start-Signal erhalten + '*** Start PHEM - Called from F_MAINForm.ComMsgTimer when the Start-signal is received Public Sub OptSTART() GUImsg(tMsgID.Normal, "START-Signal erhalten.") - 'PHEM starten + 'PHEM start If bOptStartPHEM Then OptStartRun() End Sub Public Sub OptStartRun() - 'Timer anhalten + 'Stop the timer F_MAINForm.ComMsgTimer.Stop() - 'Zähler + 1 + 'Count + 1 OptZaehl += 1 - 'PHEM starten + 'PHEM start GUImsg(tMsgID.Normal, "Starte PHEM. Durchgang " & OptZaehl) F_MAINForm.PHEM_Launcher() End Sub - '*** PHEM fertig - wird von BackgroundWorker1_RunWorkerCompleted aufgerufen wenn PHEM beendet + '*** PHEM ready - called by BackgroundWorker1_RunWorkerCompleted when PHEM finished Public Sub OptEND() - 'Ausgabe der Zielfunktion + 'Ausgabe der Zielfunktion |@@| Dump of the Objective-function(Zielfunktion) OptOutput() - 'PHEM_Launcher beenden + 'Finish PHEM_Launcher If bOptKillLauncher Then KillLauncher() - 'Timer wieder starten + 'Start the Timer again F_MAINForm.ComMsgTimer.Start() GUImsg(tMsgID.Normal, "Warte auf START-Signal...") End Sub - '*** Beendet PHEM_Launcher + '*** Finished PHEM_Launcher Public Sub KillLauncher() Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("PHEM_Launcher") If UBound(pProcess) > -1 Then diff --git a/VECTO/M_SOC_Iter.vb b/VECTO/M_SOC_Iter.vb index 48a374c9da41fedb91da2f5e79f07808db5f1253..12c54354cf069616336501cc2adcd5c76c9822e8 100644 --- a/VECTO/M_SOC_Iter.vb +++ b/VECTO/M_SOC_Iter.vb @@ -94,15 +94,15 @@ Module M_SOC_Iter SOChistory.Add(SOCstart) SOCdeltaHis.Add(SOC(MODdata.tDim) - SOCstart) - 'Check ob Vorzeichen von Delta-SOC sich ändert + 'Check whether the Sign of Delta-SOC changes SOCvzX = 0 For x = SOCcount - 1 To 1 Step -1 If SOCdeltaHis(x) * SOCdeltaHis(x - 1) < 0 Then - 'Vorzeichenwechsel... + 'Sign changes ... SOCvzX += 1 If SOCvzX = 4 Then - '...Limit erreicht => Abbruch + '...Limit reached => Abort SOCnAbbr = True Exit For End If @@ -123,12 +123,12 @@ Module M_SOC_Iter End If Next If SOCnAbbr Then - 'Falls die letzte Iteration die Beste war (SOCnAbbr = True): Abbruch + 'If the last iteration was the best (SOCnAbbr = True): Exit WorkerMsg(2, "SOC-Start Iteration failed. Last Iteration produced best result: SOC-Start = " & SOCstart, MsgSrcSOC) SOCnAbort() Return True Else - 'Falls eine andere Iteration besser war (SOCnAbbr = False): Wiederholen + 'If another iteration was better (SOCnAbbr = False): Repeat SOCnAbbr = True SOCnLog.WriteLine("Repeating Iteration with best result.") SOCnLog.WriteLine("SOC-Start,SOC-End,dSOC") @@ -165,7 +165,7 @@ Module M_SOC_Iter Dim VorzPlus As Boolean Dim UseEmOgl As Boolean - 'Check ob LinReg möglich: Mind. 2 Berechnungen; Mind. 1 dSOC-Vorzeichenwechsel + 'Check whether LinReg possible: Mind. 2 calculations; Mind. dSOC-1 sign-changes Check = SOCcount > 1 If Check Then VorzPlus = (SOCdeltaHis(0) > 0) @@ -268,12 +268,12 @@ lb10: str = Nothing - 'Unkorrigierte Em verwenden wenn SOC-Iteration OK + 'Uncorrected Em use if SOC-iteration OK UseEmOgl = SOCok Else - 'Unkorrigierte Em verwenden + 'Uncorrected Em used UseEmOgl = True SOCnLog.WriteLine(" ") @@ -281,9 +281,9 @@ lb10: End If - 'Korrigierte Emissionen für Optimierer + 'Corrected Emissions for Optimizer If bOptOn Then - 'Falls SOC-Iteration erfolgreich (oder Lin.Reg. nicht möglich) dann Emissionen der letzten Berechnung (unkorrigiert) verwenden + 'If SOC-iteration was successful (or Lin.Reg not possible) then use Emissions from the last (uncorrected) calculation If UseEmOgl Then OptEMkor(1) = gesVerbr / Vquer OptEMkor(2) = gesNOx / Vquer diff --git a/VECTO/My Project/AssemblyInfo.vb b/VECTO/My Project/AssemblyInfo.vb index f5805f2204a608a76d2642125ddb628ebcabdb72..ce2c78cdc97e865c3b5bb632a5d49b40405a28d4 100644 --- a/VECTO/My Project/AssemblyInfo.vb +++ b/VECTO/My Project/AssemblyInfo.vb @@ -3,10 +3,10 @@ Imports System.Reflection Imports System.Runtime.InteropServices ' 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. +' Below is the General Information about the Attributes +' controlling the Assembly. Change these attribute values to modify the information -' Die Werte der Assemblyattribute überprüfen +' associated with the Assembly. <Assembly: AssemblyTitle("VECTO")> <Assembly: AssemblyDescription("")> @@ -17,18 +17,18 @@ Imports System.Runtime.InteropServices <Assembly: ComVisible(False)> -'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +'Review the values of the Assembly Attributes <Assembly: Guid("175c31e7-2d95-4afb-afec-c4d7719177db")> -' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +' The following GUID is for the ID of the Typelib if this project is exposed to COM ' -' Hauptversion -' Nebenversion -' Buildnummer -' Revision +' Version information for an assembly consists of the following four values: +' Major Release +' Minor Release +' Build Number ' ' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern -' übernehmen, indem Sie "*" eingeben: +' You can specify all the values or use the defaults for Build and Revision Numbers ' <Assembly: AssemblyVersion("1.0.*")> <Assembly: AssemblyVersion("1.0.0.0")> diff --git a/VECTO/VECTO_Global.vb b/VECTO/VECTO_Global.vb index b6daf25654e13bad9cd6481edf479a498560c7a7..cd5f3e54605af3839ace7ee741efd442ac0198c1 100644 --- a/VECTO/VECTO_Global.vb +++ b/VECTO/VECTO_Global.vb @@ -17,14 +17,14 @@ Module VECTO_Global 'Config------------------------------------------------------- Public Cfg As cConfig - 'TODO: Weg damit! SOC-Iteration gehört in die Leistungsschleife oder nach Em-Berechnung für LinReg + 'TODO: Get rid of it! SOC-iteration belongs either in the Power-loop or Em-calculation for LinReg Public SOCstart As Single Public SOC(izykt) As Single Public Const izykt As Integer = 40000 Public sKey As csKey - 'Dateiformat + 'File format Public FileFormat As System.Text.Encoding = System.Text.Encoding.UTF8 Public LOGfile As System.IO.StreamWriter @@ -343,7 +343,7 @@ Module VECTO_Global Public Sub StartLogfile() - 'Log starten + 'Log start LOGfile = My.Computer.FileSystem.OpenTextFileWriter(MyAppPath & "LOG.txt", True, FileFormat) LOGfile.AutoFlush = True diff --git a/VECTO/cConfig.vb b/VECTO/cConfig.vb index 850f6649f994714ab3c880d99ae124a60bcf118d..3c19ace32106fe2ba04254bcbaeeee39417a69af 100644 --- a/VECTO/cConfig.vb +++ b/VECTO/cConfig.vb @@ -46,16 +46,16 @@ c.OpenRead(MyConfPath & "settings.txt", "+hugo+") '*** - '*** Erste Zeile: Version + '*** First line: Version txt = Trim(UCase(c.ReadLine(0))) If Microsoft.VisualBasic.Left(txt, 1) = "V" Then - ' "V" entfernen => Zahl bleibt übrig + ' "Remove V'' => It remains the number txt = txt.Replace("V", "") If Not IsNumeric(txt) Then - 'Falls Version ungültig: Abbruch + 'If invalid version: Abort GoTo lbEr Else - 'Version festgelegt + 'Version settled FileVersion = CInt(txt) End If Else @@ -131,26 +131,26 @@ lbEr: Dim x As Short 'Config.txt - 'Zeile Variable Typ Beschreibung + 'Line Variable Type Description '(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 + '(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 Wegkorrektur damit bei Geschw. Reduktion Zyklus nicht kürzer wird |@@| 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 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 + '(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 If Not IO.File.Exists(MyConfPath & "settings.txt") Then GUImsg(tMsgID.Err, "Config-file not found! Using default settings.") @@ -172,7 +172,7 @@ lbEr: Case 2 LastMode = line 'Früher GenLpath = line Case 3 - 'Früher: IntpV2 = CBool(line) + 'Previously: IntpV2 = CBool(line) Case 4 nnormEngStop = CSng(line) Case 5 diff --git a/VECTO/cCustomMap.vb b/VECTO/cCustomMap.vb index 8f5f008a480abb1c9ddae9befc80b75c97bbddf7..6fdfd937b7a48072eae860e4fda91f213d47fca5 100644 --- a/VECTO/cCustomMap.vb +++ b/VECTO/cCustomMap.vb @@ -82,7 +82,7 @@ Public Class cCustomMap Ymin = lY(0) Ymax = lY(0) - 'Min/Max suchen + 'Search Min/Max For i = 1 To lDim x = lX(i) @@ -102,7 +102,7 @@ Public Class cCustomMap Next - 'Normieren + 'Normalize For i = 1 To lDim lX(i) = (lX(i) - Xmin) / (Xmax - Xmin) lY(i) = (lY(i) - Ymin) / (Ymax - Ymin) @@ -122,7 +122,7 @@ Public Class cCustomMap For i = 0 To lDim - 'Wenn Vorzeichen von x oder y nicht gleich Vorzeichen von xA(i) oder yA(i) dann wird Zeile i übersprungen + 'When sign of x and y is not equal to the sign of xA(i) and yA(i) respectively, then skip Row i If x * lX(i) < 0 Or y * lY(i) < 0 Then Continue For ab = (x - lX(i)) ^ 2 + (y - lY(i)) ^ 2 diff --git a/VECTO/cCycleKin.vb b/VECTO/cCycleKin.vb index 26f6b9a294be72080c04b745eaaae8c316ac20b2..cdf40763124974999ad28b785e163378e8d7cea8 100644 --- a/VECTO/cCycleKin.vb +++ b/VECTO/cCycleKin.vb @@ -6,19 +6,19 @@ Public Class cCycleKin Private Const aDecThres As Single = -0.125 '[m/s2] Private Const vStopThres As Single = 0.1 '[m/s] - 'Fahrzustände in Sekunden + 'Fahrzustände in Sekunden |@@| Driving-states in seconds Private tStop0 As Integer Private tAcc0 As Integer Private tDec0 As Integer Private tCruise0 As Integer - 'Fahrzustands-Anteile + 'Fahrzustands-Anteile |@@| Driving-state ratios Private pStop0 As Single Private pAcc0 As Single Private pDec0 As Single Private pCruise0 As Single - 'Beschl.-Parameter + 'Acceleration parameters Private aAvg0 As Single Private aPos0 As Single Private aNeg0 As Single @@ -79,7 +79,7 @@ Public Class cCycleKin pCruise0 = 0 ReDim a3save(t1) - '3s-Beschl + '3s-Accel a3save(0) = MODdata.Vh.a(0) For t = 1 To t1 - 1 a3save(t) = (MODdata.Vh.a(t - 1) + MODdata.Vh.a(t) + MODdata.Vh.a(t + 1)) * (1.0 / 3.0) @@ -88,7 +88,7 @@ Public Class cCycleKin 't_apos, t_aneg, t_cruise, t_stop For t = 0 To t1 - 'Fahranteile Stop/Acc/Dec/Cruise + 'Driving-state ratios: Stop/Acc/Dec/Cruise If MODdata.Vh.V(t) < vStopThres Then tStop0 += 1 Else @@ -103,7 +103,7 @@ Public Class cCycleKin tCruise0 += 1 End Select End If - 'Durchschnitts-Beschl + 'Average-Accel aAvg0 += MODdata.Vh.a(t) Next diff --git a/VECTO/cDEV.vb b/VECTO/cDEV.vb index 128f643311d720f560021d5e32066757f2dbcf4d..15949142fb7da5a7eb0a2044ad40fe7a2ee2993d 100644 --- a/VECTO/cDEV.vb +++ b/VECTO/cDEV.vb @@ -10,18 +10,18 @@ Public Class cDEV '************************************************************************************************************** '************************************************************************************************************** - '********************************* Anleitung zur Einbindung neuer DEV-Options ********************************* + '********************************* Instructions for integrating new DEV-Options ********************************* - '1. Eintrag in "Sub New()" + '1. Entry in "Sub New()" ' - ' I) Neues cDEVoption Objekt definieren mit "Conf0 = New cDEVoption(ConfigType, Description, SaveInConfg, Enabled)" + ' I) Define new cDEVoption Object with "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 + ' 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-Wert definieren. Hier wird unterschieden welcher ConfigType verwendet wird: + ' II) default value definition. Distinguish which ConfigType to use: ' ' a) ConfigType = tBoolean: ' @@ -43,17 +43,17 @@ Public Class cDEV ' ' Conf0.ActionDelegate = New cDEVoption.dActionDelegate(AddressOf NameDerFunktion) ' - ' Wobei NameDerFunktion die aufzurufende Funktion ist die einen <String> übergibt: "Public Function NameDerFunktion() As String" + ' Where NameDerFunktion is a function to call returning a <String>: "Public Function NameDerFunktion() As String" ' ' f) ConfigType = tContMenIndex: ' - ' Verfügbare Auswahl-Möglichkeiten als <String> definieren: + ' Definition of Available selection options as <String>: ' - ' Conf0.AddMode("Auswahl 1") - ' Conf0.AddMode("Auswahl 2") - ' usw... + ' Conf0.AddMode ("select 1") + ' Conf0.AddMode ("Option 2") + ' and so forth. ' - ' Default-Wert definieren: Erste Auswahl = 0 + ' Default value definition: First choice = 0 ' ' Conf0.ModeIndex = ... <Integer> @@ -70,7 +70,7 @@ Public Class cDEV '***************************************************************************************** '***************************************************************************************** - '**************************** START: Parameter konfigurieren '**************************** + '**************************** START: Parameters Configuration '**************************** Dim Conf0 As cDEVoption @@ -110,7 +110,7 @@ Public Class cDEV Conf0.BoolVal = False MyOptions.Add("TestOptions", Conf0) - '**************************** ENDE: Parameter konfigurieren '***************************** + '**************************** END: Parameters Configuration '***************************** '***************************************************************************************** '***************************************************************************************** @@ -118,12 +118,12 @@ Public Class cDEV End Sub - 'Initialisiert die tatsächlichen Config-Parameter aus der MyConfigs-Liste + 'Initialize the actual Config-Parameters from MyConfigs list Public Sub SetOptions() End Sub - 'Demo für Delegate Function + 'Demo for Delegate Function Public Function TestFunction() As String Return "OK...?" End Function @@ -324,7 +324,7 @@ Public Class cDEVoption Try Select Case MyConfType Case tDEVconfType.tAction - '??? Darf nicht sein + '??? Darf nicht sein |@@| May not be Case tDEVconfType.tBoolean BoolVal = CBool(StrExpr) diff --git a/VECTO/cDelaunayMap.vb b/VECTO/cDelaunayMap.vb index 39820d607bd49e588b1149bdf19f66dce933de33..428665bffb3ffb97633ceacce8a9992213983e34 100644 --- a/VECTO/cDelaunayMap.vb +++ b/VECTO/cDelaunayMap.vb @@ -32,7 +32,7 @@ Public Class cDelaunayMap ptDim = ptList.Count - 1 - 'XY-Triangulierung + 'XY-triangulation Try DT = New dTriangulation lDT = DT.Triangulate(ptList) @@ -47,7 +47,7 @@ Public Class cDelaunayMap Next - 'XZ-Triangulierung + 'XZ-triangulation If DualMode Then If ptDim <> ptListXZ.Count - 1 Then Return False diff --git a/VECTO/cERG.vb b/VECTO/cERG.vb index 8003bae795c11e8ef45e508d6c8557bf6c0f427d..c00ddd2d5c288126abc5b959007b5864e3fd1ab6 100644 --- a/VECTO/cERG.vb +++ b/VECTO/cERG.vb @@ -44,7 +44,7 @@ Class cERG ErgEntryList = New List(Of String) - '********************** GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '********************** + '********************** GEN-Liste raussuchen. Bei ADVANCE aus Flotte sonst aus Jobliste '********************** |@@| Select GEN-list for ADVANCE either from Fleet or from Job-list '********************** If PHEMmode = tPHEMmode.ModeADVANCE Then ADV0 = New cADV @@ -81,17 +81,17 @@ Class cERG End If - '********************** Erg-Einträge erstellen '********************** + '********************** Create Erg-entries '********************** EVdone = False HEVorEVdone = False EngOnly = False NonEngOnly = False - 'Fahrzeugtyp-unabhängig + 'Vehicle type-independent AddToErg("\\T", "time", "[s]") AddToErg("\\Prated", "Prated", "[kW]") - 'Jede GEN-Datei auf Modus und Kennfeld checken + 'For each GEN-file check Mode and Map For Each str In GENs GEN0 = New cGEN @@ -112,7 +112,7 @@ Class cERG If Not EngOnly Then - 'nix... + 'nothing... EngOnly = True @@ -133,7 +133,7 @@ Class cERG End If - 'Elektrofahrzeug / Hybrid + 'Electric-Vehicle / Hybrid If GEN0.VehMode = tVehMode.EV Or GEN0.VehMode = tVehMode.HEV Then 'EV & HEV @@ -155,7 +155,7 @@ Class cERG End If - 'Nur EV: + 'Only EV: If GEN0.VehMode = tVehMode.EV And Not EVdone Then AddToErg("\\EC", "EC", "[kWh/km]") @@ -168,10 +168,10 @@ Class cERG End If - 'Konventionell / Hybrid (Alles außer EV) + 'Conventional / Hybrid (Everything except EV) If GEN0.VehMode <> tVehMode.EV Then - 'Konventionelles Fahrzeug... + 'Conventional vehicles ... AddToErg("\\n_norm", "n_norm", "[-]") AddToErg("\\Pe_norm", "Pe_norm", "[-]") AddToErg("\\Ppos", "Ppos", "[-]") @@ -179,7 +179,7 @@ Class cERG If GEN0.CreateMap Then - 'Aus den Messdaten + 'From the measured data DRI0 = New cDRI DRI0.FilePath = GEN0.CycleFiles(0).FullPath @@ -194,7 +194,7 @@ Class cERG If Em0.WriteOutput Then - 'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich + 'Dump x/h if in ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible If Em0.NormID = tEmNorm.x Or GEN0.VehMode = tVehMode.EngineOnly Or PHEMmode = tPHEMmode.ModeADVANCE Then AddToErg(Em0.IDstring, Em0.Name, Em0.Unit, False) Else @@ -209,7 +209,7 @@ Class cERG Else - 'Aus dem Kennfeld + 'From the Engine-Map ENG0 = New cENG ENG0.FilePath = GEN0.PathENG @@ -237,7 +237,7 @@ Class cERG If Em0.WriteOutput Then - 'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich + 'Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible If Em0.NormID = tEmNorm.x Or GEN0.VehMode = tVehMode.EngineOnly Or PHEMmode = tPHEMmode.ModeADVANCE Then AddToErg(Em0.IDstring, Em0.Name, Em0.Unit, False) Else @@ -257,13 +257,13 @@ Class cERG If EngOnly Then - 'derzeit nix + 'currently nothing End If If NonEngOnly Then - 'Fahrzeugbesogene Felder + 'Vehicle-related fields AddToErg("\\Pbrake", "Pbrake", "[-]") AddToErg("\\EposICE", "EposICE", "[kWh]") AddToErg("\\EnegICE", "EnegICE", "[kWh]") @@ -285,7 +285,7 @@ Class cERG End If - 'ErgListe sortieren damit g/km und g/h nebeneinander liegen + 'ErgListe sortieren damit g/km und g/h nebeneinander liegen |@@| Sort ErgListe so that g/km and g/h are side-by-side iDim = ErgEntryList.Count - 1 For i1 = 0 To iDim - 1 @@ -354,14 +354,14 @@ Class cERG t1 = MODdata.tDim - 'Fahrzeugtyp-unabhängig + 'Vehicle type-independent ErgEntries("\\T").ValueString = (t1 + 1).ToString ErgEntries("\\Prated").ValueString = VEH.Pnenn - 'Länge, Geschw., Steigung + 'Length, Speed, Slope If Not GEN.VehMode = tVehMode.EngineOnly Then - 'Durchschnitts-Geschw. berechnen + 'Average-Speed. calculation sum = 0 For t = 0 To t1 sum += MODdata.Vh.V(t) @@ -371,7 +371,7 @@ Class cERG ErgEntries("\\S").ValueString = (Vquer * (t1 + 1) / 3600).ToString ErgEntries("\\V").ValueString = Vquer.ToString - 'Durchschnitts-Steigung berechnen + 'Average-Slope calculation sum = 0 For t = 0 To t1 sum += MODdata.Vh.Grad(t) @@ -385,7 +385,7 @@ Class cERG 'EV / Hybrid If GEN.VehMode = tVehMode.EV Or GEN.VehMode = tVehMode.HEV Then - 'Positive effektive EM-Leistung + 'Positive effective EM-Power sum = 0 c = 0 For t = 0 To t1 @@ -396,7 +396,7 @@ Class cERG Next If c > 0 Then ErgEntries("\\PeEM+").ValueString = (sum / c).ToString - 'Positive effektive Batterie-Leistung = innere EM-Leistung + 'Positive effective Battery-Power = internal EM-Power sum = 0 c = 0 For t = 0 To t1 @@ -407,7 +407,7 @@ Class cERG Next If c > 0 Then ErgEntries("\\PeBat+").ValueString = (sum / c).ToString - 'Positive innere Batterie-Leistung + 'Positive internal Battery-Power sum = 0 c = 0 For t = 0 To t1 @@ -418,10 +418,10 @@ Class cERG Next If c > 0 Then ErgEntries("\\PiBat+").ValueString = (sum / c).ToString - 'Verbrauchte Energie berechnen + 'Calculate Energy consumed EBatPlus = sum / 3600 - 'Negative effektive EM-Leistung + 'Negative effective EM-Power sum = 0 c = 0 For t = 0 To t1 @@ -432,7 +432,7 @@ Class cERG Next If c > 0 Then ErgEntries("\\PeEM-").ValueString = (sum / c).ToString - 'Negative effektive Batterie-Leistung = innere EM-Leistung + 'Negative effective Battery-Power = internal EM-Power sum = 0 c = 0 For t = 0 To t1 @@ -443,7 +443,7 @@ Class cERG Next If c > 0 Then ErgEntries("\\PeBat-").ValueString = (sum / c).ToString - 'Negative innere Batterie-Leistung + 'Negative internal Battery-Power sum = 0 c = 0 For t = 0 To t1 @@ -454,10 +454,10 @@ Class cERG Next If c > 0 Then ErgEntries("\\PiBat-").ValueString = (sum / c).ToString - 'Geladene Energie berechnen + 'Charged-energy calculation EBatMinus = sum / 3600 - 'Energie in/aus Batterie + 'Battery in/out Energy ErgEntries("\\EiBat+").ValueString = EBatPlus.ToString ErgEntries("\\EiBat-").ValueString = EBatMinus.ToString @@ -492,23 +492,23 @@ Class cERG 'Delta SOC ErgEntries("\\∆SOC").ValueString = (MODdata.Px.SOC(t1) - MODdata.Px.SOC(0)).ToString - 'Nur EV: + 'Only EV: If GEN.VehMode = tVehMode.EV Then - 'Energieverbrauch + 'Energy-consumption ErgEntries("\\EC").ValueString = ((EBatPlus + EBatMinus) / (Vquer * (t1 + 1) / 3600)).ToString End If End If - 'Konventionell d.h. alles mit ICE (nicht EV) + 'Conventional means everything with ICE (not EV) If GEN.VehMode <> tVehMode.EV Then - 'Emissionen + 'Emissions For Each Em0 In MODdata.Em.EmComp.Values - 'x/h-Ausgabe falls ADVANCE Modus -oder- EngineOnly -oder- Einheit nicht in x/h und somit keine Umrechnung in x/km möglich + 'Dump x/h if ADVANCE mode -or- EngineOnly -or- Units not in x/h and therefore Conversion into x/km is not possible If Em0.WriteOutput Then If Em0.NormID = tEmNorm.x Or GEN.VehMode = tVehMode.EngineOnly Or PHEMmode = tPHEMmode.ModeADVANCE Then ErgEntries(Em0.IDstring).ValueString = Em0.FinalAvg.ToString @@ -519,7 +519,7 @@ Class cERG Next - 'Leistung, Drehzahl + 'Power, Revolutions sum = 0 For t = 0 To t1 sum += MODdata.Pe(t) @@ -548,7 +548,7 @@ Class cERG End If - 'Nur Gesamtfahrzeug (nicht EngOnly) + 'Nur Gesamtfahrzeug (nicht EngOnly) |@@| Only Entire-vehicle (not EngOnly) If Not GEN.VehMode = tVehMode.EngineOnly Then 'Pbrake-norm @@ -634,7 +634,7 @@ Class cERG End If - 'Ausgabe-String erstellen: + 'Create Output-string: First = True For Each key In ErgEntryList @@ -652,7 +652,7 @@ Class cERG MsgSrc = "SUMALL/Output" - 'Datei öffnen + 'Open file Try Ferg = My.Computer.FileSystem.OpenTextFileWriter(ERGpath, True, FileFormat) Ferg.AutoFlush = True @@ -665,7 +665,7 @@ Class cERG Ferg.WriteLine("Job,Input File,Cycle," & ErgHead()) Ferg.WriteLine("[-],[-],[-]," & ErgUnits()) - 'Datei schließen (wird nach jedem Job neu geöffnet) + 'Close file (will open after each job) Ferg.Close() HeadInitialized = True @@ -684,7 +684,7 @@ Class cERG If Not HeadInit() Then Return False End If - 'Datei öffnen + 'Open file Try Ferg = My.Computer.FileSystem.OpenTextFileWriter(ERGpath, True, FileFormat) Ferg.AutoFlush = True @@ -701,7 +701,7 @@ Class cERG Ferg.WriteLine(str & ErgLine()) End If - 'Datei schließen + 'Close file Ferg.Close() Ferg = Nothing @@ -736,7 +736,7 @@ Class cERG MsgSrc = "SUMALL/Init" - 'Ausgabepfad definieren + 'Define Output-path If (PHEMmode = tPHEMmode.ModeBATCH) Then Select Case UCase(Cfg.BATCHoutpath) Case sKey.WorkDir @@ -750,9 +750,9 @@ Class cERG ERGpath = fFileWoExt(GenFile) & ".vsum" End If - 'Datei öffnen + 'Open file Try - 'Datei öffnen + 'Open file Ferg = My.Computer.FileSystem.OpenTextFileWriter(ERGpath, False, FileFormat) Ferg.AutoFlush = True Catch ex As Exception @@ -766,7 +766,7 @@ Class cERG Ferg.WriteLine(Now.ToString) Ferg.WriteLine(ERGinfo) - 'Datei schließen (wird nach jedem Job neu geöffnet) + 'Close file (will open after each job) Ferg.Close() Return True @@ -814,4 +814,4 @@ Public Class cErgEntry Head = HeadStr Unit = UnitStr End Sub -End Class \ No newline at end of file +End Class diff --git a/VECTO/cEmComp.vb b/VECTO/cEmComp.vb index c1e4085f8f1b8bd9d7f737ea0d58314e27a83df1..51076521c0abaa50ef044b7be270098c12c3fe9d 100644 --- a/VECTO/cEmComp.vb +++ b/VECTO/cEmComp.vb @@ -22,13 +22,13 @@ Private bTCdef As Boolean Public TCfactors As System.Collections.Generic.Dictionary(Of tMapComp, Double) - 'Komponente wird sekündlich ausgegeben + 'Component is dumped every one second Public WriteOutput As Boolean - 'ATVals definiert (EXS) + 'Define ATVals (EXS) Private bATdef As Boolean - 'Summen/DruchschnittsWerte + 'Totals/Average Values Public FinalAvg As Single 'Durchschnittswert [g/h] Public FinalSum As Single 'Summe [g] Public FinalAvgPos As Single 'Durchschnittswert ohne negative Werte [g/h] @@ -106,11 +106,11 @@ sumPos += Math.Max(x, 0) Next - 'Durchschnitt + 'Averaged FinalAvg = CSng(sum / FinalVals.Count) FinalAvgPos = CSng(sumPos / FinalVals.Count) - 'Summe (g/h umgerechnet in g) + 'Total (g/h converted into g) Select Case NormID Case tEmNorm.x FinalSum = sum @@ -123,4 +123,4 @@ End Sub -End Class \ No newline at end of file +End Class diff --git a/VECTO/cVSUM.vb b/VECTO/cVSUM.vb index 979fddf8517018fc47872924f964d78ce714318b..72eaed3c715dedb7a3880ec5f472cb327714640d 100644 --- a/VECTO/cVSUM.vb +++ b/VECTO/cVSUM.vb @@ -43,7 +43,7 @@ Public Class cVSUM Em0 = MODdata.Em.EmDefComp(tMapComp.FC) t1 = MODdata.tDim - 'Durchschnitts-Geschw. berechnen + 'Average Speed calculation sum = 0 For t = 0 To t1 sum += MODdata.Vh.V(t) @@ -111,7 +111,7 @@ Public Class cVSUM file.WriteLine("Date:" & vbTab & Now.ToString) file.WriteLine(" ") file.WriteLine("Specifications") - 'TODO: Mission nicht Zyklusname + 'TODO: Mission without Cycle-name file.WriteLine(vbTab & "Mission: " & vbTab & fFILE(CurrentCycleFile, False)) file.WriteLine(vbTab & "Vehicle Class: " & vbTab & VehConfig) 'TODO: Test Setup