Fernwirken mit GSM Master ET - Versuch 752
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Interdisziplinäres Laborpraktikum Master ET Versuch 752 Fernwirken mit GSM Institut für Zuverlässiges Rechnen Technische Universität Hamburg-Harburg, 2009 Stand: 22. Mai 2012, D. Baack et al.
INHALTSVERZEICHNIS 1 Inhaltsverzeichnis 1 Beschreibung des Versuchsziels und -inhalts 1 2 Beschreibung der verwendeten Hardware 2 2.1 Beschreibung der Hardwareumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 Der Kontakt zum GSM-Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 Kommunikationsprotokolle 5 3.1 Allgemeine Protokollprinzipien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 Punkt-zu-Punkt Verbindungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.3 Beispiel Garagentor-Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4 Software-Diagramme und Beschreibung der Funktionen 11 4.1 GSM und SMS-Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5 Anmerkungen zur Versuchsdurchführung 19 5.1 Quellcode kompilieren und den Mikrocontroller beschreiben . . . . . . . . . . . . . . . 19 5.2 Kurzeinführung Oszilloskop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 6 Aufgaben 20 1 Beschreibung des Versuchsziels und -inhalts Der in dieser Anleitung beschriebene Versuch soll verdeutlichen, dass sich schon mit recht einfachen Mitteln zuverlässige, kostengünstige, flexible und sinnvoll einsetzbare Systeme zur Fernwartung bzw. Fernsteuerung erstellen lassen. Zu diesem Zweck wird das bereits flächendeckend verfügbare GSM1 -Netz genutzt, um Steueranwei- sungen mittels SMS2 an ein Empfangsgerät zu verschicken. Im vorliegenden Versuch beschränkt sich die Steuerung auf das An- und Ausschalten von Leuchtdioden bzw. auf das Drücken von Tastern als Eingangssignale. Dennoch liegt es nahe, dass diese Bausteine problemlos durch andere ersetzt werden können. Statt einfacher Leuchtdioden können z.B. Lichtanlagen kontrolliert und elektrische Geräte gesteuert werden. Zudem kann auf Änderungen an den Eingängen in vielfältiger Weise reagiert wer- den. Von einfachen Garagentorsteuerungen mit Rückmeldungen bis zu Alarmanlagen, die per SMS einen Einbruch melden, ist das System universell einsetzbar. Aufgrund der Nutzung der verfügbaren GSM-Infrastruktur kann auf das System nahezu von jedem Ort aus zugegriffen werden. Darüber hin- aus sollen in diesem Versuch grundlegende Protokollmechanismen wie z.B. Bestätigen des Empfangs, Rückmeldung bei (Syntax-)Fehlern, Senden von Zustandsinformationen usw. angewandt und selbst entwickelt werden. Es soll dabei mit der Programmiersprache C auf einer hohen sprachlichen Ebene 1 Global System for Mobile communication 2 Short Message Service
2 Beschreibung der verwendeten Hardware 2 gearbeitet werden, ohne sich intensiv mit der zugrunde liegenden Hardware und deren Realisierung auseinandersetzen zu müssen. Es liegt in diesem Versuch eine Hard-/Softwareumgebung vor, die mit entsprechender Softwareim- plementierung imstande ist, Steueranweisungen per SMS zu empfangen und auszuführen, Zustands- und Erfolgsmeldungen zu versenden sowie auf fehlerhafte Anweisungen angemessen zu reagieren. In diesem Versuch sollen Sie in ein bereits bestehendes Programm, wel- ches den Mikrocontroller steuert, modifizieren. Dafür benötigen Sie le- diglich grundlegende Kentnisse in C. 2 Beschreibung der verwendeten Hardware Die zentrale Steuerung und Verwaltung aller Komponenten übernimmt ein RISC-Mikrocontroller der Firma ATMEL. Zum Einsatz kommt hier das Modell atmega32. Dieser übernimmt die Ansteuerung der externen Komponenten (LED, LC-Display, Eingänge), die Kommunikation mit dem GSM-Modul MC35 der Firma Siemens sowie die Auswertung und Ausführung der nötigen Operationen für den SMS- Versand und SMS-Empfang. Der Mikrocontroller stellt ebenfalls die nötige UART-Schnittstelle zur Kommunikation mit dem GSM-Modul zur Verfügung. Die notwendige Pegelanpassung zwischen dem 5V TTL-Pegel des Mikrocontrollers und der 12V-Spannung der RS232-Schnittstelle des GSM-Moduls übernimmt ein externer MAX232-Baustein. Die weiteren Bauteile entsprechen der Standardbeschal- tung der atmega-Baureihe und dienen der Stromversorgung, der Takterzeugung und der Beschaltung der Ein- und Ausgänge. Sie sind jedoch nicht Bestandteil dieses Versuches und sollen daher nur kurz aufgezeigt werden. Für Interessierte liegt dieser Anleitung zusätzlich der Schaltplan der Hardwareum- gebung bei (bei Praktikumsbeginn). 2.1 Beschreibung der Hardwareumgebung Der ausgewählte Controller atmega32 besitzt alle für die Umsetzung der geplanten Hardware not- wendigen Eigenschaften. Der mit maximal 16 MHz taktbare atmega32 ist ein Modell der mittleren Leistungsklasse in der atmega-Modellreihe. Die Unterschiede zu den anderen Modellen dieser Reihe liegen in erster Linie im vorhandenen Speicher für die Programme und Daten sowie in einigen Ex- trafunktionen. Die maximale Taktfrequenz liegt bei allen Modellen bei 16 MHz. Der 32 KByte große Programmspeicher (der „Flash“) des atmega32 nimmt den eigentlichen Maschinencode inklusive kon- stanter Daten auf, während der 2048 Byte große Datenspeicher (das „SRAM“) bei der Speicherung von dynamischen Variablen zum Einsatz kommt. Die folgenden, wichtigen Eigenschaften charakterisieren den atmega32: Hochleistungs-8-bit Mikrocontroller (RISC-Architektur) mit: • 131 Befehlen – davon viele mit nur 1 Takt • 32 x 8 flexibel nutzbare Register Ausführungszeit • Bis zu 16 MIPS Datendurchsatz bei 16 MHz
2.2 Der Kontakt zum GSM-Netz 3 • On-chip 2-Zyklus Multiplizierer • 1024 Bytes EEPROM, bis zu 100.000 Mal wiederbeschreibbar • 32 KByte frei programmierbarer Flash- RAM, bis zu 10.000 Mal wiederbeschreibbar • In-System Programming • 2 KByte internes SRAM Peripherie und I/O-Eigenschaften • Zwei unabhängige 8-bit Timer/Zähler • Serieller UART (5V TTL) • Ein 16-bit Timer/Zähler • 32 unabhängige I/O Pins • Echtzeitzähler • Externe und interne Interruptquellen • 8-Kanal 10-bit Analog-Digital-Wandler • Two-wire Serial Interface (I2C) • Interner Taktgenerator Betriebsspannungen Taktung • 4,5 – 5,5V • 0 - 16 MHz Leistungsaufnahme bei 1MHz, 3V, 25◦ C • Aktiv : 1,1 mA • Idle Mode: 0,35 mA Der gewählte Mikroprozessor wurde um die notwendige externe Beschaltung erweitert. Dazu zählen die Stromversorgung, der externe Takt, die externen Interrupts, der Anschluss der ISP, der Anschluss der Leuchtdioden, der Anschluss des LCD und die Beschaltung der UART Schnittstelle. 2.2 Der Kontakt zum GSM-Netz Das kompakte Modul MC35i der Firma Siemens bietet ein vollwertiges GSM-Endgerät inkl. aller Funktionen für den digitalen Datenverkehr im GSM-Netz. Da es nicht für den direkten, eigenständigen Einsatz gedacht ist, fehlen - im Gegensatz zu einem „echten“ Mobiltelefon - Tastatur, Display, Laut- sprecher und Mikrofon. Die Kommunikation mit dem Modul erfolgt wie bei jedem handelsüblichen Handy über eine serielle Schnittstelle. Als Informations- und Debuggingmöglichkeit steht noch ein zweizeiliges Standard- LC-Display der Firma Batron, hier Modell LCD162c, zur Verfügung, welches mit dem Mikrocontroller zur Ausgabe von Daten genutzt werden kann.
2.2 Der Kontakt zum GSM-Netz 4 LC-Display Tor2 Tor1 Tor2 GSM-Netz IO-Ports UART Tor1 Tuer Garage RS-232 ATMEL ATmega32 Treiber Alarm Fenster SUB-D GSM-Modem 9-polig ISP Kaffee Siemens MC35 Heizung GND Reset Programmier- VCC buchse Abbildung 1: Versuchsaufbau Dies ist kein Hardware- sondern ein Softwareversuch. Machen Sie sich dennoch klar, welche Rolle die Hardware hier auch für ihr Programmie- ren spielt. Ihr C-Programm wird nach dem Kompilieren auf den Mi- krocontroller übertragen. Der Mikrocontroller wiederum ist per serieller Schnittstelle mit dem GSM- Modul (versteht nur AT-Befehle) verbun- den, welches als Sende- und Emfangsstation der SMS dient (siehe Abb. 1). Es treten also mehrere Schnittstellen mit unterschiedlichen Sprachen auf: Schnittstelle Student zu PC (Student spricht C und Compiler über- setzt für PC in Maschinensprache) sowie Schnittstelle PC zu Mikrocon- troller (von Maschinensprache zu AT-Befehlen)
3 Kommunikationsprotokolle 5 3 Kommunikationsprotokolle 3.1 Allgemeine Protokollprinzipien Die allgemeine Bedeutung des Wortes Protokoll wird in der Regel mit einer Verhaltensvorschrift gleich- gesetzt. Sich beispielsweise bei einem offiziellen Empfang „an das Protokoll zu halten“ bedeutet, nicht vom vorher genau festgelegten Weg und Ablauf abzuweichen. Diese Bedeutung gilt auch, wenn wir von Kommunikationsprotokollen sprechen. Allen Kommunikationspartnern, seien es nun nur zwei (bei einer direkten Punkt-zu-Punkt Kommunikation nach dem seriellen RS232-Standard) oder mehrere Partner (z.B. bei Bussystemen wie Ethernet oder USB) sind diese Protokollvorschriften bekannt. Es wird sich strikt an diese Vorschriften gehalten und es wird vorausgesetzt, dass sich auch alle anderen Teilneh- mer ebenfalls exakt nach diesen Vorschriften verhalten. Nur so ist zu gewährleisten, dass sich jedes System zu jeder Zeit in einem klar definierten Zustand befindet, den es nur bei Eintreten vorher ein- deutig definierter Ereignisse ändern kann. Diese Eigenschaft ist nicht nur bei der Kommunikation von entscheidender Bedeutung. Jedes Computersystem kann nur funktionieren, wenn es nach einem Zu- standsdiagramm abläuft. „Entweder-Oder-Zustände“ sind darin ebenso ausgeschlossen wie willkürliche und nicht reproduzierbare Zustandsänderungen. 3.2 Punkt-zu-Punkt Verbindungen Bei einfacher Punkt-zu-Punkt Kommunikation, z.B. bei der seriellen RS232, gibt es in der Regel vier relevante Zustände sowie drei wichtige Ereignisse nach denen sich Zustände ändern können. Beispiele für Zustände: Senden, Warten bzw. Ruhezustand, Empfangen, Bestätigen der empfangenen Daten. Beispiele für Ereignisse: Daten zum Versand vorhanden, Daten zum Empfang vorhanden und Bestätigung des Empfangs erhalten. Das einfache Zustandsdiagramm einer Kommunikationseinheit, sowohl für den Sender als auch für den Empfänger, stellt sich daher wie folgt dar (s. Abb. 2). Dieser Ablauf gilt grundsätzlich für alle Punkt-zu-Punkt Verbindungen, die eine gesicherte Über- tragung benötigen. Gesichert bedeutet hier, dass sichergestellt wird, dass die Gegenstelle alle Daten erhalten hat. Von großer Bedeutung ist bei der gesicherten Kommunikation das Timeout-Ereignis. Es wird dabei nach Absenden der Daten eine vorher genau festgelegte Zeit, die Timeout-Dauer Tt , auf das Eintreffen der Empfangsbestätigung, das sogenannte „Acknowledge“ („ACK“), gewartet. Erhält die Sendeeinheit nach Ablauf dieser Zeit keine Empfangsbestätigung, gilt der Sendevorgang als gescheitert. Nun ist es abhängig vom verwendeten System, ob die nicht bestätigten Daten erneut gesendet werden oder ob der komplette Sendevorgang beendet wird. Am Beispiel der Garagentor-Steuerung wird die Timeout-Systematik in Punkt 3.4 genauer betrachtet. Um den Ablauf einer Kommunikation und die Relation zwischen Sender und Empfänger darzu- stellen, kommt ein so genanntes „Weg-Zeit-Diagramm“ zum Einsatz, in welchem sowohl der zeitliche als auch der örtliche Ablauf einer Übertragung verdeutlicht werden kann. Der normale Vorgang einer
3.2 Punkt-zu-Punkt Verbindungen 6 Abbildung 2: Einfaches Zustandsdiagramm einer Sende- und Empfangseinheit gesicherten Punkt-zu-Punkt Kommunikation wird mit folgendem Diagramm dargestellt (s. Abb. 3). Auf der linken Seite befindet sich der Sender, in der Mitte die Übertragungsstrecke z.B. bestehend aus direkter Kabelverbindung, Internet oder GSM-Netz, während auf der rechten Seite der Empfänger dargestellt ist. Der zeitliche Ablauf der Kommunikation liest sich nun von oben nach unten. Zum Zeitpunkt (1) werden die Daten vom Sender über den Übertragungsweg an den Empfänger verschickt, wo sie nach der Zeit T2 eintreffen ⇒ Punkt (2). Nach dem Empfang der Daten sendet der Empfänger nach Ablauf der Zeit T3 die Empfangsbestätigung ⇒ Punkt (3), die dann die Zeitdauer T4 benötigt, um beim Sender einzugehen ⇒ Punkt (4). Aus der Sicht des Senders hat der gesamte Vorgang nun die Zeit T1 benötigt. Die Zeitdauer vom Senden der Daten bis zum Empfang der Bestätigung muss stets innerhalb der vorgegebenen Zeitdauer Tt (Timeout) liegen. Trifft die Bestätigung nicht innerhalb der Zeit Tt beim Sender ein, so ist der Sendevorgang gescheitert. In diesem Fall wird in der Regel der Versand wiederholt und bei weiterem Ausbleiben der Bestätigung abgebrochen. Die nachfolgenden Beispiele erläutern einige Gründe für das Ausbleiben der „ACK“-Information (s. Abb. 4). Tritt dieser Fall auf, so haben die Daten den Empfänger nie erreicht. Da der Empfänger keine Daten erhalten hat, wird er auch kein „ACK“ senden und der Sender wird den Empfang der Daten nicht bestätigt bekommen. Innerhalb der Timeoutzeit Tt wird also kein „ACK“ eintreffen und der Sender sendet die Daten erneut (s. Abb. 5). In diesem Beispiel haben die Daten zwar den Empfänger erreicht, jedoch ging die daraufhin ver- schickte Bestätigung verloren. Folglich erhält der Sender innerhalb der vorgeschriebenen Zeit keine Bestätigung und wiederholt die Datenübertragung. Diese Daten müssen vom Empfänger erneut bestä-
3.2 Punkt-zu-Punkt Verbindungen 7 Abbildung 3: Weg-Zeit-Diagramm einer erfolgreichen und gesicherten Übertragung Abbildung 4: Verlust der Sendedaten bei der Übertragung zum Empfänger
3.3 Beispiel Garagentor-Steuerung 8 Abbildung 5: Verlust der Bestätigung bei der Übertragung zum Sender tigt werden. Der geschilderte Ablauf gilt grundsätzlich für alle Punkt-zu-Punkt Verbindungen, die eine gesicherte Übertragung benötigen. 3.3 Beispiel Garagentor-Steuerung Im Folgenden sollen die Punkt-zu-Punkt-Verbindung und die dort auftretenden Ereignisse und Zu- stände am Beispiel einer Garagentor-Steuerung erläutert werden. Dieses Beispiel soll mit Hilfe der vorliegenden Versuchsumgebung nachvollzogen werden. Im Beispiel Garagentor-Steuerung werden der Antriebsmotor durch eine Leuchtdiode und der Schließkontakt durch einen Taster ersetzt (s. Abb. 6). Vom Mobiltelefon wird eine SMS gesendet mit der Anweisung, das Garagentor an Port 5 zu schlie- ßen. Das Signal wird über das GSM-Modul an den Mikrocontroller weitergeleitet. Daraufhin wird der an Port 5 angeschlossene Motor (LED) aktiviert, um das Tor zu schließen. Ist das Tor geschlossen (LED erlischt) wird der Schließkontakt geschlossen (manuelle Betätigung des Tasters an Port 7). Durch die Schließung wird per SMS die Nachricht (ACK) an das Mobiltelefon des Absenders verschickt, dass das Garagentor nun geschlossen ist. Bleibt dieses Signal aus (Taster wird nicht betätigt), erhält der Absender nach Ablauf einer be- stimmten Zeit (Timeout) die Nachricht, dass das Tor nicht geschlossen wurde. Gründe hierfür könnten sein, dass der Mikrocontroller das Signal zum Schließen nicht erhalten hat oder etwas das Garagentor blockiert.
3.3 Beispiel Garagentor-Steuerung 9 Abbildung 6: Simulation der Garagentorkomponente Dieses Beispiel beinhaltet zwei unabhängige, nacheinander genutzte Übertragungsstrecken: Die Da- tenübertragung vom Mobiltelefon zum Mikrocontroller erfolgt ohne Empfangsbestätigung über das GSM-Netz. Der Empfang wird erst bei vollständiger Ausführung der Anweisung vom Mikrocontrol- ler durch SMS bestätigt. Die gesicherte Übertragung findet zwischen Mikrocontroller und Garagen- tor/LED statt: Das Signal (Schließen des Tors) wird umgesetzt, und das Schließen des Kontaktes an Port 7 bestätigt dem Mikrocontroller den Erfolg (ACK). Hier erfolgt die Sicherung durch ein Timeout. Die Zeit, die die Daten bzw. die Signale vom Sender zum Empfänger benötigen, wird in der Über- tragungstechnik als „Propagation Delay“ (= Ausbreitungsverzögerung) bezeichnet. Bei einer Kabelver- bindung wird diese Verzögerung durch die Ausbreitungsgeschwindigkeit des elektrischen Signals und durch die Länge und Beschaffenheit des Verbindungskabels definiert. Je länger die Verbindung, gleich ob optisch oder elektrisch, desto größer ist die Laufzeit der Daten, gleichbedeutend mit der Erhöhung des Propagation Delays. Diese Verzögerungen sind in der Regel bei elektrischen Signalen recht gering, müssen aber bei jeder Planung einer Datenübertragung entsprechend berücksichtigt werden. Im Fall der Auslieferung einer SMS über das GSM-Netz kann diese Verzögerung jedoch bekanntermaßen einige Sekunden bis Minuten dauern. Nach dem Absenden der Daten wartet der Sender (Mobiltelefon) auf das Eintreffen der SMS mit dem Ergebnis der Ausführung. Nachdem die Daten (SMS) den Empfänger (GSM-Modul/Mikrocontrollersystem) erreicht haben, wird die SMS ausgewertet und der Impuls zum Schließen des Tores an den Motor der Torsteuerung gesendet. Nun hat das Tor eine definierte Zeit (Timeout) zum Schließen zur Verfügung. Das erfolgreiche Schließen des Tores wird durch den Kontaktschalter signalisiert. Bleibt diese Bestätigung innerhalb des Timeout-Fensters aus, gilt die Übertragung/Anweisung als nicht fehlerfrei ausgeführt. Diese Informa- tion wird dann dem Auftraggeber (Mobiltelefon) mitgeteilt (s. Abb. 7). Der Nutzer sendet mit seinem Mobiltelefon eine entsprechende SMS „Garage:an“ 3 mit der Anwei- 3 „Garage:an“ bedeutet hier das Schließen des Tores. Im Gegensatz dazu wird „Garage:aus“ als Öffnen des Tores interpretiert. Diese Umsetzung müsste dann der in der Realität angeschlossene Torantrieb durchführen.
3.3 Beispiel Garagentor-Steuerung 10 Abbildung 7: Weg-Zeit-Diagramm einer SMS-Steuerung inkl. Bestätigung sung, das angeschlossene Garagentor zu schließen (1). Nachdem die SMS ihren Weg über das GSM-Netz zum SMS-Steuermodul gefunden hat und dort ausgewertet wurde, gibt das Steuermodul das Signal an den Motor der Garagentorsteuerung, das Tor zu schließen (2). Von diesem Zeitpunkt an beginnt im Steuerungsmodul der Timeout-Zähler Tt zu laufen. Wenn das Garagentor geschlossen ist, wird durch das Schließen des Kontakts das Signal zum Steuerungsmodul gegeben, dass das Tor geschlossen ist. Dann wird eine entsprechende SMS an das Mobiltelefon geschickt und die erfolgreiche Ausführung der Anweisung „Garage:an" bestätigt. Der Timeout-Timer ist nicht mehr von Bedeutung. Anders sieht dies aus, wenn die Information „Tor geschlossen“ nicht oder nicht rechtzeitig zum Steu- ermodul gelangt. Nach Ablauf der Zeit Tt wird die Misserfolgsmeldung an das Mobiltelefon gesendet (s. Abb. 8). Ein erneuter Schließversuch erfolgt nicht. Eine eventuelle Schließbestätigung, die nach dem Ablauf der Zeit Tt das Steuermodul erreicht, wird ignoriert. Die Verwaltung des Timeouts beim Schließen des Tores obliegt der Software, die auf dem Mikro- controller läuft.
4 Software-Diagramme und Beschreibung der Funktionen 11 Abbildung 8: SMS-Anweisung mit ausbleibender Bestätigung Die leicht eingängigen Protokollprinzipien, die Sie in diesem Abschnitt kennengelernt haben, lassen sich im Beispiel der Garagentorsteuerung wiederfinden. Auf diesen Versuch angewendet, bedeutet dies für Sie, dass Sie eine der LEDs auf dem Mikrocontroller per SMS steuern und eine Nachricht über Erfolg oder Misserfolg dieses Steuerversuchs an den Steu- ernden (das Mobiltelefon) zurücksenden. Dies tun Sie im Rahmen der kennengelernten Protokollprinzipien (d.h. Sie müssen die Totzeit berück- sichtigen). Das ACK, welches über Erfolg oder Misserfolg eines Steuer- versuchs entscheidet (innerhalb von Totzeit oder später), wird von Ihnen selbst per Taster ausgelöst (siehe Abb. 6). 4 Software-Diagramme und Beschreibung der Funktionen Ein Hauptaugenmerk bei diesem Versuch soll auf der Softwareumsetzung liegen, auf die im Folgenden näher eingegangen werden soll. Die Programmierung des Mikrocontrollers erfolgt mittels der Pro- grammiersprache C sowie dem dafür erforderlichen C-Compiler für den Atmel Controller. Für die Ansteuerung des LC-Displays, des GSM-Moduls und zur Verwaltung der Kommunikation mittels SMS
4.1 GSM und SMS-Kommunikation 12 steht eine spezielle C-Bibliothek zur Verfügung. Die Möglichkeit, solche Funktionen zum Teil selbst zu entwickeln, ist Bestandteil des Versuchs. Die Funktionen sind im Folgenden als Schichtmodelle dargestellt. Diese Darstellungsweise verdeut- licht, dass die abstrakten Funktionen, die bei der Nutzung dieser Software Verwendung finden, stets auf einer der unterliegenden „hardwarenäheren“ Schicht geringerer abstrakter Funktionalität aufbauen. Es handelt sich dabei um Funktionen, die für sich alleine genommen wenige Auswirkung besitzen, in der Summe jedoch die Basis und Voraussetzung für abstraktere Funktionen wie das Versenden einer SMS bilden. Die nach außen hin simpel erscheinenden Funktionen werden dabei umso spezieller, je näher man sich der Hardwareebene nähert. Das Versenden einer SMS ist keine triviale Aufgabe für den Mi- krocontroller. Um diese komplexen Funktionen auf Anwenderebene aufzubauen, müssen alle dafür notwendigen Unterfunktionen von der Hardwareebene aufwärts erstellt werden. Die Funktionen der Treiberebene sind spezielle Funktionen für den eingesetzten Prozessor und greifen in der Regel direkt auf dessen Register oder Ports zu. Funktionen stellen die Schnittstellen zwischen dem Anwender bzw. Programmierer und der Maschi- ne dar. Der Zugriff auf die Funktionalitäten des Microcontrollers erfolgt über abstrakte Schnittstellen. Diese Schnittstellen kapseln die hardwarenahe Implementierung und vereinfachen den Zugriff für den Programmierer. Abbildung 9 zeigt die Aufspaltung der abstrakten Funktion send_sms, die als Parameter Empfän- gerrufnummer X und SMS-Text Y entgegennimmt. Dieser Funktionsaufruf wird zunächst in eine Reihe von AT-Befehlen aufgeteilt. Jeder dieser Befehle wird weiter in kleinere Unterfunktionen geteilt. Diese Prozedur wiederholt sich für jeden Befehl erneut. Es ist ersichtlich, dass eine sehr große Anzahl von einfachen Befehlen ausgeführt werden muss, um eine SMS mit dem Text X an die Handynummer Y zu versenden. Die in den nachfolgenden Gliederungspunkten dargestellten Funktionen und Strukturen stellt die C-Bibliothek zur Verfügung4 . 4.1 GSM und SMS-Kommunikation Basierend auf den Grundfunktionen der UART- und LCD-Library, wurden die Funktionen für die GSM-Modul-Steuerung und die SMS-Verwaltung erstellt (s. Abb. 10). Auf eine Übersicht der Grund- funktionen der UART- und LCD-Library wurde hier verzichtet, da sie für den Versuch nicht relevant sind. Neben den genannten Funktionen sind für den Datenaustausch mit dem GSM-Modul zwei globale Datenstrukturen definiert. 4 Die genaue Syntax und Ansteuerung für alle dargelegten Funktionen sind dem Quellcode der Bibliothek selbst zu entnehmen. Der Quellcode wird bei Praktikumsbeginn ausgehändigt.
4.1 GSM und SMS-Kommunikation 13 Abbildung 9: Aufspaltung einer komplexen Aufgabe in einfache Basisfunktionen Abbildung 10: Schichtmodell der seriellen GSM/SMS-Routinen
4.1 GSM und SMS-Kommunikation 14 Abbildung 11: Die GSM-Datenstruktur 4.1.1 GSM-Befehls-Datenstruktur Zur Steuerung von Modems bzw. anderer Datenendgeräte verwendet man den so genannten AT- Befehlssatz. Dessen Befehle werden als einfacher ASCII-Klartext über die serielle Schnittstelle an das Endgerät geschickt und lösen dort die entsprechenden Aktionen aus. Um beispielsweise ein Modem (in diesem das GSM-Modul) zur Anwahl einer Telefonnummer zu bewegen, muss der Befehl „AT D Rufnummer“ (D für Dial) an das Gerät geschickt werden. Um einen ankommenden Anruf entgegen zu nehmen, ist der Befehl „AT A“ (A für Answer) an das Gerät zu senden5 . Auf unbekannte Befehle antwortet das Gerät mit der Zeichenfolge „+ERROR“ auf gültige Befehle mit einer befehlsabhängigen Antwort. Gültige Befehle werden dann auch stets mit einem „+OK“ als Antwort abgeschlossen. Eine Datenstruktur (s. Abb. 11) für die zur Steuerung des GSM-Moduls notwendigen AT-Befehle liegt in der C-Bibliothek vor. Der gewünschte Befehl wird ins Datenfeld „Command“ geschrieben und mit der Funktion send_gsm_command(0) abgeschickt. Anschließend findet sich im Feld „Answer“ der Antwortstring und im Feld „Success“ die Information, ob der Befehl erfolgreich (Success=true) oder fehlerhaft (Success=false) abgearbeitet wurde. Die Datenstruktur ist in der Library unter dem Variablennamen „gsm“ erreichbar. Beispiel: Folgender C-Programmcode verdeutlicht das Absenden eines AT-Befehls an das angeschlossene GSM-Modul: //*************************************** strcpy (gsm.command,“AT +cgmi“); // Der Befehl „AT +cgmi“ wird in der Datenstruktur GSM ins // Feld COMMAND eingetragen // Mit dem Befehl „AT +cgmi“ wird die Herstellerkennung des // angeschlossenen GSM-Gerätes abgefragt send_gsm_command (0); // Der Befehl wird abgesendet, auf Debug-Rückmeldungen wird // verzichtet 5 Eine Übersicht über die wichtigsten AT-Befehle ist dem Anhang A zu entnehmen.
4.1 GSM und SMS-Kommunikation 15 Abbildung 12: Die SMS-Datenstruktur if (gsm.success) { lcd_textout (gsm.answer); } else { lcd_textout (“ Fehler“); } // Das Ergebnis, d.h. die Rückantwort des GSM-Moduls auf // diesen Befehl, wird im Erfolgsfall auf dem Display // ausgegeben. Andernfalls erscheint die Meldung „Fehler“. **********************************// 4.1.2 SMS-Datenstruktur Analog zur GSM-Befehlsdatenstruktur existiert ein Konstrukt zur Aufnahme einer SMS-Nachricht. Die SMS-Datenstruktur (s. Abb. 12) enthält eine empfangene SMS bzw. die SMS, die versendet werden soll. Zum Versenden einer SMS wird die Datenstruktur entsprechend mit den gewünschten Werten beschrieben. Durch Aufruf der Funktion send_sms werden diese Daten dann in das SMS-Format umgesetzt und verschickt. Nach dem Aufruf der Funktion read_sms wird, sofern vorhanden, eine aktuelle SMS aus dem GSM- Modul gelesen und die SMS-Datenstruktur entsprechend mit den Werten beschrieben. Es existiert also nur eine Struktur, die sowohl eine ausgehende als auch eine eingegangene SMS enthält. 4.1.3 SMS-Versand & Empfang Beispiel 1: Folgender Programmcode verdeutlicht das Absenden einer SMS: //***************************************
4.1 GSM und SMS-Kommunikation 16 // Absenden einer SMS //*************************************** strcpy (sms.to,“01734343434“); strcpy (sms.text,“Hallo GSM-Welt“); // Eintragen der relevanten Daten in die SMS-Datenstruktur send_sms(); // Absenden der vorbereiteten SMS. Aus den SMS-Daten wird eine // Reihe von GSM-Befehlen erzeugt, die nacheinander an das // GSM-Gerät geschickt werden. Daher ist der Erfolgsfall auch // wie bei jedem GSM-Kommando hier nun im Feld gsm.success // gespeichert und kann abgefragt werden. if (gsm.success) { lcd_textout (gsm.answer); } else { lcd_textout (“Fehler“); } // Das Ergebnis, d.h. die Rückantwort des GSM-Moduls auf // diesen Befehl, wird im Erfolgsfall auf dem Display // ausgegeben. Andernfalls erfolgt die Meldung „Fehler“. **********************************// Beispiel 2: Folgender Programmcode verdeutlicht den Empfang und die Anzeige einer eingegangenen SMS: //****************************** // SMS Empfang //******************************+ read_sms(); // Auslesen der vorliegenden SMS if (gsm.success) { // Liegt eine SMS vor, ist gsm.success gesetzt. // Dann Ausgabe der SMS lcd_textout (sms.from); // Ausgabe des Absenders lcd_line2();
4.1 GSM und SMS-Kommunikation 17 // Zweite Zeile im Display lcd_textout (sms.text); //Ausgabe des Textes delete_sms(); // Befehl zum Löschen der SMS. Ohne diesen Befehl // würde diese SMS immer wieder ausgelesen. } else { lcd_textout(“Keine SMS vorhanden”); // Keine neue SMS gefunden } 4.1.4 SMS mit Funktion Die Hard- und Softwareumgebung soll aber nicht nur den Text der SMS ausgeben können, sondern in erster Linie der Steuerung angeschlossener Geräte dienen. Die SMS unterliegt wie jede Steuerungs- anweisung bestimmten Regeln. Die Funktion liest den Inhalt der SMS aus und beschreibt damit die Attribute der SMS-Datenstruktur. Um den Zustand eines Ausgangs zu ändern, muss die SMS den Namen des Ausgangs, gefolgt von einem Doppelpunkt und dem gewünschten Zustand, enthalten. Mehrere Anweisungen für verschiedene Ausgänge können durch Leerzeichen getrennt angegeben werden. Jeder Ausgang des Systems kann mit einem eindeutigen, leicht zu merkenden Namen versehen werden, mit dem der Ausgang angesprochen werden kann. Es müssen sich keine Nummern oder Zuordnungen gemerkt werden, vergleichbar mit dem Zusammenhang Domainnamen IP-Adresse im Internet. Diese Zuordnung findet sich zu Beginn der C-Bibliothek und hat die Form: =Portnummer Betrachten Sie dazu auch Abb. 1. Als Ausgänge stehen die Ports 0-5 zur Verfügung. Die Ports 6 und 7 sind als Rückmeldeports reserviert und können nicht direkt angesprochen werden. Der Text einer SMS, die also z.B. den Eingang: „Kaffee“ auf „1“ also auf „An“ schaltet, würde dann lauten „Kaffee:an“. Sinnvollerweise könnte damit als Anwendung das Einschalten einer angeschlossenen Kaffeemaschine erfolgen. Auf eine Unterscheidung zwischen Groß- und Kleinschreibung ist hierbei zu achten. Mit dem Inhalt „Kaffee:aus Flur:aus“ könnte eine Kaffeemaschine an Port 0 sowie das Flurlicht an Port 1 ausgeschaltet werden. Die Ports 4 bzw. 5 besitzen eine besondere Eigenschaft. Diese Ports sind ebenso wie die Ausgänge 0-3 schaltbar, warten dabei jedoch auf eine Rückmeldung der korrespondierenden Eingänge 6 bzw. 7. Das bedeutet, wenn der Ausgang 4 oder 5 per SMS-Anweisung geschaltet werden soll, ist ein entspre- chender Zustand des Ports 6 oder 7 notwendig. Am Beispiel der Garagentorsteuerung entsteht eine positive Rückmeldung (Garagentor ist geschlossen) bei geschlossenem Zustand des Schließkontaktes.
4.1 GSM und SMS-Kommunikation 18 Die Eingangszustände an Port 6 und 7 sind in diesem Versuch mit zwei Tastern simuliert. Weitere mögliche Anweisungen im SMS-Text : „Text:“ Gibt den Text auf dem Display aus „Status“ Gibt den Zustand aller 8 Ports zurück Beispiel 3: //****************************** // SMS Empfang und auswerten //******************************+ read_sms(); // Auslesen der vorliegenden SMS if (gsm.success) { parse_sms(); // Parsen , Analysieren und Auswerten des Inhalts } Nach dem Ausführen der Funktion parse enthält das Feld sms.typ nun die erkannte Art der SMS- Steuerung. Folgende Typen stehen zur Verfügung: • sms.typ=0; Der SMS Text enthält keine auswertbaren Informationen. Entweder wurde die richtige Syntax nicht beachtet oder die SMS enthält keine erkennbaren Befehle. In diesem Fall sollte an den Absender der SMS eine entsprechende Rückantwort erfolgen. Der Absender der SMS steht nach wie vor im Feld sms.from. • sms.typ=1; Die SMS enthält einen Befehl zum An- oder Ausschalten bestimmter Einfachports. Einfachports sind die Ausgänge 0-3 und bedürfen keiner Rückmeldung. Da die SMS die Namen der Ausgänge in Klartext enthält, müssen diese zunächst übersetzt werden. Diese Korrespondenztabelle findet sich zu Beginn des Quellcodes der C-Bibliothek und ordnet jedem Ausgang ein leicht merkbares Wort zu, mit welchem dann der Ausgang in der SMS benannt wird. Im Falle des SMS-Typs 1 hat die Funktion parse dann den Inhalt des Feldes sms.text von der Form „Garage:an Kaffee:aus“ in die Form „1:1 3:0“ umgewandelt (also in der Form Portnummer:Zustand). Die Funktion set_ports kann nun anhand dieses so umkodierten Text-Strings die entsprechenden Ports auf „high“ bzw. „low“ setzen.
5 Anmerkungen zur Versuchsdurchführung 19 • sms.typ=2; Dieser Typ bezeichnet SMS-Anweisungen, die lediglich Text auf dem LC-Display ausgeben sollen. Der auszugebende Text befindet sich dabei im Feld sms.text. • sms.typ=3; Die SMS enthält Anweisungen zum Schalten der Ports mit Rückmeldung. In diesem Fall hat die Funktion parse wie bereits beim SMS-Typ 1 den Inhalt des Felds sms.text in die Form „1:0 2:1 3:1. . . “ umgewandelt. Nun werden die Ports noch mit der Funktion set_ports entsprechend dieser Anweisung geschaltet. Anschliessend ist aber noch die Abfrage der entsprechenden Rückmelde- ports notwendig. Nur wenn der korrespondierende Rückmeldeport in der Totzeit den gleichen Status angenommen hat wie der zu schaltende Ausgang, kann der Vorgang als erfolgreich abge- schlossen betrachtet werden. Das heißt, wenn Ausgang Garage (Port 4) auf Schließen geschaltet wird, ist bei dem entsprechenden Rückmeldeport 6 ebenfalls auf den Zustand Geschlossen zu warten. Die hierfür gültige Timeout-Zeitdauer kann im C-Code festgelegt werden. Ports mit Rückmeldung sind die Ausgänge 4 und 5. Die korrespondieren Rückmeldeports sind 6 und 7. • sms.typ=4; Hierbei handelt es sich um eine Status-SMS. Mit dieser SMS wird eine Statusmeldung angefordert. Die Funktion create_status erzeugt dabei einen Textstring, in dem alle aktiven Ausgänge mit Namen angegeben werden. Nicht geschaltete Ausgänge tauchen in diesem String nicht auf. Dieser Text kann nun an den Anforderer der Statusmeldung geschickt werden. Machen Sie sich mit den Datenstrukturen der Klassen GSM und SMS vertraut (Methoden!). Ausserdem sollten Sie sich klar machen wie mit den Funktionen strcpy(Ziel,Quelle); und strcat(Ziel,Quelle); umzugehen ist und welche Datentypen ihre Parameter haben. 5 Anmerkungen zur Versuchsdurchführung 5.1 Quellcode kompilieren und den Mikrocontroller beschreiben Die Quellcodedatei(en) werden mit dem zur Verfügung stehenden Editor „Programmers Notepad V2.0“ geladen. Achten Sie darauf, nicht die Dateinamen zu ändern, da sonst die vorgegebene Dateistruktur nicht mehr gegeben ist. Laden Sie Ihre Quellcodedatei durch einen einfachen Dopelklick, unser Editor wird normalerweise automatisch ausgewählt. Der Editor ist in der Lage, C-Strukturen zu erkennen und visualisiert diese mit einer entsprechenden Farbgebung, so ist die Struktur des C-Quellcodes gut erkennbar. Speichern Sie ihren fertigen Quellcode ab und öffnen Sie nun ein Fenster mit dem Befehlsinterpreter. Ein darauf verweisender shortcut steht zur Verfügung. Falls das nicht der Fall ist,gehen Sie auf „Start“
5.2 Kurzeinführung Oszilloskop 20 -> „Ausführen“ und geben „command“ in das vorgesehene Feld ein. In der erscheinenden Eingabeauffor- derung wechseln Sie ins richtige Verzeichnis und starten mit dem Befehl „make“ den Kompiliervorgang. Ist dieser erfolgreich, so finden Sie im Verzeichnis nun eine Datei mit Namen „sms-control.rom“, welche den ausführbaren Maschinencode für den Mikrocontroller enthält. Schlug der Kompiliervorgang fehl, so ist aus den dann erscheinenden Fehlermeldungen auf das Problem zu schließen. Bei Fragen dazu steht der Versuchbetreuer zur Verfügung. Der kompilierte Code muss nun mit dem Programm „PonyProg“ in den Controller übertragen werden. Starten Sie dazu das Programm und laden Sie die Datei „sms-control.hex“. Klicken Sie auf „Write program (FLASH)“ und der Kopiervorgang startet. Der Mikrocontroller führt danach das Programm automatisch aus. Von neuem wird er aber auch durch Betätigen des Reset-Tasters gestartet. 5.2 Kurzeinführung Oszilloskop Im Rahmen dieses Versuches soll ein digitales Oszilloskop mit Speicherfunktion er seriellen Kommuni- kation verwendet werden. Bei dem zu verwendenden Gerät handelt es sich um ein Tektronix TDS 1002. Besonders hilfreich bei der Kommunikationsanalyse unter Benutzung dieses Geräts ist, daß nicht nur periodische Signalverläufe dargestellt werden können, sondern daß bei entsprechender Konfiguration von Triggereinheit sowie Zeit- und Verstärkungsbasis auch einzelne Protokollabschnitte in einem nicht verfliegenden Bild festgehalten werden können. „Klassisch“ aufgebaute Oszilloskope haben auf der rechten Seite einen Stellknopf für die Einstellung der Zeitbasis (hier „Sec(onds)/Div(ision)“), der dort angegebene Wert bezieht sich auf eine Kästchen- breite auf dem Bildschirm. Stellen Sie also mit dem Wissen, daß die Kommunikation mit einer Baudrate von 9600 erfolgt, hier zunächst einen sinnvollen Wert ein. Getriggert werden soll auf eine Flanke des Signals (steigend oder fallend?). Zu beachten ist insbesondere, daß hier keine periodischen Vorgänge erwartet werden, sondern ein einmaliges Ereignis. Dieses wird vom verwendeten Oszilloskop nach Betätigen der Tasten „Single Seq(ence)“ und „Run/Stop“ festgehalten. Erst wenn die letztgenannte Taste gedrückt wurde, erfolgt nach dem Eintreten einer Triggerbedingung die Aufzeichnung des Signalverlaufs. In gewissen Grenzen kann das aufgezeichnete Signal auch mittels des „Horizontal Position“-Stellknopfes und einer nachträg- lichen Veränderung der Zeitbasis verschoben und vergrößert oder verkleinert werden. 6 Aufgaben 1. (a) Schreiben Sie ein Programm, welches die Firmware und den Hersteller des GSM-Moduls ausliest und in zwei Zeilen auf dem Display anzeigt. (b) Das Auslesen der Informationen geschieht über die serielle Schnittstelle des GSM-Moduls. Schließen Sie das Oszilloskop zusätzlich an diese Schnittstelle an; beobachten und erklären Sie die gemessenen Signalverläufe. Machen Sie sich dazu im Vorwege über Grundlagen der Datenübertragung via RS-232 kundig.
LITERATUR 21 2. Erweitern Sie nun das Programm derart, dass diese Informationen zusätzlich noch per SMS an eine gültige Handynummer gesendet werden können. 3. Schreiben Sie ein Programm zur Schaltung der Einfachports 0 bis 3 per SMS. 4. Verfassen Sie anschließend ein Programm, welches auf das Eintreffen einer SMS wartet, diese auswertet und Anweisungen zur Ausgabe von Text auf dem Display ausgibt. Erweitern Sie das Programm derart, dass eine Rückantwort bei ungültigem SMS-Inhalt gesendet wird. Senden Sie dabei die Ursprungs-SMS mit einem entsprechenden Kommentar zurück. 5. Schreiben Sie eine Alarmfunktion, die eine SMS sendet sobald das Alarmsignal von Taster 1, z.B. einem angeschlossenen Glasbruchsensor, ausgelöst wird. 6. Schreiben Sie eine Prozedur, die in der Lage ist, mit den Rückmeldeports 4 und 5 inklusive der Korrespondenzports 6 und 7 umzugehen. Sie sollen hierfür per SMS Ports schalten und eine Rückmeldung über den Erfolg bzw. Misserfolg versenden. 7. In der folgenden Aufgabe sollen Sie eine der Schwächen des GSM- Netzes, die die Eindeutigkeit der Kommunikation zwischen Sender und Empfänger beeinflussen kann, abfangen. Konkret ist ein Szenario gemeint, in dem die tatsächliche Reihenfolge des Empfangs der SMS nicht mit der Reihenfolge des Sendens übereinstimmt: Sie senden die Nachricht A (z.B. bei Kaffee:an) und danach B (z.B. Kaffee:aus), empfangen werden jedoch B und dann A, woraufhin mit D und C geantwortet wird (diese werden eventuell auch wieder vertauscht...). Welche Probleme können auftreten? Was für einen Protokollmechanismus können Sie implementieren um diese Fehlerquelle zu entdecken/zu vermeiden? 8. Fügen Sie dem zu sendenden Text einen CRC-8-Prüfwert hinzu. (Software zum Berechnen des Prüfwerts liegt vor.) Programmieren Sie auf dem Mikrocontroller eine Funktion, die verhindert, daß bei falschem Prüfwert eine Aktion ausgeführt wird. Näheres zur Auswertung erfahren Sie vom Versuchsbetreuer. Literatur [1] AT-Befehlssatz aus http://www.itu.int/rec/T-REC-V.250/de [2] ITU V.24 (ähnlich RS-232) http://www.itu.int/rec/T-REC-V.24/de
Sie können auch lesen