Hallo Gast, Sie sind nicht angemeldet.

Datenaustausch

Von Johannes Dörr am 13.06.2009, aktualisiert am 13.06.2009 um 10:18 Uhr

Datenaustausch zwischen Modulen

Während der Laufzeit des Systems haben die Module zwei Möglichkeiten, Daten miteinander auszutauschen. Entweder sie transferieren Datenstrings, oder sie erstellen, schreiben und lesen Variablen. Die MC bietet einige Datenbank-Funktionen. Variablen können von allen Modulen gelesen und je nach Zugriffsparameter auch geschrieben werden. Transfers sind normalerweise an bestimmte Module gerichtet, es gibt aber auch Broadcasts, die alle Module benachrichtigen.

Welche Methode man verwendet, ist natürlich von der Anwendung abhängig. Prinzipiell lässt sich alles, was mit Variablen geht, auch mit einem einfachen Transfer bzw. Broadcast lösen. Arbeiten jedoch mehrere MCs in einem Netz, ist es nicht mehr ganz egal, wofür man sich entscheidet.

Der MultiMC-Mode - Datenaustausch zwischen den Einheiten

Die oben bereits angesprochene Vernetzung mehrerer MCs nennt sich MultiMC-Mode. Wie die Kommunikation zwischen MC und Modulen funktioniert auch er mit Netzwerkprotokollen wie TCP/IP. Roboter müssen also zum Beispiel über WLan miteinander vernetzt sein. Im Folgenden werde ich erläutern, wie Roboter mit seiner Hilfe im Team arbeiten können.

Zunächst erweitert der MultiMC-Mode schlicht die Reichweite der Variablen und Transfers. Sind mehrere MCs vernetzt, so kann ein Modul nicht nur Daten an ein benachbartes Modul, das an derselben MC angeschlossen ist, sondern auch an ein entferntes Modul senden, das an einer anderen MC eingeloggt ist.

Mit Variablen verhält es sich ähnlich. Erstellt ein Modul eine Variable, legt es dabei fest, ob es sich um eine lokale oder öffentliche Variable handelt. Ist die Variable öffentlich, ist sie in dem gesamten Netz sichtbar. Es wird also auf allen anderen MCs eine Variable desselben Namens erstellt. Ändert ein Modul den Variablenwert auf seiner MC, so ändern sich dieser auch auf allen anderen MCs.

Problematisch wird das Ganze, wenn zeitweise keine Verbindung zwischen einzelnen MCs besteht. In diesem Fall will beispielsweise ein Modul Daten an ein entferntes Modul senden. Die MC nimmt den Antrag auf und versucht nun, mit der Ziel-MC Kontakt aufzunehmen. Gelingt dies, so werden die Daten weitergeleitet. Die andere MC schickt die Daten dann an das Ziel-Modul.

Ist jedoch keine Verbindung vorhanden, so benachrichtigt die MC das Sender-Modul, dass die Zustellung der Daten aufgeschoben wurde. Diese werden nun zwischengespeichert und schließlich, wenn wieder eine Verbindung vorhanden ist, gesendet.

Die Aktualisierung von Variablenwerten funktioniert nur in Verbindung mit einer Zeitmarkierung, die angibt, wie aktuell ein bestimmter Wert ist. Wenn sich also zwei MCs nach einer Unterbrechung der Verbindung wieder treffen und ihre Variablenwerte wieder abgleichen wollen, so muss der Wert übernommen werden, der jünger ist.

Die Kommunikation über Variablen hat den Vorteil, dass bei der Synchronisation immer nur die aktuellen Daten übertragen werden. Begegnen sich also zwei MCs, bei denen eine Variable kürzlich mehrfach geändert wurde, so überträgt diese nun den aktuellen Wert. Waren es jedoch keine Variablenänderungen sondern Transfers, so werden alle Transfers durchgeführt, obwohl einige davon alte Daten übertragen.

Grob kann man sagen, dass Variablen verwendet werden, wenn Zustände abgespeichert werden sollen, wie zum Beispiel die Raumtemperatur. Es wäre nicht sinnvoll, bei der Synchronisation immer alle Temperaturänderungen der letzten halben Stunde zu übertragen, sondern den letzten, aktuellen Wert. Transfers sind hingegen für Ereignisse gedacht. Wenn alle Module benachrichtigt werden sollen, wenn die Temperatur einen bestimmten Wert übersteigt, kann man bei einem Transfer sicher sein, dass er synchronisiert wird, auch wenn die Temperatur mittlerweile wieder gesunken ist.