The German Railway in H0


CS3 - How To Use The Brake Macro

This article talks about the Brake Macro which is a feature of the 1.4.0 update to the CS3. If you have not got the options mentioned in the article, your CS3 needs to be updated.

Macros are a new thing in the CS3 after version 1.4.0. Macros can be considered events with special features. They are meant as a help to get things done. One of them is the brake macro. The brake macro will allow you to stop a train in front of a red signal. This article will go through the set up of the brake macro and run a test.

In the description of the brake macro it is said that the brake macro is the software implementation of the hardware module that is available from Märklin. To be fair, I don't find this statement to be entirely accurate for one specific reason: The hardware module will stop ANY train coming along. The brake macro will only stop THE train that you have specified in advance. This is a very fundamental difference. That being said, there is nothing preventing the developers from implementing this feature some time in the future. As of now, you will not be able to replace your hardware brake modules if you want total flexibility. For this you still need a computer.

A Break Down Of The Brake Macro

When you first create the brake macro, you will see that it is already filled with placeholders. These are empty by default and needs to be filled with articles to make the brake macro work.

The containers means the following:

  • Container Loco. This contains the loco that needs to stop.
  • Vmin Container. This container is set to the crawl speed. The crawl speed is the speed that the loco will reduce its speed to when approaching the signal.
  • Container Flag PAUSE. This container contains an override button. The override button can be used in several brake macros and allows you to stop all trains at their respective stop points by the push of one button.
  • Container Semaphore. This container contains the signal where the train should stop at.
  • Container S88 BRAKE. This container contains the S88 contact that will initiate the braking process.
  • Container S88 STOP. This container contains the S88 contact where the train will stop. This is not mandatory.
  • Overlap Container. The overlap container is an emergency feature. This will contain a S88 contact after the signal. If the train hits this contact, something went wrong and the event contained in the Emergency Container will be fired. This is not mandatory.

A note on "not mandatory": Even though that the official description says that some containers are not mandatory (e.g. the Overlap Container and the Emergency Container), it is currently not entirely accurate. According to my findings, the brake macro will not work if you leave out the "Overlap Container" and the "Container S88 BRAKE". Both seems to change the behaviour of the macro to either not working or not being able to start the train again when the signal goes to green. For now, you have to use them. This is most likely a bug and will be fixed in later versions.

How To Set It All Up

So, how do you set it all up? For the simplest working set up you will need:

  • A loco (obviously)
  • A control contact for the pause button.
  • A signal
  • An S88 feedback contact for the braking section.
  • An S88 feedback contact for the stop section.
  • An S88 feedback contact for the overlap section.

Note: I will not go into detail on how to set up feedback. There is plenty of information available on this site and others. You must have working feedback sections before proceeding.

Here is a basic overview of our sample track plan. The direction of travel is towards the signal, left to right.

The plan is that the train will first hit the "brake section" and slow down to the set crawl speed, eventually it will hit the "stop section" and come to a complete halt.

Note: The "Pause" button is a control contact, which can be considered a virtual feedback contact that you can create from the article list. You create it the same way you would an S88 contact, but choosing "Control Contact" as the "Device" instead of the source of your S88 modules. We will use this as the pause button in the brake macro.

Configuring The Macro

A macro cannot be used by itself. It always needs to be part of another macro. So you have to create an event to start with. For this example I simply created an event that will start my locomotive. Like this:

You will notice the last task in the event is called "Brake 1". This is the actual brake macro. You create the brake macro by editing the event and hit the Add button.

Note: You need to scroll down in the pop-up menu to get to the brake macro.

Now that the macro is created, simply long press the macro in the event editor or find it in the events list and edit it that way. You will see the list of empty containers, drag your previously created feedback contacts and signal and loco to the appropriate containers. In this example the macro will look like this:

Important: Notice that I have filled all but the last container. The last container can be left out, but the others have to be filled for the macro to work - even though the official documentation claims otherwise. I believe this to be a bug in the software. If you do as above, you will not experience any problems.

Test The Macro

To test the macro simply:

  • Set the signal to stop.
  • Set the train on a course towards the signal
  • Start the event that holds the macro. In this example it would be the event named "Brake macro test".

As the train begins to occupy the feedback contacts the macro will slow the train down to a hold.


In its current state the I don't consider the brake macro revolutionary for a few reasons:

  1. It will only brake one locomotive; the locomotive in the locomotive container. This is not very flexible as it would require you to create a brake macro for each train that needs to be able to stop at that signal. It would also require a brake macro for each locomotive and each signal, meaning a lot of brake macros. The hardware brake module does not have this limitation, but of course does not come in cheap either.
  2. The macro checks the state of the signal when the macro is activated. The official documentation tells us that you can place the macro anywhere in the event, it will kick off when the train arrives at the first feedback contact. This is true, and it works, but what if the state of the signal changes after the macro has been activated? It never updates its state. This means that the train will potentially stop at a green signal or, even worse, skip a red signal. Not very good.

Don't get me wrong, the feature has loads of potential. Another feature that came in the 1.4.0 update was the ability to position a train on the track plan, meaning that you can tell the CS3 which train occupies a certain contact. Future use of this information can be used to create an even simpler brake macro as one would then only need one brake macro pr. signal, and only tell the macro which train is coming. This would be truly amazing.

Happy Modelling!