How do you divide a model railway into blocks, how does software know if a block is occupied, and what is needed for reliable automatic running without collisions?
A block is a defined section of the layout that only one train may occupy at any given moment. As soon as a train enters a block, that block is closed to all other trains until the train leaves it again and the block is released. This principle — borrowed from the full-size railway world — is the foundation of virtually every automatic running system: without block control, two trains could run towards each other or overtake each other on the same stretch of track without the software noticing.
Block control therefore comes down to two things that need to work together: knowing whether a block is occupied (occupancy detection), and deciding which train may go where based on that (route management). Both are covered below, with the caveat that exactly how ModelRailPro implements this internally has, in places, not yet been verified on a real layout.
Occupancy detection (also called feedback, see the feedback and occupancy detection guide for the communication side via s88, LocoNet, CAN or RailCom) is the mechanism that translates the physical presence of a train into a signal the control software can read. Three common, brand-neutral methods exist:
For block control where the software needs to know "is this whole block clear or not", current sensing is functionally the most suitable, since reed and optical sensors only register a moment of passage and therefore need to be combined with logic that derives a whole-section occupied/clear status from that (for example: occupied from sensor A until sensor B has been passed).
Once the software knows which blocks are occupied, it can reserve and release routes (paths spanning multiple blocks). The basic principle behind this kind of interlocking logic typically follows this cycle:
The key point of this cycle is that blocks on a route are reserved in advance, not only once the train has already arrived. This is what prevents two trains from claiming the same stretch of track at the same time.
A fundamental safety principle from the world of interlocking — independent of any specific DCC standard — is that a system should fail safe on doubtful, missing or conflicting feedback: not releasing the next block, or stopping the train, rather than proceeding on the assumption that everything is fine. In other words: when in doubt, stopping is the safe choice, not continuing.
This is a general design principle, not an NMRA DCC standard. Exactly how ModelRailPro handles this internally — what behaviour the software shows when an expected occupancy signal is missing, arrives late, or conflicts with another sensor — is an application-level design choice. to be confirmed on a layout
Besides occupancy detection, there is often a need for a short section just before a signal or block boundary where an approaching train starts braking early, so it does not overshoot the boundary and enter the next block while that block is still occupied or not yet reserved. One well-known technique for this uses an asymmetric DCC signal (often referred to under a brand-specific name such as "ABC" braking): the decoder recognises this asymmetry in the track signal and brakes on its own, without a separate command being needed.
Important to know: this is not a universal NMRA standard, but a manufacturer-specific extension. Whether and how a decoder responds to it varies by manufacturer and is usually set via a CV that can differ between manufacturers. Whether and how ModelRailPro drives this kind of asymmetric braking cannot be derived from documentation and does not appear to be a current feature of the app — so it should not be treated as a confirmed feature. to be confirmed on a layout
A commonly used concept in control software in general is a "learn mode": while running trains manually, the software records which blocks and routes exist, how long a leg takes, and where signals or stop markers are located. That information is then used to plan and run automatically later, without every route having to be programmed separately.
The exact behaviour of learn mode in ModelRailPro — precisely what is recorded, how robust it is to varying driving styles, and how reliable the result is in practice — is an application-level design choice that cannot be derived from documentation. This should be confirmed within the app itself. to be confirmed on a layout
Regardless of which software you use, a few preconditions apply for reliable block control:
Without this foundation, any automatic running system — regardless of the brand of control software — risks false stops or, worse, collisions.