diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/hs-el-text.sty b/hs-el-text.sty index f05f03c..2ffc222 100644 --- a/hs-el-text.sty +++ b/hs-el-text.sty @@ -27,7 +27,6 @@ anchorcolor = black]{hyperref} \RequirePackage[nolist, footnote]{acronym} \RequirePackage{enumitem} \RequirePackage[colorinlistoftodos,prependcaption,textsize=tiny]{todonotes} -\RequirePackage{titlesec} \RequirePackage{tikz} \RequirePackage[bottom=5em]{geometry} \RequirePackage{svg} @@ -43,18 +42,21 @@ anchorcolor = black]{hyperref} \usetikzlibrary{positioning, shapes.geometric} -\RequirePackage[]{draftwatermark} +\RequirePackage[final]{draftwatermark} %watermark \SetWatermarkText{Preview} \SetWatermarkColor{red} \SetWatermarkFontSize{35.83pt} -\titlespacing\section{0pt}{12pt}{10pt} -\titlespacing\subsection{0pt}{5pt}{5pt} -\titlespacing\subsubsection{0pt}{5pt}{5pt} -\titlespacing*{\paragraph}{0pt}{12pt}{5pt}[50pt] -\titlespacing*{\subparagraph}{0pt}{12pt}{5pt}[50pt] +%\titlespacing\section{0pt}{12pt}{10pt} +%\titlespacing\subsection{0pt}{5pt}{5pt} +%\titlespacing\subsubsection{0pt}{5pt}{5pt} +%\titlespacing*{\paragraph}{0pt}{12pt}{5pt}[50pt] +%\titlespacing*{\subparagraph}{0pt}{12pt}{5pt}[50pt] + +\RedeclareSectionCommand[beforeskip=0pt,afterindent=false]{section} +\RedeclareSectionCommand[beforeskip=0pt,afterindent=false]{subsection} \setitemize{noitemsep,topsep=0pt,parsep=0pt,partopsep=0pt} \setlist[enumerate]{noitemsep, topsep=0pt, parsep=0pt, partopsep=0pt} @@ -82,7 +84,7 @@ autogobble %https://tex.stackexchange.com/a/391042 \newcommand{\und}{\\ & & } -\graphicspath{{include/}} +\graphicspath{{include}} \newcommand{\link}[1]{\footnote{\url{#1}}} @@ -135,7 +137,7 @@ autogobble \vspace*{50pt} \begin{center} - \includegraphics[scale=1.0]{hsel-logo} + \includegraphics{hsel-logo} \end{center} \vspace*{200pt} @@ -164,4 +166,4 @@ autogobble \end{titlepage} } -\endinput \ No newline at end of file +\endinput diff --git a/index.tex b/index.tex index b99df9c..a223849 100644 --- a/index.tex +++ b/index.tex @@ -11,8 +11,6 @@ \maketitle - %\tableofcontents - \section{Tasks}\label{sec:tasks} Um einen konsistenten Startpunkt zu erhalten werden bei allen Tasks zu Beginn sämtliche vom entsprechenden @@ -183,7 +181,53 @@ \end{figure} - \section{Hilfsfunktionen}\label{sec:functions} - \lipsum[2-4] +\section{Hilfsfunktionen}\label{sec:functions} +Zur Vereinfachung des Leseflusses und der besseren Nachvollziehbarkeit des Codes werden wiederkehrende Programmteile in Hilfsfunktionen ausgelagert. + Passiert während des Durchlaufens der einzelnen Funktionen ein Fehler, + so wird die erste hier beschriebene Hilfsfunktion aufgerufen. + +\subsection{void end(bool fail)}\label{subsec:void end(bool fail)} +Bei Aufruf dieser Hilfsfunktion werden sämtliche Taks, Mailboxen, Modbus-Verbindungen und Semaphoren deinitialisiert und der Timer gestoppt. + Falls der Übergabeparameter \mintinline{c}{fail == true} ist, so wird eine entsprechende Nachricht auf der Konsole ausgegeben. + +\subsection{int readAll(int type, int *result)}\label{subsec:int readAll(int type, int *result)} +Das Auslesen aller zur Verfügung stehenden Bits, abhängig vom Typ der Verbindung, erfolgt mithilfe der nicht Thread-sicheren Funktion readAll. + Dabei wird dieser Funktion sowohl der Verbindungs-Typ (\mintinline{c}{DIGITAL_IN, DIGITAL_OUT, ANALOG_IN, ANALOG_OUT}), +als auch ein Pointer auf den Speicherplatz übergeben, an welchem das Ergebnis gespeichert wird. +Bei erfolgreichem Durchlaufen dieser Funktion wird eine 0 zurückgegeben, ansonsten eine 1. + +\subsection{int readData(int part)}\label{subsec:int readData(int part)} +Im Gegensatz zur Hilfsfunktion \mintinline{c}{readAll()} liest die Funktion readData nur ein einzelnes Bit aus und gibt dieses zurück. +Damit die Richtigkeit der Daten während des Auslesens gewährleistet werden kann, + ist diese Funktion mithilfe einer Semaphore Thread-sicher gemacht worden. +Nach dem Auslesen aller Bits des Modbus wird der Wert der Funktion \mintinline{c}{readAll()} mit der in \mintinline{c}{part} übergebenen Bitmaske verundet und somit isoliert. +Dieses einzelne Bit wird nun in \mintinline{c}{result} gespeichert und die Semaphore wieder freigegeben. +Bei fehlerfreiem Aufruf der \mintinline{c}{readAll()}-Funktion wird das spezifizierte einzelne Bit zurückgeben, falls nicht, +so wird in die \mintinline{c}{end()}-Hilfsfunktion gesprungen und alle Tasks, Mailboxen, etc deinitialisiert und gestoppt. + +\subsection{void disable(int actor)}\label{subsec:void disable(int actor)} +Diese Funktion deaktiviert den im Übergabeparameter spezifizierten Aktor. +Da auch in diesem Fall die Daten aus dem Modbus während des Lesezugriffs nicht verändert werden dürfen ist diese Funktion Thread-sicher. +Zur Kommunikation mit dem jeweiligen Aktor wird die gesamte Bitfolge über \emph{readAll()} ausgelesen. +Ist dies ohne Fehler geschehen, so wird die empfangene Bitfolge mit der negierten Bitmaske des anzusprechenden Aktors verundet. +Diese neue, sich nur in einem Bit unterscheidende Bitfolge wird auf den Modbus geschrieben und die Semaphore freigegeben. + +\subsection{void sendMail(MBX * mailbox, int msg)}\label{subsec:void sendMail(MBX * mailbox, int msg)} +Das Senden einer blockierenden Nachricht (\mintinline{c}{msg}) an eine über mailbox spezifierte Mailbox wird mithilfe dieser Funktion realisiert. + +\subsection{void sendMailNonBlocking(MBX * mailbox, int msg)}\label{subsec:void sendMailNonBlocking(MBX * mailbox, int msg)} +Im Unterschied zur Funktion \mintinline{c}{sendMail()} wird hier eine nicht-blockierende Nachricht (msg) an die in mailbox spezifizierte Mailbox gesendet. + +\subsection{int receiveMail(MBX * mailbox)}\label{subsec:int receiveMail(MBX * mailbox)} +Diese Hilfsfunktion fasst das Erhalten einer blockierenden Nachricht an der im Übergabeparameter spezifizierten Mailbox +zusammen und gibt den Nachrichteninhalt zurück. + +\subsection{int receiveMailNonBlocking(MBX * mailbox)}\label{subsec:int receiveMailNonBlocking(MBX * mailbox)} +Analog zu \mintinline{c}{receiveMail()} wird auch hier einen Nachricht an der im Übergabeparamter spezifizierten Mailbox erhalten und deren Inhalt zurückgegeben, +jedoch ist diese nicht blockierend. + +\subsection{void sleepMs(int ms)}\label{subsec:void sleepMs(int ms)} +Da bei der Kommunikation der Tasks untereinander oder der Abarbeitung an den einzelnen Stationen teilweise Pausen benötigt werden, + ist diese Funktion unerlässlich. Dabei wird mithilfe des Übergabeparameters festgelegt, für wie viele Millisekunden ein Tasks pausieren soll. \end{document}