Wiki source code of Documentation

Version 16.1 by krat on 2014/06/18 15:19

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 Contact reading in triggers should only used when it is clearly determined which train will fire the contact.
121
122 === TrainController ===
123
124 Train-Schedules should be modelled by putting together the Station-to-Station-Controllers for every train in individual regions.
125
126 === Speed: ===
127
128 * SLOW: for the stations
129 * CAUTION: for slowdown (and optional points)
130 * NORMAL: for the other tracks
131
132 == Codestyle ==
133
134 Use entry-/exit-actions instead of actions on transitions, if possible.
135 If using hostcode, only use functions delivered by our own C-Interface and not the Höhrmann-API.
136
137 == Mutual Exclusion ==
138
139 bool <track>_req[<trainAmount>] contains the requests for each track and train. Before the availability of arrays, we used bool <train>_<track>_req.
140 int <track>_perm contains the trainnumber of the train, who is allowed to drive on <track>.
141
142 == Deadlock Prevention ==
143
144 An example controller for deadlock prevention is located in// rail-repo: docs/deadlocks/resolve_deadlock.sct//
145
146 Sidings should only be used in one direction.
147
148 Trains trying to leave a station in order to use KIO_LN_0 or KIO_LN_1 should, if they do not receive the locks for all segments, release them for two ticks.
149
150 = C Controller =
151
152 The C controller wraps the basic railway interface and creates an correct environment to run the generated controller.
153
154 == Make Script ==
155
156 A make script written in Python is located in rail-repo: code/make.py
157
158 This script will compiel the whole controller for simulation or real railway and optionally executes it.//
159 //
160
161 Calling**// python// //make.py//** without further command-line arguments will print a help message with all available command line options.
162
163 Make Script Features:
164
165 * Header-file will be included automatically
166
167 Results are located in //rail-repo: code/build///
168
169 == Railway Interface ==
170
171 Provided functions are defined in// rail-repo: code/hostcode/controller.h//
172
173 == Interaction ==
174
175 === Quit, Pause and Cleanup ===
176
177 Quit, pause and cleanup functionality is handled in the c interface.
178
179 **CTRL+C** (SIGINT)** **quits the controller
180
181 **CTRL+\** (SIGQUIT)** **cleans up
182
183 **CTRL+Z **(SIGSTP) pauses and continues
184
185
186
187