Wiki source code of Tutorial 1 - nfl
Last modified by nfl on 2025/01/30 12:05
Show last authors
author | version | line-number | content |
---|---|---|---|
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. |