Alternative Steuerungsmethoden für Trainz

  • Hallo liebe Trainz-Experten. Auch nach langer Recherche hat sich dazu leider noch nicht viel ergeben, weder auf deutschsprachigen noch auf englischsprachigen Seiten. Da sich hier ja wohl die Trainzer tummeln die am tiefsten in der Materie stecken möchte ich dazu mal eine Diskussion anregen. Kann mir vorstellen das so einige von ihrem eigenen Führerstand träumen.


    1. ich weiß das es den RailDriver-Controller gibt, den lasse aber ich bewusst aussen vor

    2. da es diesen Controller gibt scheint es ja eine virtuelle serielle Schnittstelle zu geben (hat möglicherweiße jemand so einen Controller und kann den Datenverkehr mitschneiden)?

    3. was ist aus der TrainzNativeInterface.dll geworden, gibt es da inzwischen eine richtige Dokumentation?

    4. bis jetzt gäbe wohl nur die Möglichkeit ein 2. HID (Tastatur) zu erstellen, jedoch sehe ich da die Probleme bei Hebeln (Fahrstufen, Bremsen) woher weis der Controller wo die Hebel gerade stehen?


    Als Ziel würde ich gern in der Gemeinschaft ein Zwischenprogramm entwickeln, das einseits das Protokoll zu Trainz bedient ohne in dessen Code einzugreifen und welches andererseits mit mehreren verschieden Schnittstellen ausgestattet ist (bspw. Joystick, MIDI, Modellbahn-Protokolle, ja sogar DMX wäre vorstellbar). Jedoch wird dazu etwas Insider-Wissen notwendig sein.


    Bin gespannt...


    Mathias

  • TRS2019 unterstützt Eingabegeräte die über den RailDriver hinaus gehen, also auch Controller.

    (Eventuell lieber einen Treiber schreiben, der ein Eingabegerät emuliert und du mit den gewünschten Daten der jeweiligen Protokolle füttern kannst?)


    Das TNI sollte schonmal in den Testlauf gehen, N3V Games hat da aber wohl, laut Aussage von Chris Bergman, die Prioritäten wieder geändert.


    Gruß

    Pascal

  • Zum einen ist es schön zu lesen das TRS2019 jetzt diese Möglichkeit besitzt. Das ist definitiv ein guter Ansatz und werde mir das einmal anschauen. Ich besitze leider aber nur eine ältere Version und verfüge auch nicht über die entsprechend fähige Hardware um TRS2019 in Betrieb zu nehmen. Eine Neuanschaffung nur wegen Trainz kommt vorerst nicht in Frage (andere Prioritäten wo das Geld hin soll :winking_face: ) Hat jemand noch eine Idee zu den älteren Versionen? Und für diejenigen die TRS2019 besitzen, welche Art von Controllern werden denn bereits unterstützt?

    • Offizieller Beitrag

    Schön, dass sich jemand anders noch dafür interessiert, ich hab mich auch schon ein bisschen mit dem Thema auseinander gesetzt.


    Nach meinen Tests mit normalen Controllereingabegeräten (und Erfahrungen von anderen) scheinen T:ANE und TRS19, auch wenn sie theoretisch Controller aller Art unterstützen sollen, so eingestellt, dass sie lediglich Geräte erkennen, welche sich als Raildriver ausgeben. Dieser ist auch für mich keine Option, ich hab Leute gefragt, die einen haben, das ist ja eine winzig kleine Plastikkiste für 200€ mit amerikanischem Layout? Also kommt für mich gar nicht in Frage. Ich hab auch sonst keine Dokumentation gefunden, wie der Raildriver sich wirklich am PC anmeldet, wenn man versuchen wollte, ein eigenes Gerät als Raildriver anzumelden.


    Eine Idee, die ich stattdessen hatte, ist daher, Tastatureingaben zu emulieren. Trainz besitzt die Möglichkeit, Tasten zuzuweisen, welche direkt eine Fahrstufe ansteuern oder den Bremshebel auf eine bestimmte Stellung bringen, wenn man diese also Zuweist kann das Synchronisationsprogramm, welches die Verbindung zwischen Trainz und dem virtuellen Führerstand herstellt, diese Tasten einfach intern drücken um Trainz zu steuern. Ich hatte diese Idee schonmal detailliert im Auran Forum geschildert, wo einer den Ansatz erfolgreich für seinen Führerstand mit Virtual Basic umgesetzt hat.

    Das etwas sich desynchronisiert ist eigentlich eher unwahrscheinlich, denn bis auf Zwangsbremsungen gibt es eigentlich wenige Fälle, wo ein Zugskript dir die Hebel "unter der Hand weg stellt". Wenn es desynct bewegst du alle Hebel einfach einmal und sie sollten sich wieder Synchronisieren mit diesem Ansatz.

    Wenn du Bremsanzeigen oder einen Tacho bedienen willst, scheint Trainz leider keinen Kommunikationsweg nach außen bereit zu stellen. Man könnte eventuell ein Programm schreiben, welche die Bildschirmausgabe sich anschaut und auf die Farbe bestimmter Pixel achtet, um dann die Zahlen im Hud "abzulesen". Keine Ahnung wie kompliziert sowas zu programmieren ist, aber so funktioniert der Raildriver-Tacho wenn man den mit MSTS einsetzt (soweit ich weiss) da MSTS auch keine Controllerschnittstelle bot.

    Die andere Frage wäre, wie sinnvoll/kompliziert es ist, ein allgemeines Programm zur Verbindung virtueller Führerstände mit Trainz zu schreiben, welches alle Nutzen können. Schön wäre das für den Endbenutzer natürlich, aber es gibt doch viele verschiedene Arten von Fahrpulten und Wege diese überhaupt erst mal an den PC anzuschließen. Ich würde z.b. ein U-Bahn Fahrpult bevorzugen und das ist vom Aufbau doch um einges anders als ein DB Standardführerstand.




    Greets, Mika

    Student in Vollzeit, Straßenbahnfahrer in Teilzeit. Skripte für Trainz wenn Motivation da ist...


    "It's always more fun to share with everyone" -Jack Johnson

  • Danke mika für deine Ausführungen. Leider ist das auch der Stand auf dem ich festhänge. Ich programmiere schon viele jahre in VisualBasic und C#. Ein Emulator der was auch immer in Tastatureingaben umsetzt ist kein Problem. Auch die externe Verbindung ist mit einem Arduino sehr leicht umzusetzen. Jedoch fehlt eben immer der Rückkanal von Trainz. Zum fahren selbst müsste man also immer mit einer stehenden Lok anfangen. Alle Bedienteile in vorbestimmter Position. Ist das immer so? Oder man setzt die Regler beim bewegen immer kurz auf null und dann in die gewünschte Stufe. Das abzweigen von Tachosignalen über Pixel der Anzeige ist ne interessante Idee. Irgendwie sehr schade das bei so viel Nachfrage seit so vielen Jahren der Hersteller keine Schnittstelle implementiert. Oder zumindest keine Infos über die Kommunikation mit dem Raildriver veröffentlicht.

    Wo kann man denn das eigentlich einstellen das eine Taste direkt eine bestimmte Fahrstufe anwählt?

    • Offizieller Beitrag

    Naja, dafür gibts ein paar Gründe:

    Erstens ist die Nachfrage schlichtweg nicht wirklich groß
    Zweitens ist ein großer Teil der Nutzerschaft Amerikanisch und gibt sich mit dem Raildriver zufrieden
    Drittens sind alle Möglichkeiten, echte Hebel an den PC anzuschließen immer individuelle Lösungen, es ist einfach nicht wirklich möglich dies zu standardiesieren.

    Natürlich wäre nativer Support für alle Arten von Controllern mit Achsen sehr hilfreich, folgt vielleicht mal in einem zukünftigen Trainz-Update, aber nach aktuellem Stand gehts nicht. Dokumentation über die Funktionsweise des Raildriver ist auch unwahrscheinlich, denn der wird von einer externen (sehr kleinen) Firma hergestellt, die auf individuelle Eingabelösungen für PC Nutzer spezialisiert ist und diese in kleinen Stückzahlen und zu königlichen Preisen herstellt. Die haben ihre eigene Steuersoftware entwickelt die genau sowas tut, Controller, Tastatur oder Mauseingaben emulieren auf eine Art und Weise die jeder Nutzer einfach einsetzen kann. Ein wesentlicher Teil ihres Geschäftsmodells ist die Tatsache, dass kaum ein anderer Hersteller solche individuellen Eingabelösungen die jeder einfach einsetzen kann anbietet und somit haben sie sicherlich auch kaum Interesse daran, die innere Funktionsweise ihrer Produkte öffentlich zu machen, denn wer die Software hat und Hardwaretechnisch etwas versiert ist könnte viele ihrer Produkte aus Fertigteilen zu einem Viertel des Preises zusammenbauen.


    Zur Rückkommunikation: Wozu brauchst du die denn wirklich außer für z.b. einen Tacho? Ich glaube ja nicht, dass du die Hebel in deinem Fahrpult motorisiert hast und sie hin und her fahren lassen willst wenn die KI den Zug fährt? Ansonsten sind die Tasten in Trainz zumindest für die Fahrstufen und Bremse absoluttasten und du kannst sie dein Skript auch einmal alle paar Sekunden drücken lassen selbst wenn du deinen Hebel nicht bewegst, dann sind sie auch synchronisiert, aber eigentlich hat Trainz selten einen Grund aus eigener Kraft die virtuellen Hebel ohne dein Einwirken zu verstellen, Sonderfall wäre z.b. eine Zwangsbremsung. Ansonsten bleiben die im Sync solang du nur an deinem Controller verstellst, dann reicht es völlig, nur beim Verändern deines Controllers einen Tastendruck an das Spiel zu senden. Es ist natürlich zu empfehlen, deinen Controller vor Fahrtantritt einmal in die Ausgangsstellung zu versetzen, die Lok startet ja auch nicht mit eingelegter Fahrstufe, wenn du sie übernimmst.


    Ein einziges Problem sehe ich lediglich, wenn du auf deinem Fahrpult einen Kippschalter verbaut hat, zum Beispiel beim Licht, der Licht an und Licht aus hat. Hier hat das Spiel dann keine Absoluttasten sondern nur Wechseltasten und wenn dein Controller bei jedem mal virtuell einen "L" Tastendruck sendet können sich diese Desynchronisieren, wenn du z.b. bei Fahrtantritt deinen Controller versehentlich auf "Licht an" stehen hast, die Lok in Trainz beim Übernehmen aber ihr Licht aus.


    Alles sowas kann aber über den "Ablesen" Trick vom Hud auch gelöst werden wenns sein muss, da wir im Spiel auch einfach ein kleines Hinweisfenster per Skript erstellen können, welches immer an einer Fixen Position deines Bildschirms hängt (wie ein HUD also) und beliebige Variablen aus dem Spiel zum Ablesen preisgibt.




    Greets, Mika

  • Ok. Ich stimme dir da voll und ganz zu. Das mit den Schaltern ist aber mit deinen Ausführung zum Script und der Logik des Tools lösbar. Ich merke zwar das ich offensichtlich noch nicht mit allen Möglichkeiten/Funktionen von Trainz vertraut bin :) jedoch habe ich mit dem "von extern" weniger Probleme. Wie erwähnt würde ich einen Arduino als Bindeglied zur Hardware verwenden (mit entsprechenden Code und Schaltung versteht der fast alles, von analogen Signalen bis zu irgendwelchen Protokollen. Das ganze als HID-Tastatur über USB an den PC oder eine kleine Software die die Tasten setzt. Für die Funktionen in Trainz bräuchte ich wohl ein paar Tips von euch...

  • Ich folge Eurer Diskussion interessiert.

    Allerdings kann ich nicht verstehen, wieso 30 Euro (im Sale) zu viel sind, um sich mit der aktuell gültigen Version von Trainz zu beschäftigen (die laut Jubelmeldungen des Herstellers auch die bestverkaufte sein soll, wo also auch die Mühe auch einen größeren Nutzen für die Gemeinschaft bringen würde, vorausgesetzt, die Controller-Steuerung würde kostenlos angeboten) ?

    Stattdessen soll an veralteten Versionen herumgemuckelt werden, wo vielleicht Schnittstellen noch gar nicht implementiert sind, die heute implementiert, aber nicht freigeschaltet sind?

    Auch die objektorientierte Scriptsprache TrainzScript dürfte sich seit 2008 oder 2009 durchaus weiterentwickelt haben.


    Da ich das Konkurrenzprodukt gern mit dem XBOX-Controller vom Sessel aus am 52-Zöller fahre, wäre eine universelle Controller-Steuerung durchaus interessant.


    Gruß

    Norbert

  • Wie ich oben schon geschrieben ist mein Problem nicht das Geld für das Spiel sondern die neue Hardware. Desweitern, wenn ich Mika richtig verstanden habe, funktioniert die wirkliche offene Implementierung von Controllern immer noch nicht. Leider.

  • Moin,

    mal vorweg, ich bin kein Programmierer, aber Elektroniker!


    Für jedes hier genannte Problem gibt es auch entsprechende Bauteile:

    Da alles über den Tastenabruf gesteuert werden soll, werden auch Bauteile benötigt, die den Tastenanschlag simulieren, welcher über einen Controller Tiny, Atmeg, Pic oder Arduino über ein internes Programm auf eine USB-Ausgang zum PC gebracht werden...

    Ich kann mir vorstellen, daß das Originalpult auch nicht in einer bereits fahrenden Lok eingesetzt werden kann...

    Der Lokführer springt ja auch nicht auf einen fahrenden Zug auf, um seinen Dienst hier zu beginnen!

    Sprich: die Lok / der Zug steht, alles ist auf Null!


    Durch einen Art "Reset" würde die Lok eingeschaltet werden und sich alles auf Null stellen.

    Alles was in der Lok mittels Kippschalter zu schalten wäre, kann mit sogenannten nicht rastenden Kippschaltern bedient werden.

    Ebenso bei nichtrastenden Tastenschaltern.

    Die Ein/Aus-Position wird dann mittels LED angezeigt.

    Bremshebel, Hebel zur Fahrtrichtung und zur Beschleunigung werden über Drehimpulsgeber abgefragt, wobei jeder Impuls und die Drehrichtung der entsprechenden Taste zugeordnet werden...

    Das ganze in ein Programm gepackt, und fertig ist das Pult...


    Eigentlich sollte sich eine USB-Tastatur mit einem Arduino und der entsprechenden Hardware schon zu einem Fahrpult missbrauchen lassen!


    Jörg

    Einmal editiert, zuletzt von Joerg M ()

    • Offizieller Beitrag

    Da alles über den Tastenabruf gesteuert werden soll, werden auch Bauteile benötigt, die den Tastenanschlag simulieren...

    Naja, alle Tasten wird man ja einfach direkt über die IO Stellen am Arduino anschließen, oder? Ein Schalter ist ja nichts anderes als ein Stromkreis, der entweder zu oder auf ist, da sollten auch die Schalter auf den "großen Zügen" nicht anders sein. Stufenbasierte Fahrschalter und auf/ab Schalter müssten genauso anschließbar sein, denn die dürften auch nichts anderes tun als Stromkreise schließen, jeweils einen anderen abhängig von der gewählten Fahrstufe. Lediglich Stufenlose würden über Potentiometer laufen, keine Ahnung ob ein Arduino sowas auswerten kann oder nicht, aber es gibt sowieso Potentiometergerät die man mit dem PC verbinden kann. "Echte" Fahrschalter haben tatsächlich manchmal sogar selbst ein "Hirn" dass das Potentiometer verarbeitet und lediglich digitale Werte ausgibt, aber die sind natürlich abartig teuer da sie natürlich die hohen Anforderungen im Eisenbahnbetrieb erfüllen müssen.


    An der Stelle wär mal interessant, wass du MathiasR konkret an deinen PC anschließen willst :)




    Greets, Mika

  • Hallo Jörg, genau so meine ich das. Die Hardwareseite sehe ich auch als das kleinste Problem. Auch der Weg vom Pult in den PC sollte leicht sein (bzw. ist es). Habe sowas schon sehr oft in anderen Projekten umgesetzt. Nur der Weg in Trainz hinein gilt es elegant zu lösen.

  • Mika, beim dem was mir vorschwebt spielt es keine Rolle was vor dem PC steht. Es soll einfach ein Interface geben, so offen wie möglich, an das jeder anschliessen kann was er möchte. Quasi das Gehirn vom RailDriver ohne Plastebox mit freien Schnittstellen. Microcontroller (speziell der Arduino) kann vom Prinzip her mit entsprechendem code alles lesen egal ob analog oder digital. Die Eingangssignale fasst man in ein definiertes Protokoll zusammen und die PC-Software setzt es für Trainz um. Das Pult selbst baut man sich so wie man es braucht. Wenn das mal steht gebe ich auch gerne Tips für Nicht-Elektroniker wie man etwas anschliessen muss. Der Knackpunkt bleibt aber die Kommunikation mit Trainz. Notfalls eben über die Tasten-Option :)

    @CA Wow, das muss ich mir morgen mal in ruhe reinziehen. Hat der wirklich die RailDriver.dll geknackt? Das wäre echt cool.

  • Der "Umweg" über die Tasten ist aber wirklich nun nicht sehr... ähm, wie sag ich das jetzt, ähm, naja... Für sowas gibts ja eigentlich nicht umsonst Schnittstellen in vielen Programmen und auch anderen Simulatoren. Aber wenn N3V das so will, dann ist es eben so (wobei die ja mit dem TrainzNativeInterface sogar ja mal sowas angefangen hatten)

    Ich könnte mir auch vorstellen das so mancher Modellbahner (ich bin noch keiner) die züge und signale gern mit seinen controller steuern würde. Mal so am rande...:thinking_face:

  • Sehr interessanter Thread, gerade weil man in Koblenz einen E10 Simulator hat. Dieser nutzt gemäß meiner Informationen eigene Hardware welche direkte Befehle jeweils in beide Richtungen behandelt. @callavsg: Wäre dies nicht mit Trainz ebenfalls möglich?


    MathiasR:
    Kleiner Tipp: Hier können Beiträge nachträglich editiert werden, so hat man keine Doppelpost und der Übersicht sowie auch den Forenregeln wird genüge getan.

  • Ach alles gut - als neuer User habe ich mich z.b. früher über solches Feedback immer gefreut. Gebe dies nun gerne schlichtweg weiter.

    Viele Grüße


    @Mods: Sry für OT

    • Offizieller Beitrag

    Sehr interessanter Thread, gerade weil man in Koblenz einen E10 Simulator hat. Dieser nutzt gemäß meiner Informationen eigene Hardware welche direkte Befehle jeweils in beide Richtungen behandelt.

    Hmm, welches System nutzt ihr denn für die Kommunikation an eurer E10? Aktuell läuft die ja mit Zusi 3, wa?


    Ansonsten hab ich grad nochmal in TRS19 getestet, es gibt ein Raildriver Plugin was auf ein "TNI" verweist, aber keine weitere Dokumentation dazu und unwahrscheinlich, dass man da manuell DLLs hinzufügen kann zu. Auf einen normalen Controller reagiert das Spiel sonst nicht, es wurden aber neue Eingabemöglichkeiten eingefügt ("D-Pad Up/Down/Left/Right") und weiter Controllereinstellungen, welche auf eine Kuid gemappt sind, welche vermutlich eine weitere TNI Konfigurationsdatei werden wird. Diese ist aktuell nicht im Spiel vorhanden (vermutlich deshalb wird der Zuweisungsstring auch so komisch angezeigt) es besteht also eine gewisse Hoffnung, dass die Konfigurationsdatei in einem zukünftigen Update mal dazukommt. Da die Kuid bekannt ist sowie das Format einer solchen Konfigurationsdatei könnte man auch versuchen, die vom Raildriver umzufummeln und unter der Kuid einzufügen, vielleicht hat man ja Glück und trifft durch Zufall irgendwo ne Controller .DLL. Aber eher unwahrscheinlich :face_with_tongue:



    Greets, Mika