Commit 8cda8082 authored by Jan Leuschner's avatar Jan Leuschner
Browse files

fazit, hil pi, safety-fsm kapitel

parent 224fc0b7
\sectionauthor{Jan Leuschner, Matthias Lange}
Das Ziel des Projektes TEAMOD war es, die autonome Zugsteuerung, die schon im Bachelorprojekt bestand, um Sicherheitskomponenten und modellbasierte Tests zu erweitern. Auch Schwächen, die sich im Verlauf des Bachelorprojekts im Stellwerk gezeigt haben, sollten behoben werden.
Das System wurde erfolgreich um einen Safetymonitor erweitert, der die Geschwindigkeit der Züge mittels in LTL aufgestellter Sicherheitsformeln überprüft. Weiterhin berechnet dieser für jeden Zug einen Safety-Envelope, sodass die Züge kollisionsfrei das Schienennetz befahren können. Leider konnte der Safetymonitor nicht am echten System ausprobiert werden, da die Universität, und somit auch der Projektraum, aufgrund von Covid-19 gesperrt war.
Weiterhin erfolgreich war die Erweiterung des Stellwerks um verschiedene Funktionalitäten:
Das System wurde erfolgreich um einen Safetymonitor erweitert, der die Geschwindigkeit der Züge mittels in LTL aufgestellter Sicherheitsformeln überprüft. Weiterhin berechnet dieser für jeden Zug einen Safety-Envelope, sodass die Züge kollisionsfrei das Schienennetz befahren können.
Außerdem war die Erweiterung des Stellwerks um folgende Funktionalitäten erfolgreich:
\begin{itemize}
\item Züge können nun in beide Richtungen fahren, wodurch das Streckennetz effizienter genutzt wird.
\item Passagier- und Güterzüge erhalten unterschiedliche Prioritäten, nach denen diese auf dem Gleisnetz fahren dürfen. Passagierzüge erhalten dabei immer eine höhere Priorität als Güterzüge, damit diese ihren Fahrplan einhalten können.
......
......@@ -62,7 +62,7 @@ Alle im IXL verwendeten Komponenten nutzen den Datapool, weshalb dieser eine zen
\subsubsection{Main-Controller}
\label{ixl_main_ctrl_section}
Der Main-Controller übernimmt das Starten und Initialisieren aller Module bis auf des Sub-Controllers. Dies übernimmt der Train-Controller.
Der Main-Controller übernimmt das Starten und Initialisieren aller Module bis auf den Sub-Controller. Dies übernimmt der Train-Controller.
Die zweite Aufgabe ist, auf die Registrierung neuer Züge zu warten. Wenn ein neuer Zug registriert wird, wird dieser in den Datapool eingetragen und der Main-Controller startet einen neuen Train-Controller, der von dort an die Steuerung des Zuges übernimmt.
\subsubsection{Train-Controller}
......@@ -77,7 +77,7 @@ Sollte sich ein Deadlock bei den angefragten Routen aller Züge ergeben, so kön
\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 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 dieser so lange, bis die Route wieder freigegeben wird .
In diesem verharrt dieser 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.
Hat der Zug die Route komplett befahren, so gibt der Controller die Konfliktrouten wieder frei, trägt sich aus der Liste der aktiven Routen aus und beendet sich.
......@@ -98,12 +98,12 @@ 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 diese den anderen Modulen zugänglich zu machen.
So werden der durch das Positioning erhaltene Status der Track Elemente in den Datapool geschrieben und
So wird der durch das Positioning erhaltene Status der Track Elemente in den Datapool geschrieben und
auch die Zuganmeldung, Lebenszeichen des TCC und Positioning sowie Weichenrückmeldung werden hier verarbeitet.
Gesendet wird hauptsächlich an den TCC. Dieser empfängt die ihm zugewiesene Route oder erhält
ein Signal, falls sein Wunschziel nicht erreichbar ist.
An die QT-Anwendung werden die aktuell befahrenen Routen und der Status der Track Elements gesendet.
An die QT-Anwendung werden die aktuell befahrenen Routen und der Status der Track Elemente gesendet.
\subsubsection{Health-Controller}
\label{ixl-health-ctrl-section}
......
In dem Hardware-in-the-Loop (HiL) Test des Positioning-System teilen sich Test-Engine und das Positioning keinen Adressraum mehr. Stattdessen werden die Schnittstellen des Pi angesprochen, die auch im regulären Betrieb genutzt werden.\\
Die Test-Engine nutzt dafür eine digitale IO-Karte, welche Signale an die Pins des Pi sendet. Diese Signale werden beim Pi durch seine IO-Pins gelesen und dann wie in Kapitel \ref{module:pos} beschrieben ausgewertet.\\
In dem Hardware-in-the-Loop (HiL) Test des Positioning-System teilen sich Test-Engine und das Positioning keinen Adressraum mehr. Stattdessen werden die Schnittstellen des Pi angesprochen, die auch im regulären Betrieb genutzt werden.
Die Test-Engine nutzt dafür eine digitale IO-Karte, welche Signale an die Pins des Pi sendet. Diese Signale werden beim Pi durch seine IO-Pins gelesen und dann wie in Kapitel \ref{module:pos} beschrieben ausgewertet.
Um jeden Pin testen zu können, wird in der Test-Engine ein Thread für jeden Pin gestartet, der dafür verantwortlich ist, dass entsprechende Signale am jeweiligen Pin anliegen. Dafür wird der korrespondierende digitale Output der IO-Karte durch den Thread entweder aktiviert oder deaktiviert.\\
Da der Pi seinen Status alle 100ms über das Netzwerk broadcastet, wird in der Test-Engine ein Thread gestartet, der diese Daten empfängt und als Resultat für alle Test-Threads in einer globalen Datenstruktur zur Verfügung stellt. Hierbei kommt es zum klassischen Schreiber-Leser Problem und die verschiedenen Threads müssen synchronisiert werden. Dies wird mit Hilfe des \texttt{Non-Blocking-Write Protocol} realisiert, da so zeitaufwändigen Kontextwechsel, die durch blockierendes Warten entstehen würden, vermieden werden. Dies ist nötig, da es sich um eine Echtzeitanwendung handelt und das Auslesen des Pin-Status zeitkritisch für die Tests ist.\\
Da immer die aktuellsten Daten gelesen werden müssen, muss die Wartezeit nicht nur auf den Prozessor angepasst werden, sondern auch auf das 100ms Sendeintervall. Somit wird auf die Wartezeit pauschal 100ms addiert.\\
Da der Pi seinen Status alle 100ms über das Netzwerk broadcastet, wird in der Test-Engine ein Thread gestartet, der diese Daten empfängt und als Resultat für alle Test-Threads in einer globalen Datenstruktur zur Verfügung stellt. Hierbei kommt es zum klassischen Schreiber-Leser Problem und die verschiedenen Threads müssen synchronisiert werden. Dies wird mit Hilfe des \texttt{Non-Blocking-Write Protocol} realisiert, da so zeitaufwändigen Kontextwechsel, die durch blockierendes Warten entstehen würden, vermieden werden. Dies ist nötig, da es sich um eine Echtzeitanwendung handelt und das Auslesen des Pin-Status zeitkritisch für die Tests ist.
Da immer die aktuellsten Daten gelesen werden müssen, muss die Wartezeit nicht nur auf den Prozessor angepasst werden, sondern auch auf das 100ms Sendeintervall. Somit wird auf die Wartezeit pauschal 100ms addiert.
Weiterhin muss noch getestet werden, dass das Positioning die Signale nicht zu früh versendet. Dafür wird wie in Kapitel \ref{pos:sil} beschrieben ein Watchdog implementiert.\\
Wie schon erwähnt, wird jeder einzelne Pin mittels einer Testsuite getestet, deren Testfälle in zufälliger Reihenfolge ausgeführt werden. Die Testfälle werden dabei aus dem Zustandsautomaten der in Abbildung \ref{pos-test-fsm} zu sehen ist abgeleitet.\\
Folgende SysML-Diagramme veranschaulichen den Aufbau des Positioning HiL Test.\\
......
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