diff --git a/doc/opc/Bildschirmfoto vom 2020-10-28 10-19-00.png b/doc/opc/Bildschirmfoto vom 2020-10-28 10-19-00.png new file mode 100644 index 0000000000000000000000000000000000000000..d2cc032d742b63bdc4eac160b4fcb31060248959 Binary files /dev/null and b/doc/opc/Bildschirmfoto vom 2020-10-28 10-19-00.png differ diff --git a/doc/opc/Bildschirmfoto vom 2020-10-28 10-20-32.png b/doc/opc/Bildschirmfoto vom 2020-10-28 10-20-32.png new file mode 100644 index 0000000000000000000000000000000000000000..3c64a298fd7e906674c381ad6ba1f2d4188772a7 Binary files /dev/null and b/doc/opc/Bildschirmfoto vom 2020-10-28 10-20-32.png differ diff --git a/doc/opc/Smart Grid Modell OPC Server.pdf b/doc/opc/Smart Grid Modell OPC Server.pdf index 721b3e5cd23f399984229d881a920ba7b6f2960e..18ffa9f22c0a5eca000fb6acc6558ea8e716c8e7 100644 Binary files a/doc/opc/Smart Grid Modell OPC Server.pdf and b/doc/opc/Smart Grid Modell OPC Server.pdf differ diff --git a/doc/opc/Smart Grid Modell OPC Server.tex b/doc/opc/Smart Grid Modell OPC Server.tex index 18f7a78dc992cb8531fc9940e022e3e122565d0d..9cad572bec261d6eb1e44c716165210396effa3e 100644 --- a/doc/opc/Smart Grid Modell OPC Server.tex +++ b/doc/opc/Smart Grid Modell OPC Server.tex @@ -48,40 +48,216 @@ für das Smart Grid Modell \end{center} + \newpage + \section{Übersicht} - - \newpage + Das Smart-Grid-Modell (SGM) veranschaulicht, ein intelligentes Energienetz mit verschiedenen Strom- Erzeugern und Verbrauchern. + Die Hardware des SGM wurde bereites durch mehrere Gruppen von Studierenden am CVH aufgebaut. + Dazu gehörten sowohl Hardware-, als auch Softwarekomponenten. + + Die Gruppe der Erzeuger auf dem SGM stellt sich aus den einer konventionellen Komponente (einem herkömmlichen Kraftwerk) und zwei erneuerbaren Engergiequellen, + einem Windrad und einem Photovoltaikpark, zusammen. Die Gruppe der Verbraucher, ist durch eine Ansiedlung von Häusern dargestellt. + Alle diese Komponenten sind auf dem Modell miteinander verbunden. Bei der Verbindung handelt es sich um LED-Streifen, die sowohl grün als auch rot leuchten können. + Grün steht hierbei für die erneuerbare Energie und Rot für die konventionelle. + Das Windrad auf dem Modell verfügt über einen Motor, worüber die Windgeschwindigkeit veranschaulicht werden kann. + + Die Ansteuerung der LED-Streifen, als auch des Windrads wird von einem Arduino übernommen, welcher per PWM die Farbe und Drehgeschwindgeit einstellt. + Dieser Arduino war nicht Teil der folgenden Arbeit, sondern wird lediglich über seine I2C-Schnittstelle angesprochen. + Bis auf eine Aktualisierung des Raspberry-Pis auf das zum derzeit aktuellste Raspberry-Pi OS wurden keine Änderungen an der Hardware vorgenommen. + Der Raspberry Pi wurde aktualisiert, damit die neuesten C++ Standards verwendet werden konnten. - \begin{thebibliography}{} - \begin{bibcomment} - Die Online Quellen beziehen sich auf den Stand im Mai 2020. - - \end{bibcomment} - - Weitere Quellen - \begin{itemize} - \item Introduction into docker images \\ - \url{https://jfrog.com/knowledge-base/a-beginners-guide-to-understanding-and-building-docker-images/} - - \end{itemize} - - \vfill - - \begingroup + Die bereits bestehende Software, die vorher auf dem Raspberry-Pi installiert war wurde gesichert und ist in diesem Repositorie unter dem Tag SS19 zu finden + \url{https://gitlab.cvh-server.de/aco/smart-grid-modell/-/tree/ss19}. + Dieser Tag stellt eine GUI bereit mit der verschieden Parameter des Modells angepasst werden können und ein Tageszeiten-Simulationsmodus ausgeführt werden kann. + Diese Software bot jedoch keine Möglichkeit, um einen OPC UA Server sinvoll zu integrieren, daher wurde die Software zur Ansteuerung des Modells in gänze neu geschrieben. + + \section{Entwicklungen} - \small + Als Vorbereitung zu den folgenden Entwicklungen wurde der Raspberry Pi aktualisiert, da das Betriebsystem zu sehr gealtert war, sodass die Software nicht auf den akutellen Stand + geupdated werden konnte. + + \subsection{I2C} + Als erstes wurde eine I2C Modul entwickelt, welches es ermöglicht auf die I2C Schnittstelle des Raspberry-Pis und dadurch auf den Arduino zuzugreifen. + Hierbei wurde im Gegensatz zu vorher auf die Verwendung von der Bibliothek WiringPi verzichtet, sondern es wurden direkt die von Linux bereitgestellten Schnittstellen genutzt. + Eine Beispielanwendung, wie die Schnittstelle zu verwenden ist ist in der Datei \textit{ComTest.cpp} bereitgestellt. + Die zugehörige kompilierte Anwendung ist \textit{manual\_control.exe}. + Mit dieser Anwendung können die Ausgängen des Arduinos gestuert werden. + Die Verwendung ist folgendermaßen: + + \begin{lstlisting}[language=C] + // ./manual_control $register $value + // for example + ./manual_control 2 50 + + // Sets the windmill to the speed of 50 (of max 255). + \end{lstlisting} + + Darauf aufbauen wurde ein \textit{HardwareController} geschrieben, der eine leichtere Steuerung des Modells + erlaubt. Erfasst die einezelnen Bereiche des Netzes zu logischen Gruppen zusammen die dann gemeinsam gesteutert werden können. + + \subsection{Smart Grid Modell} + + In Anlehnung an den bereits bestehenden Tagszeiten-Simulationsmodus wurde eine neue Simulation entwicklet, + die ebenfalls einen Tagesablauf, mit Tageszeit abhängigem Verbrauch und Energieerzeugung, sodass zu verschiedenen Tagszeiten + mal ein Überschuss an erneuerbaren Energien besteht und mal die Versorgung ausschließlich durch die konventionelle Energie gedeckt ist. + Abhängig von der Energieverteilung innerhalb des Netz werden die LEDs geschaltet, um den Zustand zu visualiesieren. + + Die Uhrzeit kann von außen, aus Softwaresicht, eingestellt werden. Genauso kann das berechnen des Zustands für die nächste Stunde angestoßen + werden, sodass sich das Modell von außen steuern lässt. + + Darauf aufbauend wurde das SGM in einen Zustandsautomaten gekapselt, dieser verwaltet lediglich die zwei Zustände Simulation oder Manuelle-Steuerung. + Im Simulationsmodus, wird in einem regelmäßigen Zeitintervall der Zustand für die nächste Stunde des Modells berechnet und eingestellt. + Im manuellen Modus, wird die Zeit festgehalten und das Modell verweilt in diesem Zustand. + Von außen kann jedoch die Uhrzeit manuell geändert werden, wodurch sich der Zustand des Modells ändert. + + \subsection{OPC UA Server} + + Für die Ergänzung des SGM wurde auf die Bibliothek \textit{FreeOpcUa} \url{https://github.com/FreeOpcUa/freeopcua} zurückgegriffen. + Dies ist eine unter LGPL stehende Software, mit der sowohl OPC UA Server als auch Clients geschrieben werden könne. + Die Bibliothek wurde als Git-Submodule eingebunden. + + Es werden auch Code-Beispiele z.B. \url{https://github.com/FreeOpcUa/freeopcua/blob/master/src/examples/example_server.cpp} für einen Server bereitgestellt. + Aufbauen auf diesem Beispiel wurde der OPC UA Server für das SGM implementiert. + + Der OPC UA Server soll es ermöglichen, den Simulationszustand zu simulieren und gleichzeitig Verbraucher im Modell ein und ausschalten können. + Zur Steuerung stellt der OPC UA Server daher drei Steuerungs-Variablen zur Verfügung. + + \begin{description} + \item[sim\_mode\_enabled] Über diese Variable vom Typ \lstinline{boolean} ist es möglich zwischen den Modi Simulation und manueller Steuerung zu wählen. + \item[time] Über diese Variable vom Typ \lstinline{int} lässt sich eine Uhrzeit zwischen 0 und 23 Uhr einstellen. + \item[producing] Über diese Variable vom Typ \lstinline{boolean} kann im Modell gesteuert werden, ob ein zusätzlicher Verbraucher (zum Beispiel eine Industrieanlage) eingeschaltet oder ausgeschaltet werden soll + \end{description} - \setlength{\leftskip}{3cm} + Darüber hinaus gibt der OPC UA Server auch den Zustand der Simulation nach außen frei. + Diese veröffentlichten Variablen können jedoch nicht manipuliert werden. - Copyright \copyright\ 2020\quad Armin Co\\ - Lizenz: \mylicense + \begin{description} + \item[excess\_power] Im Netz verfügbare (überschüssige) erneuerbare Energie. + \item[power\_production] Insgesamt bereitgestellte Energei, sowohl erneuerbar als auch konventionell. + \item[renewable\_pwer] Produzierte erneuerbare Energie. + \item[sun\_power] Durch den Photovoltaikpark erzeugte Energie. + \item[used\_power] Kommulierte Energie aller Verbraucher. + \item[wind\_power] Druch das Windrad erzeugte Energie. + \end{description} - Sie können diesen Text einschließlich \LaTeX-Quelltext - herunterladen unter:\\ - \url{https://gitlab.cvh-server.de/aco/smart-grid-modell} + \begin{figure}[h!] + \centering{ + \includegraphics[scale=0.5]{Bildschirmfoto vom 2020-10-28 10-19-00.png} + } + \caption[]{OPC UA Server SGM Variablen} + \label{abb:opc_vat} + \end{figure} - \endgroup + \section{Installation} + + Für die Entwicklung der Software kann jeglicher Linux-Desktop verwendet werden. + Für Debian basierte Linux-Distributionen ist die Installation am einfachsten. + + Die zu dem Projekt gehörende Quellcode befindet sich im CVH GitLab unter: \url{https://gitlab.cvh-server.de/aco/smart-grid-modell}. + + Zur Enwicklung werden die fogenden Tools benötigt: + \begin{itemize} + \item git + \item gcc + \item make + \item cmake + \end{itemize} + + Für das Testen des OPC Server bietet sich darüber hinaus noch das Tool \textit{opcua-client} an. + Dieses kann über die Python Paketverwaltung pip mit dem Befehl \lstinline{pip install opcua-client} + installiert werden. + + Das Projekt kann mit dem foglenden Befehl heruntergeladen werden. + \begin{lstlisting} + git clone --recurse-submodules https://gitlab.cvh-server.de/aco/smart-grid-modell + \end{lstlisting} + + Für die Installation wurde das Skript \lstinline{install.sh} bereitgestellt. + Sind alle nötigen Abhängigkeiten installiert wird hiermit das gesamte Projekt bebaut. + Auf dem Raspberry-Pi kann das Kompilieren einige Minuten dauern. + + Der Grund dafür ist, dass die FreeOpcUa Bibliothek mitgebaut werden muss. + Die Abhängigkeiten, die für die Bibliothek installiert werden müssen, sind in der + Datei \textit{debian.soft} der FreeOpcUa Biblithek aufgelistet. + + Die Schritte die das Installations Skript übernimmt sind die folgenden. + Als erstes wird das Verzeichnis \textit{build} angelegt und in dieses gewechselt. + Darin wird der Befehlt \lstinline{cmake ..} ausgeführt. + Damit werden die GNU Makefiles generiert, mit denen das Projekt kompiliert werden kann. + Das Kompilieren kann dann mit dem Befehl \lstinline{make} angestoßen werden. + Beschleunigt werden kann der Vorgang, indem mit der Option \lstinline{-j2} + die Anzahl der Threads angegeben werden, mit denen parallel kompiliert wird. + + Beim manuellen kompilieren ist darauf zu achten, dass die ausführbaren Datein + in dem Verzeichnis \textit{build/libs/freeopcua/bin/} abgelegt werden. + Das Installations-Skript kopiert die \textit{smart\_grid.exe} zurück in das \textit{build} Verzeichnis. + + + \section{Ausführen} + + Gestartet werden kann der OPC Server indem die ausführbare Datei gestartet wird. + Beim beenden des Servers, werden die Ausgänge des Modells nicht wieder zurück gesetzt. + Daher leuchten die LEDs weiter und auch das Windrad dreht sich weiter. + + Zum ausschalten der LEDs können zwei Skripte benutzt werden die auf das oben genannte Tool + \textit{manual control} zurückgreifen. + Damit können entweder alle Komponeten ausgeschaltet werden, oder nur das Windrad. + \begin{itemize} + \item windmill\_off.sh + \item all\_off.sh + \end{itemize} + + Alternativ kann das Skript \textit{start\_server.sh} verwendet werden. + Mit dem Skript wird nach dem dem Beenden, durch das Drücken das Taste \textit{q} alle Ausgänge wieder + ausgeschaltet. + + Der OPC Server ist anschließend unter der lokalen IP Adresse (vergeben über DHCP) oder wenn möglich + über den Hostnamen raspberrypi und dem Port 4840. + + Um sich per ssh mit dem Raspberry-Pi zu verbinden werden die Zugangsdaten Benutzername: pi und Passwort: pi benötigt. + + In dem OPC UA client können dann zum Beispiel die Daten betrachtet werden. + So wie in Abbildung \ref{abb:excess_pwr} dargestellt. + + \begin{figure}[h] + \centering{ + \includegraphics[scale=0.5]{Bildschirmfoto vom 2020-10-28 10-20-32.png} + } + \caption[]{Überschüssige Energie im Zeitverlauf} + \label{abb:excess_pwr} + \end{figure} + + + + \newpage + + \section{Ressourcen} + \begin{itemize} + \item \url{https://gitlab.cvh-server.de/aco/smart-grid-modell} + \item \url{https://www.raspberrypi.org/} + \item \url{https://github.com/FreeOpcUa/freeopcua} + \item \url{https://cmake.org/} + \end{itemize} + + + \vfill + + \begingroup + + \small + + \setlength{\leftskip}{3cm} + + + Copyright \copyright\ 2020\quad Armin Co\\ + Lizenz: \mylicense + + Sie können diesen Text einschließlich \LaTeX-Quelltext + herunterladen unter:\\ + \url{https://gitlab.cvh-server.de/aco/smart-grid-modell} + + \endgroup -\end{document}} \ No newline at end of file +\end{document} \ No newline at end of file