Commit a6c672af authored by Jan Leuschner's avatar Jan Leuschner
Browse files

2. Ite 7.Kapitel

parent bef8939c
Im Kontext des TEAMOD-Systems wurde ein System zur Bestimmung der aktuellen Weichenpositionen entwickelt. Dieses hat die Aufgabe, die Stellung jeder Weiche zu messen und diese per Broadcast in das Netzwerk zu senden. Anhand der Weichenstellung wird verifiziert, ob alle Weichen vom Stellwerk korrekt gestellt wurden. Dieses System trägt einen wesentlichen Beitrag zur Sicherheit des Systems bei und ist in heutigen Bahnsystemen unverzichtbar. \\
Im Kontext des TEAMOD-Systems wurde ein System zur Bestimmung der aktuellen Weichenpositionen entwickelt. Dieses hat die Aufgabe die Stellung jeder Weiche zu messen und diese per Broadcast in das Netzwerk zu senden. Anhand der Weichenstellung wird verifiziert, ob alle Weichen vom Stellwerk korrekt gestellt wurden. Dieses System trägt einen wesentlichen Beitrag zur Sicherheit des Systems bei und ist in heutigen Bahnsystemen unverzichtbar. \\
Prototypisch wurde ein System zur Detektion von Weichenstellungen (kurz: PSDU = Point State Detection Unit) entwickelt, dessen Aufbau Abbildung \ref{fig:context_psdu} zeigt.
\begin{figure}[H]
\centering
......@@ -18,8 +18,9 @@ Das gegebene Gleisnetz beinhaltet genau 28 Weichen, die aus normalen links- und
\subfigure[Weichenschalter geschlossen: Weiche in abbiegender Richtung]{\includegraphics[width=0.49\textwidth]{psdu/psdu_point_closed}}
\label{fig:manipulierte_weiche}
\end{figure}
Dabei wird bei vollem Ausschlag der Steuerstange in einer Richtung ein kleiner Mikroschalter betätigt, wodurch bestätigt wird, dass die Weiche in einer bestimmten Position ist. Dabei kann der Zustand einer Weiche einen Booleschen Wert annehmen: Ist die Weiche in abbiegender Richtung gestellt, so ist der Zustand der Weiche \texttt{true} (Schalter geschlossen), sonst \texttt{false} (Schalter geöffnet). \\
Gleiches gilt dabei für Kreuzweichen. Kreuzweichen können bei unserer Bahnanlage auch nur in zwei Positionen versetzt werden. Abbildung \ref{fig:crossing_psdu} zeigt dabei die möglichen Stellungen der hierbei verbauten Kreuzweichen.
Dabei wird bei vollem Ausschlag der Steuerstange in einer Richtung ein kleiner Mikroschalter betätigt, wodurch bestätigt wird, dass die Weiche in einer bestimmten Position ist. Dabei kann der Zustand einer Weiche einen Booleschen Wert annehmen: Ist die Weiche in abbiegender Richtung gestellt, so ist der Zustand der Weiche \texttt{true} (Schalter geschlossen), sonst \texttt{false} (Schalter geöffnet).
Gleiches gilt dabei für Kreuzweichen. Kreuzweichen können bei unserer Bahnanlage auch nur in zwei Positionen versetzt werden. Abbildung \ref{fig:crossing_psdu} zeigt dabei die möglichen Stellungen der verbauten Kreuzweichen.
\begin{figure}[H]
\centering
......@@ -65,7 +66,8 @@ Die Software, die auf dem Raspberry Pi ausgeführt wird, ist untergliedert in dr
\label{fig:psdu_sw_bdd}
\end{figure}
Dabei werden zu Beginn mit \texttt{main} die Module Process, Network, Board\_Driver und Datapool initialisiert. Dabei werden die POSIX-Threads \texttt{Process} und \texttt{Network} erzeugt. \\
Dabei werden zu Beginn mit \texttt{main} die Module Process, Network, Board\_Driver und Datapool initialisiert. Dabei werden die POSIX-Threads \texttt{Process} und \texttt{Network} erzeugt.
Im laufenden Betrieb wird der Datenpool dann sowohl von der Network-Einheit, wie auch von dem Process-Modul genutzt. Die Board-Driver werden ausschließlich vom Process-Modul genutzt. Dieses wird genauer in den Kapiteln \ref{ssec:driver_dpool} und Kapitel \ref{ssec:proc_psdu} beschrieben. Das Network-Modul wird im Kapitel \ref{ssec:network_psdu} genauer beschrieben.
\subsection{Board-Treiber und Datapool}\label{ssec:driver_dpool}
......@@ -144,7 +146,7 @@ struct chip
#endif //SOURCE_CHIP_H
\end{lstlisting}
Um dann zusätzlich stabil die Chips der Erweiterungsplatine abzufragen, wurde, anstatt der $I^{2}C$-Treiber des Linux-Kernels, die WiringPi-Lib verwendet. Diese wurde für eine stabilere Ausführung etwas modifiziert.
Um dann zusätzlich stabil die Chips der Erweiterungsplatine abzufragen, wurde anstatt der $I^{2}C$-Treiber des Linux-Kernels, die WiringPi-Lib verwendet. Diese wurde für eine stabilere Ausführung etwas modifiziert.
\subsection{Verarbeitungseinheit}\label{ssec:proc_psdu}
Die Verarbeitungseinheit hat die Aufgabe in einem bestimmten Zeitzyklus alle I/O-Register der beiden MCP23017 Expander-Chips auszulesen und zu interpretieren. Durch eine Konfigurationsdatei wurde spezifiziert, zu welchem GPIO-Pin welche Weiche korrespondiert. So ruft die Process-Einheit von den Board-Treibern die Funktion \texttt{read\_reg} auf (IBD Abbildung \ref{fig:psdu_proc_ibd}) und erhält den Wert des abgefragten Registers als Byte (8-Bit). Dieses wird interpretiert und als \texttt{PinState} in den Datenpool geschrieben.
\begin{figure}[H]
......@@ -153,7 +155,7 @@ Die Verarbeitungseinheit hat die Aufgabe in einem bestimmten Zeitzyklus alle I/O
\caption{IBD der Verarbeitungseinheit der PSDU}
\label{fig:psdu_proc_ibd}
\end{figure}
Der Verarbeitungs-Thread, wie im Aktivitätsdiagramm aus Abbildung \ref{fig:psdu_sw_proc_unit} gezeigt, liest zunächst jedes Register nacheinander aus und interpretiert dann mit Hilfe der Konfigurationsdatei jedes gesetzte Bit in dem Register und ordnet es dann der jeweiligen Weiche zu. Wenn der Wert sich dann fünf mal nicht geändert hat, gilt dieser als stabil und wird als \texttt{stable\_val} gesetzt. Das hat den Grund, dass es durch die Bauweise von Schaltern zum Flackern der Schaltstellung kommen kann, wenn beispielsweise der Schalter zwischen an und aus ist. Ist der Wert jedoch noch nicht stabil, so wird von vorne begonnen.
Der Verarbeitungs-Thread, wie im Aktivitätsdiagramm in Abbildung \ref{fig:psdu_sw_proc_unit} gezeigt, liest zunächst jedes Register nacheinander aus und interpretiert dann mit Hilfe der Konfigurationsdatei jedes gesetzte Bit in dem Register und ordnet es dann der jeweiligen Weiche zu. Wenn der Wert sich dann fünf mal nicht geändert hat, gilt dieser als stabil und wird als \texttt{stable\_val} gesetzt. Das hat den Grund, dass es durch die Bauweise von Schaltern zum Flackern der Schaltstellung kommen kann, wenn beispielsweise der Schalter zwischen an und aus ist. Ist der Wert jedoch noch nicht stabil, so wird von vorne begonnen.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\linewidth]{psdu/proc_unit_act}
......@@ -162,7 +164,7 @@ Der Verarbeitungs-Thread, wie im Aktivitätsdiagramm aus Abbildung \ref{fig:psdu
\end{figure}
\subsection{Netzwerkeinheit}\label{ssec:network_psdu}
Das Netzwerkmodul bildet die Schnittstelle zu anderen Systemen wie dem Stellwerk. Es hat die zentrale Aufgabe, die von der Erweiterungsplatine erfassten Daten zu kodieren und anderen Systemen wie dem Stellwerk im lokalen Netzwerk zur Verfügung zu stellen. Dabei ist das Netzwerk-Modul als eigenständiger POSIX-Thread implementiert.\\
Das Netzwerkmodul bildet die Schnittstelle zu anderen Systemen wie dem Stellwerk. Es hat die zentrale Aufgabe die von der Erweiterungsplatine erfassten Daten zu kodieren und anderen Systemen, wie dem Stellwerk, im lokalen Netzwerk zur Verfügung zu stellen. Dabei ist das Netzwerk-Modul als eigenständiger POSIX-Thread implementiert.\\
\newpage
\begin{figure}[H]
......
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