Wiki source code of Tutorial 3 - krat
Last modified by krat on 2025/01/30 12:05
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | == T3A1: Round and Round! == | ||
2 | |||
3 | [[attach:T3A1.c]] | ||
4 | |||
5 | [[attach:SampleController.c]] | ||
6 | |||
7 | [[attach:T3A1.sct]] | ||
8 | |||
9 | |||
10 | |||
11 | == T3A2: To boldly model where no one has modeled before... == | ||
12 | |||
13 | Der Zug auf dem IC hat vorfahrt. Passiert er IC_LN_4 wir der Zug vom KH bei KIO_LN_0 sanft gebremst und wartet, bis der andere im Bahnhof ist. Sind beide Züge in der IC Station, hat der Zug auf IC_ST_1 vorfahrt, IC_ST_2 muss warten. | ||
14 | |||
15 | [[attach:T3A2.sct]] | ||
16 | |||
17 | Fehlen tut noch, dass die Züge gestoppt werden, wenn die IC Station voll ist. Das sieht dann ungefähr so aus: | ||
18 | |||
19 | {{code}} | ||
20 | //Check, whether IC Station has space | ||
21 | region "isICfree": | ||
22 | initial state no_space | ||
23 | --> is_free with '!trackused(railway, IC_ST_1)' | ||
24 | | '!trackused(railway, IC_ST_2)' | ||
25 | | '!trackused(railway, IC_ST_3)' | ||
26 | / IC_free = true; | ||
27 | |||
28 | state is_free | ||
29 | --> no_space with 'trackused(railway, IC_ST_1)' | ||
30 | & 'trackused(railway, IC_ST_2)' | ||
31 | & 'trackused(railway, IC_ST_3)' | ||
32 | / IC_free = false; | ||
33 | |||
34 | //Is IC train in a critical section? | ||
35 | region "isCritical": | ||
36 | initial state ok | ||
37 | --> critical with IC_LN_4_1 / crit = true; | ||
38 | |||
39 | state critical | ||
40 | --> ok with IC_ST_1_1 | IC_ST_2_1 | IC_ST_3_1 / crit = false; | ||
41 | |||
42 | //Does KH train have to stop? | ||
43 | region "Stop KH train": | ||
44 | initial state init | ||
45 | --> slowdown with KIO_LN_0_1 & (!IC_free | crit) / 'settrack(railway, KIO_LN_0, REV, 40)'; | ||
46 | |||
47 | state slowdown | ||
48 | --> stop with KIO_LN_0_0 / 'settrack(railway, KIO_LN_0, BRAKE, 0)'; | ||
49 | |||
50 | state stop | ||
51 | --> init with IC_free & !crit / 'settrack(railway, KIO_LN_0, REV, 100)'; | ||
52 | 'setpoint(railway, 16, BRANCH)'; | ||
53 | 'setpoint(railway, 17, BRANCH)'; | ||
54 | 'setpoint(railway, 18, BRANCH)'; | ||
55 | {{/code}} | ||
56 | |||
57 | |||
58 | |||
59 | Leider hängt sich Kieler ab dem Punkt beim C code generieren kommentarlos auf. Analog würde dann auch der Zug auf dem IC auf IC_LN_5 halten und warten bis ein Platz frei ist. | ||
60 | |||
61 | == T3A3: Important Thoughts == | ||
62 | |||
63 | * Einen *.sct zu *.c Knopf, der einem das von Hand transformieren spart | ||
64 | * Beim erstellen der .c vordefinierte Sachen automatisch hinzufügen (includes usw.) | ||
65 | * Ab und zu wären Fehlermeldungen sehr hilfreich, z.B. bei write-write Konflikten oder instantanen Schleifen. Sieht man zwar in den Zwischenschritten, aber grade wenn das Programm größer wird guckt man sich das ja nicht jedesmal bis ins Detail durch | ||
66 | * Sich einzelne regions ohne Umwege getrennt vom Rest anschauen zu können (also das Diagramm) wäre gerade bei größeren SCCharts sehr nützlich, die für sich zu unübersichtlich werden | ||
67 | |||
68 | |||
69 | |||
70 |