Show last authors
1 == T1A1: Important Thoughts ==
2
3 Um ein Echtzeitsystem zu sein, muss die Zeit einen Einfluss auf das System haben. Es wird von einem Echtzeitsystem gefordert, dass spätestens innerhalb einer geforderten Zeit eine gegebene Aufgabe abgeschlossen ist. Dies im Falle der Bahn der Fall. Wenn ein Zug von A nach B gesteuert werden soll, muss dieses innerhalb einer gewissen Zeit geschehen und dann auch abgeschlossen sein. Typischer Weise sind bei Echtzeitsystemen kleine Zeitintervalle gefordert, was jedoch nicht zwingend der Fall ist. Doch auch bei der Bahn gibt es Anforderungen, welche innerhalb kürzester Zeit ausgeführt werden sollen, wie z.B. das Bremsen eines Zuges um eine Kollision oder ein Ausbrechen zu verhindern.
4
5 Bei dem Bahnmodell gibt es mehrere eingebettete Systeme. So ist z.B. der Controller zur Steuerung lediglich zur Steuerung von Zügen zuständig. Dieser Controller ist in eine Umgebung eingebettet, die ihn mit Daten versorgt, welche wieder von Sensoren auf den Strecken gewonnen werden. Für den Controller jedoch ist das irrelevant, es bezieht seine nötigen Informationen aus der Umgebung, in die er eingebunden ist.
6
7 Die Modellbahn ist ein sicherheitskritisches System, weil im Falle eines Fehlers Schäden entstehen können. Sollten zwei Züge durch einen fehlerhaften Controller kollidieren oder ein Zug aufgrund einer zu hohen Geschwindigkeit in einer Kurve entgleisen, kann dabei ein Schaden entstehen. Auch wenn dieser Schaden gering scheinen mag, ist es dennoch möglich überhaupt einen Sachschaden zu verursachen. Dies ist nicht bei allen Projekten der Fall, weshalb es sich hier um ein sicherheitskritisches System handelt.
8
9 == T1A2: C Interface ==
10
11 geplanter Ablauf des Controllers (ohne konkrete Geschwindigkeiten):
12
13 01. Blöcke KH_ST_0 und KIO_LN_0 reservieren
14 02. Weichen 0, 1 auf Abbiegen und Weiche 4 auf Durchfahrt stellen
15 03. Signal KH_ST_1 auf gelb stellen
16 04. Fahrstrom der Blöcke KH_ST_1, KH_ST_0 und KIO_LN_0 auf rückwärts stellen
17 05. Nach Verlassen von KH_ST_1 Signal auf rot stellen und Block freigeben
18 06. Nach Verlassen von KH_ST_0 Block freigeben
19 07. Blöcke OC_ST_4, IC_ST_0 und IC_ST_1 reservieren
20 08. Weichen 16, 17, 18 auf Abbiegen und Weiche 20 auf Durchfahrt stellen
21 09. Signal KIO_LN_0 auf gelb stellen
22 10. Fahrstrom des Blocks OC_ST_4 auf rückwärts und der Blöcke IC_ST_0 und IC_ST_1 auf vorwärts stellen
23 ~11. Nach Verlassen von KIO_LN_0 Signal auf rot stellen und Block freigeben
24 12. Nach Verlassen von OC_ST_4 Block freigeben
25 13. Nach Verlassen von IC_ST_0 Block freigeben
26 14. Nach Erreichen von IC_ST_1 5s halten
27 15. Blöcke IC_ST_4, OC_ST_0 und KIO_LN_1 reservieren
28 16. Weichen 27, 28, 29 auf Abbiegen und Weiche 24 auf Durchfahrt stellen
29 17. Signal IC_ST_1 auf gelb stellen
30 18. Fahrstrom der Blöcke OC_ST_0, KIO_LN_1 auf rückwärts und der Blöcke IC_ST_1 und IC_ST_4 auf vorwärts stellen
31 19. Nach Verlassen von IC_ST_1 Signal auf rot stellen und Block freigeben
32 20. Nach Verlassen von IC_ST_4 Block freigeben
33 21. Nach Verlassen von OC_ST_0 Block freigeben
34 22. Blöcke KH_ST_6 und KH_ST_1 reservieren
35 23. Weiche 9 auf Abbiegen und Weiche 8 auf Durchfahrt stellen
36 24. Signal KIO_LN_1 auf gelb stellen
37 25. Fahrstrom der Blöcke KH_ST_6 und KH_ST_1 auf rückwärts stellen
38 26. Nach Verlassen von KIO_LN_1 Signal auf rot stellen und Block freigeben
39 27. Nach Verlassen von KH_ST_6 Block freigeben
40 28. Nach Erreichen von KH_ST_1 5s halten
41
42 [[attach:SampleController.c]]
43
44 == T1A3: Reality vs. Simulation ==
45
46 Es haben sich einige Weichenstellungen anders Verhalten als geplant.
47
48 Desweiteren habe ich noch keine Umsetzung zur Reservierung eines Streckenabschnittes vorgenommen. Dies ist sinnvoll und deshalb auch dokumentiert, dass man es machen sollte. In dem Railway Interface ist lediglich eine Funktion "trackused", welche angibt, ob sich ein Zug auf dem gefragten Abschnitt befindet. Das verhindert jedoch nicht, dass dennoch Einstellungen an dem Abschnitt geändert werden können.
49
50 In der Simulation bekommt man leicht speed_missmatch-Fehler. Es kann passieren, dass im ersten Schleifendurchlauf alles wunderbar funktioniert, im zweiten jedoch solch ein Fehler geworfen wird obwohl nach dem ersten abgeschlossenen Durchlauf alles zurückgesetzt wird. Auf der echten Bahn sollte dieser Fehler keine großen Probleme bereiten. Vielleicht fallen diese Fehler garnicht auf, obwohl mehr davon vorhanden sind.