Jump to content

Märklin M switches


Recommended Posts


I'm new to 3DTrainStudio but is very amazed by the quality and the posibilities. With in a week I have managed to create a virtual copy of my fully automated modelbahn with 7 active locomotives and made integration with my own computer-control software, so I can computer control the virtual modelbahhn via the TCP interface.

But I have one problem. Real Märklin M switches will keep their postion even if at train pass in the opposite direction. In 3DTrainStudio the position changes which means that the switch is left in the wrong postion. Is it possible to configure the track to it will be left in the original position after a train passing. If I lock position it will block the train.

Best regards


Link to comment
Share on other sites

Hallo Thomas,

select a home position for the switch,
switch the turnout back to the home position after the train has left the turnout, means

wähle für die Weiche eine Grundstellungaus,
schalte die Weiche wieder in die Grundstellung, nachdem der Zug die Weiche verlassen hat, meint


Link to comment
Share on other sites

Hi Henry

Thank for your response.

I dont see any properties called home-position - just position. 

To make sure I understand you correct, you propose that:

  1. for each switch I make a variable to store home postition.
  2. Every time my control software change the switch position it allso set the variable to the new home-position
  3. Every switch need at trigger for a train leave action, the sets the position to the position stored in the home-position variable for that switch

Is that understanding correct?

It is quite a lot of configuration with more than 20 switches, but if that is the way to do it, I have to do it.

regards Thomas

Link to comment
Share on other sites

Hallo Thomas,


take this simple example.

Start the locomotive. Switch the points as you like.
The locomotive sets itself the way over the points.
The turnouts always go to the home position afterwards.

You do not need any variables.

Greetings from

nimm dies einfache Beispiel. 

Starte die Lokomotive. Schalte die Weichen wie du willst.
Die Lokomotive stellt sich den Weg über die Weiche.
Die Weichen gehen danach immer in die Grundstellung.

Du benötigst keine Variablen.

Grüße von


Link to comment
Share on other sites


I managed to get it all working using the 3 steps described above.   I tried to let the switch-change event setting the home-pos variable, but when the train passes and change the position it allso triggers et switch-change event. So I had to change my control-software MBS interface to both set the variable and set the switch position. But now it works nicely.

regards Thomas

Link to comment
Share on other sites

Hi Henry

Thanks again. I got you example up and running, and I understand that I wasn't clear enough in my question. I my case the home position changes depending on what scenarie is running on my model. That was the reason, that I need to make variables that was set by my my control software as describes above. Said in another way: since the home position change over time I need to store it in a variable.

But I learned something new today ;-)

regards Thomas

Link to comment
Share on other sites

vor 2 Stunden schrieb tso:

I learned something

Hello Thomas,
here's some more, if you're up for it:

I built and published a small example that follows your specs.
You can find it using the content ID: D0E62A3D-3EC0-4422-918C-73C982B3F09A



This one simple skript can cover all your 20 switches, when you give each switch the keyword "fallback"

The principle:

  • when a "fallback" switch changes, the script checks if a train is upon it.
  • if so, that train (and no switch board action) is considered the culprit
  • this activates a "switchback" flag in the very switch that caused the event to be called
  • when a "fallback" switch is vacated by a train, the skript checks for the "switchback" flag. 
  • if the "switchback" flag is valid, the switch is toggled to the other position. The train changed the switch, so now we change it back
    (works only with 2-way-switches!)
  • the "switchback" flag is set back to false, because the task is done.


Hope it helps?

Link to comment
Share on other sites

Hi Goetz

Thanks for the info - Then I learn about a way to catagorize items using the keyword.

I understand the logic and see how it works. When I tested it under difference circumstances I realized that there might be a timing issue. I had a fast running train and it managed to leave the track again before the 1 second delay, resulting in switchback was not set to True.

All though your solution is more general I think I continue with my approach describe above - It seems to work perfectly well. I have changed my control-software so when at switch is changed it all ways create and set a variable named by the switchname with '_POS' appended, So for the switched where I want fallback, I just have to add a train-leave event setting position to it own _POS variable. So I wasn't such a heavy task.

But thanks again for you input - I still have a lot to learn ;-)

Regards Thomas

Link to comment
Share on other sites

vor 23 Minuten schrieb tso:

I had a fast running train and it managed to leave the track again before the 1 second delay

That's mighty fast.
Anyway -  the exact delay time was chosen for simplicity. A much shorter one will do, e.g. 0.1 seconds.
Actually, a delay of 0 seconds will suffice. It delays the next step by one cycle. And that next cycle has the train on the switch tracks.

Use the method which suits you best, of course. 

Kind regards

Link to comment
Share on other sites

Hello Thomas,

I understand that the home position of a turnout depends on the route plan. It must be set straight or branching depending on the situation. In the planning program there are fixed settings for the switch positions. However, these are not to be understood as the home position of a turnout. The home position of a turnout is the position it will be set to after a short changeover. You have to define this position yourself.

There are always different solutions.
The solution of @Goetz (:) I like to learn) gave me a somewhat simpler idea.

I now use several keywords, which contain the end position of the switch, i.e,

    fallback0 is reset to switch position 0, (turnout)
    fallback1 is reset to switch position 1, (switch)
    fallback2 is reset to switch position 2, (3 way switch)
    fallback3 is reset to switch position 3, (double cross switch)
    fallbackX is reset to switch position X, (turntable track)

You still don't need variables, but you have to assign a keyword to the object and provide an action in the EV. With this you are very variable.
Here is an example


Hier ein Beispiel

Ich verstehe, daß die Grundstellung einer Weiche vom Streckenplan abhängt. Sie muß je nach Situation gerade oder abzweigend eingestellt werden. Im Planungsprogramm gibt es feste Einstellungen für die Schaltstellungen. Diese sind aber nicht als Weichengrundstellung zu verstehen. Die Grundstellung einer Weiche ist die Position, in die sie nach einer kurzzeitigen Umstellung gebracht wird. Diese mußt Du selbst festlegen.

Es gibt immer verschiedene Lösungen.
Die Lösung von @Goetz (:) ich lerne gerne dazu) hat mich auf eine etwas einfachere Idee gebracht.

Ich verwende nun mehrere Schlagworte, die die Endlage der Weiche beeinhalten, will sagen,

  • fallback0 wird auf Schaltposition 0 zurückgesetzt, (Weiche)
  • fallback1 wird auf Schaltposition 1 zurückgesetzt, (Weiche)
  • fallback2 wird auf Schaltposition 2 zurückgesetzt, (3 Weg-Weiche)
  • fallback3 wird auf Schaltposition 3 zurückgesetzt, (Doppel-Kreuz-Weiche)
  • fallbackX wird auf Schaltposition X zurückgesetzt, (Drehscheibengleis)

Du benötigst immer noch keine Variablen, mußt aber dem Objekt ein Schlagwort zuordnen und in der EV eine Aktion bereitstellen. Damit bist Du sehr variabel.

Viele Grüße,




Edited by Henry
Link to comment
Share on other sites

vor 15 Minuten schrieb Henry:

Ich verstehe, daß die Grundstellung einer Weiche vom Streckenplan abhängt

Tut mir leid, Henry, aber Ich fürchte, da missverstehst du Thomas.

Er stellt sich reale Märklin Weichen und ihr Verhalten vor.

Die können jederzeit die eine oder andere Stellung haben. Aber wenn sie stumpf befahren (= aufgeschnitten) werden, dann ändert das ihre Stellung nicht.
Dieses Verhalten möchte er nachbilden.

Die MBS Weichen müssen zwingend umschalten, weil kein Zug ein inaktives Gleis befahren kann. Deshalb möchte Thomas diese Weichen im Falle des Aufschneidens anschließend wieder in die vorherige Stellung zurück schalten. 

Viele Grüße

Link to comment
Share on other sites

32 minutes ago, Goetz said:

Er stellt sich reale Märklin Weichen und ihr Verhalten vor.

You are right Götz. I need to model the real Märklin track behavior, because I want to use the MBS model to test control-software for my real Märklin modelbahn.

As long I can manage to hide the difference in MBS or the interface software, the control software will not know is it controls the real tracks or the MBS model ;-)

Regards Thomas

Link to comment
Share on other sites

Hallo / Hello  Thomas,

die hier vorgeschlagene Lösung ähnelt jener von @Goetz, funktioniert aber auch bei Dreiwegweichen und Kreuzungsweichen.
The solution proposed here is similar to that of @Goetz, but also works for three-way turnouts and crossing turnouts.


Hinterlege als Objektvariable nicht einen booleschen Wert, sondern eine Zahl.
Do not store a boolean value as an object variable, but a number.


Wenn die Weiche umgeschaltet wird, überträgst Du deren Weichenstellung in die Objektvariable nur dann, wenn die Weiche nicht von einem Zug belegt ist. Wie @Goetz oben schon schrieb, muss zuvor eine Unterbrechung erzeugt werden (Wartezeit "0"genügt), damit die Belegung der Weiche durch den einfahrenden Zug registriert werden kann, bevor die Abfrage erfolgt. 
If the switch is switched, you transfer its switch position into the object variable only if the switch is not occupied by a train. As @Goetz already wrote above, an interruption must be created before (waiting time "0" is sufficient), so that the occupancy of the turnout by the arriving train can be registered, before the query takes place.

Wurde die Weiche von einem einfahrenden Zug umgeschaltet, bleibt in der Objektvariable die zuvor enthaltene Weichenstellung erhalten. In allen anderen Fällen wird die neue Weichenstellung nach dem Umschalten in die Objektvarable übernommen. So ist sichergestellt, dass die Objektvariable beim Einfahren immer die zuvor gültige Weichenstellung enthält.
If the switch was switched by an incoming train, the previously contained switch position remains in the object variable. In all other cases, the new switch position is adopted in the object variable after switching. This ensures that the object variable always contains the previously valid switch position when the train arrives.


Nachdem der Zug die Weiche verlassen hat, wird sie auf die in der Objektvariable enthaltene "ursprüngliche" Weichenstellung zurückgesetzt. Hat der Zug die Weiche bei der Einfahrt nicht umgeschaltet, weil sie bereits richtig gestellt war, ist das "Zurücksetzen" der Weichenstellung nach dem Verlassen der Weiche eine "leere" Operation ohne Auswirkung.
After the train has left the switch, it is reset to the "original" switch position contained in the object variable. If the train did not switch the turnout on entry because it was already correctly set, "resetting" the turnout position after leaving the turnout is an "empty" operation with no effect.


Probiere diese Schaltung auch für Dreiwegweichen und Kreuzungsweichen aus.
Try this circuit also for three-way turnouts and crossing turnouts.

Viele Grüße / many greetings

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...