Doku fertig
This commit is contained in:
parent
28470a46a5
commit
17e2e31d10
@ -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
|
||||
\endinput
|
||||
|
52
index.tex
52
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}
|
||||
|
Loading…
Reference in New Issue
Block a user