The Scheduler is used to route between segments with contact. Each train is scheduled individually without looking at the other trains. Other trains may only influence this by the schedule through the inputs route
and train_on_track
. Following inputs are used to achieve this:
- initial_position: Send by Controller as input, only used in first tick, then never again, determines the starting position of a train. Has to be a segment
- final_station: Send by Controller. Is influenced by deadlock avoidance if necessary (forces a destination on blocking trains that do not have a destination)
- current_position: send by hardware abstraction to determine the current segment
- reached: send by hardware abstraction to signal, that the segment specified by next_segment was reached
- route: 0 or 1. From every station it is possible to take two different routes to an other station. If route is 0 the normal "shortest" (the path that passes less stations) is used. 1 is used to signal that an alternative route should be used. It is set by the deadlock prevention
- train_on_track: send by hardware abstraction to check if some tracks are blocked. Only relevant for driving to an alternative platform if current platform is in use.
lock
initial_position _XX: Set by deadlock prevention to lock specific segment transition in KH and to KIO
Relevant outputs of the scheduler (outputs that are relevant for other parts of the controller and not only for understand why a train drives a specific way):
...