Fernwirken mit GSM Master ET - Versuch 752

 
WEITER LESEN
Fernwirken mit GSM Master ET - Versuch 752
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