\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 wieder eingefahren und der Drehteller kann wieder aktiv werden.
    Der Prozess beginnt nun wieder von vorne.

    \subsection{Bohrer}\label{subsec:task_drill}

    \lipsum[2-3]

    \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}
