TSConductor
Einführung
TSConductor ist eine einfache TCP Schnittstelle für den Train Simulator von Dovetail Games.
Der TSConductor erlaubt es die Features der von Train Simulator mitgelieferten raildriver.dll mit jeder Hardware oder Software zu nutzen. Verbinde Train Simulator mit deinem Ardurino, Raspberry, PC, Smartphone, … oder baue deinen eigenen Führerstand daheim, zeige deine Position in Google Maps und vieles mehr.
- Einfach zu bedienende Benutzeroberfläche
- Einfache Einrichtung und Konfiguration
- Support für mehrere parallel laufende Anwendungen
Download
Aktuelle Version:
Archivierte Versionen:
- 1.2.1.0 (Setup / Archiv) - (19.10.2016)
- 1.2.0.0 (Setup / Archiv) - (06.10.2016)
- 1.1.0.0 (Setup / Archiv) - (09.09.2016)
- 1.0.0.0 (Setup / Archiv) - (22.05.2016)
Systemvoraussetzungen
- PC mit installiertem Train Simulator
- .NET Framework 3.5
Installation
Um den TSConductor zu installieren, führe einfach das Setup aus oder extrahiere das Archiv in einen beliebigen Ordner. Wenn du dich nicht dagegegen entscheidest wird das Setup alle Verknüpfungen selber erstellen. Wenn du den TSConductor mittels Archiv installierst, achte bitte darauf die TSConductorUI.exe vor der TSConductor.exe zu starten.
Update
Um den TSConductor zu akualisieren, lasse das Setup einfach die alten Dateien überschreiben. Wenn du den TSConductor mit einem Archiv aktualisierst, überschreibe ebenfalls einfach die Dateien.
Support
Hast du einen Fehler gefunden, hast du Ideen oder willst du mich einfach kontaktieren? Dann nutze eine dieser Möglichkeiten:
- Rail-Sim.de Forum
- Railsimulator.net Forum
- UKTrainSim Board
- Bugtracker: Webseite und UI / Server
Software
Programme die den TSConductor verwenden findest du hier:
- TSFireman - Joystick2TCP Programm: Setzt die Bewegungen von maximal sechs Joystickachsen (z.Bsp. am Arcaze-USB Interface angeschlossene Potentiometer) in TCP-Befehle um, welche über den TSConductor an den Train Simulator gesendet werden.
- Modulares Führerraumdisplay (MFD)
- TSInspector - Ein Werkzeug um mit der Rail Simulator External Interface API zu experimentieren.
Wenn du eine Anwendung erstellt hast die den TSConductor benutzt und diese auch veröffentlicht hast, kontaktiere micht bitte damit ich diese hier verlinken und anschauen kann.
Benutzeroberfläche
Die Benutzeroberfläche des TSConductor (TSConductorUI.exe) erlaubt es dir den Server zu konfigurieren, zu starten und zu stoppen. Es gibt keine Notwendigkeit mit config Dateien oder Konsolenfenstern zu arbeiten.
Oberfläche

Die Oberfläche ist übersichtlich und schnell erklärt:
- Start Button: Startet den TSConductor Server.
- Stop Button: Stoppt den TSConductor Server.
- Server Status: Zeigt an ob der TSConductor Server gerade läuft.
- Über Button: Öffnet den Browser mit dieser Webseite.
- Zurücksetzen Button: Setzt alle Einstellungen des TSConductor zurück.
- Beenden Button: Beendet die Anwendung und auch den Server, falls er läuft.
- Einstellungen Button: Sperrt und Entsperrt die Einstellungen. Siehe hier für mehr Informationen.
Einstellungen

Normalerweise muss keine Option manuell eingestellt werden denn der TSConductor ermittelt alles was er braucht automatisch. Editiere die Einstellungen also nur wenn du wirklich musst.
- Einstellungen Button: Sperrt und Entsperrt die Einstellungen. Du kannst die Einstellungen nicht editieren solange du diese nicht entsperrt hast und die kannst den Server nicht starten solange du die Einstellungen nicht gesperrt hast. Nur das sperren der Einstellungen aktualisiert die settings Datei die der Server braucht. Du kannst hier mehr über die settings.ini Konfigurationsdatei lesen.
- Log Checkbox: Wenn aktiviert wird der Server seine Aktivität in eine Datei schreiben. Dies hat großen Einfluss auf die Perfomance des Servers. Aktiviere das Logging also nur wenn du deine Anwendung oder Lok debuggst. Die Logdateien können im Installationsverzeichnis gefunden werden.
- IP: Hier kann die IP Adresse beziehungsweise der Netzwerkadapter geändert werden.
- Port: Hier kannst du deinen gewünschten TCP Port einstellen. Standard Port ist 47811, der erlaubte Bereich liegt zwischen 1024 und 65535.
- Dll Pfad: Der Pfad zur raildriver.dll welche sich in deinem Train Simulator Plugin Verzeichnis befindet.
Server
Der TCP Server selbst ist ein asynchroner Server programmiert in C#. Er unterstützt mehrere Verbindungen auf einmal und kann auch mehrmals parallel laufen, auch wenn letzteres nicht empfohlen wird. Der Server stellt einfache Funktionen bereit welche im Prinzip die Daten zwischen dem Train Simulator und deiner Anwendung nur durchreichen, aber auch erweiterte Funktionen die das Programmieren einfacher machen sollen. Außerdem kann der Server mittels Polling Daten automatisch an deine Anwendung pushen.
Einstellungen
Die Servereinstellungen können in der settings.ini Datei gefunden werden. Es wird nicht empfohlen diese Datei manuell zu editieren. Du findest die Datei im %localappdata%\TSConductor Pfad.
Settings.ini Beispiel:
[TSConductor]
Port=47811
Path=C:\Program Files\Steam\steamapps\common\railworks\plugins\RailDriver.dll
Log=0
Base=C:\Program Files\TSConductor\
IP=127.0.0.1
- Port: Der TCP Port des Server. Standard Port ist 47811.
- Path: Der Pfad zur raildriver.dll welche sich in deinem Train Simulator Plugin Verzeichnis befindet.
- Log: Zeigt an ob das Logging aktiviert ist. 0 = Deaktiviert, 1 = Aktiviert
- Base: Pfad der TSConductor Installation
- IP: IP Adresse die der Server zur Kommunikation nutzt. Optional. Wenn nicht angegeben wird automatisch eine IP ermittelt.
Beim Start des Servers wird der Pfad zur settings.ini via Parameter übergeben.
Parameter
Du kannst und solltest den Pfad zur settings.ini als Parameter übergeben, wenn du den Server manuell startest. Wird kein Parameter übergeben verwendet der Server die Standardwerte.
ts.conductor.exe "C:\Pfad\zu\Einstellungen"
Meldungen
Wenn du eine Funktion aufrufst kommt es eventuell zu Fehlern. Das ist eine Liste von Info- and Fehlermeldungen:
Infomeldungen
Infomeldungen
1;Loco changed, stopping Polling;<MSG>
2;Polling stop request, stopping Polling;<MSG>
Infomeldungen werden immer mit dem “<MSG>” Tag beendet. Das Format ist Meldungsnummer;Meldungsinfo;<MSG>.
- Im Train Simulator wurde die Lok gewechselt. Das automatische Polling wurde gestoppt.
- Das Polling wird gestoppt.
Fehlermeldungen
Fehlermeldungen
1;Unknown function;<ERR>
2;No parameter brackets;<ERR>
3;Wrong count of parameters;<ERR>
4;Invalid Clientname;<ERR>
Fehlermeldungen werden immer mit dem “<ERR>” Tag beendet. Das Format ist Fehlernummer;Fehlerinfo;<ERR>.
- Unbekannte Funktion
- Keine Klammern “()” nach Funktionsnamen.
- Falsche Anzahl an Parametern.
- Clientname ist nicht Alphanumerisch.
Funktionen
Wenn du Daten und Befehle an den Server schickst, beende diese immer mit dem “<END>” Tag. Zum Beispiel, “GetLocoName()<END>”.
Funktionsliste:
GetLocoName
Call
GetLocoName()
Beispiel Antwort
RSC.:.MunichAugsburg.:.MA DB Baureihe 101 Engine
Gibt den aktuellen Provider, Product und die aktuelle Engine zurück.
Format ist “PROVIDER.:.PRODUCT.:.ENGINENAME”.
GetControllerList
Call
GetControllerList()
Beispiel Antwort
TractiveEffort::RawSpeedTarget::RawTargetDistance::TargetDistanceBar::TargetDistanceDigits100::TargetDistanceDigits1000::VSoll::TargetSpeed100::TargetSpeed10::TargetSpeed1::Current::CompressorState::MainReservoirPressureBAR::BrakePipePressureBAR::LocoBrakeCylinderPressureBAR::LocoBrakeCylinderPressureBAR::Ammeter::CabAmmeter::SpeedometerKPH::Accelerometer::VirtualThrottle::Regulator::AFB::Reverser::SimpleChangeDirection::SimpleThrottle::VirtualBrake::TrainBrakeControl::PantographControl::FrontPantographControl::RearPantographControl::Horn::Startup::Sander::HandBrake::Headlights::VirtualDynamicBrake::DynamicBrake::Wipers::EmergencyBrake::DoorsOpenClose::EngineBrakeControl::AWSReset::Cmd_Free::Cmd_40::VigilEnable::VigilReset::VigilLight::VigilAlarm::LZBActive::LZBEnding::LZBEnable::LZB_G::LZB_End::PZB_85::PZB_70::PZB_55::PZB_1000::PZB_500::PZB_40::ServiceBrake::PZBEnable::PZB_1000hz_Control::PZB_500hz_Control::PZB_2000hz_Control::PZB_Distant_Passed::Dummy::cablight::LZB_Buzzer
Gibt eine Liste aller Controller der aktuellen Lok zurück, separiert mit “::”. Der erste Controller ist “controller 0”, der zweite ist “controller 1” usw.
GetControllerValue
GetControllerValue(int controllerId, int getType)
Beispiel Call
/* Speedometer */
GetControllerValue(18;0)
/* ################## */
GetControllerValue(18;1)
/* ################## */
GetControllerValue(18;2)
Beispiel Antwort
/* Speedometer */
47,30878
/* ################## */
0
/* ################## */
250
Diese Funktion gibt den aktuellen, minumum oder maximal Wert eines Controller zurück. getType spezifizert welcher Wert zurückgegeben wird.
- 0: Aktueller Wert
- 1: Minumum Wert
- 2: Maximum Wert
SetControllerValue
SetControllerValue(int controllerId, float value)
Beispiel Call
/* Throttle */
SetControllerValue(20;0,5)
Setzt den aktuellen Wert des Controllers auf den angegeben Wert.
GetControllerValueWithControllerID
GetControllerValueWithControllerID(int controllerId, int getType)
Beispiel Call
/* Speedometer */
GetControllerValueWithControllerID(18;0)
/* ################## */
GetControllerValueWithControllerID(18;1)
/* ################## */
GetControllerValueWithControllerID(18;2)
Beispiel Antwort
18::28,27284
/* ################## */
18::0
/* ################## */
18::250
Diese Funktion gibt den aktuellen, minumum oder maximal Wert eines Controller zurück und die ControllerID. getType spezifizert welcher Wert zurückgegeben wird.
- 0: Aktueller Wert
- 1: Minumum Wert
- 2: Maximum Wert
GetControllerValueExtended
GetControllerValueExtended(int controllerId)
Beispiel Call
/* Speedometer */
GetControllerValueExtended(18)
Beispiel Antwort
28,29384::0::250
Diese Funktion gibt den aktuellen, minimum and maximum Wert eines Controller zurück.
GetControllerValueExtendedWithControllerID
GetControllerValueExtendedWithControllerID(int controllerId)
Beispiel Call
/* Speedometer */
GetControllerValueExtendedWithControllerID(18)
Beispiel Antwort
18::26,80761::0::250
Diese Funktion gibt den aktuellen, minimum und maximum Wert eines Controller zurück und die ControllerID.
GetControllerListExtended
GetControllerListExtended(string format)
Beispiel Call
/* XML */
GetControllerListExtended(XML)
/* JSON */
GetControllerListExtended(JSON)
/* FLAT */
GetControllerListExtended(FLAT)
/* RAW */
GetControllerListExtended(RAW)
Beispiel Antwort
<?xml version="1.0" encoding="UTF-8"?>
<List>
<Controller>
<ID>0</ID>
<Name>TractiveEffort</Name>
<Min>-1000</Min>
<Max>10000</Max>
</Controller>
<Controller>
<ID>1</ID>
<Name>RawSpeedTarget</Name>
<Min>0</Min>
<Max>300</Max>
</Controller>
<Controller>
<ID>2</ID>
<Name>RawTargetDistance</Name>
<Min>0</Min>
<Max>9999</Max>
</Controller>
<Controller>
<ID>3</ID>
<Name>TargetDistanceBar</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>4</ID>
<Name>TargetDistanceDigits100</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>5</ID>
<Name>TargetDistanceDigits1000</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>6</ID>
<Name>VSoll</Name>
<Min>0</Min>
<Max>250</Max>
</Controller>
<Controller>
<ID>7</ID>
<Name>TargetSpeed100</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>8</ID>
<Name>TargetSpeed10</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>9</ID>
<Name>TargetSpeed1</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>10</ID>
<Name>Current</Name>
<Min>0</Min>
<Max>100000</Max>
</Controller>
<Controller>
<ID>11</ID>
<Name>CompressorState</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>12</ID>
<Name>MainReservoirPressureBAR</Name>
<Min>0</Min>
<Max>12</Max>
</Controller>
<Controller>
<ID>13</ID>
<Name>BrakePipePressureBAR</Name>
<Min>0</Min>
<Max>12</Max>
</Controller>
<Controller>
<ID>14</ID>
<Name>LocoBrakeCylinderPressureBAR</Name>
<Min>0</Min>
<Max>10</Max>
</Controller>
<Controller>
<ID>15</ID>
<Name>LocoBrakeCylinderPressureBAR</Name>
<Min>0</Min>
<Max>10</Max>
</Controller>
<Controller>
<ID>16</ID>
<Name>Ammeter</Name>
<Min>-600</Min>
<Max>600</Max>
</Controller>
<Controller>
<ID>17</ID>
<Name>CabAmmeter</Name>
<Min>0</Min>
<Max>600</Max>
</Controller>
<Controller>
<ID>18</ID>
<Name>SpeedometerKPH</Name>
<Min>0</Min>
<Max>250</Max>
</Controller>
<Controller>
<ID>19</ID>
<Name>Accelerometer</Name>
<Min>-320</Min>
<Max>320</Max>
</Controller>
<Controller>
<ID>20</ID>
<Name>VirtualThrottle</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>21</ID>
<Name>Regulator</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>22</ID>
<Name>AFB</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>23</ID>
<Name>Reverser</Name>
<Min>-1</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>24</ID>
<Name>SimpleChangeDirection</Name>
<Min>-1</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>25</ID>
<Name>SimpleThrottle</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>26</ID>
<Name>VirtualBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>27</ID>
<Name>TrainBrakeControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>28</ID>
<Name>PantographControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>29</ID>
<Name>FrontPantographControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>30</ID>
<Name>RearPantographControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>31</ID>
<Name>Horn</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>32</ID>
<Name>Startup</Name>
<Min>-1</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>33</ID>
<Name>Sander</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>34</ID>
<Name>HandBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>35</ID>
<Name>Headlights</Name>
<Min>0</Min>
<Max>2</Max>
</Controller>
<Controller>
<ID>36</ID>
<Name>VirtualDynamicBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>37</ID>
<Name>DynamicBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>38</ID>
<Name>Wipers</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>39</ID>
<Name>EmergencyBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>40</ID>
<Name>DoorsOpenClose</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>41</ID>
<Name>EngineBrakeControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>42</ID>
<Name>AWSReset</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>43</ID>
<Name>Cmd_Free</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>44</ID>
<Name>Cmd_40</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>45</ID>
<Name>VigilEnable</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>46</ID>
<Name>VigilReset</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>47</ID>
<Name>VigilLight</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>48</ID>
<Name>VigilAlarm</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>49</ID>
<Name>LZBActive</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>50</ID>
<Name>LZBEnding</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>51</ID>
<Name>LZBEnable</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>52</ID>
<Name>LZB_G</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>53</ID>
<Name>LZB_End</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>54</ID>
<Name>PZB_85</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>55</ID>
<Name>PZB_70</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>56</ID>
<Name>PZB_55</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>57</ID>
<Name>PZB_1000</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>58</ID>
<Name>PZB_500</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>59</ID>
<Name>PZB_40</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>60</ID>
<Name>ServiceBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>61</ID>
<Name>PZBEnable</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>62</ID>
<Name>PZB_1000hz_Control</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>63</ID>
<Name>PZB_500hz_Control</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>64</ID>
<Name>PZB_2000hz_Control</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>65</ID>
<Name>PZB_Distant_Passed</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>66</ID>
<Name>Dummy</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>67</ID>
<Name>cablight</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>68</ID>
<Name>LZB_Buzzer</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
</List>
{
"controller":[
{
"ID":"0",
"Name":"TractiveEffort",
"Min":"-1000",
"Max":"10000"
},
{
"ID":"1",
"Name":"RawSpeedTarget",
"Min":"0",
"Max":"300"
},
{
"ID":"2",
"Name":"RawTargetDistance",
"Min":"0",
"Max":"9999"
},
{
"ID":"3",
"Name":"TargetDistanceBar",
"Min":"0",
"Max":"1"
},
{
"ID":"4",
"Name":"TargetDistanceDigits100",
"Min":"-1",
"Max":"9"
},
{
"ID":"5",
"Name":"TargetDistanceDigits1000",
"Min":"-1",
"Max":"9"
},
{
"ID":"6",
"Name":"VSoll",
"Min":"0",
"Max":"250"
},
{
"ID":"7",
"Name":"TargetSpeed100",
"Min":"-1",
"Max":"9"
},
{
"ID":"8",
"Name":"TargetSpeed10",
"Min":"-1",
"Max":"9"
},
{
"ID":"9",
"Name":"TargetSpeed1",
"Min":"-1",
"Max":"9"
},
{
"ID":"10",
"Name":"Current",
"Min":"0",
"Max":"100000"
},
{
"ID":"11",
"Name":"CompressorState",
"Min":"0",
"Max":"1"
},
{
"ID":"12",
"Name":"MainReservoirPressureBAR",
"Min":"0",
"Max":"12"
},
{
"ID":"13",
"Name":"BrakePipePressureBAR",
"Min":"0",
"Max":"12"
},
{
"ID":"14",
"Name":"LocoBrakeCylinderPressureBAR",
"Min":"0",
"Max":"10"
},
{
"ID":"15",
"Name":"LocoBrakeCylinderPressureBAR",
"Min":"0",
"Max":"10"
},
{
"ID":"16",
"Name":"Ammeter",
"Min":"-600",
"Max":"600"
},
{
"ID":"17",
"Name":"CabAmmeter",
"Min":"0",
"Max":"600"
},
{
"ID":"18",
"Name":"SpeedometerKPH",
"Min":"0",
"Max":"250"
},
{
"ID":"19",
"Name":"Accelerometer",
"Min":"-320",
"Max":"320"
},
{
"ID":"20",
"Name":"VirtualThrottle",
"Min":"0",
"Max":"1"
},
{
"ID":"21",
"Name":"Regulator",
"Min":"0",
"Max":"1"
},
{
"ID":"22",
"Name":"AFB",
"Min":"0",
"Max":"1"
},
{
"ID":"23",
"Name":"Reverser",
"Min":"-1",
"Max":"1"
},
{
"ID":"24",
"Name":"SimpleChangeDirection",
"Min":"-1",
"Max":"1"
},
{
"ID":"25",
"Name":"SimpleThrottle",
"Min":"0",
"Max":"1"
},
{
"ID":"26",
"Name":"VirtualBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"27",
"Name":"TrainBrakeControl",
"Min":"0",
"Max":"1"
},
{
"ID":"28",
"Name":"PantographControl",
"Min":"0",
"Max":"1"
},
{
"ID":"29",
"Name":"FrontPantographControl",
"Min":"0",
"Max":"1"
},
{
"ID":"30",
"Name":"RearPantographControl",
"Min":"0",
"Max":"1"
},
{
"ID":"31",
"Name":"Horn",
"Min":"0",
"Max":"1"
},
{
"ID":"32",
"Name":"Startup",
"Min":"-1",
"Max":"1"
},
{
"ID":"33",
"Name":"Sander",
"Min":"0",
"Max":"1"
},
{
"ID":"34",
"Name":"HandBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"35",
"Name":"Headlights",
"Min":"0",
"Max":"2"
},
{
"ID":"36",
"Name":"VirtualDynamicBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"37",
"Name":"DynamicBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"38",
"Name":"Wipers",
"Min":"0",
"Max":"1"
},
{
"ID":"39",
"Name":"EmergencyBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"40",
"Name":"DoorsOpenClose",
"Min":"0",
"Max":"1"
},
{
"ID":"41",
"Name":"EngineBrakeControl",
"Min":"0",
"Max":"1"
},
{
"ID":"42",
"Name":"AWSReset",
"Min":"0",
"Max":"1"
},
{
"ID":"43",
"Name":"Cmd_Free",
"Min":"0",
"Max":"1"
},
{
"ID":"44",
"Name":"Cmd_40",
"Min":"0",
"Max":"1"
},
{
"ID":"45",
"Name":"VigilEnable",
"Min":"0",
"Max":"1"
},
{
"ID":"46",
"Name":"VigilReset",
"Min":"0",
"Max":"1"
},
{
"ID":"47",
"Name":"VigilLight",
"Min":"0",
"Max":"1"
},
{
"ID":"48",
"Name":"VigilAlarm",
"Min":"0",
"Max":"1"
},
{
"ID":"49",
"Name":"LZBActive",
"Min":"0",
"Max":"1"
},
{
"ID":"50",
"Name":"LZBEnding",
"Min":"0",
"Max":"1"
},
{
"ID":"51",
"Name":"LZBEnable",
"Min":"0",
"Max":"1"
},
{
"ID":"52",
"Name":"LZB_G",
"Min":"0",
"Max":"1"
},
{
"ID":"53",
"Name":"LZB_End",
"Min":"0",
"Max":"1"
},
{
"ID":"54",
"Name":"PZB_85",
"Min":"0",
"Max":"1"
},
{
"ID":"55",
"Name":"PZB_70",
"Min":"0",
"Max":"1"
},
{
"ID":"56",
"Name":"PZB_55",
"Min":"0",
"Max":"1"
},
{
"ID":"57",
"Name":"PZB_1000",
"Min":"0",
"Max":"1"
},
{
"ID":"58",
"Name":"PZB_500",
"Min":"0",
"Max":"1"
},
{
"ID":"59",
"Name":"PZB_40",
"Min":"0",
"Max":"1"
},
{
"ID":"60",
"Name":"ServiceBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"61",
"Name":"PZBEnable",
"Min":"0",
"Max":"1"
},
{
"ID":"62",
"Name":"PZB_1000hz_Control",
"Min":"0",
"Max":"1"
},
{
"ID":"63",
"Name":"PZB_500hz_Control",
"Min":"0",
"Max":"1"
},
{
"ID":"64",
"Name":"PZB_2000hz_Control",
"Min":"0",
"Max":"1"
},
{
"ID":"65",
"Name":"PZB_Distant_Passed",
"Min":"0",
"Max":"1"
},
{
"ID":"66",
"Name":"Dummy",
"Min":"0",
"Max":"1"
},
{
"ID":"67",
"Name":"cablight",
"Min":"0",
"Max":"1"
},
{
"ID":"68",
"Name":"LZB_Buzzer",
"Min":"0",
"Max":"1"
}
]
}
0;TractiveEffort;-1000;10000;1;RawSpeedTarget;0;300;2;RawTargetDistance;0;9999;3;TargetDistanceBar;0;1;4;TargetDistanceDigits100;-1;9;5;TargetDistanceDigits1000;-1;9;6;VSoll;0;250;7;TargetSpeed100;-1;9;8;TargetSpeed10;-1;9;9;TargetSpeed1;-1;9;10;Current;0;100000;11;CompressorState;0;1;12;MainReservoirPressureBAR;0;12;13;BrakePipePressureBAR;0;12;14;LocoBrakeCylinderPressureBAR;0;10;15;LocoBrakeCylinderPressureBAR;0;10;16;Ammeter;-600;600;17;CabAmmeter;0;600;18;SpeedometerKPH;0;250;19;Accelerometer;-320;320;20;VirtualThrottle;0;1;21;Regulator;0;1;22;AFB;0;1;23;Reverser;-1;1;24;SimpleChangeDirection;-1;1;25;SimpleThrottle;0;1;26;VirtualBrake;0;1;27;TrainBrakeControl;0;1;28;PantographControl;0;1;29;FrontPantographControl;0;1;30;RearPantographControl;0;1;31;Horn;0;1;32;Startup;-1;1;33;Sander;0;1;34;HandBrake;0;1;35;Headlights;0;2;36;VirtualDynamicBrake;0;1;37;DynamicBrake;0;1;38;Wipers;0;1;39;EmergencyBrake;0;1;40;DoorsOpenClose;0;1;41;EngineBrakeControl;0;1;42;AWSReset;0;1;43;Cmd_Free;0;1;44;Cmd_40;0;1;45;VigilEnable;0;1;46;VigilReset;0;1;47;VigilLight;0;1;48;VigilAlarm;0;1;49;LZBActive;0;1;50;LZBEnding;0;1;51;LZBEnable;0;1;52;LZB_G;0;1;53;LZB_End;0;1;54;PZB_85;0;1;55;PZB_70;0;1;56;PZB_55;0;1;57;PZB_1000;0;1;58;PZB_500;0;1;59;PZB_40;0;1;60;ServiceBrake;0;1;61;PZBEnable;0;1;62;PZB_1000hz_Control;0;1;63;PZB_500hz_Control;0;1;64;PZB_2000hz_Control;0;1;65;PZB_Distant_Passed;0;1;66;Dummy;0;1;67;cablight;0;1;68;LZB_Buzzer;0;1;
0::TractiveEffort::-1000::10000::1::RawSpeedTarget::0::300::2::RawTargetDistance::0::9999::3::TargetDistanceBar::0::1::4::TargetDistanceDigits100::-1::9::5::TargetDistanceDigits1000::-1::9::6::VSoll::0::250::7::TargetSpeed100::-1::9::8::TargetSpeed10::-1::9::9::TargetSpeed1::-1::9::10::Current::0::100000::11::CompressorState::0::1::12::MainReservoirPressureBAR::0::12::13::BrakePipePressureBAR::0::12::14::LocoBrakeCylinderPressureBAR::0::10::15::LocoBrakeCylinderPressureBAR::0::10::16::Ammeter::-600::600::17::CabAmmeter::0::600::18::SpeedometerKPH::0::250::19::Accelerometer::-320::320::20::VirtualThrottle::0::1::21::Regulator::0::1::22::AFB::0::1::23::Reverser::-1::1::24::SimpleChangeDirection::-1::1::25::SimpleThrottle::0::1::26::VirtualBrake::0::1::27::TrainBrakeControl::0::1::28::PantographControl::0::1::29::FrontPantographControl::0::1::30::RearPantographControl::0::1::31::Horn::0::1::32::Startup::-1::1::33::Sander::0::1::34::HandBrake::0::1::35::Headlights::0::2::36::VirtualDynamicBrake::0::1::37::DynamicBrake::0::1::38::Wipers::0::1::39::EmergencyBrake::0::1::40::DoorsOpenClose::0::1::41::EngineBrakeControl::0::1::42::AWSReset::0::1::43::Cmd_Free::0::1::44::Cmd_40::0::1::45::VigilEnable::0::1::46::VigilReset::0::1::47::VigilLight::0::1::48::VigilAlarm::0::1::49::LZBActive::0::1::50::LZBEnding::0::1::51::LZBEnable::0::1::52::LZB_G::0::1::53::LZB_End::0::1::54::PZB_85::0::1::55::PZB_70::0::1::56::PZB_55::0::1::57::PZB_1000::0::1::58::PZB_500::0::1::59::PZB_40::0::1::60::ServiceBrake::0::1::61::PZBEnable::0::1::62::PZB_1000hz_Control::0::1::63::PZB_500hz_Control::0::1::64::PZB_2000hz_Control::0::1::65::PZB_Distant_Passed::0::1::66::Dummy::0::1::67::cablight::0::1::68::LZB_Buzzer::0::1::
Diese Funktion gibt die id, den Name, den minimum und den maximum Wert aller Controller zurück. Mögliche Formate: XML, JSON, FLAT, RAW
SendKeys
Beispiel Call
SendKeys(w) /* W */
SendKeys({DEL}) /* ENTF Taste */
SendKeys(^+b) /* STRG + Shift + B */
Diese Funktion sendet Tastendrücke an den Train Simulator. Der Train Simulator muss das aktuelle aktive Fenster sein.
Für genauere Details bitte die Microsoft Dokumentation lesen: MSDN: SendKeys.Send (Englisch)
SetClientName
SetClientName(string name)
Beispiel Call
SetClientName(MyApp)
Diese Funktion setzt den Namen des Clients. Der Name muss alphanumerisch sein, darf aber Leerzeichen enthalten.
GetClientName
Beispiel Call
GetClientName()
Beispiel Antwort
MyApp
Diese Funktion ruft den aktuellen Namen des Clients ab.
GetClientID
Beispiel Call
GetClientID()
Beispiel Antwort
AF2E45CD
Diese Funktion ruft die interne ID des Clients ab.
EnableMessageLengthHeader
Beispiel Call
EnableMessageLengthHeader()
Beispiel
#12345;<?xml version="1.0" [...]
Aktiviert einen Header der die Länge der Antwort in Bytes voranstellt.
Die Zeichenfolge #12345; zeigt an das die Antwort (ohne Header) 12345 Bytes lang ist.
DisableMessageLengthHeader
Beispiel Call
DisableMessageLengthHeader()
Deaktiviert den Header für die Länge der Antwort.
Virtuelle Controller
Zusätzlich zu den Controllern der jeweiligen Lok gibt es folgende Controller:
| Controller ID | Zweck |
|---|---|
| 400 | Aktueller Breitengrad des Zuges |
| 401 | Aktueller Längengrad des Zuges |
| 402 | Treibstoff |
| 403 | Ist im Tunnel |
| 404 | Steigung |
| 405 | Heading |
| 406 | Aktuelle Stunde (Uhrzeit) |
| 407 | Aktuelle Minute (Uhrzeit) |
| 408 | Aktuelle Sekunde (Uhrzeit) |
Diese Controller sind immer verfügbar.
Polling
Der TSConductor ist in der Lage Clients ständig mit neuen Informationen zu versorgen. Dabei werden alle Controller mit veränderten Werten seit dem letzten Update an den Client gesendet. Dazu muss einfach der StartPolling Befehl, das gewünschte Aktualisierungsintervall und das gewünschte Format an den Server gesendet werden. Es wird trotzdem empfohlen Controller wie SiFa, PZB, LZB oder AWS selbstständig abzufragen.
StartPolling
StartPolling(int interval; string format)
Beispiel Call
/* XML */
StartPolling(5000;XML)
/* JSON */
StartPolling(5000;JSON)
/* FLAT */
StartPolling(5000;FLAT)
/* RAW */
StartPolling(5000;RAW)
Erste Antwort
<?xml version="1.0" encoding="UTF-8"?>
<List>
<Controller>
<ID>0</ID>
<Name>TractiveEffort</Name>
<Min>-1000</Min>
<Max>10000</Max>
</Controller>
<Controller>
<ID>1</ID>
<Name>RawSpeedTarget</Name>
<Min>0</Min>
<Max>300</Max>
</Controller>
<Controller>
<ID>2</ID>
<Name>RawTargetDistance</Name>
<Min>0</Min>
<Max>9999</Max>
</Controller>
<Controller>
<ID>3</ID>
<Name>TargetDistanceBar</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>4</ID>
<Name>TargetDistanceDigits100</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>5</ID>
<Name>TargetDistanceDigits1000</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>6</ID>
<Name>VSoll</Name>
<Min>0</Min>
<Max>250</Max>
</Controller>
<Controller>
<ID>7</ID>
<Name>TargetSpeed100</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>8</ID>
<Name>TargetSpeed10</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>9</ID>
<Name>TargetSpeed1</Name>
<Min>-1</Min>
<Max>9</Max>
</Controller>
<Controller>
<ID>10</ID>
<Name>Current</Name>
<Min>0</Min>
<Max>100000</Max>
</Controller>
<Controller>
<ID>11</ID>
<Name>CompressorState</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>12</ID>
<Name>MainReservoirPressureBAR</Name>
<Min>0</Min>
<Max>12</Max>
</Controller>
<Controller>
<ID>13</ID>
<Name>BrakePipePressureBAR</Name>
<Min>0</Min>
<Max>12</Max>
</Controller>
<Controller>
<ID>14</ID>
<Name>LocoBrakeCylinderPressureBAR</Name>
<Min>0</Min>
<Max>10</Max>
</Controller>
<Controller>
<ID>15</ID>
<Name>LocoBrakeCylinderPressureBAR</Name>
<Min>0</Min>
<Max>10</Max>
</Controller>
<Controller>
<ID>16</ID>
<Name>Ammeter</Name>
<Min>-600</Min>
<Max>600</Max>
</Controller>
<Controller>
<ID>17</ID>
<Name>CabAmmeter</Name>
<Min>0</Min>
<Max>600</Max>
</Controller>
<Controller>
<ID>18</ID>
<Name>SpeedometerKPH</Name>
<Min>0</Min>
<Max>250</Max>
</Controller>
<Controller>
<ID>19</ID>
<Name>Accelerometer</Name>
<Min>-320</Min>
<Max>320</Max>
</Controller>
<Controller>
<ID>20</ID>
<Name>VirtualThrottle</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>21</ID>
<Name>Regulator</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>22</ID>
<Name>AFB</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>23</ID>
<Name>Reverser</Name>
<Min>-1</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>24</ID>
<Name>SimpleChangeDirection</Name>
<Min>-1</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>25</ID>
<Name>SimpleThrottle</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>26</ID>
<Name>VirtualBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>27</ID>
<Name>TrainBrakeControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>28</ID>
<Name>PantographControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>29</ID>
<Name>FrontPantographControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>30</ID>
<Name>RearPantographControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>31</ID>
<Name>Horn</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>32</ID>
<Name>Startup</Name>
<Min>-1</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>33</ID>
<Name>Sander</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>34</ID>
<Name>HandBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>35</ID>
<Name>Headlights</Name>
<Min>0</Min>
<Max>2</Max>
</Controller>
<Controller>
<ID>36</ID>
<Name>VirtualDynamicBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>37</ID>
<Name>DynamicBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>38</ID>
<Name>Wipers</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>39</ID>
<Name>EmergencyBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>40</ID>
<Name>DoorsOpenClose</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>41</ID>
<Name>EngineBrakeControl</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>42</ID>
<Name>AWSReset</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>43</ID>
<Name>Cmd_Free</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>44</ID>
<Name>Cmd_40</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>45</ID>
<Name>VigilEnable</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>46</ID>
<Name>VigilReset</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>47</ID>
<Name>VigilLight</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>48</ID>
<Name>VigilAlarm</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>49</ID>
<Name>LZBActive</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>50</ID>
<Name>LZBEnding</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>51</ID>
<Name>LZBEnable</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>52</ID>
<Name>LZB_G</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>53</ID>
<Name>LZB_End</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>54</ID>
<Name>PZB_85</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>55</ID>
<Name>PZB_70</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>56</ID>
<Name>PZB_55</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>57</ID>
<Name>PZB_1000</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>58</ID>
<Name>PZB_500</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>59</ID>
<Name>PZB_40</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>60</ID>
<Name>ServiceBrake</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>61</ID>
<Name>PZBEnable</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>62</ID>
<Name>PZB_1000hz_Control</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>63</ID>
<Name>PZB_500hz_Control</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>64</ID>
<Name>PZB_2000hz_Control</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>65</ID>
<Name>PZB_Distant_Passed</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>66</ID>
<Name>Dummy</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>67</ID>
<Name>cablight</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
<Controller>
<ID>68</ID>
<Name>LZB_Buzzer</Name>
<Min>0</Min>
<Max>1</Max>
</Controller>
</List>
{
"controller":[
{
"ID":"0",
"Name":"TractiveEffort",
"Min":"-1000",
"Max":"10000"
},
{
"ID":"1",
"Name":"RawSpeedTarget",
"Min":"0",
"Max":"300"
},
{
"ID":"2",
"Name":"RawTargetDistance",
"Min":"0",
"Max":"9999"
},
{
"ID":"3",
"Name":"TargetDistanceBar",
"Min":"0",
"Max":"1"
},
{
"ID":"4",
"Name":"TargetDistanceDigits100",
"Min":"-1",
"Max":"9"
},
{
"ID":"5",
"Name":"TargetDistanceDigits1000",
"Min":"-1",
"Max":"9"
},
{
"ID":"6",
"Name":"VSoll",
"Min":"0",
"Max":"250"
},
{
"ID":"7",
"Name":"TargetSpeed100",
"Min":"-1",
"Max":"9"
},
{
"ID":"8",
"Name":"TargetSpeed10",
"Min":"-1",
"Max":"9"
},
{
"ID":"9",
"Name":"TargetSpeed1",
"Min":"-1",
"Max":"9"
},
{
"ID":"10",
"Name":"Current",
"Min":"0",
"Max":"100000"
},
{
"ID":"11",
"Name":"CompressorState",
"Min":"0",
"Max":"1"
},
{
"ID":"12",
"Name":"MainReservoirPressureBAR",
"Min":"0",
"Max":"12"
},
{
"ID":"13",
"Name":"BrakePipePressureBAR",
"Min":"0",
"Max":"12"
},
{
"ID":"14",
"Name":"LocoBrakeCylinderPressureBAR",
"Min":"0",
"Max":"10"
},
{
"ID":"15",
"Name":"LocoBrakeCylinderPressureBAR",
"Min":"0",
"Max":"10"
},
{
"ID":"16",
"Name":"Ammeter",
"Min":"-600",
"Max":"600"
},
{
"ID":"17",
"Name":"CabAmmeter",
"Min":"0",
"Max":"600"
},
{
"ID":"18",
"Name":"SpeedometerKPH",
"Min":"0",
"Max":"250"
},
{
"ID":"19",
"Name":"Accelerometer",
"Min":"-320",
"Max":"320"
},
{
"ID":"20",
"Name":"VirtualThrottle",
"Min":"0",
"Max":"1"
},
{
"ID":"21",
"Name":"Regulator",
"Min":"0",
"Max":"1"
},
{
"ID":"22",
"Name":"AFB",
"Min":"0",
"Max":"1"
},
{
"ID":"23",
"Name":"Reverser",
"Min":"-1",
"Max":"1"
},
{
"ID":"24",
"Name":"SimpleChangeDirection",
"Min":"-1",
"Max":"1"
},
{
"ID":"25",
"Name":"SimpleThrottle",
"Min":"0",
"Max":"1"
},
{
"ID":"26",
"Name":"VirtualBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"27",
"Name":"TrainBrakeControl",
"Min":"0",
"Max":"1"
},
{
"ID":"28",
"Name":"PantographControl",
"Min":"0",
"Max":"1"
},
{
"ID":"29",
"Name":"FrontPantographControl",
"Min":"0",
"Max":"1"
},
{
"ID":"30",
"Name":"RearPantographControl",
"Min":"0",
"Max":"1"
},
{
"ID":"31",
"Name":"Horn",
"Min":"0",
"Max":"1"
},
{
"ID":"32",
"Name":"Startup",
"Min":"-1",
"Max":"1"
},
{
"ID":"33",
"Name":"Sander",
"Min":"0",
"Max":"1"
},
{
"ID":"34",
"Name":"HandBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"35",
"Name":"Headlights",
"Min":"0",
"Max":"2"
},
{
"ID":"36",
"Name":"VirtualDynamicBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"37",
"Name":"DynamicBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"38",
"Name":"Wipers",
"Min":"0",
"Max":"1"
},
{
"ID":"39",
"Name":"EmergencyBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"40",
"Name":"DoorsOpenClose",
"Min":"0",
"Max":"1"
},
{
"ID":"41",
"Name":"EngineBrakeControl",
"Min":"0",
"Max":"1"
},
{
"ID":"42",
"Name":"AWSReset",
"Min":"0",
"Max":"1"
},
{
"ID":"43",
"Name":"Cmd_Free",
"Min":"0",
"Max":"1"
},
{
"ID":"44",
"Name":"Cmd_40",
"Min":"0",
"Max":"1"
},
{
"ID":"45",
"Name":"VigilEnable",
"Min":"0",
"Max":"1"
},
{
"ID":"46",
"Name":"VigilReset",
"Min":"0",
"Max":"1"
},
{
"ID":"47",
"Name":"VigilLight",
"Min":"0",
"Max":"1"
},
{
"ID":"48",
"Name":"VigilAlarm",
"Min":"0",
"Max":"1"
},
{
"ID":"49",
"Name":"LZBActive",
"Min":"0",
"Max":"1"
},
{
"ID":"50",
"Name":"LZBEnding",
"Min":"0",
"Max":"1"
},
{
"ID":"51",
"Name":"LZBEnable",
"Min":"0",
"Max":"1"
},
{
"ID":"52",
"Name":"LZB_G",
"Min":"0",
"Max":"1"
},
{
"ID":"53",
"Name":"LZB_End",
"Min":"0",
"Max":"1"
},
{
"ID":"54",
"Name":"PZB_85",
"Min":"0",
"Max":"1"
},
{
"ID":"55",
"Name":"PZB_70",
"Min":"0",
"Max":"1"
},
{
"ID":"56",
"Name":"PZB_55",
"Min":"0",
"Max":"1"
},
{
"ID":"57",
"Name":"PZB_1000",
"Min":"0",
"Max":"1"
},
{
"ID":"58",
"Name":"PZB_500",
"Min":"0",
"Max":"1"
},
{
"ID":"59",
"Name":"PZB_40",
"Min":"0",
"Max":"1"
},
{
"ID":"60",
"Name":"ServiceBrake",
"Min":"0",
"Max":"1"
},
{
"ID":"61",
"Name":"PZBEnable",
"Min":"0",
"Max":"1"
},
{
"ID":"62",
"Name":"PZB_1000hz_Control",
"Min":"0",
"Max":"1"
},
{
"ID":"63",
"Name":"PZB_500hz_Control",
"Min":"0",
"Max":"1"
},
{
"ID":"64",
"Name":"PZB_2000hz_Control",
"Min":"0",
"Max":"1"
},
{
"ID":"65",
"Name":"PZB_Distant_Passed",
"Min":"0",
"Max":"1"
},
{
"ID":"66",
"Name":"Dummy",
"Min":"0",
"Max":"1"
},
{
"ID":"67",
"Name":"cablight",
"Min":"0",
"Max":"1"
},
{
"ID":"68",
"Name":"LZB_Buzzer",
"Min":"0",
"Max":"1"
}
]
}
0;TractiveEffort;-1000;10000;1;RawSpeedTarget;0;300;2;RawTargetDistance;0;9999;3;TargetDistanceBar;0;1;4;TargetDistanceDigits100;-1;9;5;TargetDistanceDigits1000;-1;9;6;VSoll;0;250;7;TargetSpeed100;-1;9;8;TargetSpeed10;-1;9;9;TargetSpeed1;-1;9;10;Current;0;100000;11;CompressorState;0;1;12;MainReservoirPressureBAR;0;12;13;BrakePipePressureBAR;0;12;14;LocoBrakeCylinderPressureBAR;0;10;15;LocoBrakeCylinderPressureBAR;0;10;16;Ammeter;-600;600;17;CabAmmeter;0;600;18;SpeedometerKPH;0;250;19;Accelerometer;-320;320;20;VirtualThrottle;0;1;21;Regulator;0;1;22;AFB;0;1;23;Reverser;-1;1;24;SimpleChangeDirection;-1;1;25;SimpleThrottle;0;1;26;VirtualBrake;0;1;27;TrainBrakeControl;0;1;28;PantographControl;0;1;29;FrontPantographControl;0;1;30;RearPantographControl;0;1;31;Horn;0;1;32;Startup;-1;1;33;Sander;0;1;34;HandBrake;0;1;35;Headlights;0;2;36;VirtualDynamicBrake;0;1;37;DynamicBrake;0;1;38;Wipers;0;1;39;EmergencyBrake;0;1;40;DoorsOpenClose;0;1;41;EngineBrakeControl;0;1;42;AWSReset;0;1;43;Cmd_Free;0;1;44;Cmd_40;0;1;45;VigilEnable;0;1;46;VigilReset;0;1;47;VigilLight;0;1;48;VigilAlarm;0;1;49;LZBActive;0;1;50;LZBEnding;0;1;51;LZBEnable;0;1;52;LZB_G;0;1;53;LZB_End;0;1;54;PZB_85;0;1;55;PZB_70;0;1;56;PZB_55;0;1;57;PZB_1000;0;1;58;PZB_500;0;1;59;PZB_40;0;1;60;ServiceBrake;0;1;61;PZBEnable;0;1;62;PZB_1000hz_Control;0;1;63;PZB_500hz_Control;0;1;64;PZB_2000hz_Control;0;1;65;PZB_Distant_Passed;0;1;66;Dummy;0;1;67;cablight;0;1;68;LZB_Buzzer;0;1;
0::TractiveEffort::-1000::10000::1::RawSpeedTarget::0::300::2::RawTargetDistance::0::9999::3::TargetDistanceBar::0::1::4::TargetDistanceDigits100::-1::9::5::TargetDistanceDigits1000::-1::9::6::VSoll::0::250::7::TargetSpeed100::-1::9::8::TargetSpeed10::-1::9::9::TargetSpeed1::-1::9::10::Current::0::100000::11::CompressorState::0::1::12::MainReservoirPressureBAR::0::12::13::BrakePipePressureBAR::0::12::14::LocoBrakeCylinderPressureBAR::0::10::15::LocoBrakeCylinderPressureBAR::0::10::16::Ammeter::-600::600::17::CabAmmeter::0::600::18::SpeedometerKPH::0::250::19::Accelerometer::-320::320::20::VirtualThrottle::0::1::21::Regulator::0::1::22::AFB::0::1::23::Reverser::-1::1::24::SimpleChangeDirection::-1::1::25::SimpleThrottle::0::1::26::VirtualBrake::0::1::27::TrainBrakeControl::0::1::28::PantographControl::0::1::29::FrontPantographControl::0::1::30::RearPantographControl::0::1::31::Horn::0::1::32::Startup::-1::1::33::Sander::0::1::34::HandBrake::0::1::35::Headlights::0::2::36::VirtualDynamicBrake::0::1::37::DynamicBrake::0::1::38::Wipers::0::1::39::EmergencyBrake::0::1::40::DoorsOpenClose::0::1::41::EngineBrakeControl::0::1::42::AWSReset::0::1::43::Cmd_Free::0::1::44::Cmd_40::0::1::45::VigilEnable::0::1::46::VigilReset::0::1::47::VigilLight::0::1::48::VigilAlarm::0::1::49::LZBActive::0::1::50::LZBEnding::0::1::51::LZBEnable::0::1::52::LZB_G::0::1::53::LZB_End::0::1::54::PZB_85::0::1::55::PZB_70::0::1::56::PZB_55::0::1::57::PZB_1000::0::1::58::PZB_500::0::1::59::PZB_40::0::1::60::ServiceBrake::0::1::61::PZBEnable::0::1::62::PZB_1000hz_Control::0::1::63::PZB_500hz_Control::0::1::64::PZB_2000hz_Control::0::1::65::PZB_Distant_Passed::0::1::66::Dummy::0::1::67::cablight::0::1::68::LZB_Buzzer::0::1::
Zweite Antwort
<?xml version="1.0" encoding="UTF-8"?>
<List>
<Controller>
<ID>0</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>1</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>2</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>3</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>4</ID>
<Current>-1</Current>
</Controller>
<Controller>
<ID>5</ID>
<Current>-1</Current>
</Controller>
<Controller>
<ID>6</ID>
<Current>19,99999</Current>
</Controller>
<Controller>
<ID>7</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>8</ID>
<Current>2</Current>
</Controller>
<Controller>
<ID>9</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>10</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>11</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>12</ID>
<Current>9,987423</Current>
</Controller>
<Controller>
<ID>13</ID>
<Current>4,998699</Current>
</Controller>
<Controller>
<ID>14</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>15</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>16</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>17</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>18</ID>
<Current>17,74816</Current>
</Controller>
<Controller>
<ID>19</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>20</ID>
<Current>1</Current>
</Controller>
<Controller>
<ID>21</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>22</ID>
<Current>0,08</Current>
</Controller>
<Controller>
<ID>23</ID>
<Current>1</Current>
</Controller>
<Controller>
<ID>24</ID>
<Current>1</Current>
</Controller>
<Controller>
<ID>25</ID>
<Current>0,5</Current>
</Controller>
<Controller>
<ID>26</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>27</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>28</ID>
<Current>1</Current>
</Controller>
<Controller>
<ID>29</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>30</ID>
<Current>1</Current>
</Controller>
<Controller>
<ID>31</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>32</ID>
<Current>1</Current>
</Controller>
<Controller>
<ID>33</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>34</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>35</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>36</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>37</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>38</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>39</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>40</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>41</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>42</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>43</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>44</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>45</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>46</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>47</ID>
<Current>1</Current>
</Controller>
<Controller>
<ID>48</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>49</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>50</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>51</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>52</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>53</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>54</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>55</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>56</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>57</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>58</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>59</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>60</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>61</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>62</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>63</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>64</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>65</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>66</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>67</ID>
<Current>0</Current>
</Controller>
<Controller>
<ID>68</ID>
<Current>0</Current>
</Controller>
</List>
{
"controller":[
{
"ID":"0",
"Current":"0"
},
{
"ID":"1",
"Current":"0"
},
{
"ID":"2",
"Current":"0"
},
{
"ID":"3",
"Current":"0"
},
{
"ID":"4",
"Current":"-1"
},
{
"ID":"5",
"Current":"-1"
},
{
"ID":"6",
"Current":"19,99999"
},
{
"ID":"7",
"Current":"0"
},
{
"ID":"8",
"Current":"2"
},
{
"ID":"9",
"Current":"0"
},
{
"ID":"10",
"Current":"0"
},
{
"ID":"11",
"Current":"0"
},
{
"ID":"12",
"Current":"9,987423"
},
{
"ID":"13",
"Current":"4,998699"
},
{
"ID":"14",
"Current":"0"
},
{
"ID":"15",
"Current":"0"
},
{
"ID":"16",
"Current":"0"
},
{
"ID":"17",
"Current":"0"
},
{
"ID":"18",
"Current":"17,83203"
},
{
"ID":"19",
"Current":"0"
},
{
"ID":"20",
"Current":"1"
},
{
"ID":"21",
"Current":"0"
},
{
"ID":"22",
"Current":"0,08"
},
{
"ID":"23",
"Current":"1"
},
{
"ID":"24",
"Current":"1"
},
{
"ID":"25",
"Current":"0,5"
},
{
"ID":"26",
"Current":"0"
},
{
"ID":"27",
"Current":"0"
},
{
"ID":"28",
"Current":"1"
},
{
"ID":"29",
"Current":"0"
},
{
"ID":"30",
"Current":"1"
},
{
"ID":"31",
"Current":"0"
},
{
"ID":"32",
"Current":"1"
},
{
"ID":"33",
"Current":"0"
},
{
"ID":"34",
"Current":"0"
},
{
"ID":"35",
"Current":"0"
},
{
"ID":"36",
"Current":"0"
},
{
"ID":"37",
"Current":"0"
},
{
"ID":"38",
"Current":"0"
},
{
"ID":"39",
"Current":"0"
},
{
"ID":"40",
"Current":"0"
},
{
"ID":"41",
"Current":"0"
},
{
"ID":"42",
"Current":"0"
},
{
"ID":"43",
"Current":"0"
},
{
"ID":"44",
"Current":"0"
},
{
"ID":"45",
"Current":"0"
},
{
"ID":"46",
"Current":"0"
},
{
"ID":"47",
"Current":"1"
},
{
"ID":"48",
"Current":"0"
},
{
"ID":"49",
"Current":"0"
},
{
"ID":"50",
"Current":"0"
},
{
"ID":"51",
"Current":"0"
},
{
"ID":"52",
"Current":"0"
},
{
"ID":"53",
"Current":"0"
},
{
"ID":"54",
"Current":"0"
},
{
"ID":"55",
"Current":"0"
},
{
"ID":"56",
"Current":"0"
},
{
"ID":"57",
"Current":"0"
},
{
"ID":"58",
"Current":"0"
},
{
"ID":"59",
"Current":"0"
},
{
"ID":"60",
"Current":"0"
},
{
"ID":"61",
"Current":"0"
},
{
"ID":"62",
"Current":"0"
},
{
"ID":"63",
"Current":"0"
},
{
"ID":"64",
"Current":"0"
},
{
"ID":"65",
"Current":"0"
},
{
"ID":"66",
"Current":"0"
},
{
"ID":"67",
"Current":"0"
},
{
"ID":"68",
"Current":"0"
}
]
}
0;0;1;0;2;0;3;0;4;-1;5;-1;6;19,99999;7;0;8;2;9;0;10;0;11;0;12;9,948832;13;4,921205;14;0,1838395;15;0,1838395;16;0;17;0;18;18,52498;19;-1,004025;20;1;21;0;22;0,08;23;1;24;1;25;0,4490465;26;0;27;0,103347;28;1;29;0;30;1;31;0;32;1;33;0;34;0;35;0;36;0;37;0;38;0;39;0;40;0;41;0;42;0;43;0;44;0;45;0;46;0;47;1;48;0;49;0;50;0;51;0;52;0;53;0;54;0;55;0;56;0;57;0;58;0;59;0;60;0;61;0;62;0;63;0;64;0;65;0;66;0;67;0;68;0;
0::0::1::0::2::0::3::0::4::-1::5::-1::6::19,99999::7::0::8::2::9::0::10::0::11::0::12::9,917391::13::4,653961::14::1,034214::15::1,034214::16::0::17::0::18::18,51546::19::-5,648276::20::1::21::0::22::0,08::23::1::24::1::25::0,4488116::26::0::27::0,101728::28::1::29::0::30::1::31::0::32::1::33::0::34::0::35::0::36::0::37::0::38::0::39::0::40::0::41::0::42::0::43::0::44::0::45::0::46::0::47::1::48::0::49::0::50::0::51::0::52::0::53::0::54::0::55::0::56::0::57::0::58::0::59::0::60::0::61::0::62::0::63::0::64::0::65::0::66::0::67::0::68::0::
Beispiel Update
<?xml version="1.0" encoding="UTF-8"?>
<List>
<Controller>
<ID>18</ID>
<Current>17,60397</Current>
</Controller>
</List>
{
"controller":[
{
"ID":"12",
"Current":"9,981444"
},
{
"ID":"13",
"Current":"4,863352"
},
{
"ID":"14",
"Current":"0,4149021"
},
{
"ID":"15",
"Current":"0,4149021"
},
{
"ID":"18",
"Current":"18,06917"
},
{
"ID":"19",
"Current":"-2,265955"
},
{
"ID":"25",
"Current":"0,4588348"
},
{
"ID":"27",
"Current":"0,08203382"
}
]
}
12;9,944581;13;4,803483;14;0,5940052;15;0,5940052;18;18,32397;19;-3,244113;25;0,4587107;27;0,08221048;
12::9,908202::13::4,709668::14::0,8758038::15::0,8758038::18::18,37809::19::-4,783134::25::0,4589608::27::0,08240156::
Startet das Polling.
- Interval: Aktualisierungsintervall in Millisekunden.
- Format: Mögliche Werte: XML, JSON, FLAT, RAW
StopPolling
StopPolling()
Stoppt das Polling.
MutePolling
MutePolling()
Schaltet das Polling stumm. Es läuft immer noch weiter, sendet aber keine neuen Updates.
UnmutePolling
UnmutePolling()
Lässt das Polling wieder Updates senden.
PausePolling
PausePolling()
Pausiert das Polling.
UnpausePolling
UnpausePolling()
Setzt das Polling fort.
EnableExtendedPolling
EnableExtendedPolling()
Aktiviert das Polling der virtuellen Controller.
DisableExtendedPolling
DisableExtendedPolling()
Deaktiviert das Polling der virtuellen Controller.
Anhang
Spenden
Wenn du den TSConductor gut findest, denke bitte darüber nach zu spenden oder schreibe mir. <3
Danksagungen
Vielen Dank an:
- Dovetail Games
- Matt Peddlesden
- Rob Mitchelmore für seine Blogposts und raildriver.cs Datei die mir sehr geholfen haben
- Mark James für die Icons
Lizenz
Copyright © Daniel Jackob - Alle Rechte vorbehalten
- Eine unerlaubte Vervielfältigung dieser Dateien über jedes Medium ist streng verboten.
- Geschützt und Vertraulich
- Geschrieben von Daniel Jackob, April 2016
Wenn du die Dateien selber hosten willst, kontaktiere mich zuerst.
Changelog
- V 1.3.0.0 - 27. Jan 2017
[ADD] - Bessere Unterstützung für localhost Adresse
[ADD] - Warnung wenn die zuletzt verwendete IP Adresse nicht mehr verfügbar ist
- V 1.2.1.0 - 19. Okt 2016
[FIX] - Bug der dazu führte das die settings.ini nicht korrekt geladen wurde wenn der “Local Application Data” Pfad ein oder mehrere Leerzeichen enthielt
[FIX] - Behandlung einer Fehlermeldung wenn die Server Anwendung abstürzt
[FIX] - Kleiner Fehler in der englischen Übersetzung behoben
- V 1.2.0.0 - 06. Okt 2016
[FIX] - XML Deklaration: Encoding Bug behoben
[ADD] - Netzwerkcontroller kann jetzt ausgewählt werden
[ADD] - optionaler IP Wert in der Config
[ADD] - EnableMessageLengthHeader und DisableMessageLengthHeader Funktionen: Erlaubt das voranstellen der Größe der Antwort als Header
- V 1.1.0.0 - 09. Sep 2016
[FIX] - Automatische Pfaderkennung wenn Train Simulator nicht im Standard Steamverzeichnis installiert wurde
[FIX] - Automatische Generierung der settings.ini. Ort der settings.ini wurde zu %localappdata%\TSConductor geändert
[ADD] - ExtendedPolling - Erlaubt das Polling der virtuellen Controller (Funktionen EnableExtendedPolling und DisableExtendedPolling)
- V 1.0.0.0 - 22. Mai 2016
[Erste Veröffentlichung]
Dokument Versionen
- V 6 - 27. Jan 2017
[ADD] - Anpassung auf Version 1.3.0.0
[ADD] - TSInspector Link
- V 5 - 19. Okt 2016
[ADD] - Anpassung auf Version 1.2.1.0
[ADD] - Modulares Führerraumdisplay Link
- V 4 - 06. Okt 2016
[ADD] - Anpassung auf Version 1.2.0.0
[ADD] - TSFireman Beschreibung und Link
- V 3 - 09. Sep 2016
[ADD] - Anpassung auf Version 1.1.0.0
- V 2 - 31. Mai 2016
[ADD] - Virtuelle Controller
- V 1 - 22. Mai 2016
[ADD] - Erste Veröffentlichung
Impressum
Daniel Jackob
Ernst Thälmann Straße 16
98617 Untermaßfeld
