187 lines
6.8 KiB
TeX
187 lines
6.8 KiB
TeX
\documentclass[german, a4paper, headheight=36pt, parskip=true]{scrartcl}
|
|
\usepackage{hs-el-text}
|
|
|
|
\modul{Echtzeitdatenverarbeitung}
|
|
\semester{Wintersemester 2020/21}
|
|
\thema{Dokumentation}
|
|
\author{Charlotte Friedemann \und Johannes Theiner}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
\tableofcontents
|
|
|
|
\section{Tasks}\label{sec:tasks}
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
\begin{minipage}{.5\textwidth}
|
|
\centering
|
|
\begin{plantuml}
|
|
@startuml
|
|
scale 150 width
|
|
!include https://raw.githubusercontent.com/bharatrajagopalan/plantuml-styles/master/activity_skin.pu
|
|
start
|
|
:Drehteller ausschalten;
|
|
:Auswefer Eingang ausschalten;
|
|
repeat
|
|
:Drehteller kurz anschalten;
|
|
:Auswerfer kurz betätigen;
|
|
repeat while(5 Durchläufe ?)
|
|
|
|
repeat
|
|
:Prüfer fertig?<
|
|
:Bohrer fertig?<
|
|
:Auswerfer fertig?<
|
|
:Teil im Prüfer?<
|
|
:Teil im Bohrer?<
|
|
if(Teil auf einem Sensor ?) then (true)
|
|
:Drehteller anschalten;
|
|
if(Sensor Drehteller in Position ?) then (true)
|
|
:Drehteller auschalten;
|
|
endif
|
|
endif
|
|
:Drehteller fertig>
|
|
repeatwhile()
|
|
kill
|
|
@enduml
|
|
\end{plantuml}
|
|
\captionof{figure}{SDL Diagramm Drehteller}
|
|
\label{fig:sdl-turntable}
|
|
\end{minipage}%
|
|
\begin{minipage}{.5\textwidth}
|
|
\centering
|
|
\begin{plantuml}
|
|
@startuml
|
|
!include https://raw.githubusercontent.com/bharatrajagopalan/plantuml-styles/master/activity_skin.pu
|
|
start
|
|
:Prüfer einfahren;
|
|
:Prüfer fertig>
|
|
repeat
|
|
:Drehteller fertig?<
|
|
if(Werkstück vorhanden ?) then (ja)
|
|
:Prüfer ausfahren;
|
|
if(Werkstück in Normallage ?) then (ja)
|
|
:Sende Bohrer(an)>
|
|
else (nein)
|
|
:Sende Bohrer(aus)>
|
|
endif
|
|
:Prüfer einfahren;
|
|
else (nein)
|
|
endif
|
|
:Prüfer fertig>
|
|
repeatwhile()
|
|
kill
|
|
@enduml
|
|
\end{plantuml}
|
|
\captionof{figure}{SDL Diagramm Prüfer}
|
|
\label{fig:sdl-tester}
|
|
\end{minipage}
|
|
\end{figure}
|
|
|
|
\begin{figure}[H]
|
|
\centering
|
|
\begin{minipage}{.5\textwidth}
|
|
\centering
|
|
\begin{plantuml}
|
|
@startuml
|
|
scale 150 width
|
|
!include https://raw.githubusercontent.com/bharatrajagopalan/plantuml-styles/master/activity_skin.pu
|
|
start
|
|
:Bohrer ausschalten;
|
|
:Bohrer hochfahren;
|
|
:Werkstück loslassen;
|
|
:Bohrer fertig>
|
|
repeat
|
|
:Drehteller fertig?<
|
|
if(Werkstück vorhanden?) then(ja)
|
|
:Empfange Lage des Werkstücks<
|
|
:Sende Auswerfer>
|
|
if(Teil in Normallage?) then(ja)
|
|
:Werkstück festhalten;
|
|
:Bohrer anschalten;
|
|
:Bohrer herunterfahren;
|
|
:Warte bis Bohrer unten;
|
|
:Bohrer hochfahren;
|
|
:Warte bis Bohrer oben;
|
|
:Bohrer ausschalten;
|
|
:Werkstück loslassen;
|
|
else(nein)
|
|
endif
|
|
else (nein)
|
|
endif
|
|
:Bohrer fertig>
|
|
repeatwhile()
|
|
kill
|
|
@enduml
|
|
\end{plantuml}
|
|
\captionof{figure}{SDL Diagramm Bohrer}
|
|
\label{fig:sdl-drill}
|
|
\end{minipage}%
|
|
\begin{minipage}{.5\textwidth}
|
|
\centering
|
|
\begin{plantuml}
|
|
scale 250 width
|
|
@startuml
|
|
!include https://raw.githubusercontent.com/bharatrajagopalan/plantuml-styles/master/activity_skin.pu
|
|
start
|
|
:Auswerfer einfahren;
|
|
:Auswerfer fertig>
|
|
repeat
|
|
:Drehteller fertig?<
|
|
:Auswerfer<
|
|
if(Auswerfen ?) then (ja)
|
|
:Auswerfer betätigen;
|
|
endif
|
|
:Auswerfer fertig>
|
|
repeatwhile()
|
|
kill
|
|
@enduml
|
|
\end{plantuml}
|
|
\captionof{figure}{SDL Diagramm Auswerfer}
|
|
\label{fig:sdl-output}
|
|
\end{minipage}
|
|
\end{figure}
|
|
|
|
Um einen konsistenten Startpunkt zu erhalten werden bei allen Tasks zu Beginn sämtliche vom entsprechenden
|
|
Task verwendeten Aktoren auf Ausgangsposition zurückgesetzt.
|
|
|
|
\subsection{Drehteller}\label{subsec:task_turntable}
|
|
Nach dem Zurücksetzen vom Drehteller und des Auswerfers am Eingang fährt der Drehteller zuerst fünf Runden,
|
|
bei denen der Auswerfer am Ausgang bedingungslos betätigt wird,
|
|
um Teile die sich vielleicht noch in der Anlage befinden aus dieser zu entfernen.
|
|
|
|
Um eine Synchronisierung zu erlangen wird der Drehteller erst aktiv, wenn Prüfer, Bohrer und Auswerfer
|
|
mit einer Nachricht auf die Status Mailbox signalisiert haben das sie mit ihren Aktionen fertig sind.
|
|
|
|
Liegt auf mindestens einem Sensor(Eingang, Tester oder Bohrer) ein Teil wird der Drehteller
|
|
aktiviert und erst wieder deaktiviert, wenn dieser wieder in Position ist.
|
|
Nun wird den anderen Tasks über Nachrichten signalisiert das diese aktiv werden können
|
|
und der Prozess beginnt erneut.
|
|
|
|
|
|
\subsection{Prüfer}\label{subsec:task_tester}
|
|
Sobald der Prüfer aktiv werden darf(Nachricht auf Status Mailbox) wird überprüft ob
|
|
ein Teil auf dem Sensor liegt.
|
|
Liegt ein Teil auf dem Sensor, fährt der Prüfer aus und das Testergebnis wird dem
|
|
Bohrer über eine Nachricht mitgeteilt.
|
|
Nun wird der Prüfer eingefahren und der Drehteller kann wieder aktiv werden.
|
|
Der Prozess beginnt nun wieder von vorne.
|
|
|
|
\subsection{Bohrer}\label{subsec:task_drill}
|
|
Wird ein Werkstück durch den Sensor erkannt wird abhängig von der Nachricht des Prüfers der Bohrer
|
|
angeschaltet, heruntergefahren und das Werkstück festgehalten.
|
|
Nach einer kurzen Wartezeit wird der Bohrer wieder nach oben gefahren, ausgeschaltet und das Werkstück losgelassen.
|
|
Nachdem der Auswerfer über ein zu erwartendes Teil benachrichtigt wurde, wird die Kontrolle wieder an
|
|
den Drehteller übergeben.
|
|
|
|
\subsection{Auswerfer}\label{subsec:output}
|
|
Da für den Auswerfer keine Sensoren existieren sendet der Bohrer den Status seines Sensors per Nachricht
|
|
an den Auswerfer, der auf Basis dieser auslöst.
|
|
|
|
\section{Hilfsfunktionen}\label{sec:functions}
|
|
\lipsum[2-4]
|
|
|
|
\end{document}
|