Commit 838f163d authored by Felix Brüning's avatar Felix Brüning
Browse files

Verbesserungen

parent af3b8fb5
\subsection{Anforderungen}
Das Stellwerk stellt im Kontext das Herzstück des gesamten Systems dar, da durch dieses alle Abläufe gesteuert und überwacht werden. Aus diesem Grund besitzt das Stellwerk viele kritische Anforderungen, die für den reibungslosen und vor allem sicheren Bahnbetrieb nötig sind. Ohne die Umsetzung dieser Anforderungen ist ein autonomer Bahnbetrieb nicht möglich. \\
Das Stellwerk stellt im Kontext das Herzstück des gesamten Systems dar, da durch dieses alle Abläufe gesteuert und überwacht werden. Aus diesem Grund besitzt das Stellwerk viele kritische Aufgaben, die für den reibungslosen und vor allem sicheren Bahnbetrieb nötig sind. Ohne die Umsetzung dieser Anforderungen ist ein autonomer Bahnbetrieb nicht möglich. \\
Zunächst muss es möglich sein, dass Züge sich selbstständig beim Stellwerk mit ihrem Wunschziel und ihrer aktuellen Position registrieren können. Dabei ist es zwingend nötig, dass das Stellwerk die initiale Position des Zuges kennt, da sonst keine Route zwischen zwei Punkten berechnet werden kann. Somit können die Züge ihr Ziel selbst wählen. Weiterhin muss das Stellwerk den Typen des Zuges kennen, um ggf. Passagierzüge eine höhere Priorität bei der Routenzuweisung zu geben.\\
Ebenso müssen alle Daten im Stellwerk gespeichert werden. Dazu muss man die ''unterste Schicht'', %TODO [Jan L]: sind die Anfürungsstriche hier nötig? Wirkt leicht unprofessionell
den Datapool, aktualisieren können. Das heißt, man muss Daten von anderen Modulen empfangen und speichern können. Dieser beinhaltet ebenso die Interlockingtable (Stellwerkstabelle/Routingtabelle), die alle kleineren Teilrouten speichert, aus denen dann eine Route zwischen zwei Punkten berechnet werden soll. Die Routingtabelle wurde zuvor von uns aufgestellt und wird beim Start als Datenstruktur in den Datapool geladen. Außerdem muss das Stellwerk in der Lage sein, ein Ziel eines Zuges von einem Zug zu empfangen und darauf reagieren zu können.\\
Ebenso müssen alle Daten im Stellwerk gespeichert werden. Dazu muss man die \glqq unterste Schicht\grqq{}, den Datapool, aktualisieren können. Das heißt, man muss Daten von anderen Modulen empfangen und speichern können. Dieser beinhaltet ebenso die Interlockingtable (Stellwerkstabelle/Routingtabelle), die alle kleineren Teilrouten speichert, aus denen dann eine Route zwischen zwei Punkten berechnet werden soll. Die Routingtabelle wurde zuvor von uns aufgestellt und wird beim Start als Datenstruktur in den Datapool geladen. Außerdem muss das Stellwerk in der Lage sein, ein Ziel eines Zuges von einem Zug zu empfangen und darauf reagieren zu können.\\
Um einen hohen Grad an Sicherheit zu garantieren, muss das Stellwerk die aktuelle Zugposition immer speichern und abfragen. Ist dies nicht möglich, könnte der Zug eine illegale Route befahren, ohne dass das Stellwerk darauf reagiert. Dabei könnte es dann zu einer fatalen Kollision kommen.\\
Das Stellwerk soll zudem beim Start immer alle Signale anderer Module testen. Das bedeutet, dass das Stellwerk erst Anfragen von Zügen annehmen soll, wenn eine Verbindung zum Positioning-System besteht. Auch werden ständige Lebenssignale erwartet, damit sichergestellt wird, dass alle Systeme noch funktionieren und der Betrieb sicher weitergeführt werden kann.\\
Das Stellwerk speichert zudem alle Routen und deren Status, damit jeder Zustandsübergang in dem Zustandsautomaten des Sub-Controllers protokolliert wird. Dazu wechselt die Zustandsmaschine erst in dem Zustand ''OCCUPIED'', wenn die Route zuvor auf ''LOCKED'' gesetzt wurde. Wenn das erste Track-Element der Route befahren wird, gilt die Route als belegt (''OCCUPIED''). Dabei gilt, dass jede Route eine eigene einzigartige ID besitzt, die genau einem Sub-Controller zugeordnet werden kann. Somit soll der zuständige Sub-Controller beim Allozieren einer Route gestartet werden.\\
......@@ -51,10 +50,10 @@ Die Schnittstellen zum Ändern der Informationen werden durch folgende Sub-Kompo
Hier werden alle Informationen, die Track Elemente betreffen, verarbeitet. Dazu gehört das Auslesen und Setzen des Track-Element-Status.
\item \textbf{Weichenstatus} \newline
Hier wird beim Einstellen einer Weichenposition das Senden dieser Information an die Märklin-Station veranlasst. Auch sind hier die Weichenpositionen, die das Rückemeldesystem zurückgibt hinterlegt.
Hier wird beim Einstellen einer Weichenposition das Senden dieser Information an die Märklin-Station veranlasst. Auch sind hier die Weichenpositionen, die das Rückmeldesystem zurückgibt hinterlegt.
\item \textbf{Angefragte Routen} \newline
Um Deadlocks erkennen und auflösen zu können, müssen die angefragten Routen bekannt sein. Diese werden hier verwaltet.
Um Deadlocks zu erkennen und auflösen zu können, müssen die angefragten Routen bekannt sein. Diese werden hier verwaltet.
\end{itemize}
......@@ -77,8 +76,8 @@ Sollte sich ein Deadlock bei den angefragten Routen aller Züge ergeben, so kön
\subsubsection{Sub-Controller}
\label{ixl_sub_ctrl_section}
Der Sub-Controller wird von dem Train-Controller oder Train-Scheduler für eine bestimmte Route gestartet und stellt sicher, dass der Zug die Route sequentiell befährt. Weiterhin prüft er, ob die Route frei ist, alle Weichen gestellt werden und Konfliktrouten für andere Züge/Controller gesperrt werden konnten. \\
Ist dies nicht der Fall, so gerät der Controller in einen Zustand des aktiven Wartens.
Der Sub-Controller wird von dem Train-Controller oder Train-Scheduler für eine bestimmte Route gestartet und stellt sicher, dass der Zug die Route sequentiell befährt. Weiterhin prüft dieser, ob die Route frei ist, alle Weichen gestellt werden und Konfliktrouten für andere Züge/Controller gesperrt werden konnten. \\
Ist dies nicht der Fall, so gerät der Controller in dem Zustand des aktiven Wartens.
In diesem verharrt er so lange, bis die Route wieder freigegeben wird .\\
Wenn alle nötigen Sicherheitsmaßnahmen erfolgreich waren und der Zug das erste Track-Element befährt, trägt sich der Controller in die Liste der aktiven Routen ein. \\
Sobald der Zug kurz vor dem Ende der Route ist, wird ein Signal an den Train-Controller geschickt, sodass der nächste Sub-Controller gestartet werden kann.\\
......@@ -88,15 +87,15 @@ Ist der Sub-Controller in einen Deadlock verwickelt, kann er beendet werden. Dab
\subsubsection{Safety-Controller}
\label{ixl-safety-ctrl-section}
Der Safety-Controller überwacht das gesamte Streckennetz auf Verletzungen hinsichtlich der Sicherheitsanforderungen.\\
Zunächst prüft er, ob in den nicht aktiven Routen keine Sicherheitsverletzungen vorliegen. Das heißt, dass sich dort keine Züge oder andere Objekte auf dem Track Element befinden dürfen.\\
Danach überprüft er die aktiven Routen. In diesen wird geprüft, ob sich fälschlicherweise mehrere Züge auf einer dieser Routen befindet. Es wird erkannt, wenn sich ein weiterer Zug frontal oder von hinten nähert.\\
Als letzten Schritt werden noch die Weichenpositionen geprüft. Dazu wird durch die aktuell aktiven Rout5en iteriert und die gemeldete Weichenposition mit der geforderten verglichen. Somit wird erkannt, falls eine Weiche falsch gestellt ist.\\
Zunächst prüft dieser, ob in den nicht aktiven Routen keine Sicherheitsverletzungen vorliegen. Das heißt, dass sich dort keine Züge oder andere Objekte auf dem Track Element befinden dürfen.\\
Danach überprüft dieser die aktiven Routen. In diesen wird geprüft, ob sich fälschlicherweise mehrere Züge auf einer dieser Routen befindet. Es wird erkannt, wenn sich ein weiterer Zug frontal oder von hinten nähert.\\
Als letzten Schritt werden noch die Weichenpositionen geprüft. Dazu wird durch die aktuell aktiven Routen iteriert und die gemeldete Weichenposition mit der geforderten verglichen. Somit wird erkannt, falls eine Weiche falsch gestellt ist.\\
Wird einer dieser Fehler erkannt, wird ein Notstopp ausgelöst.
Nachdem der Notstopp erfolgt, müssen die Sicherheitsverletzungen händisch aufgelöst und das System erneut gestartet werden. \\
\subsubsection{Connector}
\label{ixl-connector-section}
Der Connector ist die zentrale Kommunikationsschnitstelle des IXL und regelt das
Der Connector ist die zentrale Kommunikationsschnittelle des IXL und regelt das
Senden sowie Empfangen von Datenpaketen des TCC, Positioning, QT-Anwendung und der Weichenrückmeldung.\\
Die Daten werden aber nicht nur empfangen, sondern auch gleich verarbeitet und in den
Datapool geschrieben, um sie den anderen Modulen zugänglich zu machen.\\
......@@ -110,11 +109,10 @@ An die QT-Anwendung werden die aktuell befahrenen Routen und der Status der Trac
\subsubsection{Health-Controller}
\label{ixl-health-ctrl-section}
Der Health-Controller stellt sicher, dass alle Züge noch aktiv mit dem IXL verbunden sind.
Er erwartet, dass sich die Züge mindestens einmal jede Sekunde melden und ein Lebenszeichen von sich geben. Zeigt einer der Züge kein Lebenszeichen mehr, so wird ein Notstopp ausgelöst,
sie Situation muss geprüft und das System für eine Wiederaufnahme des Betriebs neu gestartet werden.\\
Der Health-Controller erwartet, dass sich die Züge mindestens einmal jede Sekunde melden und ein Lebenszeichen von sich geben. Zeigt einer der Züge kein Lebenszeichen mehr, so wird ein Notstopp ausgelöst. Diese Situation muss geprüft und das System für eine Wiederaufnahme des Betriebs neu gestartet werden.\\
Weiterhin wird geprüft, ob sich jeder Raspberry Pi mindestens innerhalb einer halben Sekunde meldet. Falls dies nicht der Fall ist, wird ein Notstopp ausgelöst.\\
\subsubsection{Train-Scheduler}
\label{ixl-train-scheduler-section}
Der Train-Scheduler ist dafür verantwortlich die angefragten Routen auf Deadlocks zu prüfen. Dafür liest der Scheduler zunächst eine Liste aller möglichen Deadlock Situationen und Ausweichrouten ein und prüft dann, ob eine solche Situation vorhanden ist. \\
Der Train-Scheduler ist dafür verantwortlich, die angefragten Routen auf Deadlocks zu prüfen. Dafür liest der Scheduler zunächst eine Liste aller möglichen Deadlock Situationen und Ausweichrouten ein und prüft dann, ob eine solche Situation vorhanden ist. \\
Wenn eine solche erkannt wird, wird der Deadlock aufgelöst, indem bestimmte angefragte Routen abgebrochen und durch Ausweichrouten ersetzt werden. Da es auch Passagierzüge auf dem Gleisnetz gibt und diese eine höhere Priorität als Güterzüge haben, wird jeder Zug mit einer Priorität ausgestattet. Anhand dieser wird dann bestimmt, welcher Zug zuerst ausweichen muss. Genaueres dazu ist in Kapitel \ref{dl-solution} zu finden.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment