Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Forked from VECTO / VECTO Sim
11575 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
comments.txt 211.35 KiB
>>> 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>