Datenübertragung von einem Mikrokontroller-System zu
Transcription
Datenübertragung von einem Mikrokontroller-System zu
HOCHSCHULE EMDEN-LEER Datenübertragung von einem Mikrokontroller-System zu einem Personal-Computer und anschließender Bereitstellung der Daten im Internet Verfasser: Karsten Dürschinger Betreuer: Erstprüfer: Prof. Dr.-Ing. Dirk Rabe Zweitprüfer: Dipl.-Ing. Harald Buß 14.10.2013 Inhaltsverzeichnis 1 2 3 Erklärungen ..................................................................................................................................... 5 1.1 Nutzungsrechte ....................................................................................................................... 5 1.2 Eidesstattliche Erklärung ......................................................................................................... 5 Einleitung ......................................................................................................................................... 6 2.1 Danksagung ............................................................................................................................. 6 2.2 Dokumentenstruktur ............................................................................................................... 6 Ausgangslage und Aufgabenstellung............................................................................................... 7 3.1 3.1.1 RFID-Tag-Lesegerät.......................................................................................................... 8 3.1.2 Datensender (Master) ................................................................................................... 11 3.1.3 Datenempfänger (Slave) ................................................................................................ 11 3.1.4 Applikation (Data-Receiver) .......................................................................................... 12 3.1.5 Applikation Teilnehmerliste .......................................................................................... 13 3.1.6 ZigBee ............................................................................................................................ 13 3.2 4 4.1 Arbeitsumgebung .................................................................................................................. 15 4.2 Master ................................................................................................................................... 15 4.2.1 Anpassungen der ZigBee-Software ............................................................................... 15 4.2.2 Integration ZigBee in die Master-Software ................................................................... 17 Slave ...................................................................................................................................... 21 4.3.1 Anpassungen der ZigBee-Software ............................................................................... 22 4.3.2 Anpassung der Slave-Software ...................................................................................... 22 4.4 6 Aufgabenstellung................................................................................................................... 14 Implementierung der ZigBee-Kommunikation .............................................................................. 15 4.3 5 Ausgangslage ........................................................................................................................... 8 Inbetriebnahme des Gesamtsystems .................................................................................... 24 Erweiterung der USB-Kommunikation .......................................................................................... 25 5.1 Aufbau der USB-Kommunikation .......................................................................................... 25 5.2 Slave-Software....................................................................................................................... 26 Entwicklung der PC-Applikation .................................................................................................... 28 6.1 Die Entwicklungsumgebung .................................................................................................. 28 6.2 Einführung in die WPF-Programmierung .............................................................................. 29 6.2.1 Trennung der Benutzeroberfläche vom Hintergrundcode ............................................ 29 II 7 8 6.2.2 Data-Bindings ................................................................................................................ 30 6.2.3 Frame und Pages ........................................................................................................... 31 6.3 Funktionen des Data-Receivers ............................................................................................. 32 6.4 Aufbau der Applikation ......................................................................................................... 33 6.5 Anpassungen der Funktionen des Data-Receivers 1.0 .......................................................... 34 6.5.1 Auslagerung der USB-Kommunikation .......................................................................... 35 6.5.2 Modifikation der Ausgabe ............................................................................................. 35 6.6 Live-Session ........................................................................................................................... 38 6.7 Teilnehmerliste importieren ................................................................................................. 40 6.8 RFID-Tag einem Namen zuweisen ......................................................................................... 42 6.9 Daten zum Webserver senden .............................................................................................. 43 6.9.1 Page WebOptionCreate ................................................................................................. 44 6.9.2 Übertragung der Daten zum Webserver ....................................................................... 45 Software auf dem Webserver ....................................................................................................... 49 7.1 Arbeitsumgebung .................................................................................................................. 49 7.2 Einführung in PHP und MySQL .............................................................................................. 49 7.2.1 Variablen und Strings in PHP ......................................................................................... 49 7.2.2 Empfangen von Daten ................................................................................................... 50 7.2.3 Daten in die Datenbank schreiben ................................................................................ 50 7.3 Aufbau des Websystems ....................................................................................................... 50 7.4 PHP-Skripte ............................................................................................................................ 51 7.4.1 konfiguration.php .......................................................................................................... 51 7.4.2 rest.php ......................................................................................................................... 53 7.4.3 output.php und refresh.php.......................................................................................... 54 Fehlersuche, Tests und Verbesserungsmöglichkeiten .................................................................. 57 8.1 9 Fehlersuche im übernommenen System............................................................................... 57 8.1.1 Fehler bei der UART-Übertragung ................................................................................. 57 8.1.2 Fehlerhafter Handshake beim Slave.............................................................................. 58 8.1.3 Fehlerhafter Handshake beim Master .......................................................................... 58 8.2 Tests der PC-Applikation und der Webanwendung .............................................................. 59 8.3 Verbesserungsmöglichkeiten ................................................................................................ 61 Bedienungsanleitung ..................................................................................................................... 62 9.1 Installation und Konfiguration der PC- und Web-Software .................................................. 62 9.2 Inbetriebnahme des Gesamtsystems .................................................................................... 63 III 9.2.1 Teilnehmerliste importieren ......................................................................................... 64 9.2.2 Verbindung zum Webserver herstellen......................................................................... 65 9.2.3 Verbindung zu einer Komponente über USB herstellen ............................................... 66 10 Projektmanagement .................................................................................................................. 68 10.1 Meilensteinplanung ............................................................................................................... 68 10.3 Arbeitszeitplanung ................................................................................................................ 69 10.4 Auswertung der Projektplanung ........................................................................................... 70 10.4.1 Meilensteintrendanalyse ............................................................................................... 70 10.4.2 Arbeitszeit...................................................................................................................... 71 11 Fazit ........................................................................................................................................... 72 12 Abbildungsverzeichnis ...........................................................................................................LXXIII 13 Tabellenverzeichnis ............................................................................................................... LXXV 14 Literaturverzeichnis .............................................................................................................. LXXVI 15 Glossar und Abkürzungsverzeichnis ................................................................................... LXXVIII IV 1 Erklärungen 1.1 Nutzungsrechte Ich, Karsten Dürschinger, übertragen die vollen Nutzungsrechte für alle eingereichten Unterlagen dieser Bachelorarbeit an die Hochschule Emden/Leer und deren Angehörigen. Dies gilt auch für die Weitergabe an Medien und die Nutzung im Rahmen öffentlicher Vorträge, Präsentationen und ähnlichem. 1.2 Eidesstattliche Erklärung Hiermit versicher ich, Karsten Dürschinger, dass ich die vorliegende Arbeit selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe, dass alle Stellen der Arbeit, die wörtlich oder sinngemäß aus anderen Quellen übernommen wurden, als solche kenntlich gemacht sind und dass die Arbeit in gleicher oder ähnlicher Form noch keiner Prüfungsbehörde vorgelegt wurde. __________________________________________________________ Ort, Datum, Unterschrift von Karsten Dürschinger 5 2 Einleitung Zum Abschluss des Bachelorstudienganges Informatik an der Hochschule Emden-Leer ist eine Bachelor-Thesis zu verfassen. Diese Umfasst 12 ECTS-Punkte und ist in einem Zeitlichen Rahmen von 10-24 Wochen zu fertigen. Bei der Umsetzung der gestellten Aufgabe ist die Arbeit vom Studenten selbständig zu lösen. In dieser Bachelorarbeit wird sich in ein bestehendes System eingearbeitet und dieses anschließend den neuen Anforderungen angepasst. Bei dem System handelt es sich um ein Zeitmesssystem für Freiwasser-Schwimmwettbewerbe. Das Zeitmesssystem ist eine Eigenentwicklung der Hochschule Emden-Leer, die Zeiterfassung basiert dabei auf RFID-Tags. In dieser Bachelorarbeit wird das Gesamtsystem zum ersten Mal in Betrieb genommen und um die Bereitstellung der Ergebnisse im Internet erweitert. 2.1 Danksagung Während der Bearbeitung meiner Bachelor-Thesis wurde ich von vielen Seiten unterstützt. Mein besonderer Dank gilt folgenden Personen: Prof. Dr.-Ing. Dirk Rabe – Projektgeber Dipl.-Ing. Harald Buß – Projektbetreuer Sie standen bei Fragen immer hilfreich zur Seite. 2.2 Dokumentenstruktur Im Abschnitt 3 wird die Ausgangslage und die Aufgabenstellung beschrieben. Die Implementierung einer ZigBee-Verbindung wird im Abschnitt 4 erläutert. Die Erweiterung der USB-Kommunikation ist im Abschnitt 5 beschrieben. Im Abschnitt 6 ist dokumentiert wie die PC-Applikation entwickelt wurde. Abschnitt 7 behandelt die Entwicklung der PHP-Skripte für die Webanwendung. Ein Funktionstest des Gesamtsystems ist im Abschnitt 8 dokumentiert. Eine Bedienungsanleitung für die Komponenten ist im Abschnitt 9 beschrieben. Die Planung der Bachelorarbeit ist im Abschnitt 10 dokumentiert. Ein Gesamtfazit ist im Abschnitt 11 festgehalten. 6 3 Ausgangslage und Aufgabenstellung In der Projektarbeit „Implementierung einer drahtlosen ZigBee-basierten Datenübertragung für eine ARM-basierte Microkontroller-Applikation“ 14 habe ich mich mit dem Thema ZigBee und der Cortex M3 Programmierung beschäftigt. Dieses Projekt war ein Teilprojekt eines größeren Gesamtsystems. Zu dem Gesamtsystem gehören zwei weitere Bachelorarbeiten („Entwurf und Implementierung eines ARM-basierten Systems (HW/SW) zur Verarbeitung und Übertragung von RFID-Tag-Daten“ [2] und „Weiterentwicklung eines kontroller-basierten System zur Datenerfassung per RFID“ [3]). Diese Systeme bilden zusammen ein Zeitmesssystem für Freiwasser-Schwimmwettbewerbe. Abbildung 1 zeigt die einzelnen Komponenten. Die dargestellte Funkverbindung wurde von mir in der Projektarbeit [1] entworfen, jedoch noch nicht in dieses System integriert. Ein Test aller Komponenten und deren Zusammenspiel konnte daher noch nicht durchgeführt werden. In der Projektarbeit „Windows basierte RFID-Tag Erfassung mit C#“ [4] wurde eine Software geschrieben, mit der eine Teilnehmerliste um die RFID-Tags erweitert wird. Abbildung 1: Übersicht der Systemkomponenten [2] 1 1 S. 8 7 3.1 Ausgangslage Die Bachelorarbeit baut auf mehrere Komponenten auf, diese werden in diesem Abschnitt in Kurzform erläutert. 3.1.1 RFID-Tag-Lesegerät Das RFID-Tag-Lesegerät besteht aus drei Komponenten: einer Antenne (Abbildung 2), an der die Schwimmer mit dem RFID-Tag (Abbildung 3) anschlagen und dem eigentlichen Zeitmesssystem (Abbildung 4). Abbildung 2: RFID-Antenne (Anschlag auf anderer Seite) 8 Abbildung 3: RFID-Tag Abbildung 4: Zeitmesssystem Abbildung 4 zeigt das Zeitmesssystem, an dem ein RFID-Sensor angeschlossen ist. Die Spannung wird von einer externen Spannungsquelle bezogen (12 V=), ein Betrieb über Akku ist möglich. Über eine weitere Leitung ist die Verbindung zum Master (siehe Abbildung 1) hergestellt. Die erfassten Zeitmessungen werden über den UART2-Standard an den Master übertragen. Dabei wird bei jeder Übertragung ein einzelner Datensatz verschickt. Dieser besteht aus einem RFID-Tag oder einem „Nachstart3“ und dem dazugehörigen Zeitstempel. Für die Übertragung wird zwischen 2 3 Universal Asynchronous Receiver Transmitter Start der Zeitmessung 9 dem RFID-Tag und dem Zeitstempel ein Delimiter4 gesetzt. Das Ende einer Übertragung wird durch das Zeichen „#“ signalisiert. Tabelle 1 zeigt den Aufbau eines UART-Datensatzes. Information: RFID-Tag/Start Inhalt: Tag-Nummer/Start Delimiter ; Tabelle 1: Aufbau der UART-Datensätze 4 Trennzeichen 10 Zeit Zeitstempel Ende des Datensatzes # 3.1.2 Datensender (Master) Der Master nimmt die Daten vom RFID-Tag-Lesegerät auf und speichert diese ab. Über eine USBSchnittstelle ist ein Anschluss an die Applikation „Data-Receiver“ möglich. Mit dieser können die Daten ausgelesen werden. Die wichtigste Funktion, das Versenden der Datensätze über ZigBee, ist noch nicht implementiert. Die ZigBee-Software ist wie bereits erwähnt programmiert, jedoch noch nicht eingebunden. Abbildung 5 zeigt den Master, die Betriebsspannung und die Datensätze bezieht der Master über eine einzige Verbindung zum RFID-Tag-Lesegerät. Abbildung 5: Datensender (Master) 3.1.3 Datenempfänger (Slave) Der Slave soll in der späteren Anwendung an einem PC angeschlossen werden. Auf diesem ist über die Applikation „Data-Receiver“ das Auslesen der Wettkampfergebnisse möglich. Die Datensätze werden über ZigBee vom Master empfangen, somit ist auch ein Auslesen der Daten aus einer größeren Entfernung vom eigentlichen Messsystem möglich. Abbildung 6 zeigt den Slave, die Kommunikation und die Betriebsspannung wird über eine USB-Verbindung ermöglicht. 11 Abbildung 6: Datenempfänger (Slave) 3.1.4 Applikation (Data-Receiver) Die Applikation „Data-Receiver“ ist für die Installation auf einem handelsüblichen PC mit WindowsBetriebssystem vorgesehen. Über USB kann eine Verbindung zum Master oder zum Slave hergestellt werden. Die Software bietet Steuerungsfunktionen für diese Komponenten und das Auslesen der Wettkampfergebnisse. Die Ergebnisse werden in einer vorher festgelegten CSV-Datei gespeichert. Abbildung 7 zeigt das Startbild dieser Anwendung. Die Software ist in C#5 mit „Windows Forms“6 programmiert. 5 6 C# ist eine objektorientierte Programmiersprache Programmierschnittstelle für Benutzeroberflächen unter C# 12 Abbildung 7: Data-Receiver 3.1.5 Applikation Teilnehmerliste Die Applikation ermöglicht es, jeder teilnehmenden Person einen eindeutigen RFID-Tag zuzuweisen. Dies ist vor dem Wettkampf durchzuführen und ermöglicht später ein explizites Zuweisen vom RFIDTag zum Namen. Mit dieser Software ist das Erstellen einer Teilnehmerliste möglich. 3.1.6 ZigBee Die Übertragung der Daten vom Master zum Slave soll über den ZigBee-Standard realisiert werden. Eine entsprechende Software ist entworfen und funktionstüchtig. Diese muss noch in die Komponenten Master und Slave integriert werden. 13 3.2 Aufgabenstellung Die Aufgabe gliedert sich in drei Teilbereiche: 1. Integration der ZigBee-Kommunikation. 2. Daten „live“ an den PC übertragen. 3. Ergebnisse auf einem Webserver bereitstellen. Zu 1.) Die ZigBee-Kommunikation muss in den Master und den Slave integriert werden. Dafür ist eine Einarbeitung in die bestehende Software nötig. Da die ZigBee-Kommunikation von mir selber entwickelt wurde, entfällt eine Einarbeitung in die ZigBee-Thematik. Die Software ist in „C“ geschrieben und läuft auf ARM Cortex M3 Prozessoren. Nach Integration der Kommunikationsverbindung ist die Kommunikation zwischen Master und Slave entsprechend den Anforderungen zu testen. Ist die Funktionsweise gegeben, kann mit dem zweiten Teil der Aufgabe begonnen werden. Zu 2.) Über die Software „Data-Receiver“ ist das Auslesen der Ergebnisse im Ready-Modus des Slaves und Masters möglich. Dieses erlaubt es nach einem Wettkampf das Gesamtergebnis auszulesen. In der bestehenden Software ist es jedoch nicht möglich, die Ergebnisse „Live“ auszulesen. Für die „live-Ergebnisse“ müssen Änderungen an der Slave- und Data-Receiver Software vorgenommen werden. Erhält der Slave über ZigBee einen neuen Datensatz, soll dieser wie zuvor auf dem Flash gesichert werden, zudem muss dieser Datensatz nun über USB an die PC-Software weitegeleitet werden. Zu 3.) Es soll ermöglicht werden, von der PC-Software aus eine Verbindung zu einem Webserver herzustellen. Auf diesem Webserver sollen die Ergebnisse gesichert und per Webbrowser abrufbar sein. Zur Speicherung der Daten bietet sich ein Datenbanksystem an. Für die Umsetzung sind grundlegende Änderungen oder eine Neuentwicklung der PC-Software nötig. Für die Entwicklung der Webseite muss ein Webserver eingerichtet werden oder die Dienste eines kostenlosen Webspace-Anbieters verwendet werden. Die Daten von der PCSoftware müssen zu dem Webserver geschickt werden und dort in die Datenbank eingepflegt werden. 14 4 Implementierung der ZigBee-Kommunikation In der von mir angefertigten Projektarbeit [1] habe ich eine Kommunikation für den Datenaustausch zwischen Master und Slave entwickelt. Die Entwicklung wurde auf einem eigenständigen System durchgeführt und bedarf noch kleinerer Anpassungen. Anschließend ist die Kommunikation in dem System aus der Bachelorarbeit [2] zu integrieren. Im Abschnitt 4.1 wird kurz die Entwicklungsumgebung vorgestellt. Die vorgenommenen Anpassungen für den Master werden im Abschnitt 4.2 erläutern, für den Slave sind die Anpassungen im Abschnitt 4.3 dokumentiert. 4.1 Arbeitsumgebung Für die Softwareentwicklung wurde auf die aus dem Projekt [1] bekannte Entwicklungsumgebung „mikroC Pro for Arm Version 3.00“ zurückgegriffen. Als Programmiergerät kam der „mikroProg for STM32“ von „mikroElektrinika“ zum Einsatz. Die Software aus der Bachelorarbeit [2] wurde übernommen und muss mit der ZigBee-Kommunikation erweitert werden. Gearbeitet wurde auf der aus der Bachelorarbeit [2] stammenden Hardware (siehe Abschnitt 3.1.2 und Abschnitt 3.1.3). 4.2 Master Der Master muss die vom RFID-Tag-Lesegerät erhaltenen Datensätze (siehe 3.1.1) via ZigBee an den Slave versenden. Dafür muss die ZigBee-Software für den Master aus dem Projekt [1] eingebunden werden. 4.2.1 Anpassungen der ZigBee-Software Die ZigBee-Kommunikation wurde auf einer eigenen Entwicklungsumgebung entwickelt. Für die Entwicklung auf einem eigenständigen System wurden Funktionen geschaffen, die mit der Integration in das Gesamtsystem überflüssig geworden sind. Nachfolgend werden die Bearbeitungen aufgezeigt: 1. Entfernung der Funktion „void init()“: In dieser Funktion wurde die MCU eingerichtet, dieses wird bereits in der Master-Software erledigt und ist daher in der Endanwendung nicht mehr in der ZigBee-Software nötig. 15 2. Änderung der „void Main()“-Funktion: Zum Testen der ZigBee-Kommunikation wurden in der Main-Funktion Testdatensätze erzeugt. Die Testdaten wurden zunächst in eine Queue7 geschrieben, aus der die Daten dann über ZigBee verschickt wurden. Die Testdaten werden im späteren Betrieb nicht mehr benötigt und können entfernt werden. Abbildung 8 zeigt den Code-Ausschnitt, in dem die Testdaten erzeugt werden. Dies wird nicht mehr benötigt und konnte deshalb entfernt werden. Das Füllen der Queue mit Daten (Abbildung 9) wird in der späteren Anwendung vom Master durchgeführt. Ein Füllen der Queue in der ZigBee-Software ist daher nicht mehr nötig und wurde deshalb entfernt. In der Software des Masters existiert bereits eine MainFunktion, daher musste die Main-Funktion in der ZigBee-Software umbenannt werden. Der neue Name ist „void zigbee()“. 3. Entfernung der Pins für die LEDs Zur Optischen Wiedergabe kam bei der Entwicklung der ZigBee-Kommunikation eine zusätzliche LED-Platine zum Einsatz. Diese findet im Endsystem keine Anwendung mehr. Daher müssen die festgelegten Pins für die LEDs entfernt werden. Abbildung 10 zeigt den entfernten Code. Abbildung 8: Erzeugung der Testdaten 7 Warteschlange, wird mit Daten gefüllt die dann per ZigBee versendet werden 16 Abbildung 9: Füllen der Queue mit Testdaten Abbildung 10: Pins der LED-Platine Der Dateiname „master“ ist zudem in „zigbee“ geändert worden. So soll später schnell erkennbar sein, welche Funktion diese Komponente umfasst. 4.2.2 Integration ZigBee in die Master-Software Nach Durchführung der im Abschnitt 4.2.1 beschriebenen Änderungen war die ZigBee-Software bereit für die Integration in die Master-Software. Die Integration wird in den folgenden 4 Abschnitten beschrieben. Der erste Abschnitt (4.2.2.1) behandelt das Hinzufügen der ZigBee-Dateien in das bestehende Master-Projekt. Unter Abschnitt 4.2.2.2 wird erläutert, wie die MCU konfiguriert werden muss. Im Abschnitt 4.2.2.3 wird erklärt, welche Funktionen der ZigBee-Software aufgerufen werden müssen. Abschließend wird im Abschnitt 4.2.2.4 die Anpassung der LED-Ausgabe des Masters beschrieben. 17 4.2.2.1 Einbinden der ZigBee-Dateien Zuerst müssen die Quelldateien der ZigBee-Kommunikation dem Projekt8 hinzugefügt werden, dies ist einfach durch Rechtsklick auf Sources möglich. Abbildung 11 zeigt das sich öffnende Kontextmenü, indem über „Add File To Project…“ die „zigbee.c“-Datei dem Projekt hinzugefügt werden kann. Mit den Header-Files ist die Vorgehensweise identisch, nur das diese unter „Header Files“ hinzugefügt werden. Abbildung 11: Quelldatei dem Projekt hinzufügen Folgende Dateien müssen hinzugefügt werden: 1. 2. 3. 4. zigbee.c WriteReadBoth.c WriteReadBoth.h zigbee.h 4.2.2.2 Konfiguration der MCU In der Master-Software ist die MCU bereits grundlegend konfiguriert, um das ZigBee-Modul ansprechen zu können, müssen jedoch einige Ergänzungen vorgenommen werden. Für den Datenaustausch zwischen MCU und ZigBee-Modul wird der bereits konfigurierte SPI9-Bus genutzt. Abbildung 12 zeigt den Programmausschnitt aus der Funktion „init_MCU()“, in dem der SPIBus eingerichtet wird. 8 9 Software-Projekt in der Entwicklungsumgebung, in dem die Master-Software bearbeitet wird Serial Peripheral Interface 18 Abbildung 12: SPI-Bus Initialisierung Für den Datenaustausch zwischen MCU und dem ZigBee-Modul über den SPI-Bus ist ein Signal „ChipSelect“ zu implementieren. Liegt am „Chip-Select“ des ZigBee-Moduls eine „0“ an, ist dies aktiv. Der GPIO10-Pin der MCU (Pin PA4), der zu dem „Chip-Select“ des ZigBee-Moduls führt, ist als Ausgang zu konfigurieren. Hat das ZigBee-Modul eine neue Nachricht empfangen, wird ein Interrupt ausgelöst. Bei ausgelöstem Interrupt liegt am Interrupt-Pin des ZigBee-Moduls eine „0“, ansonsten eine „1“. Dieser Wert wird durch die MCU an dessen Pin PB9 ausgelesen. PB9 ist folglich als Eingang zu konfigurieren. Abbildung 13 zeigt den Code-Ausschnitt, in dem der Pin PB9 der MCU als Eingang konfiguriert wird. Abbildung 13: GPIO-Pin als Eingang konfigurieren Abbildung 14: MCU-Pins einen Namen zuweisen In Abbildung 14 wird der Code-Abschnitt gezeigt, in dem durch „sbit“ den Pins der MCU einen Namen zugewiesen wird. 4.2.2.3 Einbinden der ZigBee-Kommunikation Zur Verwendung der ZigBee-Kommunikation reicht der Aufruf von drei Funktionen aus. Bevor das ZigBee-Modul genutzt werden kann ist eine Initialisierung des Moduls notwendig. Die Initialisierung findet in der Funktion „zigbee_init()“ der Datei zigbee.c statt. Diese Funktion muss zum Programmstart einmalig aufgerufen werden. Abbildung 15 zeigt den Aufruf der Funktion, dieser wird direkt nach der MCU Initialisierung in der main()-Funktion des Masters durchgeführt. 10 General-purpose input/output (Pins der MCU) 19 Abbildung 15: ZigBee Initialisierung Die eigentliche Kommunikation über ZigBee wird durch den Aufruf der Funktion „zigbee()“ realisiert. Diese ist in den Programmablauf so zu integrieren, dass sie fortlaufend aufgerufen wird. In der Master-Software wird dies in der main()-Funktion ermöglicht. Abbildung 16 zeigt den Aufruf der ZigBee-Kommunikation in der while(1)-Schleife der main()-Funktion. Abbildung 16: Einbindung der ZigBee-Kommunikation Die dritte Funktion puffert die Datensätze, die über ZigBee versendet werden sollen. Die ZigBeeSoftware bietet dafür eine Queue an. In dieser werden die Datensätze gespeichert, beim nächsten Aufruf von „zigbee()“ werden diese dann verschickt. Die Datensätze werden durch die Funktion „FIFO_push()“ in die Queue aufgenommen. Abbildung 17 zeigt den Aufruf der Funktion FIFO_push(), als Parameter wird die Adresse des zu übergebenden Datensatz angegeben. Aufgerufen wird die Funktion, wenn ein Datensatz über UART vom RFID-Tag-Lesegerät eingegangen ist. Abbildung 17: ZigBee-Queue füllen 4.2.2.4 Anpassung der LED-Ausgabe Der Master bietet durch LEDs die Möglichkeit Informationen optisch darzustellen. Für die ZigBeeKommunikation ist die LED „LED_BEE_ACTIVITY“ vorgesehen. Wird ein Verbindungstest durchgeführt, bei dem eine ZigBee-Verbindung aufgebaut werden kann, signalisiert die LED durch Leuchten, dass eine Verbindung zum Slave hergestellt werden konnte. Abbildung 18 zeigt den Master an dem die hier genutzten LEDs gekennzeichnet wurden. 20 Abbildung 18: Master mit gekennzeichneten LEDs Befindet sich der Master im Operate-Modus, bedeutet ein aufleuchten der LED die Versendung eines Datensatzes Zudem wirkt sich die ZigBee-Kommunikation auf die Error-LEDs des Masters aus. Die Error-LEDs geben durch verschieden schnelles Blinken unterschiedliche Stufen von Fehlern an. Konnte keine ZigBee-Verbindung aufgebaut werden, erhöht sich der Error-Fehler und dadurch die Blinkgeschwindigkeit. Abbildung 19 zeigt einen Code-Ausschnitt, in diesem wird die Variable „con_error“ erhöht sofern keine ZigBee-Verbindung aufgebaut werden konnte. Die Auswertung wird durch die bestehende Software vom Master vorgenommen. Abbildung 19: Error zuweisen 4.3 Slave Der Slave empfängt die vom Master verschickten Datensätze über ZigBee. Dafür sind Anpassungen der ZigBee-Software und eine anschließende Einbindung der ZigBee-Software in die Slave-Software nötig. Eingebunden werden muss die aus der Projektarbeit [1] stammende ZigBee-Software für den Slave. 21 4.3.1 Anpassungen der ZigBee-Software Wie auch beim Master (siehe Abschnitt 4.2.1) müssen einige Änderungen in der ZigBee-Software vorgenommen werden. Nachfolgend werden die durchgeführten Änderungen aufgeführt: 1. Funktion „void init()“ entfernt Die Initialisierung der MCU wird von der Slave-Software übernommen und muss deshalb nicht mehr in der ZigBee-Software durchgeführt werden. 2. Funktion „mode_Pay()“ bearbeitet In dem Projekte [1] wurde mit Testdaten gearbeitet, diese wurden in der Funktion „mode_Pay()“ ausgewertet. In der Endanwendung werden keine Testdaten mehr verschickt, somit ist eine Überprüfung der eingegangen Datensätze nicht mehr nötig. Der Code wurde einfach auskommentiert und kann bei Bedarf wieder genutzt werden. Durch eine neu eingefügte Variable wird der Slave-Software signalisiert, dass ein neuer Datensatz über ZigBee eingegangen ist. Bei einem eingegangen Datensatz wird nun der Variablen „new_Data_From_ZigBee“ eine „1“ zugewiesen (siehe Abbildung 20). Abbildung 20: Variable neuer Datensatz ist eingegangen Wie beim Master wurde die Quelldatei von „slave.c“ zu „zigbee.c“ umbenannt. 4.3.2 Anpassung der Slave-Software Nachdem die ZigBee-Software im Abschnitt 4.3.1 angepasst wurde, ist die Einbindung der ZigBeeKommunikation in die bestehende Slave-Software möglich. Die zu tätigen Schritte hierfür werden in den folgenden 4 Abschnitten erläutert. 4.3.2.1 Einbindung der ZigBee-Dateien Die Einbindung der Daten erfolgt nach dem gleichen Schema wie bei dem Master. Die Vorgehensweise ist dem Abschnitt 4.2.2.1 zu entnehmen. Für den Slave müssen die vorbereiteten ZigBee-Dateien eingebunden werden. In diesem Falle sind das folgende vier Dateien: 1. 2. 3. 4. zigbee.c WriteReadBoth.c zigbee.h WriteReadBoth.h 4.3.2.2 Konfiguration der MCU Die Änderungen, die bei der Konfiguration der MCU im Slave vorgenommen werden müssen, sind identisch zu den Änderungen beim Master. Nachzulesen sind diese Änderungen im Abschnitt 4.2.2.2. 22 4.3.2.3 Einbindung der ZigBee-Kommunikation Um die ZigBee-Kommunikation im Slave nutzen zu können, müssen lediglich zwei Funktionen aufgerufen werden. Zum einen „zigbee_init()“ und zum anderen „zigbee()“, die Einbindung ist identisch zu der beim Master. Aus dem Abschnitt 4.2.2.3 können weitere Informationen entnommen werden. Speziell beim Slave muss zudem noch die Abspeicherung der eingegangenen Datensätze vorgenommen werden. Dafür wird in der Funktion Action() des Slaves abgefragt, ob ein neuer Datensatz eingegangen ist. Abbildung 21 zeigt den Quellcode, in dem der eingegangene Datensatz vom ZigBee-Modul der Variablen „Received_Data[]“ zugewiesen wird. Anschließend wird der Datensatz in den Flash-Speicher der MCU geschrieben. Nachdem der neue Datensatz verarbeitet wurde, wird die Variable „new_Data_From_Zigbee“ auf „0“ gesetzt. Abbildung 21: Eingehende Datensätze speichern 4.3.2.4 Anpassung der LED-Ausgabe Die ZigBee-Kommunikation wirkt sich direkt auf die LED „LED_BEE_ACTIVITY“ aus. Dabei unterscheidet sich die Funktion der Lampe je nachdem, in welchem Modus sich der Slave befindet. Im Modus „Ready“ zeigt ein Leuchten der LED eine aufgebaute ZigBee-Verbindung an. Befindet sich der Slave im Operate-Modus, leuchtet die LED kurz auf sobald ein neuer Datensatz empfangen wurde. Wie beim Master gibt es auch beim Slave eine Error-Ausgabe. Der Error-Grad wird durch verschieden schnelles Blinken der Error-LED dargestellt. Abbildung 22 zeigt einen Ausschnitt aus dem Quellcode, in welchem der Error-Wert hochgezählt wird sofern keine ZigBee-Verbindung besteht. Die bereits in der Slave-Software implementierte Auswerte-Logik bestimmt, welche LEDs angesprochen werden. In Abbildung 23 ist der Slave mit gekennzeichneten LEDs zu sehen. 23 Abbildung 22: Error-Auswertung Abbildung 23: Slave mit gekennzeichneten LEDs 4.4 Inbetriebnahme des Gesamtsystems Nachdem die ZigBee-Kommunikation Implementiert wurde, konnte das Gesamtsystem in Betrieb genommen werden. Dabei kamen alle Komponenten aus den Bachelorarbeiten [2] und [3] zum Einsatz sowie die ZigBee-Kommunikation aus dem Projekt [1]. Das System lief grundsätzlich, im Laufe des Betriebs konnten jedoch noch einige Fehler entdeckt werden. Auf die Fehleruntersuchung und -behebung wird im Abschnitt 8.1 eingegangen. 24 5 Erweiterung der USB-Kommunikation In der Ausgangskonfiguration bietet das System das Auslesen der Wettkampfergebnisse nur im Ready-Modus des Slaves und Masters an. Somit ist eine Auswertung der Wettkampfergebnisse erst nach Beendigung des Rennens möglich. In dieser Bachelorarbeit soll das System erweitert werden. Ermöglicht werden soll eine „Live“-Übertragung der Datensätze an die PC-Applikation. Dabei müssen Änderungen an der C-Software vom Slave sowie an der C#-Applikation für den PC vorgenommen werden. Da der Master im späteren Betrieb nicht für die Live-Übertragung vorgesehen ist, wird dessen Funktionsumfang beibehalten. Dieser Abschnitt befasst sich mit den Änderungen an der Slave-Software. Die Änderungen der PC-Software werden im Abschnitt 6.4 erläutert. 5.1 Aufbau der USB-Kommunikation In der Bachelorarbeit [2]11 wurde die USB-Kommunikation zwischen den Komponenten Master/Slave und der PC-Applikation definiert. Eine Übertragung über USB ist dabei standardmäßig 64 Byte groß. Tabelle 2 zeigt den Aufbau eines USB-Datensatzes. Entscheidend für die Erweiterung der Kommunikation ist der „OP-Code“-Bereich. In diesem wird definiert, wie der Empfänger mit dem empfangenen Datensatz umzugehen zu hat. Byte 0-2 3 4-7 8-11 12-63 Tabelle 2: Aufbau eines USB-Datensatzes [2] Beschreibung OP-Code Status Versorgungspannung Anzahl der Datensätze Datensatz (RFID-Tag u. Zeitstempel) 12 In der Bachelorarbeit [2] wurden bereits mehrere Befehle festgelegt, diese werden in der Tabelle 3 kurz aufgeführt. Dabei handelt es sich um Befehle, die von der PC-Applikation zum Slave/Master geschickt werden können. Nicht aufgeführt sind Befehle, die vom Slave/Master zum PC gesendet werden. Diese sind in der Tabelle 4 aufgeführt. Für die Realisierung der „Live“-Ergebnisse wird ein zusätzlicher Befehl benötigt, der vom Slave zum PC gesendet wird. Festgelegt wurde dieser mit „RTD“ (Real-Time-Data), siehe Tabelle 5. Anhand des OP-Codes kann die PC-Applikation den empfangenen Datensatz als Live-Ergebnis erkennen und entsprechend verarbeiten. 11 12 Seite 50 Seite 53 25 Kurzbeschreibung Reset Befehl RES Speicher löschen DEL Flashinhalt übertragen TRA Datenübertragung starten SRT Datenübertragung stoppen STO Tabelle 3: Bisherige Befehle aus der Bachelorarbeit [2] Beschreibung Wenn sich das Gerät im Fehlerzustand MODUS_FATAL_ERROR befindet, kann das Gerät über die Applikation neu gestartet werden. Dafür wird der der Befehl RES an das jeweilige Gerät gesendet. Durch die Übertragung des Kürzels DEL wird das Löschen des Speichers verursacht. Durch die Übermittlung des Befehls TRA startet das angeschlossene Gerät den Transfer des Flash-SpeicherInhalts an die Applikation Durch diesen Befehl wird das System gestartet Durch diesen Befehl kann die Systemausführung wieder gestoppt werden 13 Kurzbeschreibung Datenübertragung fertig Befehl DOK Handshake CO Beschreibung Gibt an, dass das Auslesen des Flash-Speichers beendet wurde. Wird zur PC-Applikation gesendet, um einen Handshake durchzuführen. Tabelle 4: Befehle die von der PC-Applikation ausgewertet werden Kurzbeschreibung Live-Datensatz Befehl RTD Beschreibung Gibt an, dass es sich um einen Live-Datensatz handelt. Tabelle 5: Befehl "RTD" 5.2 Slave-Software In der momentanen Konfiguration erhält der Slave einen Datensatz über die ZigBee-Kommunikation und speichert diesen auf den internen Flash-Speicher ab. Mit dem im Abschnitt 5.1 definierten Befehl „RTD“ sind die Grundlagen für eine Implementierung der Live-Übertragung gelegt. Festgelegt werden muss noch der optimale Zeitpunkt für die Übertragung der Datensätze. Es bietet sich an, die 13 Seite 41 26 Datensätze direkt nach dem Empfang über ZigBee an die Applikation zu übertragen. Das hat den Vorteil, dass sich der Datensatz noch im Arbeitsspeicher der MCU befindet und nicht extra wieder aus dem Flash ausgelesen werden muss. Abbildung 24 zeigt den Quellcode, in dem die Übertragung der Live-Ergebnisse durchgeführt wird. Der obere Teilbereich ist schon aus dem Abschnitt 4.3.2.3 bekannt, hier wird ein einkommender Datensatz vom ZigBee-Modul auf dem Flashspeicher der MCU gesichert. Hinzugefügt wurde der Code in dem umrahmten Bereich, hier findet die USB-Übertragung statt. Abbildung 24: Implementierung der USB-Live-Übertragung Die Variable „writebuff[]“ wird entsprechend der Definition aus dem Abschnitt 5.1 gefüllt und durch den Aufruf der Funktion „HID_Write(&writebuff, USB_Buffer);“ über USB an die PC-Applikation übertragen. 27 6 Entwicklung der PC-Applikation Im Abschnitt 3.1.4 wurde bereits kurz die bestehende PC-Applikation vorgestellt. Diese wurde zu Beginn der Arbeit mit der Funktion „Live-Ergebnisse“ erweitert. Im Laufe der Entwicklungszeit musste jedoch festgestellt werden, dass die bestehende Software eher suboptimal programmiert wurde. Die Vorzüge einer objektorientierten Programmiersprache wurden nicht umgesetzt. Das gravierende Problem war jedoch die starre Fenstergröße. Dies stellt vor allem beim Einlesen von größeren Teilnehmerlisten, die eine höhere Anzahl von Spalten besitzen, ein Problem dar. Es was zu entscheiden, entweder die Software den neuen Gegebenheiten anzupassen oder eine neue Software zu entwickeln. Nach einem Entscheidungsprozess haben die Vorteile für eine Neuentwicklung der Software überwogen. Die entscheidenden Punkte waren: 1. Umstellung von der veralteten WinForms-API14 auf die modernere WPF15-API. 2. Die grafische Umsetzung gestaltet sich mit der WPF-API einfacher. 3. Vorhandene Code-Abschnitte können zum Teil in die neue Software übernommen werden, womit sich der Arbeitsaufwand in Grenzen hält. Die Dokumentation beschränkt sich auf die WPF-Version des Programmes. Alle Funktionen die in der ersten Version eingebaut wurden, sind auch in der WPF-Anwendung enthalten. Im späteren Verlauf wird des Öfteren der Begriff „Systemkomponente“ genutzt, damit sind der Master und der Slave aus der Bachelorarbeit [2] gemeint. 6.1 Die Entwicklungsumgebung Als Entwicklungsumgebung kam von Microsoft das Produkt Visual Studio 2012 Ultimate [5] zum Einsatz. Durch die Teilnahme der Hochschule Emden-Leer an dem MSDNAA16-Programm konnte die Software kostenlos genutzt werden. In der Bachelorarbeit [2] wurde die Software ebenfalls genutzt und dort als gute Entwicklungsumgebung beurteilt. Aufgrund der eigenen Erfahrung im Umgang mit der Entwicklungsumgebung kam ich ebenfalls zu einem positiven Gesamteindruck. Microsoft bietet online unter den Namen „msdn“ [6] eine sehr gute Dokumentation zu C# an. Als besonders positiv bewerte ich die komfortable Design-Oberfläche und die hervorragende Möglichkeit zum Debuggen. 14 Application programming interface oder in Deutsch: Programmierschnittstelle Windows Presentation Foundation 16 http://www.hs-emden-leer.de/fachbereiche/technik/unix-system/msdnaa.html 15 28 6.2 Einführung in die WPF-Programmierung In diesem Abschnitt werden grundlegende Funktionen, die für die WPF-Programmierung genutzt wurden, erklärt. Der Abschnitt 6.2.1 erklärt XAML und C#. Im Abschnitt 6.2.2 werden Data-Bindings erläutert. Wie verschiedene Seiten ausgegeben werden ist im Abschnitt 6.2.3 erklärt. 6.2.1 Trennung der Benutzeroberfläche vom Hintergrundcode Die Windows Presentation Foundation Programmierung ist eine moderne Variante für die Programmierung von Benutzeroberflächen unter C#. Die wichtigste Neuerung in Vergleich zu den WinForm-Anwendungen ist die Trennung von Design und Quellcode. Die Benutzeroberfläche wird in XAML17, eine Unterart der XML-Sprache, erstellt. Die eigentliche Programmierung findet weiterhin in C# statt. Unter XAML können deutlich mehr grafische Funktionen genutzt werden, als es bei WinForm-Anwendungen möglich war. In Abbildung 25 ist ein XAML-Code aus der PC-Software zu sehen. Abbildung 26 zeigt das aus dem XAML-Code generierte Design in der Vorschau von Visual Studio. Der Hintergrundcode zu diesem XAML-Code wird in Abbildung 27 gezeigt. Wird auf dem Button „Annehmen“ aus der Abbildung 26 gedrückt, wird die Zeile „private void Annehmen_Click(object sender, RoutedEventArgs e)“ aus der Abbildung 27 ausgeführt. Durch die eindeutige Trennung lässt sich die Arbeit gut auf einen Designer und Programmierer aufteilen. Abbildung 25: XAML-Code 17 eXtensible Application Markup Language 29 Abbildung 26: WPF Designer-Ansicht Abbildung 27: C#-Code 6.2.2 Data-Bindings Ein wichtiger Aspekt in der WPF-Programmierung ist der Datenbindung zwischen dem Design-Bereich und dem Hintergrundcode. In dieser Arbeit wurde speziell die Funktion „Binding18“ genutzt. Anregung für die Datenbindung wurden sich aus dem Buch Visual C# 2010 von Galileo [7] geholt. Gebraucht wird die Datenbindung z.B. wenn sich der Wert einer Variable im Hintergrundcode ändert und sich diese Änderung auch auf die Benutzeroberfläche auswirken soll. In diesem Projekt geschieht dies unter anderem bei der USB-Kommunikation zwischen Slave und PC-Applikation. Sendet der Slave eine neue Anzahl von „Ergebnissen im Flash“, soll der neue Wert auf der Benutzeroberfläche der PC-Applikation sichtbar sein. Abbildung 28 zeigt die Klasse, in denen die Variablen liegen, die mit Datenbindungen an die Benutzeroberfläche bzw. mit dem XAML-Code verbunden sind. Durch die Schnittstelle „INotifyPropertyChanged“ wird der Hintergrundcode mit dem XAML-Code verbunden. Wird der Wert einer Variablen geändert, wird dies durch den Aufruf von „PropertyChanged(this, e);“ 18 http://msdn.microsoft.com/de-de/library/system.windows.forms.control.databindings.aspx 30 der Benutzeroberfläche mitgeteilt. Die geänderten Werte werden dann an die verbundenen Komponenten im XAML-Code weitergegeben. Abbildung 28: Klasse für die Datenbindung [7] 19 Abbildung 29 zeigt die Methode, in der die Werte für die Anzahl der Ergebnisse im Flash gespeichert und abgerufen werden können. Der in Abbildung 30 dargestellte XAML-Code ist mit der Methode aus Abbildung 29 „verbunden“ und bezieht aus dieser die Werte, die auf der Benutzeroberfläche angezeigt werden. Abbildung 29: Speicherung der Werte für "Ergebnisse im Flash" Abbildung 30: XAML-Code zu "Ergebnisse im Flash" 6.2.3 Frame und Pages In der vorgestellten PC-Applikation im Abschnitt 3.1.4 werden verschiedene Panel sichtbar und unsichtbar geschaltet. Durch den Umstieg in das WPF-Format können nun eigene „Pages“ oder Seiten angezeigt werden. Eine Page entspricht dabei einem Objekt, das immer nur dann erzeugt wird, wenn es benötigt wird. Die einzelnen Pages werden dabei in einem vorher festgelegten Frame angezeigt. Abbildung 31 zeigt den Quellcode des MainWindows, in dem ein Frame erzeugt wird. Der Frame ist in diesem Fall in einem „ScrollViewer“ eingebettet, dieser erzeugt einen horizontalen und vertikalen Scrollbalken. 19 http://openbook.galileocomputing.de/visual_csharp_2010/visual_csharp_2010_21_002.htm 31 Abbildung 31: Erzeugung eines Frames in XAML In Abbildung 32 wird dem Frame „Frame1“ eine neue Seite zugewiesen. In diesem Fall wird von der Page „Connect“ ein neues Objekt namens „Home“ erstellt. Die Page „Home“ wird nun in dem Frame angezeigt, dabei handelt es sich im die Startseite. Abbildung 32: Frame eine Page anzeigen lassen 6.3 Funktionen des Data-Receivers Bestehende Funktionen des Data-Receivers (siehe Bachelorarbeit [2]20) sind zu übernehmen. Zudem müssen einige neue Funktionen hinzugefügt werden. In Tabelle 6 sind die neuen Funktionen aufgelistet. Kurzbeschreibung USB-Kommunikation anpassen Abschnitt Live-Session (Abschnitt 6.6) Ausgabe der Ergebnisse automatisch aktualisieren Live-Session (Abschnitt 6.6) Einlesen der Teilnehmerliste Import (Abschnitt 6.7) RFID-Tag einen Namen zuweisen Ausgabe (Abschnitt 6.8) Verbindung zu einem Webserver Web-Verbindung (Abschnitt 6.9) Beschreibung Die im Abschnitt 5.1 definierte Erweiterung der USB-Kommunikation für die „Live-Übertragung“ ist in die PC-Applikation zu integrieren. In der bisherigen Software muss für eine Aktualisierung der Ergebnisse ein Button betätigt werden. Bei Live-Session soll die Aktualisierung der Ausgabe automatisch geschehen. Momentan werden in der Software die Ergebnisse mit RFID-Tag und Zeitstempel ausgegeben. Durch das Einlesen der Teilnehmerliste können die RFID-Tags den Schwimmernamen zugewiesen werden. Die importierte Teilnehmerliste wird nach einem RFID-Tag durchsucht. Daraus ergibt sich die Möglichkeit den Namen eines Schwimmers anstelle des RFID-Tags auszugeben. Die Ergebnisse sollen auf einen Webserver bereitgestellt werden. Dadurch ergibt sich die Möglichkeit, dass die Zuschauer die Ergebnisse direkt einsehen können. Tabelle 6: Neue Funktionen der PC-Software 20 Seite 46 32 6.4 Aufbau der Applikation Durch die Umstellung zu einer WPF-Anwendung musste die Benutzeroberfläche neu erstellt werden. Das Design ist an die Version der Bachelorarbeit [2] angelehnt. Die Fenstergröße ist nicht mehr starr und kann vom Anwender geändert werden. Abbildung 33 zeigt die neue Oberfläche der PCApplikation beim Programmstart. Die Oberfläche ist in mehrere Bereiche, in der Abbildung durch Zahlen markiert, aufgeteilt. Im Bereich 1 befindet sich der „Home“-Button, mit diesem gelangt man sofort zur Startseite. „Webverbindung“ und „Daten Importiert“ sind Statusanzeigen, die durch DataBindings (siehe Abschnitt 6.2) realisiert wurden. Der 2. Bereich ermöglicht eine Vor- und Zurücknavigation, wie es z.B. in der Verzeichnis-Anzeige von Windows möglich ist. Im 3. Bereich werden Statusinformationen, die durch die USB-Kommunikation vom Slave oder Master eingehen, angezeigt. Der 4. Bereich ist ein „Frame“ (siehe Abschnitt 6.2.3), in diesem werden die entsprechenden Pages angezeigt. Abbildung 33: Data-Receiver Abbildung 34 zeigt ein Klassendiagramm der PC-Applikation. In der Dokumentation werden nicht alle einzelnen Pages genau erläutert, der Grundaufbau einer Page ist jedoch im Abschnitt 6.2 beschrieben. 33 Abbildung 34: Klassendiagramm 6.5 Anpassungen der Funktionen des Data-Receivers 1.0 Die Version 1.0 des Data-Receivers bietet bereits einige Funktionen, die übernommen werden können. In Tabelle 7 werden die Funktionen kurz aufgelistet. Kurzbeschreibung USB-Verbindung Einlesen der Ergebnisse über USB Speicherung der Ergebnisse Kommunikation mit Systemkomponenten Beschreibung Der Datenaustausch zwischen Master/Slave und PC-Applikation findet über USB statt. Für die USB-Kommunikation wurde eine fertige Bibliothek übernommen. Die im Flash-Speicher der MCU gespeicherten Ergebnisse können über USB auf die PC-Applikation übertragen werden Die eingelesenen Ergebnisse werden in einer vorher bestimmten CSVDatei gesichert. Den Systemkomponenten können über die USB-Verbindung Kommandos geschickt werden. Tabelle 7: Grundfunktionen der PC-Applikation Die Funktionen werden in der Bachelorarbeit [2] im Abschnitt „6.2 Windows-Applikation“ beginnend auf der Seite 46 erläutert. Die meisten Funktionen konnte in den Hintergrundcode der WPFAnwendung übernommen werden, sodass die Funktionsweise identisch geblieben ist. Teilweise mussten beim Programmcode kleine Umstrukturierungen vorgenommen werden, die in diesem Abschnitt noch erläutert werden. 34 6.5.1 Auslagerung der USB-Kommunikation Die USB-Verbindung wurde in eine eigene Klasse mit dem Namen „ClassConnectUSB“ ausgelagert. Diese bietet z.B. mit der Methode „sendData“ die Möglichkeit, den Komponenten einen Befehl zu senden. In Abbildung 35 wird von dem Objekt „usb“ (ist ein Objekt der Klasse ClassConnectUsb) die Methode sendData() mit dem Parameter „DEL“ aufgerufen. Abbildung 36 zeigt den Quellcode der Methode, die aufgerufen wird. Der Parameter wird für die Übertragung in ein „Byte“-Format gewandelt und anschließend durch „usb.Connection.write()“ über USB an die Komponente versendet. Zudem wurde die Methode „myEventCacher“ in der WPF-Anwendung in „USBEventCacher“ umbenannt. Abbildung 35: Flash löschen Abbildung 36: USB Daten senden 6.5.2 Modifikation der Ausgabe Die Ergebnisse werden wie in der Bachelorarbeit [2] über ein Datagrid ausgegeben. In der neuen Software gibt es zwei Pages für die Ausgabe über ein Datagrid. Eine Seite wird für die Ausgabe der importierten Teilnehmerliste genutzt (DataGrid). Die zweite wird beim Auslesen des Flash-Speichers und in einer Live-Session genutzt (DataGridOutput). In der neuen Software kann die Anzahl der Spalten und deren Inhalt variieren. Dafür bedarf es mehrere Anpassungen. Die nun aufgezeigten Änderungen betreffen beide Pages. In der alten Version des Data-Receivers wurden die Zeilen einzeln aus der Datei gelesen und dann in eine Tabelle gespeichert. In der neuen Version wird die Datei komplett ausgelesen und in ein verzweigtes Array [7]21 gespeichert. Abbildung 37 zeigt die Methode „splitData()“, die die Datei in ein verzweigtes Array speichert. 21 http://openbook.galileocomputing.de/visual_csharp_2010/visual_csharp_2010_02_005.htm Kapitel 2.5.8 35 Abbildung 37: Methode SplitData Durch die Speicherung in ein verzweigtes Array ist eine Verarbeitung der Daten leicht möglich. Abbildung 38 zeigt die Methode testInt(), diese durchläuft alle Zeilen einer Spalte (die im Array gespeichert sind) und überprüft, ob der Inhalt einen Integer22-Wert entspricht. Sind in einer Spalte nur Integer-Werte, wird diese als Integer-Spalte angelegt. In allen anderen Fällen sind die Spalten mit String-Werten gefüllt. 22 Datentyp der ganzzahlige Werte speichert 36 Abbildung 38: Zellen auf Inhalt überprüfen Die Speicherung der Tabelle in ein Array ermöglicht es, mit relativ geringem Aufwand eine Suche zu implementieren. Die Methode „compareData(string)“ vereint zwei Funktionen. Zum einen wird durch einen Algorithmus in dem verzweigten Array nach dem String, der als Parameter übergeben wurde, gesucht und zum anderen dient die Methode dazu, die Ausgabe zu aktualisieren. Die Ausgabe wird aktualisiert, sofern ein leerer String als Paramater übergeben wurde. Abbildung 39 zeigt den Algorithmus, der die Tabelle durchsucht. In der Variablen „takeNameCell[]“ werden die Zeilennummern gesichert, die als Suchergebnisse ausgegeben werden müssen. Die Ausgabe über das Datagrid wird durch eine Daten-Tabelle realisiert. In jedem Objekt gibt es zwei Tabellen, eine für die Ausgabe der Gesamtergebnisse und eine weitere für die Suchergebnisse. Sollte eine Suche durchgeführt worden sein, wird die Such-Tabelle angezeigt, andernfalls die Standard-Tabelle. 37 Abbildung 39: Tabelle durchsuchen 6.6 Live-Session Im Abschnitt 5 wurden bereits alle Vorkehrungen bzgl. des Slaves für die Live-Session vorgenommen. Als OP-Code für die USB-Kommunikation wurde „RTD“ definiert. Empfängt die PC-Applikation einen USB-Datensatz mit dem OP-Code „RTD“, müssen die Datensätze in eine CSV-Datei gespeichert und die Ausgabe der Ergebnisse in der PC-Applikation aktualisiert werden. Nachdem eine USB-Verbindung zu einer Komponente hergestellt wurde, kann eine Live-Session gestartet werden. Abbildung 40 zeigt einen Ausschnitt der Benutzeroberfläche, nachdem eine USBVerbindung hergestellt wurde. Wird eine Live-Session gestartet, wird dies in einer Variablen gesichert. 38 Abbildung 40: Live-Session starten In Abbildung 41 ist ein Ausschnitt des Quellcodes der Klasse „ClassConnectUSB.cs“ in der Methode „public void USBEventCacher()“ zu sehen. In dem String „strCheckSum“ befindet sich der Inhalt der USB-Übertragung. In der IF-Abfrage wird überprüft, ob der OP-Code „RTD“ entspricht. Sollte dies der Fall sein, wird der Datensatz in dem String „strData“ gesichert. Durch einen regulären Ausdruck werden alle Zeichen gelöscht, die in einem RFID-Tag nicht vorkommen. Die Methode compareData() speichert die Daten in eine CSV-Datei, der genaue Ablauf wird im Abschnitt 6.8 erläutert. Abbildung 41: Eingang von Echtzeitdatensätze überprüfen Befindet sich die Applikation ein einer Live-Session, muss die Ausgabe der Ergebnisse automatisch aktualisiert werden. Die Ergebnisse werden wie in der Bachelorarbeit [2] über ein Datagrid ausgegeben. Abbildung 42 zeigt aus der Methode „compareData()“ eine IF-Abfrage, die die Ausgabe aktualisiert, sofern es sich um einen Live-Datensatz handelt. Abbildung 42: Aktualisiere die Ausgabe 39 6.7 Teilnehmerliste importieren Die Resultate des Wettkampfs sollen online für die Öffentlichkeit bereitgestellt werden. In der momentanen Konfiguration ist nur die Ausgabe des RFID-Tags und der erreichten Zeit vorgesehen. Eine Ausgabe in dieser Form ist jedoch für das Publikum ungeeignet. In der Projektarbeit „Windows basierte RFID-Tag Erfassung mit C#“ [4] wurde eine Software erstellt, die den Namen eines Schwimmers einem RFID-Tag zuweist. Diese Teilnehmerliste wird in einer CSV-Datei gespeichert und ermöglicht so die Weiternutzung. Die ausgewählte Datei wird in der Klasse „DataGrid()“ in der Methode „split()“ in ein verzweigtes Array gesichert. Das Array wird zudem in der Klasse „ClassGlobalPath“ in dem Array „allData“ gespeichert. Durch die Speicherung des Arrays in die statische Klasse kann jedes Objekt auf diesen Datensatz zugreifen. Das Array wird in eine Data-Tabelle geschrieben und anschließend über ein DataGrid ausgegeben. Bei der Ausgabe der importierten Teilnehmerliste wird noch eine weitere Zeile hinzugefügt. Abbildung 43 zeigt die PC-Applikation mit importierter Teilnehmerliste. Die schwarz umrandete Zeile ist die zusätzlich hinzugefügte Nummerierung der Spalten. Abbildung 43: Importierte Datei mit Spaltennummern Abbildung 44 zeigt ein weiteres Fenster, das sich öffnet, sobald eine Datei importiert wird. Unter 1. wird bestimmt, in welchen Spalten der Tabelle sich der Vorname, Nachname, RFID-Tag und die Zeit befindet. Im 2. Bereich wird festgelegt, welche Spalten die PC-Applikation bei der Erzeugung einer CSV-Datei anlegt. 40 Abbildung 44: Auswahl der Spalten Bevor die Spalten im 2. Bereich in einer statischen Variablen gespeichert werden, wird der Inhalt überprüft. Zum einen wird getestet, ob der angegebene Wert einem Integer-Wert entspricht und zum anderen, ob die Spalte existiert. Die Überprüfung findet in der Methode „checkTake()“ statt. Es können mehrere Spalten angegeben werden. Als Delimiter ist das normale Kommata („,“) definiert. Zusätzlich kann mit dem Keywort „alle“ bestimmt werden, dass alle Spalten übernommen werden. Bei einer Eingabe von z.B. „3-5“ werden die Spalten 3, 4 und 5 übernommen. Der Algorithmus, der die Spalten auswählt, befindet sich ebenfalls in der Methode „checkTake()“. Abbildung 45 zeigt den Algorithmus, der aus einem String mit dem Inhalt von z.B.: „1,4-6,8“ in 1,4,5,6,8 umformt. Die Umformung von 4-6 wird durch ein Teilen des Strings durchgeführt. Als Delimiter dient der Bindestrich, dadurch wird die 4 in das String-Array cmp2[0] und die 6 in das String-Array cmp2[1] gespeichert, dies ist unter 1. In der Abbildung 45 zu sehen. Im 2. Bereich werden die Zahlen, in diesem Fall mit der Zahl 5, vervollständigt. In einer Schleife wird eine Variable mit der Anfangszahl (4) addiert und solange hochgezählt bis die Anfangszahl addiert mit der Zählvariablen die Endzahl (6) erreicht hat. 41 Abbildung 45: Algorithmus der Spaltenübernahme 6.8 RFID-Tag einem Namen zuweisen Durch das Importieren einer Teilnehmerliste können die vom RFID-Tag-Lesegerät erhaltenen RFIDTags einer entsprechenden Zeile der Teilnehmerliste zugeordnet werden. In einer Zeile können weitere Informationen wie z.B. der Name des Schwimmers stehen. Im Abschnitt 6.7 wurde das Importieren der Teilnehmerliste erläutert. Die Daten werden global gesichert und können von allen Objekten der PC-Applikation genutzt werden. Werden über die USB-Verbindung Datensätze eingelesen, muss zuvor eine Datei zum Speichern der Ergebnisse festgelegt worden sein. Sollte dies nicht der Fall sein, werden die Datensätze nicht abgespeichert. In dieser Datei werden nach der Verarbeitung, die im Folgenden beschrieben wird, die Ergebnisse gespeichert. Wird über die USB-Kommunikation ein neuer Datensatz übertragen, wird die Teilnehmerliste nach dem einkommenden RFID-Tag durchsucht. Dabei werden nur die Spalten durchsucht, die der Benutzer beim importieren der Teilnehmerliste als RFID-Tag-Spalten gekennzeichnet hat. In der Methode „compareData(String str, bool rtd)“, die sich in der Klasse „ClassConnectUSB“ befindet, wird das globale Array „allData“ (in dem die Teilnehmerliste gespeichert ist) nach dem einkommenden RFID-Tag durchsucht. Konnte ein RFID-Tag einem Teilnehmer zugeordnet werden, wird anschließend 42 in der Methode „createString(string[] _build, string str, string[] cmp)“ ein String zusammengefügt. Der erstellte String enthält alle Spalten, die vorher vom Benutzer festgelegt wurden und speichert diese in die CSV-Datei. Abbildung 46 zeigt ein auf das wesentliche gekürzte Struktogramm der Methode CompareData. Abbildung 46: Struktogramm CompareData Wurde keine Teilnehmerliste importiert, werden standardmäßig der RFID-Tag und der Zeitstempel in die Datei geschrieben. Sofern keine Spalte für die Zeitmessung in der Teilnehmerliste vorgegeben wurde, wird automatisch eine Spalte mit den Zeitmessungen hinzugefügt. 6.9 Daten zum Webserver senden Dem Publikum soll ermöglicht werden, die Wettkampfergebnisse auf einem mit dem Internet verbundenen Endgerät zu verfolgen. Für die Umsetzung muss eine Schnittstelle programmiert werden, mit der die Daten auf einem Webserver hochgeladen werden können. Im Abschnitt 7 wird auf die Implementierung des Webservers eingegangen. In diesem Abschnitt wird die Übertragung der Daten von der PC-Applikation zum Webserver behandelt. In der PC-Applikation sind für die Umsetzung ein neues Fenster, zwei Pages und zwei weitere Klassen programmiert worden. Das neue Fenster hat den Namen „WindowAdminPW“ und öffnet sich nur, wenn ein neuer User-Account erstellt werden soll. In Tabelle 8 werden kurz die Pages und in Tabelle 9 die Klassen vorgestellt. Page WebOption WebOptionCreate Kurzbeschreibung Ermöglicht das Einloggen in einem bestehenden Account. Legt einen neuen User-Account an. Desweiteren werden hier die LOGIn-Daten für die MySQL-Datenbank eingetragen. Tabelle 8: Pages für die Web-Verbindung 43 Klasse ClassConnectWeb ClassStaticWebOptions Kurzbeschreibung Stellt einen Web-Request zur Verfügung. Mit diesem werden die Daten an den Webserver gesendet. In dieser Klasse werden die Daten gespeichert, die der Anwender über die Pages festgelegt hat. Tabelle 9: Klassen für die Web-Verbindung Für die Verbindung zum Internet sind vor allem die Page „WebOptionCreate“ und die Klasse „ClassConnectWebOptions“ wichtig. Diese werden in Abschnitten 6.9.1 und 6.9.2 genauer erläutert. 6.9.1 Page WebOptionCreate Bevor die PC-Software die Daten an den Webserver versenden kann, muss über die PC-Software der Webserver eingerichtet werden. Abbildung 47 zeigt die PC-Software mit aufgerufener WebOptionCreate-Page. Unter dem Punkt „Webseite“ wird die Adresse der Internetseite, auf dem die Daten gespeichert werden sollen, angegeben. Im Zweig „Benutzer erzeugen“ wird ein neuer UserName sowie ein Passwort festgelegt. Mit diesem ist ein späteres einloggen unter der Page „ClassConnectWeb“ möglich. Im Bereich „Neue Datenbank einrichten“ werden die Informationen, die für das Einloggen in die Datenbank benötigt werden, eingetragen. Alle Daten werden in der Klasse ClassStaticWebOptions gespeichert und können so von anderen Objekten genutzt werden. Abbildung 47: Webserver einrichten Das Passwort eines Benutzers wird, bevor es gespeichert wird, durch einen MD523-Hashwert ersetzt. C# bietet dafür bereits eine Funktion an, die unter MSDN [6]24 dokumentiert ist. Mit diesem 23 24 Message-Digest Algorithm, erstellt einen 128-Bit-Hashwert http://msdn.microsoft.com/de-de/library/system.security.cryptography.md5.aspx 44 Hashwert wird in der Software weiter gearbeitet. Das Passwort im Klartext wird somit nicht mehr benötigt. In der Abbildung 48 ist die Methode zu sehen, die aus einem String einen MD5-HashtagWert generiert, dieser wird anschließend als String zurückgegeben. Wurde eine Teilnehmerliste importiert, von denen Spalten zur Übernahme ausgewählt wurden (siehe Abschnitt 6.7), werden diese Spalten auch in der MySQL-Datenbank angelegt. Abbildung 48: Erzeugung eines MD5-Hashtags Die angegebenen Daten werden anschließend über ein Web-Request an den Webserver gesendet. Im nachfolgenden Abschnitt (6.9.2) wird die Übertragung per Web-Request erläutert. 6.9.2 Übertragung der Daten zum Webserver In der Klasse „ClassConnectWeb“ werden die Daten über ein Web-Request an den Webserver gesendet. Unter MSDN [6]25 ist die WebRequest-Klasse dokumentiert, zudem wird hier ein Beispiel für die Einbindung gegeben. Die Klasse „ClassConnectWeb“ besitzt drei Methoden, diese werden in der Tabelle 10 aufgezeigt. Methode sendLoginData sendDatabase sendLogin Kurzbeschreibung An diese Methode werden die Daten übergeben, die an den Webserver gesendet werden sollen. Versendet über einen Web-Request die Ergebnisse des Wettkampfes. Versendet über einen Web-Request die Daten, die auf der Page ClassStaticWebOptions definiert wurden. Tabelle 10: Methoden der Klasse ClassConnectWeb Den Vorgang eines Web-Requests der Methode sendLogin wird in dem Abschnitt 6.9.2.1 genauer erläutert. 25 http://msdn.microsoft.com/de-de/library/system.net.webrequest.aspx 45 6.9.2.1 Implementierung eines Web-Request Bei der Implementierung wurde sich an dem Beispiel von MSDN gehalten, dieses wurde den entsprechenden Anforderungen angepasst. Abbildung 49 zeigt einen Ausschnitt aus dem Programmcode der Methode sendLogin. Dabei handelt es sich, wie unter 1. zu sehen, um einen WebRequest. Übergeben wird die Webseiten-Adresse, die mit „/konfiguration.php“ erweitert wird. Dies ist eine PHP-Seite, die in dieser Bachelorarbeit geschrieben wurde, eine Erläuterung hierzu folgt im Abschnitt 7.4.1. Unter 2. wird die Art der Übertragung gewählt, in diesem Fall handelt es sich um einen „POST26“-Request. Im 3. Bereich wird ein String erzeugt, der anschließend über ein „POST“Request übertragen wird. Nach erfolgter Übertragung wird die Antwort des PHP-Skriptes in die Variable „responseFromServer“ gespeichert, dies ist im 4. Bereich zu sehen. Abbildung 49: Programmcode Web-Request Die Antwort des Servers wird als String gespeichert und kann anschließend ausgewertet werden. Abbildung 50 zeigt eine Abfrage der Variable, dabei wird überprüft ob das Einloggen oder das Erstellen eines neuen Benutzer-Accounts erfolgreich war. 26 http://php.net/manual/de/reserved.variables.post.php, wird im HTTP-Header übertragen 46 Abbildung 50: Auswertung der Antwort vom Server 6.9.2.2 Datensätze im eigenen Thread27 versenden Das Versenden der Datensätze geschieht in der Klasse „ClassConnectWeb“, deren Funktion im vorherigen Abschnitt (6.9.2.1) erläutert wurde. Dieser Abschnitt behandelt den Aufruf dieser Klasse. Zum Versenden der Daten wird für jeden Datensatz ein neues Objekt der Klasse „ClassConnectWeb“ erzeugt. Die Datensätze werden, nachdem sie in eine CSV-Datei geschrieben wurden, durch die Methode „sendDatabase“ der Klasse „ClassConnectWeb“ versendet. Der Aufruf geschieht in der Methode „compareData“ der Klasse „ClassConnectUSB“, die bereits im Abschnitt 6.8 beschrieben wurde. Für die Web-Übertragung wurde die Methode „compareData“ um eine IF-Abfrage erweitert. Abbildung 51 zeigt die erweiterte Methode „compareData“ in Form eines Struktogramms. Abbildung 51: Struktogramm von CompareData mit Web-Übertragung Während der Entwicklungszeit zeigte sich, dass das Warten auf eine Antwort vom Webserver die PCApplikation „einfrieren“ lassen kann. Der Web-Request wurde zu Beginn der Entwicklung im HauptThread durchgeführt, in diesem wurde dann auf die Antwort des Webservers gewartet. Während des Wartens wurde das Programm blockiert und es waren keine weiteren Aktionen mehr möglich. Um dieses Problem zu umgehen, wird nun für jeden Datensatz, der verschickt wird, ein neuer Thread 27 In einem Thread wird der Programmcode abgearbeitet 47 erstellt. Abbildung 52 zeigt den Programmcode, in dem ein neuer Thread erstellt wird. Im umrahmten Bereich wird aus dem Objekt „Web[webThreadNumber].sendDatabase“ ein Thread erstellt und anschließend gestartet. Der Thread startet dabei in der Methode „sendDatabase“ des Objekts. Bei der Erstellung eines Threads können dem Objekt keine Parameter übergeben werden. Um dem Objekt die Daten übergeben zu können, werden diese, bevor der Thread erstellt wird, über die Methode „sendLoginData“ in dem Objekt gespeichert. Anschließend wird der Thread gestartet, dieser kann nun auf die in dem Objekt gespeicherten Daten zugreifen. Der Thread arbeitet im Hintergrund den Web-Request ab und blockiert somit den Haupt-Thread nicht mehr. Abbildung 52: Erstellung der Threads 48 7 Software auf dem Webserver Die Daten, die von der PC-Software zum Webserver versendet werden, müssen in eine Datenbank eingepflegt werden. Über eine Webseite sollen die Daten für das Publikum abrufbar sein. 7.1 Arbeitsumgebung Als Entwicklungsumgebung wurde Aptana Studio 3 [8] genutzt. Die Entwicklungsumgebung ist für die Programmierung von Web-Anwendungen optimiert. Als besonders vorteilhaft und komfortabel zeigte sich das Einbinden des genutzten Webservers, dadurch konnte die entwickelte Software direkt aus der Entwicklungsumgebung mit dem Webserver synchronisiert werden. Als Webserver wurde für die Entwicklung mein persönlicher Home-Server genutzt. Dieser war durch die Nutzung eines DynDNS28-Anbieters aus dem Internet zu erreichen. Als Webserver kam Apache2 [9] mit PHP5 zum Einsatz, zudem lief MySQL [10] und PHPMyAdmin [11] auf dem Server. 7.2 Einführung in PHP und MySQL PHP [12] steht für „Hypertext Preprocessor“ und ist eine weitverbreitete Skriptsprache in der Webprogrammierung. Im Internet ist ein PHP-Handbuch [12] in diversen Sprachen kostenlos zugängig. Als Datenbank wurde MySQL genutzt, dabei dient PHP als Schnittstelle. In diesem Abschnitt werden grundlegende Funktionen, die in dieser Bachelorarbeit angewendet wurden, erläutert. 7.2.1 Variablen und Strings in PHP In PHP werden Variablen durch ein Dollar-Zeichen gekennzeichnet. Anders als in anderen Programmiersprachen werden die Variablen in PHP nicht deklariert. Strings werden in PHP durch Punkte verbunden. Ist z.B. der String: „'CREATE DATABASE IF NOT EXISTS '.$datenbank.';'“ gegeben, wird der Inhalt aus der Variablen $datenbank mit dem restlichen String verbunden. Hat die Variable den Inhalt „Test“, ergibt das einen Gesamstring von: „'CREATE DATABASE IF NOT EXISTS Test;'“. Mit „define“ werden in PHP Konstanten definiert, die Erzeugung einer Konstanten geschieht durch „define ('PathLogInData', 'logindata.php');“. Wird im PHP-Code die Konstante „PathLoginData“ aufgerufen, enthält diese den String „logindata.php“. 28 Dynamic Domain Name System 49 7.2.2 Empfangen von Daten In der PC-Applikation werden die Daten über einen Web-Request mittels „POST“29 an dem Webserver geschickt. Auf dem Webserver liegt ein PHP-Skript, das nun aufgerufen wird und die Daten verarbeitet. In der Abbildung 53 ist ein Teil vom Programmcode der Datei „konfiguration.php“ zu sehen. In diesem wird überprüft, ob „$_POST['data']“ den String „LogIn“ enthält. „$_POST ['data']“ wird von der PC-Applikation über den http-Header an das PHP-Skript übergeben. Dabei steht „$_POST“ für den Typ der Variablen und 'data' ist der spezifische Name, der einen Wert enthält. Abbildung 53: PHP $_POST 7.2.3 Daten in die Datenbank schreiben Die Anbindung an die MySQL-Datenbank wird durch PHP-Skripte realisiert. Für den Zugriff auf die MySQL-Datenbank wird unter PHP auf MySQLi [12]30 zurückgegriffen. In Abbildung 54 ist zusehen, wie im 1. Bereich über MySQLi eine Verbindung zur Datenbank aufgebaut wird. Anschließend wird im 2. Bereich ein SQL-Befehl: „CREATE DATABASE IF NOT EXISTS '.$datenbank.';'“ in die Variable $sql gespeichert. Mit diesem Befehl wird eine neue Datenbank, sofern diese noch nicht existiert, angelegt. Ausgeführt wird der Befehl jedoch erst in der nächsten Zeile durch den Aufruf von „mysqli_query($db_link, $sql)“. Abbildung 54: MySQLi Beispiel 7.3 Aufbau des Websystems Damit nicht jeder beliebige Internetnutzer auf die Datenbank zugreifen kann, ist der Zugriff auf die PHP-Skripte durch ein Passwort geschützt. Dabei wurde ein System mit zwei verschiedenen Zugriffsarten entwickelt. Zum einen besteht die Möglichkeit, mit einem Admin-Passwort einen UserAccount zu erstellen, zum anderen ist das Einloggen mit einem bestehenden User-Account möglich. Bei der Erstellung eines User-Accounts werden gleichzeitig die Daten für den Zugriff auf die 29 30 http://php.net/manual/de/reserved.variables.post.php http://www.php.net/manual/de/intro.mysqli.php 50 Datenbank und die Eigenschaften der Wettkampf-Tabelle festgelegt. Mit einem User-Account können lediglich neue Datensätze in eine bestehende Datenbank eingetragen werden. 7.4 PHP-Skripte Um die geforderte Aufgabe zu erfüllen, kommen mehrere PHP-Skripte zum Einsatz. Die entwickelten PHP-Skripte werden in der Tabelle 11 vorgestellt. Die Skripte konfiguration.php, rest.php, output.php und refresh.php werden in diesem Abschnitt genauer erläutert. Die restlichen Skripte werden nur zur Speicherung genutzt und besitzen keine über die in der Tabelle 11 beschriebenen hinausgehenden Funktionen. Skript konfiguration rest output und refresh pathlink AdminPW logindata mysqlconfig Kurzbeschreibung Dieses PHP-Skript wird aufgerufen, wenn in der PC-Applikation ein neuer Account erstellt wird oder sich in einen bestehenden Account eingeloggt wird. Werden von der PC-Applikation neue Datensätze verschickt, werden diese in Rest.php verarbeitet und in die MySQL-Datenbank geschrieben. Dient zur Ausgabe der Ergebnisse auf eine Webseite, die in einem Browser aufgerufen werden kann. In dieser Datei wird angegeben, unter welchen Pfaden sich die Dateien AdminPW, logindata und mysqlconfig befinden. Hier wird ein Passwort bestimmt, nur mit diesem Passwort ist es später möglich, über die PC-Software einen neuen Account zu erstellen. Dient zur Speicherung des angelegten User-Accounts, in diesem Account kann sich dann immer wieder eingeloggt werden. In mysqlconfig werden die Log-In-Daten für die Datenbank hinterlegt. Tabelle 11: PHP-Skripte 7.4.1 konfiguration.php Wird in der PC-Applikation eine Verbindung zum Webserver hergestellt, ruft diese über einen WebRequest das Skript konfiguration (siehe Abschnitt 6.9.2.1) auf. Durch die „POST“-Variablen können die Daten, die von der PC-Applikation verschickt wurden, in dem PHP-Skript verarbeitet werden. Das Konfiguration-Skript ermöglicht das Einloggen in einen bestehenden User-Account oder das Erzeugen eines neuen User-Accounts. Abbildung 55 zeigt den Teil des Skripts, in dem ein Log-In in einen bestehenden User-Account durchgeführt wird. Mit „require_once()“ werden die PHP-Skripte, in denen die Log-In-Daten gespeichert sind, in das Konfigurations-Skript eingebunden. In dem Skript wird überprüft, ob Log-In-Daten korrekt sind, je nach Auswertung wird über „echo“ ein String ausgegeben. In der PC-Applikation wird dieser String anschließend ausgegeben und ausgewertet. 51 Abbildung 55: Log-In in einen bestehenden Account Die Erzeugung eines neuen User-Accounts ist nur mit dem Admin-Passwort möglich. Bei der Erstellung eines neuen User-Accounts werden die Skripte mysqlconfig.php und logindata.php erstellt. In Tabelle 12 wird gezeigt, welche Informationen in den Skripten gespeichert werden. Skript mysqlconfig logindata Kurzbeschreibung Für die MySQL-Datenbank werden die Log-In-Daten, die Adresse der Datenbank, der Datenbankname, der Tabellenname und die Namen der einzelnen Spalten in das Skript „mysqlconfig“ als Konstante geschrieben. In logindata wird der User-Account, bestehend aus einem Benutzername und einem Passwort, gespeichert. Tabelle 12: Erzeugen eines neuen User-Accounts Um die Daten zu speichern, wird eine neue PHP-Datei erstellt oder eine bestehende PHP-Datei genutzt. In diese Datei werden die Daten, die von der PC-Software übertragen wurden, in Konstanten gespeichert. Diese Dateien können durch die „require_once()“-Funktionen in andere PHP-Skripte eingebunden werden, somit ist eine Nutzung der gespeicherten Konstanten in einem anderen Skript möglich. Abbildung 56 zeigt, wie ein String erzeugt wird und anschließend in eine Datei geschrieben wird. Bei diesem String werden die Daten für die MySQL-Datenbank gespeichert. Durch „fopen(PathMySQLConfig,“w+“);“ wird eine Datei geöffnet, in der anschließend durch „fwrite()$datei, $svelogin);“ der String geschrieben wird. Dabei wird der alte Inhalt der Datei überschrieben. War die Erstellung eines neues User-Accounts erfolgreich, werden die angelegten Spalten und der String: „Account erstellt und eingeloggt“ ausgegeben. 52 Abbildung 56: String in eine Datei speichern 7.4.2 rest.php Die Datensätze mit den Resultaten des Wettkampfes werden durch das Skript rest.php in die Datenbank eingepflegt. Die PC-Applikation schickt bei einer Übertragung einen Datensatz und die User-Account-Daten. Ist der User-Account inkorrekt, werden die Datensätze nicht angenommen. Die Log-In-Daten für die MySQL-Datenbank werden aus der Datei „mysqlconfig.php“ entnommen. Zur Abspeicherung der Datensätze in die Datenbank wird ein MySQLi-Befehl genutzt. Die Datensätze und die Tabellen liegen in Form eines Strings vor und müssen, bevor sie abgespeichert werden, getrennt werden. Die Strings werden durch den Aufruf von „explode“ getrennt. In der Abbildung 57 ist unter 1. zu sehen, wie die einzelnen Spalten und Datensätze in String-Arrays gespeichert werden. Mit den Arrays werden im 2. Bereich Strings zusammenbaut, die für den MySQL-Befehl benötigt werden. Im 3. Bereich wird der MySQL-Befehl erstellt und anschließend ausgeführt. Durch den Befehl wird in einer Tabelle eine neue Zeile angelegt. Die Spalten „$addtoCoulumns“ erhalten dabei die entsprechenden Werte von „$addData“. 53 Abbildung 57: Hinzufügen neuer Datensätze 7.4.3 output.php und refresh.php Die Skripte output.php und refresh.php werden nicht von der PC-Software aufgerufen, sondern dienen zur Ausgabe der Wettkampfergebnisse in einem Webbrowser. In der Abbildung 58 ist exemplarisch eine Ausgabe über den Webbrowser zu sehen. 54 Abbildung 58: Ausgabe im Webbrowser Im Webbrowser wird die Ausgabe durch den Aufruf von output.php realisiert, folgende Adresse wäre z.B. möglich: „http://Webseite.de/output.php“. In output.php wird durch ein JavaScript der Inhalt des Skriptes refresh.php alle fünf Sekunden neu aufgerufen und angezeigt. Für JavaScript wurde jquerry [13] als libary31 genutzt. Die libary wurde nicht auf dem Server gespeichert, sondern wurde lediglich von einem Google-Server eingebunden. Die Funktionsweise wurde aus einem Tutorial von tfonfara.de [14] übernommen. In Abbildung 59 ist die Einbindung von dem JavaScript zu sehen. Abbildung 59: Einbindung von JavaScript Zudem verfügt die output.php noch über eine Suchfunktion, der Suchbegriff wird durch einen „POST“-Request an den Webserver gesendet. Die Abarbeitung der Suche geschieht auf dem Skript refresh.php. Die Daten aus der MySQL-Datenbank werden in einer html-Tabelle ausgegeben. In der Abbildung 60 ist der Quellcode zu sehen, der die Tabelle erzeugt. Zuerst werden die Spalten erzeugt, anschließend werden die Spalten mit den Werten aus der MySQL-Datenbank gefüllt. 31 Bibliothek 55 Abbildung 60: Erzeugung der Ausgabe für den Browser Soll eine Suche durchgeführt werden, wird die MySQL-Datenbank mit dem Befehl: "SELECT * FROM ".MYSQL_TABELLE." WHERE ".$columns.";" durchsucht. Wird der Suchbegriff in einer Spalte gefunden, wird die zugehörige Zeile im Browser ausgegeben. 56 8 Fehlersuche, Tests und Verbesserungsmöglichkeiten Die Fehlersuche teilt sich in zwei Abschnitten auf. Im Abschnitt 8.1 sind Fehler dokumentiert, die durch die Inbetriebnahme der übernommenen System-Komponenten gefunden wurden. Die Fehlersuche in der in dieser Bachelorarbeit entwickelten Software ist im Abschnitt 8.2 dokumentiert. 8.1 Fehlersuche im übernommenen System In den verschiedenen Komponenten des Systems konnten mehrere Fehler entdeckt und teilweise behoben werden, diese werden in der Tabelle 13 kurz aufgezeigt. Komponente RFID-TagZeitmesssystem RFID-TagZeitmesssystem Slave Master Kurzbeschreibung Fehler Fehler bei der UART- Bei der UART-Übertragung wurde beim Start ein Übertragung Zeichen zu viel übertragen, Fehler konnte behoben werden (siehe Abschnitt 8.1.1). Wackelkontakt Ein Wackelkontakt führt zum Ausfall von der UARTÜbertragung von der Antenne zum Zeitmesssystem. Zudem entstehen durch diesen Wackelkontakt die „Phantommessungen“, die in der Bachelorarbeit [3] dokumentiert sind. Fehler konnte nicht behoben werden. Fehlerhafter Handshake Der Handschake zwischen PC und Slave war nicht funktionstüchtig. Fehler konnte behoben werden (siehe Abschnitt 8.1.2). Fehlerhafter Handshake Der Handshake zwischen Master und dem Zeitmesssystem war im Master nicht implementiert. Fehler konnte behoben werden (siehe Abschnitt 8.1.3). Tabelle 13: Fehler in den übernommenen Komponenten 8.1.1 Fehler bei der UART-Übertragung In der Testphase wurde beim Auslesen der Daten über den Slave ein Fehler entdeckt. Nach dem Starten einer Zeitmessung (Nachstart) hat der darauffolgende Messwert nur noch einen sechsstelligen Zeitwert, anstelle von sieben Stellen. Um den Fehler einzugrenzen, wurden einige Tests durchgeführt. Begonnen wurde mit dem Auslesen der Daten vom Master, hier kam es zu den gleichen Fehlern, womit ein Fehler bei der ZigBee-Übertragung und dem Slave ausgeschlossen werden konnte. Der Fehlerbereich konnte somit auf den Master, das RFID-Tag-Lesegerät und die PCSoftware eingegrenzt werden. Um den Fehler zu bestimmen, wurde eine Testreihe durchgeführt. 57 Die Tests zeigten auf, dass nach jedem Nachstart der Zeitwert um eine Stelle zu kurz war. Somit konnte ausgeschlossen werden, dass es sich um zufällige Fehler handelt. Als nächsten Schritt wurde überprüft, welche Datensätze das RFID-Tag-Lesegerät via UART überträgt. Dafür wurde der Ausgang des RFID-Tag-Lesegeräts an einem PC mit einer RS232 Schnittstelle angeschlossen. Am PC konnten die Übertragungen Datensätze betrachtet werden. Dabei kam zum Vorschein, dass nach jedem „Nachstart“ eine „new Line“ übertragen wurde. Dadurch konnte als Fehlerquelle das RFID-TagLesegerät ausgemacht werden. Um die Fehlerursache identifizieren zu können, wurde die Software des RFID-Tag-Lesegeräts näher untersucht. Diese ist in C++ geschrieben und läuft auf einem ArduinoBoard . Der gefundene Fehler, war sehr simpel, hatte jedoch große Auswirkungen. Bei einem Nachstart wurden die Daten mit: „altSerial.println((char*)) fertig_daten;“ über UART übertragen. Dies hat zur Folge, dass zusätzlich noch einen Zeilenumbruch über UART übertragen wurde. Dadurch war die Übertragung 1 Byte länger als es die Verarbeitung in der Master-Software vorgesehen hat. Der Fehler konnte einfach durch die Verwendung von „altSerial.print((char*)) fertig_daten;“ gelöst werden. 8.1.2 Fehlerhafter Handshake beim Slave Der Slave führt über die USB-Verbindung mit der PC-Applikation einen Handshake durch. Bei der Entwicklung der neuen Software ist bemerkt worden, dass der Handshake nicht ausgeführt wird. In der vorherigen Implementierung sendet der Slave einmalig ein „CO“ zur PC-Applikation, diese soll anschließen mit „OK“ antworten. Die Funktion war jedoch nicht gegeben, da der Slave nicht auf die Antwort von der PC-Applikation gewartet hat. In der neuen Konfiguration sendet die PC-Applikation bei einem Verbindungsaufbau zum Slave den String „OKK“, dieser Antwortet anschließend mit „CCO“ und bestätigt somit den Handshake. 8.1.3 Fehlerhafter Handshake beim Master Der Handshake zwischen Master und dem RFID-Tag-Lesegerät war im Master nicht implementiert. Der im RFID-Tag-Lesegerät festgelegte Handshake wurde im Master entsprechend implementiert. Abbildung 61 zeigt die Funktion, die für den Handshake programmiert wurde. Wird die Funktion aufgerufen, sendet der Master zum RFID-Tag-Lesegerät über UART ein „T“. Der Master erwartet vom RFID-Tag-Lesegerät als Antwort ein „K“. Wurde der Handshake korrekt durchgeführt wird dies in einer Variablen gespeichert. 58 Abbildung 61: Master Handshake 8.2 Tests der PC-Applikation und der Webanwendung Die Funktionen der PC-Applikation und der Webanwendung wurden gemeinsam getestet. Nachfolgend sind die verschiedenen Tests aufgeführt: Bei allen Tests ist der Master mit dem RFID-Tag-Lesegerät über UART und mit dem Slave über ZigBee verbunden. Dabei befindet sich der Master im Operate-Modus. Test 1: Ausgangssituation: Die PC-Software ist über USB mit dem Slave verbunden. Es wird eine Live-Session gestartet, bei der eine neue Datei erzeugt wird. Es werden Nachstarts und Zeitmessungen durchgeführt. Resultat: Der Slave wird in den Operate-Modus gewechselt. In der Datei wurden die Spalten „Platzierung“, „RFIDTag“ und „Timestamp“ erzeugt. Bei der Ausgabe der Zeit fehlt die Einteilung in Stunden, Minuten usw. Test 2: Ausgangssituation: Die PC-Software ist noch aus dem ersten Test im Betrieb, die USB-Verbindung wurde kurzzeitig getrennt und dann wieder aufgebaut. Es wird eine Live-Session gestartet, bei der die Datei aus dem Test 1 übernommen wird. Es werden Nachstarts und Zeitmessungen durchgeführt. Resultat: Der Slave wechselt wieder automatisch in den Operate-Modus. Die Ergebnisse werden an die Datei angehängt, die Platzierungen werden weitergezählt und sind korrekt. 59 Test 3: Ausgangssituation: Die PC-Software ist noch aus den vorherigen Tests im Betrieb. Es wird eine ReadSession gestartet, bei der eine neue Datei angelegt wird. Im Flash-Speicher des Slaves befinden sich noch die Datensätze aus dem ersten und zweiten Test. Es werden Nachstarts und Zeitmessungen durchgeführt. Resultat: Der Slave wechselt in den Operate-Modus. In der Datei wurden die Spalten „Platzierung“ „RFIDTag“ und „Timestamp“ erzeugt. Alle Datensätze wurden korrekt ausgelesen. Bei der Ausgabe der Zeit fehlt die Einteilung in Stunden, Minuten usw. Test 4: Ausgangssituation: Die PC-Software ist noch aus den vorherigen Tests im Betrieb. Es wird eine Teilnehmerliste importiert, die Spalte, in denen sich die RFID-Tags befinden, wird angegeben. In die Datei sollen keine Spalten übernommen werden. Anschließend wird eine Live-Session gestartet. Es werden Nachstarts und Zeitmessungen durchgeführt. Resultat: Der Slave wechselt in den Operate-Modus. In der Datei wurden die Spalten „Platzierung“ „RFIDTag“ und „Timestamp“ erzeugt. Die Ausgabe ist somit korrekt. Test 5: Ausgangssituation: Die PC-Software ist noch aus den vorherigen Tests im Betrieb. Es wird eine Teilnehmerliste importiert, die Spalte, in denen sich die RFID-Tags befinden, wird angegeben. Es sollen mehrere Spalten übernommen werden. Die im Test 4 erzeugte Datei wird wieder genutzt, diese hat weniger Spalten. Es werden Nachstarts und Zeitmessungen durchgeführt. Resultat: Fehler! In der Software werden bei den neuen Resultaten nur leere Zeilen angezeigt. Die Daten wurden aber dennoch abgespeichert und befinden sich in der Datei. Bewertung: In diesem Szenario ist lediglich die Anzeige in der PC-Software inkorrekt. Der Fehler tritt durch einen Bedienungsfehler auf. Lösungsvorschlag: Die einfachste Möglichkeit den Fehler auszuschließen ist, zunächst eine Teilnehmerliste zu importieren und anschließend eine neue Datei zu erzeugen. Der Fehler kann mit entsprechenden Modifikationen von der Software abgefangen werden, in diesem Fall müsste die bestehende Datei ausgelesen werden. Sollte in dieser eine andere Anzahl von Spalten existieren, kann z.B. automatisch eine neue Datei mit den entsprechenden Spalten erzeugt werden. Test 6: Ausgangssituation: Die PC-Software wird neu gestartet. Es wird ein Web-Account eingerichtet mit drei Spalten. In einer Live-Session werden einige Messungen durchgeführt. Anschließend wird eine Teilnehmerliste importiert, von dieser werden fünf Spalten übernommen. Die Web-Verbindung bleibt weiterhin zum vorher erstellten Web-Account bestehen. Es werden weitere Messungen durchgeführt. 60 Resultat: Fehler! Die Daten werden in der MySQL-Datenbank nicht gespeichert. In Abbildung 62 ist der Inhalt der MySQL-Datenbank zu sehen. Die ersten drei Ergebnisse stammen aus der Phase, bevor eine Teilnehmerliste importiert wurde. Die folgenden Datensätze mit fünf Spalten sind inkorrekt oder gar nicht abgespeichert worden. Bewertung: Die Daten werden nicht in der Datenbank gespeichert und gehen verloren. Wird die korrekte Reihenfolge eingehalten (zunächst die Teilnehmerliste importieren und anschließend einen User-Account erzeugen), tritt dieser Fehler nicht auf. Lösungsvorschlag: Die leichteste Möglichkeit den Fehler auszuschließen ist, erst nach dem Importieren einer Teilnehmerliste einen User-Account zu erstellen. Der Fehler kann mit entsprechenden Modifikationen von der Software abgefangen werden, in diesem Fall müsste der Webserver, mit einem entsprechenden Fehler-Code, antworten oder automatisch neue Spalten hinzufügen damit die Datensätze gespeichert werden können. Abbildung 62: Daten in der Datenbank 8.3 Verbesserungsmöglichkeiten Die im Abschnitt 8.2 aufgeführten Fehler sollten von einer bereits bestehenden Nachfolgergruppe, die an diesem Projekt arbeiten wird, behoben werden. Für die Ausgabe über die Webseite sollte es möglich sein, einzelne Spalten zu sperren. Dafür würde sich ein Web-Interface anbieten. Momentan wird die Tabelle der Webseite alle fünf Sekunden neu geladen. Besser wäre es, wenn die Tabelle nur neugeladen wird, sofern neue Ergebnisse vorliegen. 61 9 Bedienungsanleitung Die Bedienungsanleitung teilt sich in zwei Abschnitte auf. Zuerst wird erläutert, wie die PC-Software installiert und der Webserver eingerichtet wird. Anschließend wird das Gesamtsystem in Betrieb genommen, dabei werden die einzelnen Funktionen der PC-Software aufgezeigt. 9.1 Installation und Konfiguration der PC- und Web-Software Die Inbetriebnahme der PC-Software gestaltet sich äußerst einfach. Die vorliegende EXE-Datei muss lediglich gestartet werden, damit öffnet sich die Anwendung und ist einsatzbereit. Die Einrichtung des Webserver gestaltet sich etwas aufwendiger. Grundlegend müssen die PHP-Skripte auf einem Webserver hochgeladen werden. Die meisten Webspace-Anbieter bieten hierfür eigene Tools an, diese ermöglichen z.B. auch das Hochladen der Dateien von einem Webbrowser aus. Wie die Dateien hochgeladen werden, ist prinzipiell egal. Es sollte jedoch darauf geachtet werden, dass der Ordner „SaveData“, möglichst nicht im Web-Bereich des Servers gespeichert werden. Dies dient der Sicherheit, ansonsten liegen die Dateien in denen sich die Passwörter befinden im Web-Bereich und könnten theoretisch über einen Webbrowser aufgerufen werden. Zum Testen wurde die Webanwendung bei dem kostenlosen Webspace-Anbieter funpic.de [16] hochgeladen. Dabei zeigte sich das Problem auf, dass keine Möglichkeit besteht, die Daten außerhalb des Webbereichs zu speichern. Nachdem die Dateien auf einem Webserver hochgeladen wurden, sind einige Konfigurationen vorzunehmen. Im Ordner „Online“ befindet sich die Datei „pathlink.php“ , in dieser wird festgelegt, in welchem Verzeichnis sich die Dateien aus dem Ordner „SaveData“ befinden. In der Abbildung 63 ist der Inhalt der Datei „pathlink.php“ zu sehen. In dem umrahmten Bereich müssen jeweils die Pfade zu den Dateien angegeben werden. Im Beispiel sind die Pfade außerhalb des Webbereichs. Abbildung 63: Pathlink.php Anschließend wird empfohlen, in dem Ordner „SaveData“ das Passwort in der Datei „AdminPW“ zu ändern. Im umrahmten Bereich der Abbildung 64 wird das Passwort eingetragen, dieses muss später in der PC-Software bei der Erstellung eines neuen User-Accounts angegeben werden. Das System ist nun vollständig konfiguriert und kann genutzt werden. Abbildung 64: AdminPW 62 9.2 Inbetriebnahme des Gesamtsystems Für die Komponenten aus den bestehenden Bachelorarbeiten gibt es bereits Bedienungsanleitungen. Das RFID-Tag-Lesegerät ist in der Bachelorarbeit [3]32 beschrieben. Die Bedienungsanleitung für die Komponenten Master und Slave befindet sich in der Bachelorarbeit [2]33. Als erstes wird das RFID-Tag-Lesegerät mit dem Master verbunden und anschließend in Betrieb genommen. Der Master wird durch das Drücken des grünen Tasters (siehe Abbildung 65) in den Operate-Modus versetzt. Die beiden Komponenten sind nun einsatzbereit. Abbildung 65: Bedienfeld des Masters Anschließend wird der Slave über USB mit einem PC verbunden. Die ZigBee-Verbindung baut sich nun automatisch auf, bei erfolgreichem Aufbau der Verbindung wird dies durch das Leuchten der ZigBeeLED signalisiert. Der Slave befindet sich somit im Ready-Modus. Am PC kann nun die PC-Software gestartet werden. In Abbildung 66 ist die PC-Applikation nach dem Start zu sehen. Im 1. Bereich befindet sich ein „Home“-Button, mit diesem gelangt man immer wieder zur Startseite. Desweiteren werden hier noch Status-Informationen zu einer Webverbindung und einer importierten Teilnehmerliste angezeigt. Die im 2. Bereich gekennzeichneten Pfeiltasten erlauben das Vor- und Zurücknavigieren in der PC-Applikation. Informationen bezüglich der USB-Verbindung werden im 3. Bereich ausgegeben. Der 4. Bereich ist der Arbeitsbereich, hier werden die möglichen Aktionen angezeigt. In den folgenden Abschnitten wird die Bedienung der Software erklärt. 32 33 Abschnitt 9, ab Seite: 59 Abschnitt 8, ab Seite: 60 63 Abbildung 66: PC-Applikation Startzustand 9.2.1 Teilnehmerliste importieren Das Importieren einer Teilnehmerliste ist nicht zwingend notwendig, ermöglicht aber das Zuweisen vom RFID-Tag zum Namen des Schwimmers. Eine Teilnehmerliste sollte immer vor der Erstellung eines Web-Accounts importiert werden. In der Projektarbeit von Herrn Borsych [4] wurde eine Software entwickelt, mit der eine Teilnehmerliste hergestellt werden kann. Eine dieser Teilnehmerlisten wird in dieser Bedienungsanleitung importiert. Nach Drücken des Buttons „Teilnehmerliste“ gelangt man auf die nächste Seite. Auf dieser Seite muss der Pfad zu der Datei angegeben werden, über den Button „Einlesen“ wird die Teilnehmerliste importiert. Nach dem die Teilnehmerliste importiert wurde, wird diese angezeigt (siehe Abbildung 67). Im umrahmten Bereich der Abbildung wird eine Spaltennummer angegeben. Diese wird für das Fenster „Spalten bestimmen“, das sich automatisch mit öffnet, benötigt. Soll in der Ausgabe der Name des Schwimmers angezeigt werden, muss die Spaltennummer, in denen sich RFID-Tags befinden, angegeben werden. Sollen Spalten aus dieser Teilnehmerliste in der späteren Ausgabe angezeigt werden, müssen diese Spalten übernommen werden (siehe Abbildung 68). Dabei werden die Spalten durch ein Komma getrennt (z.B. 4,5,6). Ist die Übernahme aller Spalten gewünscht, kann dies durch das Eintragen von „alle“ geschehen. Eine weitere Möglichkeit besteht darin, mehrere Zeilen durch einen Bindestrich zu übernehmen (z.B. 4-8). Mithilfe der Checkbox „Alle Spalten in Datei übernehmen“ werden die vorher bestimmten Spalten, auch für die Ausgabe übernommen. Die Spalten werden in der PC-Applikation und auf der Webseite übernommen. 64 Abbildung 67: Importierte Teilnehmerliste Abbildung 68: Spalten bestimmen 9.2.2 Verbindung zum Webserver herstellen Eine Verbindung zum Webserver wird nur benötigt, sofern die Ergebnisse online abrufbar sein sollen. Über den Button einrichten gelangt man auf eine neue Seite, auf dieser kann man sich mit einem bestehen User-Account einloggen. Zu empfehlen ist jedoch bei jedem Wettkampf einen neuen Account zu erstellen. Der Button „Weiter“ führt zu der Seite, auf der man einen neuen Account erstellen kann. Als erstes sollte hier das Admin-Passwort angegeben werden, ohne diesen kann kein neuer User-Account erstellt werden. In der Abbildung 69 ist die Seite für das Erstellen eines UserAccounts bereits ausgefüllt zu sehen. Nach dem Drücken des Buttons „Erzeugen“ werden die Daten zum Webserver geschickt. Der Webserver antwortet, ob die Erzeugung des Accounts erfolgreich war, die Antwort wird von der PC-Applikation in einem extra Fenster ausgegeben (siehe Abbildung 70). Die Verbindung zum Webserver ist nun hergestellt, die Ergebnisse werden automatisch hochgeladen. 65 Abbildung 69: Erzeugung eines User-Accounts Abbildung 70: Antwort des Webservers 9.2.3 Verbindung zu einer Komponente über USB herstellen Über USB kann sich mit den Komponenten Master und Slave verbunden werden. Nachdem eine Verbindung zu einer der Komponenten hergestellt wurde, erschein ein neuer Bereich auf der Startseite. In diesem Bereich können verschiedene Aktionen zwischen der PC-Applikation und der angeschlossenen Komponente gestartet werden. Die neuen Funktionen werden in der Abbildung 71 gezeigt. Mit den unteren drei Buttons können der Komponente Befehle geschickt werden. Mit dem Button „Löschen“ wird der Flash-Speicher der Komponente gelöscht. Wird der Button „Start“ 66 gedrückt, wechselt die Komponente in den Operate-Modus, der „Stop“-Button setzt die Komponente in den Ready-Modus. Über den Button „Live“ gelangt man in den Live-Modus, in diesem werden die Ergebnisse sofort während des Wettkampfes angezeigt. Soll nach einem Wettkampf der FlashSpeicher ausgelesen werden, geschieht dies über den Button „Auslesen“. Bei beiden Verfahren muss eine Datei erstellt oder angegeben werden, in dieser werden die Tabellen erzeugt und die einkommenden Ergebnisse gespeichert. Abbildung 71: Funktionen der Komponente In der Abbildung 72 ist die PC-Applikation in einer Live-Session zu sehen. Es wurden in der Teilnehmerliste nicht alle RFID-Tags eingetragen, deshalb sind einige Einträge nur mit dem RFID-Tag und der Zeit versehen. Die Ergebnisse werden gleichzeitig auf dem Webserver hochgeladen, die Ausgabe der Tabelle ist identisch mit der in der PC-Applikation. Abbildung 72: PC-Applikation in einer Live-Session 67 10 Projektmanagement Zu Beginn der Bachelorarbeit wurde für das Projektmanagement eine Projektplanung durchgeführt. In dieser wurden mehrere Meilensteine definiert, diese teilen die Aufgabenstellung in kleineren Zeiträumen auf. Für die Aufgabenstellung ist insgesamt ein Zeitraum von 14 Wochen vorgesehen. Dem Erstprüfer wurde jede Woche ein Bericht, mit dem erreichten Fortschritt und den Zielen für darauffolgende Woche, abgegeben. 10.1 Meilensteinplanung Meilensteinprognosen In der Planung wurden sieben Meilensteine definiert. In Abbildung 73 ist die Meilensteintrendanalyse zu sehen. Bei dieser ist es bereits möglich, die Anfangszeitpunkt der einzelnen Meilensteine abzulesen. In der Tabelle 14 werden die definierten Meilensteine erläutert. 08.11.2013 01.11.2013 25.10.2013 18.10.2013 11.10.2013 04.10.2013 27.09.2013 20.09.2013 13.09.2013 06.09.2013 30.08.2013 23.08.2013 16.08.2013 09.08.2013 02.08.2013 26.07.2013 19.07.2013 12.07.2013 12/7 19/7 26/7 2/8 Meilensteintrendanalyse Ziellinie Zusammenführung ZigBee und BA Webserver einrichten PC-Software PC-MCU PC-Software PC-WWW Webseite Testphase und Modifikationen Ausarbeitung 9/8 16/8 23/8 30/8 6/9 13/9 20/9 27/9 4/10 11/1018/1025/10 1/11 8/11 Berichtszeitpunkte Abbildung 73: Meilensteintrendanalyse 68 Meilensteine Zusammenführung ZigBee und BA Webserver einrichten PC-Software PC-MCU PC-Software PCWWW Webseite Testphase und Modifikationen Ausarbeitung Kurzbeschreibung Implementierung der ZigBee-Kommunikation in die Komponenten Slave und Master. Als Arbeitsumgebung für die Web-Entwicklung wurde ein Webserver genutzt, dieser musste den Anforderungen entsprechend eingerichtet werden. Entwicklung der Live-Ergebnisse, dafür wurden die Slave-Software und die PC-Software bearbeitet. Die PC-Software erweitern, so dass die Daten ins Internet gestellt werden können. Die Daten von der PC-Software aufnehmen und im Browser ausgeben. Testen der Funktionen, sollte weitere Zeit zur Verfügung stehen werden erweiternde Funktionen entwickeln. Erstellen einer Dokumentation über die Funktionen und der Arbeitsweise dieser Bachelorarbeit. Endzeitpunkt 25.07.2013 30.07.2013 09.08.2013 23.08.2013 04.09.2013 18.09.2013 16.10.2013 Tabelle 14: Meilensteine 10.3 Arbeitszeitplanung Die Projektplanung sieht für jede Woche einen Bericht vor. Die Arbeitszeitplanung richtet sich nach diesem Berichtzeitraum, somit wird für jede Woche eine Arbeitszeit bestimmt. Die Wochenarbeitszeit in dieser Bachelorarbeit beträgt 35 Stunden. Dadurch ergibt sich eine Gesamtarbeitszeit von 450 Stunden (siehe Tabelle 15). Die Werte in den Spalten „Arbeit Soll“ und „Fortschritt Soll“ sind in der Projektplanung definiert worden. In den Spalten „Arbeit ist“ und „Fortschritt Ist“ werden die Daten jeweils in den Wochenberichten eingetragen. Arbeit Soll 14,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 Arbeit in Stunden pro Berichtsintervall! Arbeit Soll Arbeit Soll Arbeit Arbeit Ist kum. % Ist kum. 0,00 0,0% 0,00 35,00 7,1% 0,00 70,00 14,3% 0,00 105,00 21,4% 0,00 140,00 28,6% 0,00 175,00 35,7% 0,00 210,00 42,9% 0,00 245,00 50,0% 0,00 280,00 57,1% 0,00 315,00 64,3% 0,00 350,00 71,4% 0,00 385,00 78,6% 0,00 420,00 85,7% 0,00 455,00 92,9% 0,00 490,00 100,0% 0,00 Tabelle 15: Arbeitszeitplanung 69 Fortschritt (in%) Arbeit Ist % 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% 0,0% Soll 2,0% 7,0% 14,0% 21,0% 33,0% 40,0% 55,0% 63,0% 68,0% 70,0% 80,0% 85,0% 90,0% 95,0% 100,0% Ist 10.4 Auswertung der Projektplanung In diesem Abschnitt wird der Projektablauf dargestellt. Dabei werden einige Punkte aufgezeigt, bei denen es zu leichten Abweichung, zu der eigentlichen Projektplanung kam. 10.4.1 Meilensteintrendanalyse Meilensteinprognosen Bei der Abarbeitung der Meilensteine, kam es zu kleinen Abweichungen, im Vergleich zu der Planung. Die Abbildung 74 zeigt die Meilensteintrendanalyse vom 04.10.2013, somit 12 Tage vor Abgabe der Arbeit. Bei den Meilensteinen „PC-SoftwarePC-WWW“ und „Webseite“ kam es zu kleinen Verschiebungen. Für die Bearbeitung des Meilensteins „PC-Software PC-WWW“ wurde mehr Zeit, als geplant, benötigt. Die Auswirkung auf den Meilenstein „Webseite“ war jedoch gering, da die Entwicklung der Webseite größtenteils parallel zu dem Meilenstein „PC-SoftwarePC-WWW“ verlief. 08.11.2013 01.11.2013 25.10.2013 18.10.2013 11.10.2013 04.10.2013 27.09.2013 20.09.2013 13.09.2013 06.09.2013 30.08.2013 23.08.2013 16.08.2013 09.08.2013 02.08.2013 26.07.2013 19.07.2013 12.07.2013 12/7 19/7 26/7 2/8 Meilensteintrendanalyse Ziellinie Zusammenführung ZigBee und BA Webserver einrichten PC-Software PC-MCU PC-Software PC-WWW Webseite Testphase und Modifikationen 9/8 16/8 23/8 30/8 6/9 13/9 20/9 27/9 4/10 11/1018/1025/10 1/11 8/11 Berichtszeitpunkte Abbildung 74: MTA Stand 05.10.2013 70 10.4.2 Arbeitszeit Für die Bachelorarbeit wurde in der Planung mit einer Gesamtzeit von 450 Stunden gerechnet. In der Tabelle 16 ist der Wöchentliche-Arbeitszeitaufwand bis einschließlich dem 04.10.2013 zu sehen. Wöchentlich kam es zu kleineren Schwankungen, insgesamt wurden jedoch lediglich fünf Stunden mehr Zeitaufwand, als geplant, benötigt. Datum Berichtszeitpunkte 12.07.2013 19.07.2013 26.07.2013 02.08.2013 09.08.2013 16.08.2013 23.08.2013 30.08.2013 06.09.2013 13.09.2013 20.09.2013 27.09.2013 04.10.2013 11.10.2013 18.10.2013 25.10.2013 01.11.2013 08.11.2013 Berichtsintervall Woche 1. Schätzung am 12.07.2013 13.07.2013 19.07.2013 20.07.2013 26.07.2013 27.07.2013 02.08.2013 03.08.2013 09.08.2013 10.08.2013 16.08.2013 17.08.2013 23.08.2013 24.08.2013 30.08.2013 31.08.2013 06.09.2013 07.09.2013 13.09.2013 14.09.2013 20.09.2013 21.09.2013 27.09.2013 28.09.2013 04.10.2013 05.10.2013 11.10.2013 12.10.2013 18.10.2013 19.10.2013 25.10.2013 26.10.2013 01.11.2013 02.11.2013 08.11.2013 Arbeit Soll 14,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 35,00 Arbeit in Stunden pro Berichtsintervall! Arbeit Soll kum. Arbeit Soll % Arbeit Ist 0,00 0,0% 14,00 35,00 7,1% 34,50 70,00 14,3% 35,00 105,00 21,4% 35,00 140,00 28,6% 31,00 175,00 35,7% 25,00 210,00 42,9% 36,00 245,00 50,0% 31,00 280,00 57,1% 46,00 315,00 64,3% 42,00 350,00 71,4% 36,50 385,00 78,6% 34,50 420,00 85,7% 38,50 455,00 92,9% 490,00 100,0% 490,00 100,0% 490,00 100,0% 490,00 100,0% Arbeit Ist kum. 0,00 34,50 69,50 104,50 135,50 160,50 196,50 227,50 273,50 315,50 352,00 386,50 425,00 425,00 425,00 425,00 425,00 425,00 Arbeit Ist % 0,0% 7,0% 14,2% 21,3% 27,7% 32,8% 40,1% 46,4% 55,8% 64,4% 71,8% 78,9% 86,7% 0,0% 0,0% 0,0% 0,0% 0,0% Fortschritt (in%) Soll Ist 2,0% 2,0% 7,0% 7,0% 14,0% 14,0% 21,0% 21,0% 33,0% 33,0% 40,0% 38,0% 55,0% 50,0% 63,0% 57,0% 68,0% 64,0% 70,0% 67,0% 80,0% 77,0% 85,0% 83,0% 90,0% 90,0% 95,0% 100,0% Tabelle 16: Arbeitszeitplanung 04.10.2013 In Abbildung 75 ist der Verlauf der Arbeitsstunden in einem Diagramm dargestellt. In diesem sind die Schwankungen der Arbeitszeit deutlich zu erkennen. 50,00 600,00 45,00 500,00 40,00 35,00 400,00 30,00 25,00 300,00 20,00 200,00 15,00 10,00 100,00 5,00 0,00 0,00 Abbildung 75: Stunden-Verlauf 71 Arbeit Soll Arbeit Ist 11 Fazit Die Aufgabe war sehr facettenreich, es musste sich in bestehende Software eingearbeitet und neue Software entwickelt werden. Dabei wurden für die Umsetzung mehrere Programmiersprachen genutzt. Die Systeme, für die die Software entwickelt wurde, waren zudem sehr unterschiedlich. Die Arbeit deckt somit verschiedene Bereiche der Informatik ab. Durch die vielen verschiedenen Programmiersprachen musste ich mich jeweils immer eine gewisse Zeit auf die neuen Arbeitsumgebungen einarbeiten. Hierbei kann man aber sagen, dass dies relativ gut umsetzbar ist. Ein Einarbeiten in eine neue Programmiersprache, wie bei z.B. in C# und PHP, gestaltet sich deutlich einfacher als das Programmieren an sich zu lernen. Rückblickend bin ich mit dem Ergebnis sehr zufrieden, die Aufgabenstellung konnte umgesetzt werden. Es bestehen zwar noch kleinere Optimierungs- und Verbesserungsmöglichkeiten, die jedoch die Funktion nicht beeinträchtigen. 72 12 Abbildungsverzeichnis Abbildung 1: Übersicht der Systemkomponenten [2] ............................................................................. 7 Abbildung 2: RFID-Sensor ........................................................................................................................ 8 Abbildung 3: RFID-Tag ............................................................................................................................. 9 Abbildung 4: Zeitmesssystem .................................................................................................................. 9 Abbildung 5: Datensender (Master) ...................................................................................................... 11 Abbildung 6: Datenempfänger (Slave) .................................................................................................. 12 Abbildung 7: Data-Receiver ................................................................................................................... 13 Abbildung 8: Erzeugung der Testdaten ................................................................................................. 16 Abbildung 9: Füllen der Queue mit Testdaten ...................................................................................... 17 Abbildung 10: Pins der LED-Platine ....................................................................................................... 17 Abbildung 11: Quelldatei dem Projekt hinzufügen ............................................................................... 18 Abbildung 12: SPI-Bus Initialisierung ..................................................................................................... 19 Abbildung 13: GPIO-Pin als Eingang konfigurieren ............................................................................... 19 Abbildung 14: MCU-Pins einen Namen zuweisen ................................................................................. 19 Abbildung 15: ZigBee Initialisierung ...................................................................................................... 20 Abbildung 16: Einbindung der ZigBee-Kommunikation ........................................................................ 20 Abbildung 17: ZigBee-Queue füllen....................................................................................................... 20 Abbildung 18: Master mit gekennzeichneten LEDs............................................................................... 21 Abbildung 19: Error zuweisen ............................................................................................................... 21 Abbildung 20: Variable neuer Datensatz ist eingegangen .................................................................... 22 Abbildung 21: Eingehende Datensätze speichern ................................................................................. 23 Abbildung 22: Error-Auswertung .......................................................................................................... 24 Abbildung 23: Slave mit gekennzeichneten LEDs .................................................................................. 24 Abbildung 24: Implementierung der USB-Live-Übertragung ................................................................ 27 Abbildung 25: XAML-Code .................................................................................................................... 29 Abbildung 26: WPF Designer-Ansicht .................................................................................................... 30 Abbildung 27: C#-Code .......................................................................................................................... 30 Abbildung 28: Klasse für die Datenbindung [7] ..................................................................................... 31 Abbildung 29: Speicherung der Werte für "Ergebnisse im Flash"......................................................... 31 Abbildung 30: XAML-Code zu "Ergebnisse im Flash" ............................................................................ 31 Abbildung 31: Erzeugung eines Frames in XAML .................................................................................. 32 Abbildung 32: Frame eine Page anzeigen lassen .................................................................................. 32 Abbildung 33: Data-Receiver ................................................................................................................. 33 Abbildung 34: Klassendiagramm ........................................................................................................... 34 Abbildung 35: Flash löschen .................................................................................................................. 35 Abbildung 36: USB Daten senden.......................................................................................................... 35 Abbildung 37: Methode SplitData ......................................................................................................... 36 Abbildung 38: Zellen auf Inhalt überprüfen .......................................................................................... 37 Abbildung 39: Tabelle durchsuchen ...................................................................................................... 38 Abbildung 40: Live-Session starten ....................................................................................................... 39 Abbildung 41: Eingang von Echtzeitdatensätze überprüfen ................................................................. 39 LXXIII Abbildung 42: Aktualisiere die Ausgabe ................................................................................................ 39 Abbildung 43: Importierte Datei mit Spaltennummern ........................................................................ 40 Abbildung 44: Auswahl der Spalten ...................................................................................................... 41 Abbildung 45: Algorithmus der Spaltenübernahme ............................................................................. 42 Abbildung 46: Struktogramm CompareData ......................................................................................... 43 Abbildung 47: Webserver einrichten .................................................................................................... 44 Abbildung 48: Erzeugung eines MD5-Hashtags .................................................................................... 45 Abbildung 49: Programmcode Web-Request........................................................................................ 46 Abbildung 50: Auswertung der Antwort vom Server ............................................................................ 47 Abbildung 51: Struktogramm von CompareData mit Web-Übertragung ............................................. 47 Abbildung 52: Erstellung der Threads ................................................................................................... 48 Abbildung 53: PHP $_POST ................................................................................................................... 50 Abbildung 54: MySQLi Beispiel .............................................................................................................. 50 Abbildung 55: Log-In in einen bestehenden Account ........................................................................... 52 Abbildung 56: String in eine Datei speichern ........................................................................................ 53 Abbildung 57: Hinzufügen neuer Datensätze........................................................................................ 54 Abbildung 58: Ausgabe im Webbrowser ............................................................................................... 55 Abbildung 59: Einbindung von JavaScript ............................................................................................. 55 Abbildung 60: Erzeugung der Ausgabe für den Browser ...................................................................... 56 Abbildung 61: Master Handshake ......................................................................................................... 59 Abbildung 62: Daten in der Datenbank ................................................................................................. 61 Abbildung 63: Pathlink.php ................................................................................................................... 62 Abbildung 64: AdminPW ....................................................................................................................... 62 Abbildung 65: Bedienfeld des Masters ................................................................................................. 63 Abbildung 66: PC-Applikation Startzustand .......................................................................................... 64 Abbildung 67: Importierte Teilnehmerliste ........................................................................................... 65 Abbildung 68: Spalten bestimmen ........................................................................................................ 65 Abbildung 69: Erzeugung eines User-Accounts..................................................................................... 66 Abbildung 70: Antwort des Webservers ............................................................................................... 66 Abbildung 71: Funktionen der Komponente ......................................................................................... 67 Abbildung 72: PC-Applikation in einer Live-Session .............................................................................. 67 Abbildung 73: Meilensteintrendanalyse ............................................................................................... 68 Abbildung 74: MTA Stand 05.10.2013................................................................................................... 70 Abbildung 75: Stunden-Verlauf ............................................................................................................. 71 LXXIV 13 Tabellenverzeichnis Tabelle 1: Aufbau der UART-Datensätze ............................................................................................... 10 Tabelle 2: Aufbau eines USB-Datensatzes [2] ....................................................................................... 25 Tabelle 3: Bisherige Befehle aus der Bachelorarbeit [2] ....................................................................... 26 Tabelle 4: Befehle die von der PC-Applikation ausgewertet werden ................................................... 26 Tabelle 5: Befehl "RTD" ......................................................................................................................... 26 Tabelle 6: Neue Funktionen der PC-Software ....................................................................................... 32 Tabelle 7: Grundfunktionen der PC-Applikation ................................................................................... 34 Tabelle 8: Pages für die Web-Verbindung ............................................................................................. 43 Tabelle 9: Klassen für die Web-Verbindung .......................................................................................... 44 Tabelle 10: Methoden der Klasse ClassConnectWeb ............................................................................ 45 Tabelle 11: PHP-Skripte ......................................................................................................................... 51 Tabelle 12: Erzeugen eines neuen User-Accounts ................................................................................ 52 Tabelle 13: Fehler in den übernommenen Komponenten .................................................................... 57 Tabelle 14: Meilensteine ....................................................................................................................... 69 Tabelle 15: Arbeitszeitplanung .............................................................................................................. 69 Tabelle 16: Arbeitszeitplanung 04.10.2013 ........................................................................................... 71 LXXV 14 Literaturverzeichnis [1] Projektarbeit Hochschule Emden-Leer Implementierung einer drahtlosen ZigBee-basierten Datenübertragung für eine ARM-basierte Microkontroller-Applikation Veröffentlichungszeitpunkt: 2013 Autor: Karsten Dürschinger [2] Bachelorarbeit Hochschule Emden-Leer Entwurf und Implementierung eines ARM-basierten Systems (HW/SW) zur Verarbeitung und Übertragung von RFID-Tag-Daten Veröffentlichungszeitpunkt: 2013 Autoren: Markus Kybart und Christian Seidel [3] Bachelorarbeit Hochschule Emden-Leer Weiterentwicklung eines kontroller-basierten System zur Datenerfassung per RFID Veröffentlichungszeitpunkt: 2013 Autor: Matthias Boomgarten [4] Projektarbeit Hochschule Emden-Leer Windows basierte RFID-Tag Erfassung mit C# Veröffentlichungszeitpunkt: 2013 Autor: Waldemar Borsych [5] Visual Studio 2012 Entwicklungsumgebung für C# http://www.microsoft.com/visualstudio/deu/products/visual-studio-ultimate-2012 Herausgeber: Microsoft [6] MSDN C#-Dokumentation von Microsoft http://msdn.microsoft.com/de-de/library/vstudio/kx37x362.aspx Zeitpunkt des Zugriffs: September 2013 [7] Galileo Computing Visual C# 2010 http://openbook.galileocomputing.de/visual_csharp_2010/ ISBN: 978-3-8362-1552-7 Autor: Andreas Kühnel LXXVI [8] Aptana Studio 3 Entwicklungsumgebung für PHP http://www.aptana.com/products/studio3 Herausgeber: Aptana [9] Apache2 Webserver basierend auf dem HTTP-Protokoll http://httpd.apache.org/ [10] MySQL-Datenbank Open-Source-Datenbank http://www.mysql.de/ [11] phpMyAdmin Administrationstool für MySQL-Datenbanken http://www.phpmyadmin.net/home_page/index.php [12] PHP-Handbuch http://www.php.net/manual/de/index.php [13] jQuerry Libary für JavaScript http://jquery.com/ [14] Tfonfara Beispiel für das Aktualisieren mit jQuery http://www.tfonfara.de/ajax-seiteninhalt-laufend-aktualisieren-jquery.xhtml Autor: Tobias Fonfara [15] Arduino-Board http://www.arduino.cc/ [16] Funpic.de Kostenloser Webspace-Anbieter http://www.funpic.de/ LXXVII 15 Glossar und Abkürzungsverzeichnis Abkürzung UART WinForms SPI GPIO API WPF XAML MD5 Ausgeschrieben Universal Asynchronous Transmitter Delimiter Windows Forms Erklärung Receiver Serielle Schnittstelle zur Übertragung von Daten. Trennzeichen Programmierschnittstelle für Benutzeroberflächen unter C#. Queue Warteschlange zum zwischenspeichern von Datensätzen. Serial Peripheral Interface Bus-System für die Datenübertragung. General-purpose input/output Pins der genutzten MCU, die entweder aus Ausgang oder Eingang konfiguriert werden können. Application programming interface Programmierschnittstelle Windows Presentation Foundation Programmierschnittstelle für Benutzeroberflächen unter C#. eXtensible Application Markup Eine Unterart der XML-Sprache. Language Message-Digest Algorithm Erstellt einen 128-Bit-Hashwert von einem beliebigen String. LXXVIII