Changes for page Basic design

Last modified by nfl on 2025/01/30 12:05

From version 14.1
edited by krat
on 2014/08/11 11:18
Change comment: There is no comment for this version
To version 15.1
edited by sna
on 2014/08/13 02:39
Change comment: There is no comment for this version

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.krat
1 +XWiki.sna
Content
... ... @@ -55,882 +55,313 @@
55 55  Next the train **must** wait for// int railDeparture(int train)// to return 1.
56 56  After the waiting has finished the controller can reach a final state and pass the control back to the train controller.
57 57  
58 -=== Structure   ===
58 +=== Structure  ===
59 59  
60 -|=(((
61 -{{{input int *_perm;}}}
60 +{{code linenumbers="true" language="sct"}}
61 +//
62 +// Structure of a Station-2-Station controller from Station * to Station *
63 +//
64 +scchart STST " * to * Controller " {
62 62  
63 -{{{output bool *_req[11];}}}
66 + // Set of permission variables for required tracks
67 + input int *_perm;
64 64  
65 -{{{input int trainNum;}}}
69 + // Set of request variables for required tracks for 11 trains
70 + output bool *_req[11];
66 66  
67 -{{{input int depTrack;}}}
72 + // Train number
73 + input int trainNum;
68 68  
69 -{{{input int destTrack;}}}
75 + // Number of the departure track in a station
76 + input int depTrack;
70 70  
71 -{{{input bool cleanup;}}}
78 + // Number of the destination track in a station
79 + input int destTrack;
72 72  
73 -{{{input bool debug;}}}
81 + // Cleanup flag for selecting the destination track
82 + input bool cleanup;
74 74  
75 -{{{output int arrTrack;}}}
84 + // Debug flag for additional output
85 + input bool debug;
76 76  
77 -{{{int i_arrOnTrack;}}}
87 + // Arrival track
88 + output int arrTrack;
78 78  
79 -{{{ }}}
80 -
81 -{{{initial state *_ST {}}}
82 -
83 -{{{    entry debug / 'println([trainNum][ST-ST] ... )';}}}
84 -
85 -{{{ }}}
86 -
87 -{{{    initial state waitForPerm {}}}
88 -
89 -{{{        entry / *_ST_4_req[trainNum] = true;}}}
90 -
91 -{{{        entry / *_LN_0_req[trainNum] = true;}}}
92 -
93 -{{{    }}}}
94 -
95 -{{{    --> gotPerm with (*_ST_4_perm == trainNum) & (*_LN_0_perm == trainNum)}}}
96 -
97 -{{{    --> backOff with (*_ST_4_perm == trainNum) | (*_LN_0_perm == trainNum);}}}
98 -
99 -{{{ }}}
100 -
101 -{{{    state backOff}}}
102 -
103 -{{{    --> backOff1;}}}
104 -
105 -{{{ }}}
106 -
107 -{{{    state backOff1 {}}}
108 -
109 -{{{ entry / *_ST_4_req[trainNum] = false;}}}
110 -
111 -{{{ entry / *_LN_0_req[trainNum] = false;}}}
112 -
113 -{{{    }}}}
114 -
115 -{{{    --> waitForPerm;}}}
116 -
117 -{{{ }}}
118 -
119 -{{{ final state gotPerm;}}}
120 -
121 -{{{}}}}
122 -
123 -{{{>-> Dep_*_ST;}}}
124 -
125 -{{{ }}}
126 -
127 -{{{state Dep_*_ST {}}}
128 -
129 -{{{    entry / 'railPoint(*,STRAIGHT)';}}}
130 -
131 -{{{    entry / 'railSignal(*_LN_0, FWD, RED)';}}}
132 -
133 -{{{    entry / 'railTrack(*_LN_0,FWD,trainNum,NORMAL)';}}}
134 -
135 -{{{    entry / 'railTrack(*_ST_4,FWD,trainNum,NORMAL)';}}}
136 -
137 -{{{    entry depTrack == 1 / 'railSignal(*_ST_1, FWD, GREEN)';}}}
138 -
139 -{{{    entry depTrack == 2 / 'railSignal(*_ST_2, FWD, GREEN)';}}}
140 -
141 -{{{    entry depTrack == 3 / 'railSignal(*_ST_3, FWD, GREEN)';}}}
142 -
143 -{{{    ..........}}}
144 -
145 -{{{  } --> *_LN_0 with 'railContact(*_LN_0,0)';}}}
146 -
147 -{{{ }}}
148 -
149 -{{{  state *_LN_0 {}}}
150 -
151 -{{{    entry / 'println("[trainNum][ST-ST] Entering *_LN_0")';}}}
152 -
153 -{{{    entry debug / 'println("[trainNum][ST-ST] Requesting permission for *_LN_1")';}}}
154 -
155 -{{{    entry depTrack == 1 / 'railSignal(*_ST_1, FWD, RED)';}}}
156 -
157 -{{{    entry depTrack == 2 / 'railSignal(*_ST_2, FWD, RED)';}}}
158 -
159 -{{{    entry depTrack == 3 / 'railSignal(*_ST_3, FWD, RED)';}}}
160 -
161 -{{{    entry / *_LN_1_req[trainNum] = true;}}}
162 -
163 -{{{ }}}
164 -
165 -{{{    region Travel:}}}
166 -
167 -{{{      initial state Entry}}}
168 -
169 -{{{      --> Continue with 'railContact(*_LN_0,0)' & (*_LN_1_perm == trainNum)}}}
170 -
171 -{{{      --> Slowdown with 'railContact(*_LN_0,0)';}}}
172 -
173 -{{{ }}}
174 -
175 -{{{      state Slowdown {}}}
176 -
177 -{{{        entry debug / 'println("[trainNum][ST-ST] Slowing down on *_LN_0")';}}}
178 -
179 -{{{        entry / 'railTrack(*_LN_0,FWD,trainNum,CAUTION)';}}}
180 -
181 -{{{      }}}}
182 -
183 -{{{      --> Waiting with 'railContact(*_LN_0,1)'}}}
184 -
185 -{{{      --> Continue with *_LN_1_perm == trainNum;}}}
186 -
187 -{{{ }}}
188 -
189 -{{{      state Waiting {}}}
190 -
191 -{{{        entry debug / 'println("[trainNum][ST-ST] Stopping on *_LN_0")';}}}
192 -
193 -{{{        entry / 'railTrackBrake(*_LN_0)';}}}
194 -
195 -{{{      }}}}
196 -
197 -{{{      --> Continue with *_LN_1_perm == trainNum;}}}
198 -
199 -{{{ }}}
200 -
201 -{{{      final state Continue {}}}
202 -
203 -{{{        entry debug / 'println("[trainNum][ST-ST] Continuing on *_LN_0")';}}}
204 -
205 -{{{        entry / 'railSignal(*_LN_0,FWD,GREEN)';}}}
206 -
207 -{{{        entry / 'railTrack(*_LN_0,FWD,trainNum,NORMAL)';}}}
208 -
209 -{{{        entry / 'railTrack(*_LN_1,FWD,trainNum,NORMAL)';}}}
210 -
211 -{{{        entry / 'railSignal(*_LN_1, FWD, RED)';}}}
212 -
213 -{{{      };}}}
214 -
215 -{{{ }}}
216 -
217 -{{{    region Cleanup:}}}
218 -
219 -{{{      initial state Entry}}}
220 -
221 -{{{      --> cleanup with 'railContact(*_LN_0,0)';}}}
222 -
223 -{{{ }}}
224 -
225 -{{{      final state cleanup {}}}
226 -
227 -{{{      entry debug / 'println("[trainNum][ST-ST] Entered *_LN_0 completely")';}}}
228 -
229 -{{{      entry / 'railTrackOff(*_ST_4)';}}}
230 -
231 -{{{      entry / *_ST_4_req[trainNum] = false;}}}
232 -
233 -{{{      };}}}
234 -
235 -{{{  }>-> *_LN_0_*_LN_1;}}}
236 -
237 -{{{ }}}
238 -
239 -{{{  state *_LN_0_*_LN_1}}}
240 -
241 -{{{  --> *_LN_1 with 'railContact(*_LN_1,0)';}}}
242 -
243 -{{{ }}}
244 -
245 -{{{// ...................}}}
246 -
247 -{{{// Set of track segment controlling states such as before}}}
248 -
249 -{{{// ...................}}}
250 -
251 -{{{ }}}
252 -
253 -{{{state *_LN_5 {}}}
254 -
255 -{{{    int perm_all_next_segments = false;}}}
256 -
257 -{{{    entry / 'println("[trainNum][ST-ST] Entering *_LN_5")';}}}
258 -
259 -{{{    entry / 'railSignal(*_LN_4, FWD, RED)';}}}
260 -
261 -{{{ }}}
262 -
263 -{{{    region Travel:}}}
264 -
265 -{{{      initial state Entry}}}
266 -
267 -{{{      --> Continue with 'railContact(*_LN_5,0)' & perm_all_next_segments}}}
268 -
269 -{{{      --> Slowdown with 'railContact(*_LN_5,0)';}}}
270 -
271 -{{{ }}}
272 -
273 -{{{      state Slowdown {}}}
274 -
275 -{{{        entry debug / 'println("[trainNum][ST-ST] Slowing down on *_LN_5")';}}}
276 -
277 -{{{        entry / 'railTrack(*_LN_5,FWD,trainNum,CAUTION)';}}}
278 -
279 -{{{      }}}}
280 -
281 -{{{      --> Waiting with 'railContact(*_LN_5,1)'}}}
282 -
283 -{{{      --> Continue with perm_all_next_segments;}}}
284 -
285 -{{{ }}}
286 -
287 -{{{      state Waiting {}}}
288 -
289 -{{{        entry debug / 'println("[trainNum][ST-ST] Stopping on *_LN_5")';}}}
290 -
291 -{{{        entry / 'railTrackBrake(*_LN_5)';}}}
292 -
293 -{{{      }}}}
294 -
295 -{{{      --> Continue with perm_all_next_segments;}}}
296 -
297 -{{{ }}}
298 -
299 -{{{      final state Continue {}}}
300 -
301 -{{{        entry debug / 'println("[trainNum][ST-ST] Continuing on *_LN_5")';        }}}
302 -
303 -{{{        entry i_arrOnTrack == 1 / 'railTrack(*_ST_1,FWD,trainNum,NORMAL)';}}}
304 -
305 -{{{        entry i_arrOnTrack == 2 / 'railTrack(*_ST_2,FWD,trainNum,NORMAL)';}}}
306 -
307 -{{{        entry i_arrOnTrack == 3 / 'railTrack(*_ST_3,FWD,trainNum,NORMAL)';}}}
308 -
309 -{{{        ----------}}}
310 -
311 -{{{        entry / arrTrack = i_arrOnTrack;}}}
312 -
313 -{{{      };}}}
314 -
315 -{{{ }}}
316 -
317 -{{{    region Cleanup:}}}
318 -
319 -{{{      initial state Entry}}}
320 -
321 -{{{      --> cleanup with 'railContact(*_LN_5,0)';}}}
322 -
323 -{{{ }}}
324 -
325 -{{{      final state cleanup {}}}
326 -
327 -{{{        entry debug / 'println("[trainNum][ST-ST] Entered *_LN_5 completely")';}}}
328 -
329 -{{{        entry / 'railTrackOff(*_LN_4)';}}}
330 -
331 -{{{        entry / *_LN_4_req[trainNum] = false;}}}
332 -
333 -{{{      };}}}
334 -
335 -{{{ }}}
336 -
337 -{{{    region Permissions:}}}
338 -
339 -{{{      initial state checking {}}}
340 -
341 -{{{        entry / *_ST_0_req[trainNum] = true;}}}
342 -
343 -{{{        entry destTrack == 1 | !cleanup / *_ST_1_req[trainNum] = true;}}}
344 -
345 -{{{        entry destTrack == 2 | !cleanup / *_ST_2_req[trainNum] = true;}}}
346 -
347 -{{{        entry destTrack == 3 | !cleanup / *_ST_3_req[trainNum] = true;}}}
348 -
349 -{{{      }}}}
350 -
351 -\\
352 -
353 -{{{      --> success with destTrack == 1 & *_ST_0_perm == trainNum & *_ST_1_perm == trainNum / i_arrOnTrack = 1}}}
354 -
355 -\\
356 -
357 -{{{      --> success with destTrack == 2 & *_ST_0_perm == trainNum & *_ST_2_perm == trainNum / i_arrOnTrack = 2}}}
358 -
359 -\\
360 -
361 -{{{      --> success with destTrack == 3 & *_ST_0_perm == trainNum & *_ST_3_perm == trainNum / i_arrOnTrack = 3}}}
362 -
363 -{{{      --> success with *_ST_0_perm == trainNum & *_ST_1_perm == trainNum / i_arrOnTrack = 1}}}
364 -
365 -{{{      --> success with *_ST_0_perm == trainNum & *_ST_2_perm == trainNum / i_arrOnTrack = 2}}}
366 -
367 -{{{      --> success with *_ST_0_perm == trainNum & *_ST_3_perm == trainNum / i_arrOnTrack = 3}}}
368 -
369 -
370 -\\
371 -
372 -{{{      --> resolving with *_ST_0_perm == trainNum | *_ST_3_perm == trainNum | *_ST_2_perm == trainNum | *_ST_1_perm == trainNum;}}}
373 -
374 -{{{ }}}
375 -
376 -{{{      state resolving}}}
377 -
378 -{{{      --> resolving1;}}}
379 -
380 -{{{ }}}
381 -
382 -{{{      state resolving1 {}}}
383 -
384 -{{{        entry / *_ST_0_req[trainNum] = false;}}}
385 -
386 -{{{        entry / *_ST_1_req[trainNum] = false;}}}
387 -
388 -{{{        entry / *_ST_2_req[trainNum] = false;}}}
389 -
390 -{{{        entry / *_ST_3_req[trainNum] = false;}}}
391 -
392 -{{{      }}}}
393 -
394 -{{{      --> checking;}}}
395 -
396 -{{{ }}}
397 -
398 -{{{      state success}}}
399 -
400 -{{{      --> success1;}}}
401 -
402 -{{{ }}}
403 -
404 -{{{      final state success1 {}}}
405 -
406 -{{{        entry !(i_arrOnTrack == 1) / *_ST_1_req[trainNum] = false;      }}}
407 -
408 -{{{        entry !(i_arrOnTrack == 2) / *_ST_2_req[trainNum] = false;}}}
409 -
410 -{{{        entry !(i_arrOnTrack == 3) / *_ST_3_req[trainNum] = false;}}}
411 -
412 -{{{        entry / perm_all_next_segments = true;}}}
413 -
414 -{{{      };}}}
415 -
416 -{{{  }>-> *_LN_5_*_ST;}}}
417 -
418 -{{{ }}}
419 -
420 -{{{  state *_LN_5_*_ST}}}
421 -
422 -{{{  --> Arr_*_ST with i_arrOnTrack == 1 & 'railContact(*_ST_1,0)'}}}
423 -
424 -{{{  --> Arr_*_ST with i_arrOnTrack == 2 & 'railContact(*_ST_2,0)'}}}
425 -
426 -{{{  --> Arr_*_ST with i_arrOnTrack == 3 & 'railContact(*_ST_3,0)';}}}
427 -
428 -{{{ }}}
429 -
430 -{{{  state Arr_*_ST {}}}
431 -
432 -{{{    entry / 'railSignal(*_LN_5, FWD, RED)';}}}
433 -
434 -{{{    entry / 'railTrackOff(*_LN_5)';}}}
435 -
436 -{{{    entry / 'railTrack(*_ST_0,FWD,trainNum,SLOW)';}}}
437 -
438 -{{{    entry i_arrOnTrack == 1 / 'railTrack(*_ST_1,FWD,trainNum,SLOW)';}}}
439 -
440 -{{{    entry i_arrOnTrack == 2 / 'railTrack(*_ST_2,FWD,trainNum,SLOW)';}}}
441 -
442 -{{{    entry i_arrOnTrack == 3 / 'railTrack(*_ST_3,FWD,trainNum,SLOW)';}}}
443 -
444 -{{{    entry / *_LN_5_req[trainNum] = false;}}}
445 -
446 -{{{ }}}
447 -
448 -{{{    initial state SlowEntry}}}
449 -
450 -{{{    --> Slow with i_arrOnTrack == 1 & 'railContact(*_ST_1,0)'}}}
451 -
452 -{{{    --> Slow with i_arrOnTrack == 2 & 'railContact(*_ST_2,0)'}}}
453 -
454 -{{{    --> Slow with i_arrOnTrack == 3 & 'railContact(*_ST_3,0)';}}}
455 -
456 -{{{ }}}
457 -
458 -{{{    state Slow {}}}
459 -
460 -{{{      entry / 'railTrackOff(*_ST_0)';}}}
461 -
462 -{{{      entry / *_ST_0_req[trainNum] = false;}}}
463 -
464 -{{{    }}}}
465 -
466 -{{{    --> Halt with i_arrOnTrack == 1 & 'railContact(*_ST_1,1)'}}}
467 -
468 -{{{    --> Halt with i_arrOnTrack == 2 & 'railContact(*_ST_2,1)'}}}
469 -
470 -{{{    --> Halt with i_arrOnTrack == 3 & 'railContact(*_ST_3,1)';}}}
471 -
472 -{{{ }}}
473 -
474 -{{{    final state Halt {}}}
475 -
476 -{{{      entry i_arrOnTrack == 1 / 'railTrackBrake(*_ST_1)';}}}
477 -
478 -{{{      entry i_arrOnTrack == 2 / 'railTrackBrake(*_ST_2)';}}}
479 -
480 -{{{      entry i_arrOnTrack == 3 / 'railTrackBrake(*_ST_3)';}}}
481 -
482 -{{{      entry i_arrOnTrack == 1 / 'railArrival(trainNum, *_ST_1)';}}}
483 -
484 -{{{      entry i_arrOnTrack == 2 / 'railArrival(trainNum, *_ST_2)';}}}
485 -
486 -{{{      entry i_arrOnTrack == 3 / 'railArrival(trainNum, *_ST_3)';}}}
487 -
488 -{{{    };}}}
489 -
490 -{{{  }}}}
491 -
492 -{{{  >-> done;}}}
493 -
494 -{{{ }}}
495 -
496 -{{{  state done}}}
497 -
498 -{{{  --> reallyDone with 'railDeparture(trainNum)';}}}
499 -
500 -{{{ }}}
501 -
502 -{{{  final state reallyDone;}}}
503 -)))|=(((
504 -~/~/ All permissions variables
505 -
506 -~/~/ All request variables
507 -
508 -~/~/ Train number
509 -
510 -~/~/ Departure track number
511 -
512 -~/~/ Destination track number
513 -
514 -~/~/ Cleanup flag for selecting the destination track
515 -
516 -~/~/ Debug flag for additional output
517 -
518 -~/~/ Arrival track
519 -
520 -~/~/ Variable (arrival track) for selecting correct station elements
521 -
90 + // Variable with value for arrTrack for selecting correct station elements
91 + int i_arrOnTrack;
522 522  
523 -
524 -~/~/ Handles departing from a station
525 -
526 -~/~/ Additional output for debugging
527 -
93 + // Handles departing from a station *
94 + initial state *_ST {
95 + // hostcode call for additional output when debug
96 + entry debug / 'println([trainNum][ST-ST] ... )';
528 528  
529 -
530 -~/~/ State, which sets requests for needed tracks
531 -
98 + // State, which sets requests for needed tracks
99 + initial state waitForPerm {
100 + entry / *_ST_4_req[trainNum] = true;
101 + entry / *_LN_0_req[trainNum] = true;
102 + }
103 + // Transition is taken, if all permissions are received
104 + --> gotPerm with (*_ST_4_perm == trainNum) & (*_LN_0_perm == trainNum)
105 + // Transition is taken, if some (not all) permissions are received
106 + --> backOff with (*_ST_4_perm == trainNum) | (*_LN_0_perm == trainNum);
532 532  
533 -
108 + // State for waiting an additional tick when not all permissions are received
109 + state backOff
110 + --> backOff1;
534 534  
535 -
112 + // State, which releases the requests for needed tracks
113 + state backOff1 {
114 + entry / *_ST_4_req[trainNum] = false;
115 + entry / *_LN_0_req[trainNum] = false;
116 + }
117 + // Transition to repeat requesting permissions procedure
118 + --> waitForPerm;
536 536  
537 -
538 -~/~/ Transition is taken, if all permissions are received
539 -
540 -~/~/ Transition is taken, if some (not all) permissions are received
541 -
120 + final state gotPerm;
121 + }
122 + // Transition to the departure state
123 + >-> Dep_*_ST;
542 542  
543 -
544 -~/~/ State for waiting an additional Tick
545 -
125 + // State, which handles the departure of a train
126 + state Dep_*_ST {
127 + // Set of entry-Actions with hostcode calls to set tracks, points and signals according to depTrack
128 + entry / 'railPoint(*,STRAIGHT)';
129 + entry / 'railSignal(*_LN_0, FWD, RED)';
130 + entry / 'railTrack(*_LN_0,FWD,trainNum,NORMAL)';
131 + entry / 'railTrack(*_ST_4,FWD,trainNum,NORMAL)';
132 + entry depTrack == 1 / 'railSignal(*_ST_1, FWD, GREEN)';
133 + entry depTrack == 2 / 'railSignal(*_ST_2, FWD, GREEN)';
134 + entry depTrack == 3 / 'railSignal(*_ST_3, FWD, GREEN)';
135 + //...
136 + // Transition to next track segment, if contact is triggered
137 + } --> *_LN_0 with 'railContact(*_LN_0,0)';
546 546  
547 547  
548 -
549 549  
550 -~/~/ State, which releases the requests for needed tracks
551 -
141 + // .....................................................................................
142 + // Set of track segment controlling states such as follows
143 + // .....................................................................................
552 552  
553 -
145 + // Transition to next track segment, if contact is triggered
146 + state *_LN_0 {
147 + // Hostcode calls for outputs
148 + entry / 'println("[trainNum][ST-ST] Entering *_LN_0")';
149 + entry debug / 'println("[trainNum][ST-ST] Requesting permission for *_LN_1")';
150 + // Entry-Actions with hostcode calls to set previous signal according to depTrack to RED
151 + entry depTrack == 1 / 'railSignal(*_ST_1, FWD, RED)';
152 + entry depTrack == 2 / 'railSignal(*_ST_2, FWD, RED)';
153 + entry depTrack == 3 / 'railSignal(*_ST_3, FWD, RED)';
154 + // Requesting the next track segment
155 + entry / *_LN_1_req[trainNum] = true;
554 554  
555 -
157 + // Region for handling train driving
158 + region Travel:
159 + initial state Entry
160 + // Transition to continuing state, if permitted
161 + --> Continue with 'railContact(*_LN_0,0)' & (*_LN_1_perm == trainNum)
162 + // Transition to slowing down else
163 + --> Slowdown with 'railContact(*_LN_0,0)';
556 556  
557 -
558 -~/~/ Transition to repeat requesting permissions procedure
559 -
165 + // State for slowing down the train
166 + state Slowdown {
167 + entry debug / 'println("[trainNum][ST-ST] Slowing down on *_LN_0")';
168 + // Entry-Action with hostcode calls for slowing down the train
169 + entry / 'railTrack(*_LN_0,FWD,trainNum,CAUTION)';
170 + }
171 + // Transition to waiting state
172 + --> Waiting with 'railContact(*_LN_0,1)'
173 + // Transition to continuing state, if permitted
174 + --> Continue with *_LN_1_perm == trainNum;
560 560  
561 -
176 + // State for train waiting on permission
177 + state Waiting {
178 + entry debug / 'println("[trainNum][ST-ST] Stopping on *_LN_0")';
179 + // Entry-Action with hostcode call for stopping the train
180 + entry / 'railTrackBrake(*_LN_0)';
181 + }
182 + --> Continue with *_LN_1_perm == trainNum;
562 562  
563 -
184 + // State to continuing driving on the track
185 + final state Continue {
186 + entry debug / 'println("[trainNum][ST-ST] Continuing on *_LN_0")';
187 + // Entry-Actions with hostcode calls to set tracks and signals for driving
188 + entry / 'railSignal(*_LN_0,FWD,GREEN)';
189 + entry / 'railTrack(*_LN_0,FWD,trainNum,NORMAL)';
190 + entry / 'railTrack(*_LN_1,FWD,trainNum,NORMAL)';
191 + entry / 'railSignal(*_LN_1, FWD, RED)';
192 + };
564 564  
565 -
566 -~/~/ Transition to the departure state
567 -
194 + // Region for handling cleanup functionalities
195 + region Cleanup:
196 + initial state Entry
197 + // Transition to cleanup state
198 + --> cleanup with 'railContact(*_LN_0,0)';
568 568  
569 -
570 -~/~/ State, which handles the train departure
571 -
572 -~/~/ Set of entry-Actions to set tracks, points and signals according to depTrack
573 -
200 + // State for cleaning up the previous track segments
201 + final state cleanup {
202 + entry debug / 'println("[trainNum][ST-ST] Entered *_LN_0 completely")';
203 + // Entry-Action with hostcode call to switching off the previous track
204 + entry / 'railTrackOff(*_ST_4)';
205 + // Entry-Action to release the previous track
206 + entry / *_ST_4_req[trainNum] = false;
207 + };
208 + // Transition to transitional state
209 + }>-> *_LN_0_*_LN_1;
574 574  
575 -
576 -
211 + state *_LN_0_*_LN_1
212 + // Transition to next track segment, if contact is triggered
213 + --> *_LN_1 with 'railContact(*_LN_1,0)';
577 577  
215 + // ..................................................................................
578 578  
579 -
580 580  
581 -
582 582  
219 + // State for entering a station
220 + state *_LN_5 {
221 + // Variable for checking all needed permissions
222 + int perm_all_next_segments = false;
223 + entry / 'println("[trainNum][ST-ST] Entering *_LN_5")';
224 + entry / 'railSignal(*_LN_4, FWD, RED)';
583 583  
584 -
226 + // Region for handling train driving such as above,
227 + // only with perm_all_next_segments for permitting more than one track
228 + region Travel:
229 + initial state Entry
230 + --> Continue with 'railContact(*_LN_5,0)' & perm_all_next_segments
231 + --> Slowdown with 'railContact(*_LN_5,0)';
585 585  
586 -
587 -~/~/ Transition to next track segment, if contact is triggered
588 -
233 + state Slowdown {
234 + entry debug / 'println("[trainNum][ST-ST] Slowing down on *_LN_5")';
235 + entry / 'railTrack(*_LN_5,FWD,trainNum,CAUTION)';
236 + }
237 + --> Waiting with 'railContact(*_LN_5,1)'
238 + --> Continue with perm_all_next_segments;
589 589  
590 -
591 -~/~/ State for handling the train on track *_LN_0
592 -
593 -~/~/ Outputs for debugging
594 -
240 + state Waiting {
241 + entry debug / 'println("[trainNum][ST-ST] Stopping on *_LN_5")';
242 + entry / 'railTrackBrake(*_LN_5)';
243 + }
244 + --> Continue with perm_all_next_segments;
595 595  
596 -
597 -~/~/ Entry-Actions to set the previous signals to RED
598 -
246 + final state Continue {
247 + entry debug / 'println("[trainNum][ST-ST] Continuing on *_LN_5")';
248 + entry i_arrOnTrack == 1 / 'railTrack(*_ST_1,FWD,trainNum,NORMAL)';
249 + entry i_arrOnTrack == 2 / 'railTrack(*_ST_2,FWD,trainNum,NORMAL)';
250 + entry i_arrOnTrack == 3 / 'railTrack(*_ST_3,FWD,trainNum,NORMAL)';
251 + //...
252 + entry / arrTrack = i_arrOnTrack;
253 + };
599 599  
600 -
255 + // Region for handling cleanup-functionalities such as above
256 + region Cleanup:
257 + initial state Entry
258 + --> cleanup with 'railContact(*_LN_5,0)';
601 601  
602 -
603 -~/~/ Requesting the next segment
604 -
260 + final state cleanup {
261 + entry debug / 'println("[trainNum][ST-ST] Entered *_LN_5 completely")';
262 + entry / 'railTrackOff(*_LN_4)';
263 + entry / *_LN_4_req[trainNum] = false;
264 + };
605 605  
606 -
607 -~/~/ Region for handling train driving
608 -
266 + // Region for handling permissions of all needed tracks
267 + region Permissions:
268 + // State for requesting all needed tracks according to destination track and cleanup-Flag
269 + initial state checking {
270 + entry / *_ST_0_req[trainNum] = true;
271 + entry destTrack == 1 | !cleanup / *_ST_1_req[trainNum] = true;
272 + entry destTrack == 2 | !cleanup / *_ST_2_req[trainNum] = true;
273 + entry destTrack == 3 | !cleanup / *_ST_3_req[trainNum] = true;
274 + }
275 + // Transitions for permitted tracks match wished tracks
276 + --> success with destTrack == 1 & *_ST_0_perm == trainNum & *_ST_1_perm == trainNum / i_arrOnTrack = 1
277 + --> success with destTrack == 2 & *_ST_0_perm == trainNum & *_ST_2_perm == trainNum / i_arrOnTrack = 2
278 + --> success with destTrack == 3 & *_ST_0_perm == trainNum & *_ST_3_perm == trainNum / i_arrOnTrack = 3
279 + // Transitions for permitted tracks don't match wished tracks
280 + --> success with *_ST_0_perm == trainNum & *_ST_1_perm == trainNum / i_arrOnTrack = 1
281 + --> success with *_ST_0_perm == trainNum & *_ST_2_perm == trainNum / i_arrOnTrack = 2
282 + --> success with *_ST_0_perm == trainNum & *_ST_3_perm == trainNum / i_arrOnTrack = 3
283 + // Transition for not all tracks permitted
284 + --> resolving with *_ST_0_perm == trainNum | *_ST_3_perm == trainNum | *_ST_2_perm == trainNum | *_ST_1_perm == trainNum;
609 609  
610 -
611 -~/~/ Transition to continuing state, if permitted
612 -
613 -~/~/ Transition to slowing down else
614 -
286 + // State for waiting an additional tick
287 + state resolving
288 + --> resolving1;
289 +
290 + // State for releasing track requests
291 + state resolving1 {
292 + entry / *_ST_0_req[trainNum] = false;
293 + entry / *_ST_1_req[trainNum] = false;
294 + entry / *_ST_2_req[trainNum] = false;
295 + entry / *_ST_3_req[trainNum] = false;
296 + }
297 + // Transition for trying the requesting again
298 + --> checking;
615 615  
300 + // State for waiting an additional tick
301 + state success
302 + --> success1;
616 616  
617 -~/~/ State for slowing down
618 -
619 -~/~/ Addtitional output for debugging
620 -
621 -~/~/ Entry-Action for slowing down the train
622 -
304 + // State for releasing not used track requests
305 + final state success1 {
306 + entry !(i_arrOnTrack == 1) / *_ST_1_req[trainNum] = false;
307 + entry !(i_arrOnTrack == 2) / *_ST_2_req[trainNum] = false;
308 + entry !(i_arrOnTrack == 3) / *_ST_3_req[trainNum] = false;
309 + // Settting perm_all_next_segments to true
310 + entry / perm_all_next_segments = true;
311 + };
312 + // Transition to station entry states
313 + }>-> *_LN_5_*_ST;
623 623  
624 -
625 -~/~/ Transition to waiting state
626 -
627 -~/~/ Transition to continuing state, if permitted
628 -
315 + // State waiting for station entry
316 + state *_LN_5_*_ST
317 + --> Arr_*_ST with i_arrOnTrack == 1 & 'railContact(*_ST_1,0)'
318 + --> Arr_*_ST with i_arrOnTrack == 2 & 'railContact(*_ST_2,0)'
319 + --> Arr_*_ST with i_arrOnTrack == 3 & 'railContact(*_ST_3,0)';
629 629  
630 -
631 -~/~/ Waiting state
632 -
633 -~/~/ Addtitional output for debugging
634 -
635 -~/~/ Entry-Action for stopping the train
636 -
321 + // State for setting tracks, points and signals according to i_arrOnTrack
322 + // and releasing previous track request
323 + state Arr_*_ST {
324 + entry / 'railSignal(*_LN_5, FWD, RED)';
325 + entry / 'railTrackOff(*_LN_5)';
326 + entry / 'railTrack(*_ST_0,FWD,trainNum,SLOW)';
327 + entry i_arrOnTrack == 1 / 'railTrack(*_ST_1,FWD,trainNum,SLOW)';
328 + entry i_arrOnTrack == 2 / 'railTrack(*_ST_2,FWD,trainNum,SLOW)';
329 + entry i_arrOnTrack == 3 / 'railTrack(*_ST_3,FWD,trainNum,SLOW)';
330 + entry / *_LN_5_req[trainNum] = false;
637 637  
638 -
639 -~/~/ Tranisition to continuing state
640 -
332 + initial state SlowEntry
333 + --> Slow with i_arrOnTrack == 1 & 'railContact(*_ST_1,0)'
334 + --> Slow with i_arrOnTrack == 2 & 'railContact(*_ST_2,0)'
335 + --> Slow with i_arrOnTrack == 3 & 'railContact(*_ST_3,0)';
641 641  
642 -
643 -~/~/ State to continuing driving on the track
644 -
645 -~/~/ Addtitional output for debugging
646 -
647 -~/~/ Entry-Actions to set tracks and signals for driving
648 -
337 + // State for switching off previous track and releasing the request
338 + state Slow {
339 + entry / 'railTrackOff(*_ST_0)';
340 + entry / *_ST_0_req[trainNum] = false;
341 + }
342 + // Transitions to halt state, when train is at second contact of a track segment
343 + --> Halt with i_arrOnTrack == 1 & 'railContact(*_ST_1,1)'
344 + --> Halt with i_arrOnTrack == 2 & 'railContact(*_ST_2,1)'
345 + --> Halt with i_arrOnTrack == 3 & 'railContact(*_ST_3,1)';
649 649  
650 -
347 +
348 + final state Halt {
349 + // Entry-Actions for braking the train on correct track
350 + entry i_arrOnTrack == 1 / 'railTrackBrake(*_ST_1)';
351 + entry i_arrOnTrack == 2 / 'railTrackBrake(*_ST_2)';
352 + entry i_arrOnTrack == 3 / 'railTrackBrake(*_ST_3)';
353 + // Entry-Actions for waiting for timer on correct track
354 + entry i_arrOnTrack == 1 / 'railArrival(trainNum, *_ST_1)';
355 + entry i_arrOnTrack == 2 / 'railArrival(trainNum, *_ST_2)';
356 + entry i_arrOnTrack == 3 / 'railArrival(trainNum, *_ST_3)';
357 + };
358 + }
359 + >-> done;
651 651  
652 -
361 + state done
362 + // Transition to final state, if timer is ready
363 + --> reallyDone with 'railDeparture(trainNum)';
653 653  
654 -
655 -
656 -
657 -
658 -
659 -~/~/ Region for handling cleanup-functionalities
660 -
661 -
662 -
663 -~/~/ Transition to cleanup state
664 -
665 -
666 -
667 -~/~/ Cleanup state
668 -
669 -~/~/ Addtitional output for debugging
670 -
671 -~/~/ Entry-Action to switching off the previous track
672 -
673 -~/~/ Entry-Action to release the previous track
674 -
675 -
676 -
677 -~/~/ Transition to transitional state
678 -
679 -
680 -
681 -~/~/ Transitional state
682 -
683 -~/~/ Transition to next track segment, if contact is triggered
684 -
685 -
686 -
687 -
688 -
689 -
690 -
691 -
692 -
693 -
694 -
695 -~/~/ State for entering a station
696 -
697 -~/~/ Variable for checking all needed permissions
698 -
699 -~/~/ Output
700 -
701 -~/~/ Setting signal to RED
702 -
703 -
704 -
705 -~/~/ Region for handling train driving
706 -
707 -
708 -
709 -~/~/ Transition to continuing state, if permitted
710 -
711 -~/~/ Transition to slowing down else
712 -
713 -
714 -
715 -~/~/ State for slowing down
716 -
717 -~/~/ Addtitional output for debugging
718 -
719 -~/~/ Entry-Action for slowing down the train
720 -
721 -
722 -
723 -~/~/ Transition to waiting state
724 -
725 -~/~/ Transition to continuing state, if permitted
726 -
727 -
728 -
729 -~/~/ Waiting state
730 -
731 -~/~/ Addtitional output for debugging
732 -
733 -~/~/ Entry-Action for stopping the train
734 -
735 -
736 -
737 -~/~/ Tranisition to continuing state
738 -
739 -
740 -
741 -~/~/ State to continuing driving on the track
742 -
743 -~/~/ Addtitional output for debugging
744 -
745 -~/~/ Set of entry-Actions for setting tracks, points and signals according to i_arrOnTrack
746 -
747 -
748 -
749 -
750 -
751 -~/~/ Setting the arrival track (output)
752 -
753 -
754 -
755 -
756 -
757 -~/~/ Region for handling cleanup-functionalities
758 -
759 -
760 -
761 -~/~/ Transition to cleanup state
762 -
763 -
764 -
765 -~/~/ Cleanup state
766 -
767 -~/~/ Addtitional output for debugging
768 -
769 -~/~/ Entry-Action to switching off the previous tracks
770 -
771 -~/~/ Entry-Action to release the previous tracks
772 -
773 -
774 -
775 -
776 -
777 -~/~/ Region for handling permissions of all needed tracks
778 -
779 -~/~/ State for requesting all needed tracks according to destination track and cleanup-Flag
780 -
781 -
782 -
783 -
784 -
785 -
786 -
787 -
788 -
789 -
790 -
791 -~/~/ Transitions for permitted tracks match wished tracks
792 -
793 -
794 -
795 -
796 -
797 -
798 -
799 -
800 -
801 -~/~/ Transitions for permitted tracks don't match wished tracks
802 -
803 -
804 -
805 -
806 -
807 -~/~/ Transition for not all tracks permitted
808 -
809 -
810 -
811 -
812 -
813 -~/~/ State for waiting an additional tick
814 -
815 -
816 -
817 -
818 -
819 -~/~/ State for releasing track requests
820 -
821 -
822 -
823 -
824 -
825 -
826 -
827 -
828 -
829 -
830 -
831 -~/~/ Transition for trying the requesting again
832 -
833 -
834 -
835 -~/~/ State for waiting an additional tick
836 -
837 -
838 -
839 -
840 -
841 -~/~/ State for releasing not used track requests
842 -
843 -
844 -
845 -
846 -
847 -
848 -
849 -~/~/ Settting perm_all_next_segments to true
850 -
851 -
852 -
853 -~/~/ Transition to station entry states
854 -
855 -
856 -
857 -~/~/ State waiting for station entry
858 -
859 -
860 -
861 -
862 -
863 -
864 -
865 -
866 -
867 -~/~/ State for setting tracks, points and signals according to i_arrOnTrack
868 -
869 -~/~/ and releasing previous track request
870 -
871 -
872 -
873 -
874 -
875 -
876 -
877 -
878 -
879 -
880 -
881 -
882 -
883 -
884 -
885 -~/~/ State for slowing down, if train completely on track
886 -
887 -
888 -
889 -
890 -
891 -
892 -
893 -
894 -
895 -~/~/ State for switching off previous track and releasing the request
896 -
897 -
898 -
899 -
900 -
901 -
902 -
903 -~/~/ Transitions to halt states, if train at second contact of a track
904 -
905 -
906 -
907 -
908 -
909 -
910 -
911 -
912 -
913 -~/~/ Entry-Actions for braking the train on correct track
914 -
915 -
916 -
917 -
918 -
919 -~/~/ Entry-Actions for waiting for timer on correct track
920 -
921 -
922 -
923 -
924 -
925 -
926 -
927 -
928 -
929 -
930 -
931 -
932 -
933 -
934 -
935 -~/~/ Transition to final state, if timer is ready
936 -)))
365 + final state reallyDone;
366 +}
367 +{{/code}}
Confluence.Code.ConfluencePageClass[0]
Id
... ... @@ -1,1 +1,1 @@
1 -9471660
1 +9471662
URL
... ... @@ -1,1 +1,1 @@
1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/SS14Railway/pages/9471660/Basic design
1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/SS14Railway/pages/9471662/Basic design