Zugkraft über Script file berechnen und setzen

Discord Einladung
Trete unserem Discord-Server bei (klicke hier zum Beitreten).
  • Liebe Community!


    Um die Reichweite an potentiellem Wissen zu vergrößern, möchte ich mein Problem auch hier schildern. Ich arbeite derzeit an einem Skriptupdate für den RSSLO 4010er (apparently nutzt er das Skript von der SZ363). Das sollte der erste Step für ein weiteres Soundupdate sein. Als ersten Schritt habe ich dafür im Skript die Fortschaltgrenzen und Zeiten richtig gesetzt und die Motorströme und die Leistung anhand der korrekten Formeln für Reihenschlussmotoren berechnet. Dies passiert in jedem Simulationsschritt. Damit die TractiveEffortVsSpeed/Throttle nicht dazwischenpfuschen, habe ich sie quasi neutralisiert, indem ich in der Speed-File eine konstante Leistung etwas über der maximalen Leistung angegeben habe und den Throttle auf 1 gesetzt hab, sodass es dafür keine Multiplikatoren gibt. Im Skript wird für den Regulator schließlich ein Wert zwischen 0 und 1 normiert auf die angegebene Maximalleistung pro Motor gesetzt. Das schien mir der beste Approach für eine möglichst genaue Simulation zu sein. Die Motorwiderstände sind dabei aus der Leistungstafel des Motors und mehreren Leistungspunkten über die Verlustleistung berechnet. Da die Induktivität mit dem Arbeitspunkt schwankt, habe ich als Dämpfung eine Exponentialfunktion verwendet, um nicht im Skript langsame DGLS lösen zu müssen.

    So viel zur Beschreibung. Mein Problem ist jetzt, dass, obwohl die Werte alle aus dem realen Fahrzeug stammen und in meinen Augen korrekt berechnet werden, die Leistung im Spiel viel zu hoch ist. Bereits bei der ersten Stufe gerät das Fahrzeug direkt ins Schleudern und beschleunigt über alle Maßen. Habe ich irgendwas falsch verstanden, wie der Train Sim mit Leistungen und Kräften umgeht? Hab ich was übersehen oder stimmt etwas in meiner Logik im Script selber nicht? Nachdem RWA einige sehr genaue Addons erschaffen hat, würde ich mich freuen, wenn ihr mich auf die richtige Spur leiten könntet. Die geänderten Files sind im Anhang ersichtlich.


    (Anm.: Ich habe einige Programmiererfahrung in C# und Java, für Lua ist das jedoch mein erstes Projekt, deswegen bitte hinsichtlich des Codestyles nachsichtig sein.)

  • Steve

    Hat das Thema freigeschaltet.
  • Moin Transalpin4010

    nur ganz kurz angerissen, denn mein Kenntnisstand zu diesem Thema äußerst rudimentär - ÖHM!

    Anbei hier ein Diagramm einer E-Lok: (Link zum Diagramm https://www.johannes-strommer.…leistung-geschwindigkeit/ )


    An dieser Diagrammkurve arbeitet sich die Engine des TSC ab. Wobei die senkrechte Y-Achse in Kilonewton (kN) und die waagerechte X-Achse in Miles per Hours (MPH) gesetzt werden muss.

    Wo sind dann diese Werte zu finden, in welcher Datei?
    Pfad jeweils irgendwie dann hin zu (Beispiel hier der ICE aus RailValley1)


    \RailWorks\Assets\DTG\RhineValley1\RailVehicles\Electric\ICE3\Default\Simulation\

    TractiveEffortVsSpeed.dcsv

    Diese Datei wird mit einem normalen Editor (z.B. Notepad++) bearbeitet. Es werden zwei Werte eingetragen; zu der jeweiligen Geschwindigkeit in mph die dazugehörige Kraft in kN. Und ja, immer MPH eintragen, auch wenn dann im Game km/h angezeigt werden.
    Die Physik der Exponentialfunktion des steigenden Gegendrucks des Luft- und Rollwiderstandes, ist im Kernel des TSW eingepflegt - will sagen, k.A. wo man das verändern könnte?

    Anbei als Beispiel noch die Kraft/Geschwindigkeitsdatei eines ICE als TractiveEffortVsSpeed.7z. Bitte entpacken! Diese Datei stammt aus einem Update, Link:
    [DTG] [MK] ICE 3M Funktionsupdate Beta v0.3 - Rail-Sim.de - Die deutsche Train Simulator Community

    Viel Erfolg mit deinem Projekt!

    Hoffe, habe nicht zu viel dummes Zeug geschrieben, verbleibe ich

    mfG

    Henry

  • Ja, voll, das wär der Sinn der TractiveEffortVsSpeed Datei, aber die Kurve ist hier halt sehr generalisiert und obwohl der Trend bei den Motoren gleich ist, gibt's ja doch Unterschiede, ob die Lok jetzt von einem modernen Asynchronmotor angetrieben wird oder von einem alten Reihenschlussmotor Deswegen hab ich die Kurve neutralisiert und quasi konstant auf die maximale Leistung gesetzt, damit ich im Skript aus den Gleichungen des Reihenschlussmotors die tatsächliche Leistung in jedem Frame berechnen kann und dann als Prozentsatz der maximalen Leistung setzen kann. So bekomme ich ja ein viel genaueres und realistischeres Traktionsbild, ist mein Gedanke.


    Und soweit ich das verstanden habe, setzt die TractiveEfforVsSpeed nur die Lokleistung um, Luftwiderstand, Reibung wird dann extra daraufgesetzt.

  • Ja gut, hatte ich so verstanden! Jedoch nun muss man ja der TSC Engine verklickern, welche Daten verarbeitet werden sollen (also, nicht mehr ein statisches Diagramm, sondern dynamisch). Dein Ansatz wäre dann, dieses Kraft/Geschwindigkeits-Diagramm aus der Datei TractiveEffortVsSpeed.dcsv in einem Lua-Script-File zu generieren und an die Engine durchzureichen.
    Einige haben diesen Ansatz mit einem Dämpfungs-Lua-Script verwirklicht, wo das Anlaufen und das Erreichen der Kraft simuliert wird.

  • Ich hab herausgefunden, dass auch in der Simulation.bin falsche Werte waren. ich hab die jetzt auf die tatsächlichen Leistungen gesetzt und jetzt wirkt die BEschleunigung im Simulator sehr real.


    Mein nächstes Problem entsteht aber bei der Bremse. Ich habe alle ControlNames aus der .bin durchprobiert, kein einziger ändert sich passend zur Bewegung des Führerbremsventils oder der direkten Bremse Die Kopplung zwischen dem Führerbremsventil und der Bremse im f ist aber gegeben. Wie finde ich jetzt heraus, welchen Wert ich im Skript für die Position der Bremsventile abrufen kann, korrigieren kann und dann im Main Control für den Simulator setzen kann!?

  • Oh, lange schon her

    die Druckluftbremse hat die interne Bezeichnung >TrainBrakeControl< und ist die Steurungsdatei, an der sich TSC abarbeitet




    dann nachschauen an welcher weiteren Funktion die BAN eingetragen ist - wenn ich das noch richtig in Erinnerung haben sollte, dann ist die Bezeichnung dieser Funktion in der eigentlichen Lua-Script Datei schon in USE und steuert >TrainBrakeControl< an.

    Also, wenn du komplett neu schreiben möchtest, dann ist eine Namensänderung nicht nötig - wenn du jedoch den Befehl require nutzen möchtest, dann sollte der Namen geändert werden - sonst werden sich die beiden Lua-Script Dateien gegenseitig im Bremsverhalten stören.

    Ist es denn ein einzelner Bremshebel oder ein Kombihebel - weil im Lua hätte ich etwas von 0,5 Hebelstellung gelesen?

  • Führerbremsventil vom 4010er ist ein klassisches altes mechanisches Ventil, kein Kombihebel oder so. Ich habe aber im Skript in der ValueChanged-Methode nach Änderungen von dem TrainBrakeControl gelistened mit einer Ausgabe, wenn es was tut, aber egal, wie ich den Hebel hin und her bewege, der Wert ändert sich nicht. Ich hab's über die OnControlValueChanged-Methode überprüft und auch nochmal über die Update-Methode.