Ausarbeitung |
|
Inhaltsverzeichnis:
1. Einführung
Im folgenden wird die Vorgehensweise des Projekts dargestellt, um die Durchführung nachvollziehen zu können und um zukünfigen Projektgruppen, die an ähnlichen Themen arbeiten, den Einstieg in das Projekt zu erleichtern. Es werden zum einen theoretische Grundlagen für das leichtere Verständnis der Thematik dargestellt und zum anderen verwendete Hard- und Software beschrieben.
Zur Bearbeitung des Projekts wurden verschiedene Materialen zur Verfügung gestellt:
STM32F746NG discovery kit (mit Touchscreen)
NETGEAR ProSafe 16 Port Gigabit Switch GS116
TP Link 150 Mbps TL-MR3020 Tragbarer 3G/3,75G-Wireless-N-Router (Login-Daten des verwendeten Routers: TP-LINK_POCKET_3020_304938, PW: 42820895)
Bausatz MOSFET-Treiber RB-8/8x100W Version 1.0
Solderless Breadboard 830 tie-point
Netzwerkkabel
Da für das "Microcontroller development kit for ARM®" (MDK-ARM) von Keil® keine Lizenzen vorhanden waren, fiel die Entscheidung auf die "System Workbench for STM32", welche auf der Internetseite von STM frei zugänglich ist.
Zum Erstellen eines Webservers, auf dem Cocktails bestellt werden können, wird ein lwIP TCP/IP Stack verwendet, basierend auf einer Netconn API.
TCP/IP
Zur Kommunikation einzelner Komponenten eines Netzwerks muss ein Kommunikationsprotokoll (Protokoll) ähnlich zu Verhaltensregeln festgelegt werden. Hierbei werden Format der Nachrichten und Aktionen spezifiziert. Für verschiedene Teilprobleme werden unterschiedliche Protokolle verwendet, deshalb muss für die Gesamtaufgabe ein Protokollstapel eingesetzt werden. (Quelle: Christoph Meinel, Harald Sack: Internetworking - Technische Grundlagen und Anwendungen, Kapitel 2, pp 31-67, Springer Berlin Heidelberg) Die verschiedenen Protokolle sind in Schichten organisiert, dabei ist jeder Schicht ein eigenes Protokoll zugeordnet. Diese sind in Schichtmodellen für Netzwerke (ISO-OSI-Referenzmodell, DoD-Referenzmodell) zusammengefasst. Im DoD-Referenzmodell bilden die Schichten gemeinsam die TCP/IP-Protokollfamilie (Protokollstapel).
TCP/IP steht für "Transmission Control Protocol/Internet Protocol" und stellt den Standard-Protokollstapel für Anbindungen an das Internet dar, wodurch Datenpakete zwischen Netzwerkteilnehmern ausgetauscht werden können. Dieser Stapel besteht ebenfalls aus vier aufeinander aufbauenden Schichten, siehe Abbildung.
In der Netzzugangsschicht und in der Internetschicht werden das IP-Protokoll verwendet, in der Transportschicht wird per TCP und UDP (User Datagram Protocol) übertragen. IP hat dabei die Hauptaufgabe Daten zwischen Netzwerken zu übertragen. Jedes Betriebssystem hat seinen eigenen TCP/IP-Stack, welcher für die Verarbeitung von von ein- und ausgehenden IP-Paketen und deren Weiterleitung zuständig ist. (Quelle: codeplanet.eu)
IP-Adressen und Ports
IP(v4)-Adressen sind aus vier durch Punkte getrennten Zahlen zwischen 0 und 255 aufgebaut. Die Adresse besteht aus der Netzadresse und der Adresse des Rechners (des Hosts) im Netz. Damit übermittelte Daten am Zielrechner der richtigen Anwendung zugeordnet werden können, muss außerdem der entsprechende Port (mittels einer Portnummer aus 16 Bit) angegeben werden. Diese Kombination aus IP-Adresse und Portnummer wird als Socket bezeichnet. (Quelle: codeplanet.eu)
lwIP
Light-weight IP ist eine "leichtgewichtige" Implementierung des TCP/IP-Stacks, welcher auf die begrenzten Ressourcen von Embedded Systems angepasst ist. Es werden unter anderem IP, DHCP clientes und APIs unterstützt. (Quelle: lwIP von Adam Dunkels)
Subnetting
Subnetting bezeichnet die Aufteilung eines zusammenhängenden Adressraums von IP-Adressen in mehrere kleine Adressräume, um die Vergabe von IP-Adressen einzugrenzen. Zur Abgrenzung wird die Subnetmask, beispielsweise 255.255.255.0 eingestellt. Hiermit könnten in einem Adressbereich IP-Adressen von 192.168.0.0 bis 192.168.0.255 vergeben werden. Die erste IP-Adresse des Adressbereichs (.0) kennzeichnet die Netzwerk-Adresse, die letzte (.255) die Broadcast-Adresse, damit bleiben 254 Host-Adressen. Bei einer Subnetmask 255.255.0.0 können 65.534 Host-Adressen vergeben werden usw. (Quelle: www.elektronik-kompendium.de)
RTOS
Ein RTOS (Real Time Operating System) ist ein Betriebssystem, das speziell auf die Bedürfnisse eines Embedded Systems angepasst ist. Hierbei ist vor allem das deterministische Verhalten des Schedulers wichtig, sodass die Echtzeitanforderungen an Systeme gewährleistet werden können (was häufig dadurch umgesetzt wird, dass der Benutzer den Threads eine Priorität zuordnen kann). (Quelle: freertos.org) ...
API, Netconn API
Ein API (Application Program Interface, "Schnittstelle zur Anwendungsprogrammierung") ist eine Sammlug von Funktionen zur Verwendung eines Fremdsystems. Diese wird vom Softwarehersteller veröffentlicht, um es anderen Entwicklern zu ermöglichen, Produkte für die Software zu implementieren. So gibt es viele verschiedene APIs, z.B. eine Amazon API, YouTube APIs, Google Maps API, usw. (Quelle: HowStuffWorks) Das Netconn API ist eine sequenzielle API zur Ermöglichung von Multithread-Prozessen und erfordert ein RTOS. (Quelle: UM1713)
3.1 Umsetzung mit dem Demoprojekt "LwIP_HTTP_Server_Netconn_RTOS" von STM
Als erster Ansatz zur Umsetzung des Projekts wird das entsprechende Demoprojekt von STM aus dem STM32CubeFW für die "System Workbench for STM32" verwendet. Das STM32CubeFW ist ein Paket, das zum einen den STM32CubeMX beinhaltet, mit welcher ein Projekt mit Hife eines Wizards neu erstellt werden kann, außerdem ist eine Embedded Software Plattform vorhanden, die von STM je Board-Serie ausgeliefert wird. Sie umfasst die Hardware Abstraction Layer (HAL), die Middleware (mit Betriebssystem RTOS, Grafik usw.) und verschiedene Projektbespiele, siehe Abbildung. Das STM32CubeMX wird im weiteren Projektverlauf nicht verwendet, da auf ein bestehendes Demo-Projekt zurückgegriffen wird, wodurch die Nutzung des Wizards entfällt. (Quelle: UM1713, Doku zu STM32Cube)
Nun soll die html-Seite, die standardmäßig eingebunden ist, durch eine eigene Seite ersetzt werden, welche eine Cocktailkarte anzeigt, siehe Abbildung. Per Klick auf den jeweiligen "Bestellen"-Text soll über WLAN eine Nachricht (ein Byte) an das STM-Board gesendet werden, in der die IP-Adresse und die Bestellung übermittelt wird. Diese Informationen sollen auf dem STM-Board verarbeitet werden und entsprechend der Anforderungsliste auf eine Bestellliste hinzugefügt werden. Die Internetseite (siehe Abbildung) wurde im Microsoft Expression Web in Version 4.0.20705.0 erstellt.
Bei der Bearbeitung des Projekts ergaben sich verschiedene Probleme. Zum einen fehlten den Gruppenmitgliedern wesentliche Vorkenntnisse im Bereich der Netzwerk- und Bustechnik, was die Herstellung einer funktionsfähige Verbindung von dem STM-Board, Router und eigenem PC erschwerte. Dieses Problem konnte gelöst werden, indem auf ein Demoprojekt von STM zurückgegriffen wurde.
Vorschlag zur Modifikation der Aufgabenstellung
Als neues Ziel kann anvisiert werden, dass ein Webserver zur Verfügung gestellt wird, auf dem eine eigene Website mit der Cocktailkarte geöffnet werden kann. Es wird vorgeschlagen, die Verarbeitung der Bestellung und die Warteschlange (welche die Gruppe bereits von Herrn Ewert erhalten hat) in einem weiteren Projekt im folgenden Semester zu bearbeiten, siehe "Verbesserungen".
Neu formuliertes Ziel
Da die zu Anfangs gestellte Aufgabe in dem verfügbaren Zeitraum nicht erfüllt werden kann, formuliert die Gruppe folgendes neues Ziel:
Das STM32F746G-Discovery-Board soll in Betrieb genommen werden und ein Webserver zur Verfügung gestellt werden.
Auf dem Webserver soll eine eigene HTML-Seite angezeigt werden, über die die Cocktails bestellt werden können.
Die durchgeführten Versuche sollen soweit dokumentiert werden, dass die Arbeit in einem folgenden Semester mit erleichtertem Einstieg fortgeführt werden kann. Es sollen die Rahmenbedingungen, das bisherige Vorgehen und ein Vorschlag für das weitere Vorgehen gründlich dokumentiert werden.
Um die eigene Website im Code einzubinden und aufzurufen, war eine intensive Einarbeitung in den Quellcode erforderlich. Es wurde zunächst versucht, die aufgerufene html-Seite zu verändern. Anschließend wurde der Aufruf der Internetseite angepasst, sowie versucht die Bilder zu ändern. Da diese Ansätze fehlschlugen, wurde vermutet, dass die Startwebsite von einer anderen Index-Datei aus aufgerufen wird. Dementsprechend wurden verschiedene mögliche Dateien untersucht. Weiterhin wurden auf dem STM-Board (im Explorer) nach versteckten Dateien gesucht, ob die Websites hier gespeichert werden. Nachdem auch hier keine Lösung gefunden werden konnte, wurde eine Anfrage im Anfrage im ST-Forum gestellt, um Hilfe von anderen STM32F7xx-Entwicklern zu bekommen. Daraufhin erhielt die Gruppe folgende Antwort:
Daraufhin beschloss die Gruppe, diesen Ansatz nicht weiterzuverfolgen, da es in der verbleibenden Zeit nicht möglich gewesen wäre, das Projekt auf diesem Weg abzuschließen.
Als alternativer Ansatz wurde die Umsetzung mithilfe des cross-platform Tools "Visual GDB" für embedded Systeme in Visual Studio gewählt. Hierfür wurde "Visual Studio Enterprise 2015 With Update 1" verwendet und die Optionen für C++ nachinstalliert. Anschließend wurde "VisualGDB" (V 5.2) in der 30 Tage Testversion von visualgdb.com gedownloadet und installiert. Die Inbetriebnahme wurde nach der Anleitung für den STM32F46NG von VisualGDB durchgeführt und der Webserver erfolgreich im Browser aufgerufen. Im "static const char Startpage" (im Originalcode ursprünglich "HelloWorld") wird die Website per http festgelegt, siehe Abbildung.
Hier wurden Änderungen vorgenommen, die nach erneutem Build und Debuggen auf dem Webserver sichtbar wurden. Somit konnte erstmals eine eigene Website dargestellt werden. Folglich wird dieser Ansatz als machbar bewertet und könnte in zukünftigen Bearbeitungen weiter verfolgt werden. Es wäre noch zu prüfen, wie hier eine bestehende html-Site (die beispielsweise in Expression Web erstellt wird) aufgerufen und wie die Bestellung versendet werden kann (ob dies beispielsweise über den Aufruf einer weiteren internen Website realiserbar ist). Aufgrund des zeitlichen Rahmens kann dies in diesem Projekt nicht mehr durchegeführt werden.
4. Erkenntnisgewinn des Projektteams
Einblick in Grundlagen der Netzwerktechnik,
Buskommunikation und Webserver
Inbetriebnahme und Arbeiten mit dem
STM32F746G-DISCOVERY Board und der Entwicklungsumgebung STM Workbench
(Eclipse)
Arbeiten mit Visual Studio und VisualGDB
Schnittstellenfindung zu anderen Projektgruppen
Für die Inbetriebnahme sollte ein ausreichend großer
Zeitaufwand vorgesehen
Webseitenerstellung mit Expression Web
Arbeiten mit HTML
Anwendung der Kenntnisse des
Produktenstehungsprozesses
Projektdokumentation
Eigenständige Einarbeitung in eine komplexe
mechatronische Problemstellung
Bei Abschluss des Projekts ist es der Gruppe gelungen, mit zwei verschiedenen Ansätzen einen Webserver auf dem STM32F746NG-Board zu erstellen. Die Verwendung des Projekts für die SW4STM32 wird allerdings als sehr schwieirg und wenig erfolgsversprechend für die Weiterarbeit bewertet. Die Erweiterung VisualGDB für Visual Studio könnte für die Implementierung einer Warteschlange besser geeignet sein, da der Projektaufbau Modifikationen einfacher zulässt.
Das Projekt konnte wegen unerwarteter Komplikationen im Zeitrahmen nicht fertiggestellt werden, weshalb eine Weiterführung in folgenden Semestern empfohlen wird. Weiterentwicklungs- und Verbesserungsvorschläge sind unter "Verbesserungen" beschrieben.