Echtzeitdatenverarbeitung/index.tex

187 lines
6.8 KiB
TeX
Raw Normal View History

2020-12-06 19:23:01 +01:00
\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]
2020-12-06 19:23:01 +01:00
\centering
\begin{minipage}{.5\textwidth}
\centering
\begin{plantuml}
2020-12-06 19:23:01 +01:00
@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 ?)
2020-12-06 19:23:01 +01:00
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}
2020-12-06 19:23:01 +01:00
@startuml
!include https://raw.githubusercontent.com/bharatrajagopalan/plantuml-styles/master/activity_skin.pu
start
2020-12-06 19:23:01 +01:00
:Prüfer einfahren;
:Prüfer fertig>
2020-12-06 19:23:01 +01:00
repeat
:Drehteller fertig?<
if(Werkstück vorhanden ?) then (ja)
:Prüfer ausfahren;
if(Werkstück in Normallage ?) then (ja)
2020-12-06 19:23:01 +01:00
: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}
2020-12-06 19:23:01 +01:00
\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
2020-12-06 19:23:01 +01:00
:Bohrer ausschalten;
:Bohrer hochfahren;
2020-12-06 19:23:01 +01:00
: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}
2020-12-06 19:23:01 +01:00
scale 250 width
@startuml
!include https://raw.githubusercontent.com/bharatrajagopalan/plantuml-styles/master/activity_skin.pu
start
2020-12-06 19:23:01 +01:00
:Auswerfer einfahren;
:Auswerfer fertig>
2020-12-06 19:23:01 +01:00
repeat
:Drehteller fertig?<
:Auswerfer<
if(Auswerfen ?) then (ja)
:Auswerfer betätigen;
endif
2020-12-06 19:23:01 +01:00
:Auswerfer fertig>
repeatwhile()
kill
@enduml
\end{plantuml}
\captionof{figure}{SDL Diagramm Auswerfer}
\label{fig:sdl-output}
\end{minipage}
\end{figure}
2020-12-06 19:23:01 +01:00
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.
2020-12-07 15:46:02 +01:00
Liegt ein Teil auf dem Sensor, fährt der Prüfer aus und das Testergebnis wird dem
Bohrer über eine Nachricht mitgeteilt.
2020-12-07 15:46:02 +01:00
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}
2020-12-07 15:46:02 +01:00
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.
2020-12-06 19:23:01 +01:00
\section{Hilfsfunktionen}\label{sec:functions}
\lipsum[2-4]
\end{document}