i
Kurzfassung der Arbeit
Sensornetze sind drahtlos verbundene Netze bestehend aus Knoten, die über eine CPU, Sensoren und ein Netzinterface verfügen. Die Knoten dieser Netze haben starke Ressourenbeschränkungen. Aus diesem Grunde sind effiziente Programme notwendig, deren Programmierung schwierig ist. Um diesem zu begegnen wurde die Programmiersprache nesC zusammen mit einem in ihr geschriebenen Betriebssystem TinyOS entwickelt. Die Sprache nesC baut dabei auf C auf und unterstützt einen komponentenbasierten Aufbau von Programmen. Die Entwicklung der Programme für die Knoten erfolgt in drei Phasen: Für die Simulation, für das Testbed und für den Einsatz eines Sensornetzes in seinem Deployment. Logging ist eine Methode, um Programme während ihrer Ausführung zu prüfen. Es muss jedoch für jede der drei Phasen der Entwicklung der Knotensoftware eine unterschiedliche Loggingfunktion aufgerufen werden. Aspektorientierte Programmierung ermöglicht es nun, zu einem bestehenden Basisprogramm mithilfe von Aspekten neue Funktionalitäten hinzuzufügen. Die Diplomarbeit entwickelt eine aspektorientierte Spracherweiterung für die Sprache nesC, um in den drei Phasen unterschiedliche Funktionalitäen durch Aspekte hinzufügen zu können, um beispielsweise die unterschiedlichen Loggingfunktionen einzufügen. Die Arbeit umfasst sowohl das Design als auch die Durchführung der Implementierung der aspektorientierten Spracherweiterung innerhalb des originalen nesC-Compilers. Interessante neue Konzepte für die Änderung der Konfigurationen der Komponenten eines nesC-Programmes mithilfe der aspektorientierten Spracherweiterung werden entwickelt. Die Implementierung einer Spracherweiterung innerhalb eines Compilers wird untersucht.
Inhaltsverzeichnis
Inhaltsverzeichnis i
1 Einleitung 1
1.1 Motivation 1
1.2 Aufgabenstellung dieser Arbeit 2
1.3 Überblick über die Arbeit 3
2 Grundlagen 5
2.1 Drahtlos verbundene Sensornetze 5
2.1.1 Motes als Knoten eines Sensornetzes 5
2.1.2 Anforderungen an Sensornetze 7
2.1.3 Anwendungsgebiete von Sensornetzen 9
2.1.4 Weitere Miniaturisierung bis hin zum Smart Dust 11
2.1.5 Neue Anwendungsgebiete durch Miniaturisierung 12
2.1.6 Die Sprache nesC und das Betriebssystem TinyOS 12
2.2 Tools zur Unterstützung des Programmierers 13
2.2.1 Tools zur Programmprüfung 13
2.2.2 Logging und Debugging 13
2.3 Aspektorientierte Programmierung 14
2.3.1 Überblick über die aspektorientierte Programmierung 14
Weben von Aspekten bestehend aus Pointcuts und Advices 14
Crosscutting Concerns und Obliviousness 15
Nachteile der aspektorientierten Programmierung 16
2.3.2 Motivation des aspektorientierten Loggings für Sensormotes 16
2.3.3 Weitere Möglichkeiten für die Anwendung von Aspekten auf
Sensormotes 17
3 Analyse von Logging-Frameworks und aspektorientierten Spracherwei-
terungen und deren Implementierungen 19
3.1 Verwandte Arbeiten 19
3.2 Logging-Frameworks 21
3.2.1 Loggingansätze für die PC-Umgebung 21
3.2.2 Loggingansätze in nesC für die Sensornetzumgebung 24
3.3 Das Weaving unterschiedlicher Implementierungen aspektorientierter
Sprachen 24
i
ii INHALTSVERZEICHNIS
3.3.1 Zeitpunkte des Weavings . . . . . . . . . . . . . . . . . . . . . . 24 3.3.2 Bytecode-Weaving in der AspectJ-Implementierung . . . . . . . . 26 3.3.3 Loadtime Weaving und Runtime Weaving . . . . . . . . . . . . . 28 3.3.4 LogicAJ als Beispiel einer Implementierung als Precompiler . . . . 28 3.3.5 Weitere Implementierungen als Precompiler . . . . . . . . . . . . 29 3.3.6 Einweben von Aspekten ohne Implementierung einer Spracherweiterung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3.7 Schlussfolgerungen für die Erweiterung von nesC . . . . . . . . . 32 3.4 Sprachdefinition von AspectJ . . . . . . . . . . . . . . . . . . . . . . . . 33 3.4.1 AspectJ als Vorreiter . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.4.2 Pointcutdeklarationssprache . . . . . . . . . . . . . . . . . . . . . 34
3.4.3 Advices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.4.4 Introductions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.5 Composition Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4 Entwurf der aspektorientierten Sprache für nesC 41
4.1 Die Sprache nesC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1.1 Komponentenbasierter Aufbau von nesC . . . . . . . . . . . . . . 41 4.1.2 Als asynchron gekennzeichnete Funktionen . . . . . . . . . . . . 44 4.1.3 Das Taskkonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.1.4 Quellcode eines nesC-Programmes . . . . . . . . . . . . . . . . . 45 4.2 Pointcuts und Advices für nesC . . . . . . . . . . . . . . . . . . . . . . 46 4.2.1 Zusätzliche Sprachkonzepte von nesC führen zu zusätzlichen Joinpointmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2.2 Definition der Pointcutdeklarationssprache für nesC . . . . . . . . 50
4.2.3 Definition der Advicedeklarationssprache . . . . . . . . . . . . . 55
INHALTSVERZEICHNIS iii
5 Analyse des Aufbaus des nesC-Compilers und seines Frameworks 59
5.1 Das Build-Framework um den nesC-Compiler 59
5.2 Der nesC-Compiler 61
5.2.1 Aufbau 61
5.2.2 Lexer 61
5.2.3 Parser 62
5.2.4 Markieren der Module anhand der Konfigurationen 63
5.2.5 Generierung des Ausgabe-C-Codes 64
5.3 Die Eingabedatei des Parsergenerators yacc 64
6 Arbeitsweise der Compilererweiterung der aspektorientierten Spracher-
weiterung von nesC 67
6.1 Designentscheidung für eine Implementierung der Spracherweiterung
innerhalb des nesC-Compilers 67
6.2 Die Compilererweiterung für Pointcuts und Advices 69
6.2.1 Der Weg eines Aspektes 69
6.2.2 Überblick über die Arbeit der Compilererweiterung 70
6.3 Die Arbeit der Compilererweiterung für Pointcuts und Advices im Detail 71
6.3.1 Schritt 1: Laden der Aspekte 71
6.3.2 Schritt 2: AST-Aufbau für Aspekte 72
Arbeit des Lexers 72
Erweiterte und neue Knotentypen für den AST 73
Arbeit des Parsers 74
6.3.3 Schritt 3: Verbinden der Pointcuts mit ihren einzuwebenden Ad-
vices 76
6.3.4 Schritt 4: Weben 77
6.3.5 Schritt 5: Generierung der Ausgabedatei 79
6.4 Die Compilererweiterung für konfigurationsverändernde Anweisungen 80
6.5 Die Arbeit der Compilererweiterung für konfigurationsverändernde An-
weisungen im Detail 81
6.5.1 Arbeit des Lexers 81
6.5.2 Erweiterte und neue Knotentypen für den AST 81
6.5.3 Arbeit des Parsers 81
6.5.4 Durchführen der Änderungen der Konfigurationen 82
6.5.5 Übernahme des Wirings des Aspektes 82
7 Evaluation der Compilererweiterung 85
7.1 Zur Evaluation verwendeter Basiscode 85
7.2 Funktionalität der Aspekte 86
7.2.1 Logging durch die printf-Bibliothek 86
7.2.2 Logging durch Ausgabe von Informationen auf die Leds des Motes 86
7.2.3 Konfigurationsverändernde Anweisungen 87
7.3 Quellcode der Aspekte 87
7.3.1 Logging durch die printf-Bibliothek 87
7.3.2 Logging durch Ausgabe von Informationen auf die Leds des Motes 90
7.3.3 Konfigurationsverändernde Anweisungen 90
iv INHALTSVERZEICHNIS
7.4 Ergebnisse der Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . 91 7.4.1 Einwebhäufigkeit und Anzahl der gewebten Programmzeilen . . . 91 7.4.2 Laufzeitverhalten der Compilererweiterung . . . . . . . . . . . . 92 7.4.3 Konfigurationsverändernde Anweisungen . . . . . . . . . . . . . 92
8 Zusammenfassung und Ausblick 93
A Installationsanleitung 97
B Quellcode 99
Literaturverzeichnis 101
Quellcodedateiverzeichnis 106
Abbildungsverzeichnis 107
Danksagungen
Und Jesus antwortete und sprach zu ihnen: Habt Glauben an Gott! Wahrlich, ich sage euch: Wer zu diesem Berge spräche: Heb dich und wirf dich ins Meer!, und zweifelte nicht in seinem Herzen, sondern glaubte, dass geschehen werde, was er sagt, so wird’s ihm geschehen. (Die Bibel an Markus 11,22 und 23)
Ich danke Jesus für diese Worte, die er damals am Feigenbaum sprach und die mich durch mein Studium hindurch ermutigt haben, an den Bergen, die vor mir standen, nicht zu verzweifeln, sondern sie durch den Glauben Schaufel für Schaufel ins Meer zu versetzen.
Ich danke meinen Professoren und Dozenten, die dafür gearbeitet haben, immer interessante und verständliche Vorlesungen zu halten. Zu Beginn meines Studiums wusste ich dies nicht zu schätzen. Als ich jedoch einige Vorträge selbst halten musste, merkte ich, wie schwierig es ist, einen interessanten und verständlichen Vortrag zu halten.
Ich danke für diese Diplomarbeit auch ganz besonders Robert Sauter, der mir immer mit gutem Rat zur Seite gestanden hat.
Ich danke meinen Freunden in meiner Gemeinde, die mich an vielen Stellen meines Studiums begleitet haben. Ich danke meiner Familie, ganz besonders meinem Vater, für ihre Unterstützung.
Kapitel 1
Einleitung
In diesem Kapitel wird die aspektorientierte Programmierung für Sensormotes motiviert. Das Ziel der Diplomarbeit, die Entwicklung einer aspektorientierten Spracherweiterung für nesC und die Realisierung derselben, wird definiert. Ein Überblick über die Arbeit wird gegeben.
1.1 Motivation
Sensornetze sind drahtlos verbundene Netze bestehend aus einzelnen Knoten, welche Motes genannt werden. Ein Mote stellt dabei ein Computersystem dar, welches Daten über seine angeschlossenen Sensoren erfasst, verarbeitet und über seine Netzschnittstelle versendet. Auf den Motes eines Sensornetzes kommen dabei Programme zum Einsatz, welche von einem Entwickler für den Anwendungsfall des Sensornetzes spezifisch erstellt werden. Da Motes über geringe Hardwareressourcen verfügen, müssen diese Programme hochoptimiert kompiliert werden.
Eine der Programmiersprachen, welche für die Bedürfnisse von Sensormotes angepasst sind, ist die Programmiersprache nesC. nesC-Programme sind komponentenbasiert aufgebaut. Implementierungen innerhalb dieser Komponenten sind in C geschrieben. Wegen des komponentenbasierten Aufbaus ist es dem nesC-Compiler möglich, statisch hochoptimierte Programme zu erstellen.
Entwickelte Programme für Sensormotes müssen getestet werden, um ihren fehlerfreien Ablauf zu garantieren. Anhand von Loggingnachrichten kann der Entwickler feststellen, ob das Programm korrekt arbeitet. Dabei kann die Software eines Motes in drei unterschiedlichen Entwicklungsstufen getestet werden: in der Simulation, im Testbed und im Einsatz des Sensornetzes nach seinem Deployment. Während in der Simulation keine Motehardware benutzt wird, sondern nur in einer simulierten Umgebung getestet wird, exsistieren im Testbed ein oder mehrere reale Motes, auf denen das Programm zur Ausführung gebracht wird. Diese Motes sind jedoch zusätzlich über eine serielle Schnittstelle verbunden, über die Loggingnachrichten ausgegeben werden können. Wenn sich die Motes des Sensornetzes im Einsatz befinden, fällt jedoch auch diese Verbindung weg.
1
2 KAPITEL 1. EINLEITUNG
Die aspektorientierte Programmierung ist eine neue Programmierrichtung. Bei dieser befindet sich zusätzlicher Programmcode in sogenannten Aspekten. Dieser Programmcode wird durch entsprechende Definitionen in dem jeweiligen Aspekt in das Hauptprogramm - unter Umständen auch mehrmals - eingewebt, d.h. aus dem Hauptprogramm finden Aufrufe des Aspektprogrammcodes statt. Für jede der drei Entwicklungsstufen eines Programmes, welches auf Sensormotes zum Einsatz kommt, wird unterschiedlicher Testcode benötigt, um Loggingnachrichten auszugeben. Dieser Testcode muss durch den Entwickler manuell ausgetauscht werden, wenn die Stufe gewechselt wird. Die Motivation dieser Diplomarbeit ist es, eine aspektorientierte Sprache zu entwickeln, mit welcher definiert werden kann, wie dieser Testcode austauschbar mittels unterschiedlicher Aspekte eingewebt werden kann. Die aspektorientierte Sprache soll jedoch so allgemein gehalten werden, dass auch beliebige andere Funktionalitäten durch sie implementiert werden können.
1.2 Aufgabenstellung dieser Arbeit
Das Ziel dieser Diplomarbeit ist es, eine aspektorientierte Spracherweiterung für die Anwendung auf Sensormotes zu entwickeln und zu implementieren. Diese soll auf die Sprache nesC aufbauen.
Dafür ist es notwendig, den aktuellen Stand der Forschung von aspektorientierten Spracherweiterungen für unterschiedliche Sprachen zu recherchieren und deren Implementierung zu analysieren. Die hier gefundenen Erkenntnisse sollen auf den nesC-Compiler und das Umfeld der Sensornetze übertragen werden. Weiterhin wird das Design von aspektorientierten Sprachen betrachtet. Eine aspektorientierte Sprache für nesC wird definiert werden, die speziell an die Bedürfnisse von nesC angepasst ist. Der experimentelle Teil dieser Diplomarbeit umfasst die Planung und Durchführung einer exemplarischen Implementierung dieser Sprache. Aus dieser exemplarischen Implementierung werden Kenntnisse über die aspektorientierte Programmierung in nesC gezogen. Eine anschließende Evaluation zeigt die Vorteile der Realisierung der Spracherweiterung für Aspekte.
Als begleitendes Beispiel der aspektorientierten Programmierung wurde das Logging gewählt. Die Anwendungsmöglichkeiten der aspektorientierten Sprache sollen jedoch nicht hierauf beschränkt bleiben. Die Vorteile der Aspektorientierung sollen durch die Erweiterung voll nutzbar sein: Es wird gefordert, dass sich die Aspekte schnell ohne Änderungen am Basiscode ein- und ausschalten lassen, so dass Tests schnell durchgeführt werden können. Aspektcode soll bei ausgeschalteten Aspekt restlos aus dem Binärcode entfernt sein, so dasss CPU-, Speicher- und Energieressourcen beispielsweise durch ein ausgeschaltetes Logging nicht mehr belastet werden. Die Herausforderungen dieser Diplomarbeit liegen in unterschiedlichen Gebieten. Die Hauptherausforderung liegt darin, die aspektorientierte Sprache für die Programmiersprache nesC zu designen. Dies ist deshalb eine Herausforderung, da nesC im Gegensatz zu anderen Programmiersprachen das speziell auf hohe statische Optimierbarkeit abgestimmte Sprachfeature des Programmaufbaus aus Komponenten besitzt. Eine weitere Herausforderung ist es, eine Spracherweiterung dieser Sprache zu imple- mentieren, mit welcher Aspekte eingewebt werden können.
3 1.3. ÜBERBLICK ÜBER DIE ARBEIT
Für das Design der Sprache und ihre Realisierung als Spracherweiterung sind detallierte Kenntnisse über aspektorientierte Programmierung, das Design anderer aspekt-orientierter Sprachen, den Aufbau ihrer Implementierungen, das Design von nesC und den Aufbau des nesC-Compilers und seines Frameworks vonnöten. Innerhalb dieser Arbeit werden all diese Kenntnisse erarbeitet werden. Zusätzlich wird auch in die Themengebiete des Loggings und der Sensornetze eingeführt.
1.3 Überblick über die Arbeit
Dieses Kapitel 1 motiviert die aspektorientierte Spracherweiterung für nesC und beschreibt die Aufgabenstellung. Kapitel 2 führt in die Gebiete der Sensornetze, des Loggings und der aspektorientierten Programmierung ein. In Kapitel 3 werden zunächst verwandte Arbeiten zu dieser Arbeit im Bereich der Sensornetze vorgestellt. Dann werden Arbeiten und Implementierungen zum Thema Logging und aspektorientierte Spracherweiterungen verschiedener Sprachen analysiert. Aus diesen werden erste Schlussfolgerungen für eine Realisierung einer aspektorientierten Spracherweiterung für nesC gezogen. Auch wird das Sprachdesign von AspectJ, an welches sich viele aspektorientierte Sprachen anlehnen, vorgestellt. Composition Filters als Alternative zum Standardaspektmodell werden kurz besprochen. Kapitel 4 stellt das Design der Sprache nesC vor. Dann beschäftigt es sich auf der Basis von AspectJ mit dem Design der aspektorientierten Sprache für nesC. Dafür werden zunächst mögliche Jointpoints in nesC-Programmen gefunden. Dann werden Pointcuts und Advices für nesC definiert. In Kapitel 5 wird der interne Aufbau des Compilers von nesC sowie sein Framework beschrieben. Kapitel 6 beschäftigt sich schließlich mit dem Einweben der Aspekte der aspektorientierten Sprache mit Hilfe einer Compilererweiterung, welche die aspektorientierte Spracherweiterung implementiert. Auch Erkenntnisse, die während der Realisierung gezogen werden, werden hier vorgestellt. In Kapitel 7 wird die Implementierung der Spracherweiterung im Hinblick auf das Logging evaluiert. In Ka- pitel 8 werden eine Zusammenfassung, Schlussfolgerungen und ein Ausblick gegeben.
Kapitel 2
Grundlagen
Dieses Kapitel enthält Grundlageninformationen für das Verständnis dieser Diplomarbeit. Es wird in das Gebiet der Sensornetze eingeführt und deren Anforderungen und Anwendungsgebiete beschrieben. Das Konzept der aspektorientierten Programmierung wird vorgestellt. Über die Durchführung des Loggings mit Hilfe der aspektorientierten Programmierung und auch der Nutzen auf anderen Anwendungsgebieten wird die aspektorientierte Programmierung für Sensornetze weiter motiviert.
2.1 Drahtlos verbundene Sensornetze
2.1.1 Motes als Knoten eines Sensornetzes
Drahtlos verbundene Sensornetze (Wireless Sensor Networks) [30] sind Netze bestehend aus einzelnen Knoten, welche Motes genannt werden. Das Netz wird mit Hilfe von Funkverbindungen aufgebaut. Ein Mote stellt ein kleines autarkes Computersystem dar. Ein Mote besteht - wie Abbildung 2.1 veranschaulicht - aus einer CPU mit nicht-flüchtigem und flüchtigem Speicher für Programm und Daten. Diese CPU hat Zugriff auf einen oder mehrere Sensoren als Eingabegeräte und auf ein Funkinterface, über welches der Mote mit anderen Motes Nachrichten austauschen kann. Zusätzlich kommt eine Energieversorgung meist in Form einer Batterie hinzu. Von diesem Standardaufbau kann es Abweichungen geben. Beispielsweise ist es möglich, dass ein Mote als ein Gateway für Nachrichten innerhalb des Sensornetzes nach außen dienen soll und deswegen über keine Sensoren verfügt; dafür jedoch meist über ein zweites Netzinterface. Auch gibt es Spezialanwendungen, in welchen Motes über Steuerungshardware verfügen oder eine Ausgabehardware verwenden, mit der sie auf ihre Umwelt Einfluss nehmen können. So ist eine Steuerung z.B. von Ventilen durch ein Mote durchführbar oder ein Mote kann selbständig seine Position ändern [66]. Auch kann eine simple Darstellung von Daten über die Ausgabe-Leds von einem Mote durchgeführt werden [1]. Abbildung 2.2 zeigt das Foto eines Motes. Der dargestellte Mote, welcher von Ambient Systems B.V. vertrieben wird, kommt in Sensornetzen zur Verfolgung
5
6 KAPITEL 2. GRUNDLAGEN
von Warenströmen im Handel zum Einsatz. Es handelt sich dabei um einen Mote von normaler Größe. Es ist auch möglich, kleinere Motes herzustellen. Mehrere Motes bauen untereinander ein Netz bestehend aus drahtlosen Verbindungen auf. Der Zweck eines solchen Netzes ist es, Daten an unterschiedlichen Orten zu erfassen und über das Netz zur Sammlung und Auswertung an eine Datensenke zu senden. Diese Datensenke ist meist ein Gateway, welches Daten entweder über ein weiteres Netz oder auch direkt beispielsweise an einen PC weiterleitet. Dieser PC stellt meist die Daten für den Benutzer visuell dar und übernimmt auch eine eventuelle Archivierung der Daten. In vielen Fällen werden die Steuerkommandos für das Sen-sornetz manuell in den über das Gateway angeschlossenen PC eingegeben oder aber auf diesem PC automatisch berechnet. In Abbildung 2.3 ist verdeutlicht, welchen exemplarischen Weg erfasste Sensordaten durch ein Netz nehmen könnten. Die Daten werden von den Sensoren des linken Motes erfasst, innerhalb dieses Motes verarbeitet und in Form von Funknachrichten über das Netz nach rechts zur Datensenke geleitet. Steuerungskommandos nehmen genau den umgekehrten Weg. Es ist die Aufgabe eines Netzprotokolles, die Nachrichten von Mote zu Mote an das Zielmote zu leiten. Jedoch gibt es für diese Datenströme Ausnahmen. Manchmal macht es Sinn Daten direkt zu verwerten, um entsprechende Steuerungshardware an den Motes anzusprechen, wie oben bereits erwähnt. Dies macht beispielsweise Sinn bei der Anwendung von Sensornetzen in selbstheilenden Minenfeldern [66]. Manchmal können Daten auch direkt im Sensornetz über Leds angezeigt werden, ohne dass eine Datensenke im Sen-sornetz zur Verfügung stehen muss. Leds direkt an den Motes können zum Beispiel zur Unterstützung des Zusammenbaus von Ikea-Möbeln verwendet werden, indem diese dem Heimwerker Anweisungen geben [1].
7 2.1. DRAHTLOS VERBUNDENE SENSORNETZE
2.1.2 Anforderungen an Sensornetze
An Sensornetze werden unterschiedliche Anforderungen gestellt. Die Hauptanforderung ist, dass Daten möglichst ressourcenschonend erfasst und übertragen werden sollen. Der Grund hierfür ist zum einen, dass die auf den Motes angebrachten CPUs und auch die anderen Komponenten beispielsweise das Funkinterface keine hohe Leistung bieten, da sie günstig sein müssen. Da Motes in hoher Stückzahl hergestellt werden müssen, wird mit weniger leistungsfähigen Komponenten an den Kosten der Motes gespart. Die Kosten der Motes machen fast die gesamten Kosten eines Sensornetzes aus. Auch machen eine günstige CPU und günstige weitere Komponenten eventuell die Anwendung eines Sensornetzes erst wirtschaftlich. Ein anderer Grund für das Schonen von Ressourcen ist, dass nicht viel Energie zur Verfügung steht, da Motes normalerweise über Batterien betrieben werden. Sensornetze sollen in ihrer Umwelt meist eine lange Zeit im funktionsfähigen Zustand verweilen. Ein Austauschen der Batterien ist teuer, da Motes häufig in unwegsamem Gelände platziert sind oder sogar gar nicht erreicht werden können. Je weniger Energie ein Mote verbraucht, desto länger werden
8 KAPITEL 2. GRUNDLAGEN
seine Batterien Energie liefern, desto länger bleibt der Mote einsatzbereit und desto mehr Nutzen bringt das Netz. Es gibt auch Motes, welche mit erneuerbaren Energien wie Schwingungen der Umwelt, Solarenergie, Temperatur- und Druckschwankungen oder durch die Bewegungsenergie von Flüssigkeiten oder Gasen betrieben werden bzw. deren aufladbare Batterien dadurch neue Energie erhalten. Jedoch sind auch diese Energien nur begrenzt verfügbar, sodass auch hier nicht unbegrenzt Leistung genutzt werden kann.
Das Benutzen des Funkinterfaces verbraucht sowohl zum Senden als auch zum Empfangen die meiste Energie. Deshalb sollte dieses Interface möglichst wenig benutzt werden. Um dies zu erreichen, ist es wünschenswert, sowohl die Erfassung der Daten wie auch das Versenden und Weiterleiten der Daten anwendungsspezifisch zu gestalten, um nicht unnötig viele Daten erfassen oder versenden zu müssen. Aus genau diesem Grunde wird auf den Motes eines Netzes ein Programm installiert, welches entsprechend der Anwendung spezifisch ist und intelligent die Sensordaten erfasst, vorverarbeitet und versendet oder auch schon verwertet. Einzelne Knoten des Netzes können Nachrichten weiterleiten, wobei es auch sinnvoll sein kann, dass Motes Nachrichten interpretieren und mehrere Nachrichten in einer Nachricht zusammengefasst weiterleiten.
Es ist die Aufgabe eines Programmierers, entsprechende Programme zu schreiben und auch zu testen. Dabei kann ein Mote nicht einzeln gesehen werden, sondern das ganze Netz muss betrachtet werden. Auch ist es nicht praktikabel, Tests nur auf Simulationen beruhen zu lassen, da Motes und deren Funkübertragungen Umwelteinflüssen ausgesetzt sind und ein installiertes Netz sich anders verhält als eine Simulation desselben. Auch kann ein installiertes Netz sich anders verhalten als dasselbe im Testbed. Somit sind neue Tools für den Programmierer zu entwickeln, welche ihn in der Pro- grammierung und in der Observation eines Sensornetzes unterstützen.
9 2.1. DRAHTLOS VERBUNDENE SENSORNETZE
Weitere Anforderungen werden an das Netz und seine Protokolle selbst gestellt. Das Netz soll ad hoc aufgebaut werden können. Knoten sollen selbst aufgrund der Analyse von Signalstärken und Laufzeiten ihre Position bestimmen können. Zusätzlich besteht ein solches Netz eventuell aus tausenden von Knoten. Das Netz soll den Ausfall eines Knotens erkennen und selbstständig ausgleichen können. Weiterhin haben Sen-sornetze andere Verkehrsparameter als traditionelle Netze wie das Internet. Nach einer langen, sehr ruhigen Phase können plötzlich sehr viele Nachrichten gesendet werden. Dies ist dann der Fall, wenn ein Sensornetz seine Umgebung observiert und das zu observierende Ereignis, auf welches es programmiert ist, eintritt und von sehr vielen Knoten gleichzeitig erkannt wird. Protokolle müssen diesem Problem gewachsen sein. Um all diesen Anforderungen zu begegnen, werden neue Konzepte benötigt. Die Implementierungen dieser müssen unter realen Bedingungen im Feld getestet werden. Traditionelle, sich auf PCs beziehende Testmethoden können nicht mehr verwendet werden, da es sich bei Sensornetzen um viele einzelne Motes handelt, die sich zusätzlich noch voneinander entfernt befinden. Die Anforderungen an die Testumgebung unterscheiden sich somit rudimentär von den Anforderungen an eine PC-Testumgebung. Es müssen für Entwickler neuartige Tools bereitgestellt werden. Diese Diplomarbeit entwickelt eine aspektorientierte Spracherweiterung, um dem Entwickler Möglichkeiten an die Hand zu geben, Logging innerhalb eines Sensornetzes komfortabel zu implementieren.
2.1.3 Anwendungsgebiete von Sensornetzen
Die Anwendungsgebiete [30, 53, 26] von Sensornetzen sind vielfältig. Dennoch kann man ihre Anwendung darin verallgemeinern, dass immer aus einem bestimmten, von den Sensormotes abgedeckten Gebiet Daten erfasst werden. Drahtlose Sensornetze werden häufig einer drahtgebundenen Variante vorgezogen, da die fehlende Verkabelung Kosten spart und des Weiteren die Installation vereinfacht bzw. manchmal erst möglich macht. So kann in manchen Fällen eine Installation durchgeführt werden, indem die einzelnen Sensormotes von einem unbemannten Flugzeug abgeworfen werden [49]. Bei einem Abwurf aus einem Flugzeug ist eine Verkabelung nicht möglich. Um eine Idee von den Anwendungsgebieten zu erlangen, werden im Folgenden einige exemplarische Anwendungsgebiete aufgezeigt. Aus den einzelnen Anwendungsgebieten sind wiederum nur exemplarische Arbeiten herausgegriffen. In einzelnen Gebieten ist die Forschung schon weiter fortgeschritten. In anderen befindet sie sich erst im Anfangsstadium. Um in den weiter fortgeschrittenen Gebieten einen umfassenden Überblick zu erlangen, muss in diesen tiefer recherchiert werden. Da diese Arbeit jedoch keine Recherche über Sensornetz-Anwendungsgebiete darstellt, wird meine Recherche nur einem Überblick gerecht.
Sensornetze werden gerne benutzt, um Daten in einem Gelände zu erfassen, beispielsweise Temperaturen, Luftfeuchtigkeit, Luftdruck, Erschütterungen, Bewegungen über Infrarotsensoren oder Gasbestandteile. So kann ein Sensornetz in einem wald-brandgefährdeten Gebiet installiert werden und einen Waldbrand entdecken [22]. In dieses Netz können langjährige Erfahrungen über Waldbrände, die schon auf traditionellem Weg gemacht wurden, eingearbeitet werden, sodass Waldbrände sehr früh detektiert werden können, Alarm gegeben wird und entsprechend eine effektive Be- kämpfung stattfinden kann, sodass große kostbare Waldflächen vom Feuer verschont
10 KAPITEL 2. GRUNDLAGEN
bleiben. Auch kann ein Sensornetz bei dem Anbau von beispielsweise Wein [10] genutzt werden. Hier werden die Arbeiter mit Informationen über die Umgebung der Reben und Trauben versorgt. Beispielsweise ist es denkbar, anhand von bestimmten Faktoren zu bestimmen, wann die Trauben reif sind oder Ungeziefer zu bekämpfen ist. Selbstverständlich sind Sensornetze auch für die Beobachtung aller anderen Nutzpflanzen oder Zierpflanzen geeignet. Sensornetze lassen sich auch einsetzen, um innerhalb eines Geländes Bewegungen von Fahrzeugen [49] zu beobachten. Hier werden Magnetfelder, welche von vorbeifahrenden Fahrzeugen erzeugt werden, detektiert. Selbstverständlich könnten auch andere Typen von Sensoren verwendet werden, um z.B. Personen zu verfolgen. Somit sind Sensornetze für Sicherheitsanwendungen im militärischen und zivilen Bereich interessant.
Auch werden Sensornetze zur Beobachtung von Tieren eingesetzt. Dabei werden sowohl Nutztiere als auch wild lebende Tiere beobachtet. Hier ist es möglich, eine Geländeüberwachung durchzuführen, in welcher Sensoren im Gelände platziert werden. Jedoch ist auch eine direkte Überwachung von Tieren möglich, indem die Sensoren von den Tieren getragen oder sogar geschluckt werden und Daten aus ihrem Magen liefern [44]. Dabei lässt sich anhand der Sensordaten auf die aktuelle Gesundheit des Tieres schließen. Auf dem Great Duck Island wurden Tierbeobachtungen an Vögeln durchgeführt [42], indem Sensormotes in deren Nistplätze installiert wurden. So konnten die scheuen Vögel über einen langen Zeitraum beobachtet werden und es war möglich, wertvolle Informationen über sie zu sammeln. Weiterhin lassen sich Sensornetze zur Beobachtung von Warenströmen im Handel einsetzen, beispielsweise um festzustellen, ob die Kühlkette [28] für verderbliche Waren unterbrochen worden ist. Noch werden in diesem Bereich RFID-Tags verwendet. RFID-Tags sind Schaltkreise in denen Informationen gespeichert und berührungslos ausgelesen werden können. Diese Datenspeicherung kann jedoch nur passiv an-gewandt werden. Es wird ein externes Lese- und Schreibgerät benötigt. Der Grund, weshalb in diesem Bereich noch keine Sensornetze eingesetzt werden, sind Kostengründe. Sensornetze würden jedoch den großen Vorteil bringen, über längere Distanzen Informationen senden zu können als die RFID-Tags; und sie würden den noch größeren Vorteil bringen, ein aktives Logging beispielsweise der Temperatur durchführen zu können. Weiter die Kosten für die Hardware von Motes zu senken, ist als eine Herausforderung an das Design von Sensornetzen zu sehen. Sensornetze leisten in Katastrophenfällen wertvolle Dienste, indem sie wichtige Informationen über die Unglücksstelle schnell bereit stellen. Beispielsweise können Sensornetze in Tunneln installiert werden [43]. Kommt es zu einem Unfall, so kann das Sensornetz mit Sensormotes, welche sich an den verunglückten Fahrzeugen oder gar an den Fahrzeuginsassen befinden, kommunizieren, um deren Zustand zu erfahren und diesen an den Rettungsdienst weiter zu vermitteln, sodass schnell und effektiv geholfen werden kann. Nach Erdbeben [33] oder auch bei steigendem Alter des Bauwerkes ist die Struktur oder das Baumaterial geschädigt. Leider kann dies von außen an einem Gebäude oder auch beispielsweise einer Brücke schlecht erkannt werden. Es kann auf Erschütterungsdetektionen an verschiedenen Stellen des Bauwerkes zur Vorhersage eines Einsturzes zurückgegriffen werden, welche mit Sensormotes geschehen kann. Kabellose Sensornetze können zur Beobachtung von Vulkanen eingesetzt werden, um Eruptionen vorherzusagen [64]. Hierfür werden Infraschall oder Schallwellen- Detektoren an den Motes verwendet.
11 2.1. DRAHTLOS VERBUNDENE SENSORNETZE
Auch zum Überwachen von Patienten in Krankenhäusern [55] können Sensornetze genutzt werden. So können Sensoren, die beispielsweise ein EKG erstellen, an den Patienten angebracht werden und so drahtlos und kontinuierlich den Gesundheitszu-stand übermitteln. Auch ist es möglich, mittels Sensornetzen den aktuellen Standort eines Patienten immer abfragbar zu haben. Krankenhäuser sind komplexe Systeme, in welchen unterschiedlichste Untersuchungen für Patienten gemanagt werden müssen. Somit unterstützt ein Sensornetz das Personal, indem es Informationen darüber bereitstellt, wo sich ein Patient mit seinem Bett gerade befindet. Andere Anwendungsgebiete im Krankenhaus sind zusätzlich denkbar.
Die Einsatzgebiete von Sensornetzen sind vielfältig und werden in den kommenden Jahren in viele Gebiete weiter Einzug halten und auch neue Gebiete erobern.
2.1.4 Weitere Miniaturisierung bis hin zum Smart Dust
Die Einsatzgebiete von Sensornetzen weiten sich noch weiter aus, wenn man auf das noch mögliche Miniaturisierungspotential von Motes schaut. Häufig sollen die Sen-soren von der Umwelt nicht wahrgenommen werden, was ein Grund zur weiteren Miniaturisierung ist. Auch bringt eine weitere Miniaturisierung der Hardware wei- tere Einsparungen bei ihren Kosten und auch weitere Energieeinsparungen. Je wei-
12 KAPITEL 2. GRUNDLAGEN
ter miniaturisiert wird, desto näher rückt die Vision des intelligenten Staubes (Smart Dust) [29], wie sie das Bild in Abbildung 2.4 veranschaulicht.
2.1.5 Neue Anwendungsgebiete durch Miniaturisierung
Auch wenn heutzutage noch nicht dieser Stand erreicht ist, wurden dennoch schon einige interessante Anwendungsgebiete [29, 48] entdeckt, die sich mit konsequenter Miniaturisierung und kostengünstiger Massenanfertigung erschließen: Intelligenter Staub kann so noch besser für militärische Zwecke eingesetzt werden oder aber auch, um wieder Daten aus der Umwelt zu sammeln. Diesmal kann der Staub sogar verwendet werden, ohne dass er Einfluss auf seine jeweilige Umgebung hat, wie beispielsweise in einem Windkanal. Da die Motes nunmehr als Staub vorliegen, können sie fließend mit der Umwelt mitbewegt werden, wie beispielsweise in Sandstürmen oder Meeresströmungen. Ein weiterer Vorteil des Staubes ist, dass die Partikel in großer Anzahl vorliegen. So kann der zu überwachende Bereich immer besser abgedeckt werden. Weiterhin können Gegenstände in Zukunft mit günstigen Sensormotes versehen werden, welche Informationen über den Gegenstand bereithalten. Ähnlich einem RFID-Tag kann ein etwas leistungsfähigerer Sensormote für einen Diebstahlschutz sorgen, indem er sich an entsprechenden Stellen meldet, an denen er vorbei getragen wird, wenn der Gegenstand als gestohlen gemeldet ist. Intelligenter Staub eignet sich auch dafür, um an kleinen Tieren oder auch am Menschen angebracht zu werden. So wäre durch das Detektieren der aktuellen Position von Sensormotes, welche an den Fingerkuppen einer Hand angebracht sind, eine Implementierung einer virtuellen Tastatur möglich. Durch anbringen von Sensormotes im Gesicht eines Patienten, der unter Sprachstörungen leidet, kann dieser mit Hilfe des Computers mit seiner Umgebung über Gesichtsausdrücke, welche das Netz der Motes erfasst, kommunizieren.
2.1.6 Die Sprache nesC und das Betriebssystem TinyOS
Um höchstmögliche Energieeffizienz und geringe Hardwarekosten zu gewährleisten, muss das Programm, welches auf den Motes installiert wird, hochoptimiert vorliegen, um so wenig Ressourcen wie möglich zu verbrauchen. Es wird auf dem Mote ein minimales Betriebssystem installiert, welches monolithisch schon zur Compilezeit mit dem auszuführenden Programm verbunden wird. Beides, Betriebssystem und Programm, werden statisch kompiliert, was eine hohe Optimierung der Funktionsaufrufe schon vor dem Aufspielen auf den Mote möglich macht.
Für eine hohe Optimierung der auf den Motes ausgeführten Programme wurde die Programmiersprache nesC und das darin implementierte Betriebssystem TinyOS entwickelt. nesC leistet die oben erwähnte statische Verknüpfung. Ein Binärfile des Programmes statisch verknüpft mit dem Betriebssystem TinyOS wird auf dem Mote zur Ausführung gebracht. Thema dieser Diplomarbeit ist die Entwicklung einer aspek- torientierten Spracherweiterung für die Sprache nesC.
Arbeit zitieren:
Christoph Tornau, 2008, Analyse, Design und Implementierung einer aspektorientierten Erweiterung der Programmiersprache nesC im Besonderen für das Logging in Sensornetzen, München, GRIN Verlag GmbH
Dieser Text kann über folgende URL aufgerufen und zitiert werden:
Einbetten
DOI
Formatvorlage (Microsoft Word) für eine Diplomarbeit, Masterarbeit, Ha...
Für MS Word 2003 - Update 2010
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 25 Seiten
Formatvorlage (OpenOffice) für eine Diplomarbeit, Masterarbeit, Hausar...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 35 Seiten
Formatvorlage / Vorlage zur Erstellung einer Diplomarbeit, Bachelorarb...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 15 Seiten
Formatvorlage / Vorlage für eine Diplomarbeit / Hausarbeit
Für MS Word 2007 - dotx
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 25 Seiten
Anleitung zum Erstellen schriftlicher Arbeiten: Der Aufbau einer wisse...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 20 Seiten
Erstellen einer schriftlichen Hausarbeit
Vorlagen, Muster, Formulare, Infobroschüren
Hausarbeit, 14 Seiten
Grundtechniken wissenschaftlichen Arbeitens
Bibliografieren - Reden - Schr...
Vorlagen, Muster, Formulare, Infobroschüren
Skript, 46 Seiten
Ratgeber zur Erstellung wissenschaftlicher Arbeiten. Diplomarbeiten - ...
Vorlagen, Muster, Formulare, Infobroschüren
Ausarbeitung, 39 Seiten
Informatik - Software: Analyse, Design und Implementierung einer aspektorientierten Erweiterung der Programmiersprache nesC im Besonderen für das Logging in Sensornetzen ist nun auf dem Buchmarkt erhältlich
Informatik - Software: neuer Titel erschienen: Analyse, Design und Implementierung einer aspektorientierten Erweiterung der Programmiersprache nesC im Besonderen für das Logging in Sensornetzen
Christoph Tornau hat einen neuen Text hochgeladen
Design and Analysis of Integrator-Based Log-Domain Filter Circuits
Vincent W. Leung, Gordon W. Roberts
Objektorientierte Analyse und Design von Kopf bis Fuß
Brett D. McLaughlin, Gary Pollice, David West, Lars Schulten
ABAP-Programmierung für den Vertrieb mit SAP - Kundeneigene Erweiterun...
Petra Hunger, Thomas Klein
NESC-III Inspection Task Group Final Report
Inspection Results Obtained in...
. Joint Research Centre, European Commission
Practical Aspects of Embedded System Design using Microcontrollers
Jivan S. Parab, Santosh A. Shinde, Vinod G. Shelake, Rajanish K. Kamat, Gourish M. Naik
0 Kommentare