Show last authors
1 == Trains ==
2
3 Each train has a trainnumber. The trainnumber is for prioritization, when multiple trains compete for the same track. Lower numbers mean higher priorities, e.g. train 0 has the highest priority. Priorities can't be changed dynamicly.
4 Each train has one home-track at each station.
5
6 === Train numbering ===
7
8 Variable **trainNum** is used to identify trains.
9
10 The assignment of numbers to trains is chosen as followed
11
12 |=(((
13 trainNum
14 )))|=(((
15 Starting track
16 )))
17 |(((
18 0
19 )))|(((
20 KH_ST_1
21 )))
22 |(((
23 1
24 )))|(((
25 KH_ST_2
26 )))
27 |(((
28 2
29 )))|(((
30 KH_ST_3 (r)
31 )))
32 |(((
33 3
34 )))|(((
35 KH_ST_4 (r)
36 )))
37 |(((
38 4
39 )))|(((
40 IC_ST_3
41 )))
42 |(((
43 5
44 )))|(((
45 IC_ST_2
46 )))
47 |(((
48 6
49 )))|(((
50 OC_ST_2
51 )))
52 |(((
53 7
54 )))|(((
55 OC_ST_1
56 )))
57 |(((
58 8
59 )))|(((
60 KH_ST_5
61 )))
62 |(((
63 9
64 )))|(((
65 IC_ST_1
66 )))
67 |(((
68 10
69 )))|(((
70 OC_ST_3
71 )))
72
73 == Logging ==
74
75 Variable **debug** indicates verbose logging.
76
77 Prefix of all log messages must be :** [trainnum][ST-ST]**
78
79 Use **println** function to produce textual output. Do not use printf or other io functions, because output may not be flushed correctly.
80
81 == Tracks ==
82
83 Stopping on tracks without contacts is permitted. Therefore they must be reserved and used with an adjacent track.
84 Each station has one drive-through track for each possible direction:
85
86 |=(((
87 station
88 )))|=(((
89 drive-through track
90 )))
91 |(((
92 IC_station
93 )))|(((
94 IC_ST_1
95 )))
96 |(((
97 OC_station
98 )))|(((
99 OC_ST_3
100 )))
101 |(((
102 KH_station
103 )))|(((
104 KH_ST_5
105 )))
106 |(% colspan="1" %)(% colspan="1" %)
107 (((
108 KH_station(r)
109 )))|(% colspan="1" %)(% colspan="1" %)
110 (((
111 KH_ST_1
112 )))
113
114 === Station-to-Station ===
115
116 Fuctions **void railArrival(int train, int station)** and **int railDeparture(int train)** should be used at the end of every Station-to-Station-Controller.
117
118 At the end of every Station-to-Station-Controller the trains should stand in one station, because every controller starts with the train in standstill.
119
120 === TrainController ===
121
122 Train-Schedules should be modelled by putting together the Station-to-Station-Controllers for every train in individual regions.
123
124 === Speed: ===
125
126 * SLOW: for the stations
127 * CAUTION: for points and slowdown
128 * NORMAL: for the other tracks
129
130 == Codestyle ==
131
132 Use entry-/exit-actions instead of actions on transitions, if possible.
133 If using hostcode, only use functions delivered by our own C-Interface and not the Höhrmann-API.
134
135 == Mutual Exclusion ==
136
137 bool <track>_req[<trainAmount>] contains the requests for each track and train. Before the availability of arrays, we used bool <train>_<track>_req.
138 int <track>_perm contains the trainnumber of the train, who is allowed to drive on <track>.
139
140 == Quit, Pause and Cleanup ==
141
142 Quit, pause and cleanup functionality is handled in the c interface.
143
144 **CTRL+C** (SIGINT)** **quits the controller
145
146 **CTRL+\** (SIGQUIT)** **cleans up
147
148 **CTRL+Z **(SIGSTP) pauses and continues
149
150
151
152