Show last authors
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