Wiki source code of Documentation
Version 12.1 by sna on 2014/06/17 23:48
Show last authors
author | version | line-number | content |
---|---|---|---|
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 |