NAV
xml json flat raw

TSConductor

Introduction

TSConductor is a simple TCP Interface for the Train Simulator from Dovetail Games.

TSConductor allows you to use the features from the by Train Simulator supplied raildriver.dll with any hardware or software. Connect Train Simulator to your Arduino, Raspberry, PC, Smartphone, … or build your own cab at home, show your location in Google Maps and much more.

Download

Current Version:

Archived Versions:

Changelog

System Requirements

Installation

To install the TSConductor just run the setup or extract the archive in any folder you want. Unless you don’t want to, the setup will create all shortcuts. If you have choosen to install TSConductor with the archive file, be sure to run TSConductorUI.exe before the TSConductor.exe unless you know what to do.

Update

To update the TSConductor, let the Setup overwrite all old files. If you update the TSConductor with an archive file, just overwrite the files too.

Support

If you have found bugs, have an idea or just want to say thanks, please contact me here:

Software

You can find software which are using the TSConductor here:

If you created an application which uses the TSConductor and released it, please contact me so I can link it here and can keep track of your application.

Userinterface

The TSConductor User Interface (TSConductorUI.exe) lets you easily configure, start and stop the TCP Server. No need to work with ugly config files and console windows.

Interface

TSConductorUI TSConductorUI

The Interface is self-explaining:

  1. Start Button: Starts the TSConductor server.
  2. Stop Button: Stops the TSConductor server.
  3. Server Status: Shows if the TSConductor server is currently running.
  4. About Button: Opens the browser and goes to this website.
  5. Reset Button: Resets all TSConductor settings.
  6. Quit Button: Quits the application and terminates the server if running.
  7. Settings Button: Locks and unlocks the settings. See here for more information.

Settings

TSConductorUI

Usually you don’t have to configure anything because the TSConductor gets and sets all values automatically. Only edit the settings if you have to or you know what you are doing.

  1. Settings Button: Locks and unlocks the settings. You can’t edit the settings values unless you have unlocked the settings and you can’t start the server unless you have locked them. Only locking the settings will refresh the configuration file which is needed to run the server. You can read more about the settings.ini configuration file here.
  2. Log Checkbox: If checked, the server will log its activities to a log file. This will have a big impact on the server performance. Only enable logging if you have to debug your application or loco! The log files can be found in the installation directory.
  3. IP: If your PC does have different IPs or network adapters, you can switch them here.
  4. Port: You can set your preferred TCP Port in this field. Default Port is 47811, allowed range is between 1024 and 65535.
  5. Dll path: Path to your raildriver.dll located in your Train Simulator installation directory.

Server

The TCP Server itself is an asynchronous server written in C#. It supports multiple connections and can also be started multiple times at once, although this is not recommended. The Server features simple functions which basically just pass through data between your application and the Train Simulator, extended functions which should make developing applications easier and it also can push data to you application via polling.

Settings

The settings for the server can be found in the settings.ini file. It is not recommended to edit the settings file manually. You can find the .ini file in the %localappdata%\TSConductor path.

Settings.ini Example:

[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
  1. Port: The TCP Port the server uses. Default Port is 47811.
  2. Path: Path to your raildriver.dll located in your Train Simulator installation directory.
  3. Log: Shows if logging is enabled. 0 = Disabled, 1 = Enabled
  4. Base: Path of the TSConductor installation directory
  5. IP: IP Address the Server uses to communicate. Optional. If not provided, the server detects the IP automatically.

The settings.ini directory will be passed to the server via parameters.

Parameters

You can and should pass the path to the settings directoy as parameter if you start the server manually. If you don’t pass it, the server will use the default settings.

ts.conductor.exe "C:\Pfad\zu\Einstellungen"

Messages

When you call a function, errors may occur. This is a list of info and error messages that might be returned:

Info messages

Info messages

1;Loco changed, stopping Polling;<MSG>
2;Polling stop request, stopping Polling;<MSG>

Info messages will always end with the “<MSG>” Tag. The format is Infonumber;Infotext;“<MSG>”.

  1. The driven loco was changed and the automatic polling was stopped.
  2. The polling will be stopped.

Error messages

Error messages

1;Unknown function;<ERR>
2;No parameter brackets;<ERR>
3;Wrong count of parameters;<ERR>
4;Invalid Clientname;<ERR>

Error messages will always end with the <ERR> Tag. The format is Errornumber;Errortext;<ERR>.

  1. Unkown function was called.
  2. No brackets “()” after function name.
  3. Wrong count of parameters.
  4. Clientname is not alphanumeric.

Functions

If you send any data to the server be sure to end all data with the “<END>” tag. For example, “GetLocoName()<END>”.

Functionlist:

GetLocoName

Call

GetLocoName()

Example Response

RSC.:.MunichAugsburg.:.MA DB Baureihe 101 Engine

Returns the provider, product and engine being driven.

The format is “PROVIDER.:.PRODUCT.:.ENGINENAME”.

GetControllerList

Call

GetControllerList()

Example Response

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

Returns a list of every controller in the current loco seperated by “::”. The first returned controller is “controller 0”, the second is “controller 1” etc.

GetControllerValue

GetControllerValue(int controllerId, int getType)

Example Call

/* Speedometer */
GetControllerValue(18;0)
/* ################## */
GetControllerValue(18;1)
/* ################## */
GetControllerValue(18;2)

Example Response

/* Speedometer */
47,30878
/* ################## */
0
/* ################## */
250

This function gets the current, minimum or maximum value of a controller. getType specifies which value is returned.

SetControllerValue

SetControllerValue(int controllerId, float value)

Example Call

/* Throttle */
SetControllerValue(20;0,5)

Sets the current value of the controller to the specified value.

GetControllerValueWithControllerID

GetControllerValueWithControllerID(int controllerId, int getType)

Example Call

/* Speedometer */
GetControllerValueWithControllerID(18;0)
/* ################## */
GetControllerValueWithControllerID(18;1)
/* ################## */
GetControllerValueWithControllerID(18;2)

Example Response

18::28,27284
/* ################## */
18::0
/* ################## */
18::250

This function gets the current, minimum or maximum value of a controller and the controllerId. getType specifies which value is returned.

GetControllerValueExtended

GetControllerValueExtended(int controllerId)

Example Call

/* Speedometer */
GetControllerValueExtended(18)

Example Response

28,29384::0::250

This function returns the current, minimum and maximum value of a controller.

GetControllerValueExtendedWithControllerID

GetControllerValueExtendedWithControllerID(int controllerId)

Example Call

/* Speedometer */
GetControllerValueExtendedWithControllerID(18)

Example Response

18::26,80761::0::250

This function returns the current, minimum and maximum value of a controller and the controllerId.

GetControllerListExtended

GetControllerListExtended(string format)

Example Call

/* XML */
GetControllerListExtended(XML)
/* JSON */
GetControllerListExtended(JSON)
/* FLAT */
GetControllerListExtended(FLAT)
/* RAW */
GetControllerListExtended(RAW)

Example Response

<?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::

This function returns the id, name, minimum and maximum value of all controllers. Possible formats: XML, JSON, FLAT, RAW

SendKeys

Example Call

SendKeys(w) /* W */
SendKeys({DEL}) /* ENTF Taste */
SendKeys(^+b) /* STRG + Shift + B */

This function sends keystrokes to the Train Simulator. The Train Simulator has to be the active window.

For more information, please read the documentation form Microsoft: SendKeys.Send

SetClientName

SetClientName(string name)

Example Call

SetClientName(MyApp)

This function sets the name for the client. It will be shown in the TSConductorUI. The name must be alphanumeric but can contain spaces.

GetClientName

Example Call

GetClientName()

Example Response

MyApp

This function gets the current client name.

GetClientID

Example Call

GetClientID()

Example Response

AF2E45CD

This function gets the internal client id.

EnableMessageLengthHeader

Example Call

EnableMessageLengthHeader()

Beispiel

#12345;<?xml version="1.0" [...]

Enables a header which shows the byte length of the following response.

The string #12345; indicates that the following response is 12345 byte long (without the header).

DisableMessageLengthHeader

Example Call

DisableMessageLengthHeader()

Deactivates the header for the message length.

Virtual Controllers

In addition to the controllers that every loco has, there are some additional controllers that are always available.

Controller ID Purpose
400 Latitude of train
401 Longitude of train
402 Fuel
403 Is in tunnel
404 Gradient
405 Heading
406 Current hour (time of day)
407 Current minute (time of day)
408 Current second (time of day)

Polling

It’s possible for the TSConductor to send data regularly to the client. It will only send controller whose values have changed since the last update. Just send the StartPolling function, the refresh rate and your wished format to the server. It’s still recommended to refresh controller values like SiFa, PZB, LZB or AWS yourself.

StartPolling

StartPolling(int interval; string format)

Example 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::

Example 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::

Starts the Polling.

StopPolling

StopPolling()

Stops the Polling.

MutePolling

MutePolling()

Mutes the polling. The polling will still run but won’t sent any new updates.

UnmutePolling

UnmutePolling()

Unmutes the polling.

PausePolling

PausePolling()

Pauses the polling.

UnpausePolling

UnpausePolling()

Resumes the polling.

EnableExtendedPolling

EnableExtendedPolling()

Enables polling of the virtual controllers.

DisableExtendedPolling

DisableExtendedPolling()

Disables polling of the virtual controllers.

Appendix

If you like TSConductor, please consider donating or just drop a thanks. <3

PayPal

Acknowledgements

Special thanks to:

License

Copyright © Daniel Jackob - All Rights Reserved

If you want to host the application files yourself, please contact me.

Changelog

[ADD] - Better support for loop back devices

[ADD] - Warning message when last used IP is not available anymore

[FIX] - Fixed bug that caused settings.ini not to be loaded properly when local application data path contained one or more spaces

[FIX] - Handling error message when server executable crashes

[FIX] - Small error in english translation

[FIX] - XML declaration: encoding bug fixed

[ADD] - Network adapters can now be choosen

[ADD] - IP can now be set in the config (optional)

[ADD] - EnableMessageLengthHeader and DisableMessageLengthHeader functions: Allows to put a header in front of the response to show the byte length of the repsonse

[FIX] - Fixed automatic detection of the Train Simulator path when it was not installed in the default steam directory

[FIX] - Automatic generation of the settings.ini. The settings.ini is now located in %localappdata%\TSConductor

[ADD] - ExtendedPolling - Added polling of the virtual controllers (Functions EnableExtendedPolling and DisableExtendedPolling)

Document History

[ADD] - Update to Version 1.3.0.0

[ADD] - TSInspector Link

[ADD] - Update to Version 1.2.1.0

[ADD] - Modulares Führerraumdisplay Link

[ADD] - Update to Version 1.2.0.0

[ADD] - TSFireman Description and Link

[ADD] - Update to Version 1.1.0.0

[ADD] - Virtual controllers

[ADD] - Initial Release

Imprint

Daniel Jackob

Ernst Thälmann Straße 16

98617 Untermaßfeld

dayjay@dayjay.de