T1A1: Important Thoughts

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.

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.

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.

T1A2: C Interface

geplanter Ablauf des Controllers (ohne konkrete Geschwindigkeiten):

01. Blöcke KH_ST_0 und KIO_LN_0 reservieren
02. Weichen 0, 1 auf Abbiegen und Weiche 4 auf Durchfahrt stellen
03. Signal KH_ST_1 auf gelb stellen
04. Fahrstrom der Blöcke KH_ST_1, KH_ST_0 und KIO_LN_0 auf rückwärts stellen
05. Nach Verlassen von KH_ST_1 Signal auf rot stellen und Block freigeben
06. Nach Verlassen von KH_ST_0 Block freigeben
07. Blöcke OC_ST_4, IC_ST_0 und IC_ST_1 reservieren
08. Weichen 16, 17, 18 auf Abbiegen und Weiche 20 auf Durchfahrt stellen
09. Signal KIO_LN_0 auf gelb stellen
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
11. Nach Verlassen von KIO_LN_0 Signal auf rot stellen und Block freigeben
12. Nach Verlassen von OC_ST_4 Block freigeben
13. Nach Verlassen von IC_ST_0 Block freigeben
14. Nach Erreichen von IC_ST_1 5s halten
15. Blöcke IC_ST_4, OC_ST_0 und KIO_LN_1 reservieren
16. Weichen 27, 28, 29 auf Abbiegen und Weiche 24 auf Durchfahrt stellen
17. Signal IC_ST_1 auf gelb stellen
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
19. Nach Verlassen von IC_ST_1 Signal auf rot stellen und Block freigeben
20. Nach Verlassen von IC_ST_4 Block freigeben
21. Nach Verlassen von OC_ST_0 Block freigeben
22. Blöcke KH_ST_6 und KH_ST_1 reservieren
23. Weiche 9 auf Abbiegen und Weiche 8 auf Durchfahrt stellen
24. Signal KIO_LN_1 auf gelb stellen
25. Fahrstrom der Blöcke KH_ST_6 und KH_ST_1 auf rückwärts stellen
26. Nach Verlassen von KIO_LN_1 Signal auf rot stellen und Block freigeben
27. Nach Verlassen von KH_ST_6 Block freigeben
28. Nach Erreichen von KH_ST_1 5s halten

SampleController.c

T1A3: Reality vs. Simulation

Es haben sich einige Weichenstellungen anders Verhalten als geplant.

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.

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.

Tags: