MaDeCo: Unterschied zwischen den Versionen
Reini (Diskussion | Beiträge) |
Alois (Diskussion | Beiträge) |
||
| (16 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
MaDeCo ist ein sehr einfaches textbasiertes Protokoll für die Kommunikation zwischen den Beteiligten im [[RoLoMa]] Projekt, den [[NIBObee]] Einheiten und der Basisstation, dem [[LPC2478]]. | MaDeCo ist ein sehr einfaches textbasiertes Protokoll für die Kommunikation zwischen den Beteiligten im [[RoLoMa]] Projekt, den [[NIBObee]] Einheiten und der Basisstation, dem [[LPC2478]]. | ||
| Zeile 8: | Zeile 6: | ||
== Format == | == Format == | ||
Eine Nachricht besteht aus genau zwei Datensätzen, ein Datensatz besteht jeweils aus einem 3 Zeichen breiten Header Teil, | Eine Nachricht besteht aus genau zwei Datensätzen, ein Datensatz besteht jeweils aus einem 3 Zeichen breiten Header Teil, einem 2 Zeichen breiten Datenteil (je nach Kommando optional oder mandatory) und einem Zeilenende ("\n"), das als einzelnes Zeichen CR (0x0d) realisiert ist. | ||
Beide Teile der Nachricht werden unmittelbar hintereinander gesendet, also z.B. als ''SEQ13\nOPMSM\n''. | |||
Eine Nachricht, wie sie ein Sender erstellt, besteht aus: | Eine Nachricht, wie sie ein Sender erstellt, besteht aus: | ||
| Zeile 14: | Zeile 14: | ||
<Command> | <Command> | ||
;<Sequence> | |||
: besteht aus dem Header ''SEQ'', der Datenteil aus einer Nummer zwischen 1 und 99. | |||
;<Command> | |||
: besteht aus dem 3 Zeichen langen [[MaDeCo#Commands|Command-Code]], und einem entsprechenden Datenteil. | |||
Eine Nachricht muss mit einer Antwort quittiert werden. Diese besteht aus: | Eine Nachricht muss mit einer Antwort quittiert werden. Diese besteht aus: | ||
| Zeile 21: | Zeile 23: | ||
<Acknowledge Code> | <Acknowledge Code> | ||
;<Acknowledge> | |||
: besteht aus dem Header ''ACK'' und der zu bestätigenden Sequence Number. | |||
;<Acknowledge Code> | |||
: besteht aus den Header ''ACC'' und dem [[MaDeCo#Acknowledge Codes|Code]]. | |||
Beispiel sind be den jeweiligen [[MaDeCo#Use Cases|Use Cases]] zu finden. | |||
=== Commands === | === Commands === | ||
EOC ... end of communication, signalisiert das Ende einer Kommunikation | EOC ... end of communication, signalisiert das Ende einer Kommunikation | ||
OPM ... Operation Mode (siehe Betriebsmodus) | OPM ... Operation Mode (siehe [[MaDeCo#Betriebsmodus|Betriebsmodus]]) | ||
WAP ... Waypoint (siehe Wegpunkte) | WAP ... Waypoint (siehe [[MaDeCo#Wegpunkte|Wegpunkte]]) | ||
DIR ... Angabe der Richtung im GO Betriebsmodus (siehe Kürzester Weg) | DIR ... Angabe der Richtung im GO Betriebsmodus (siehe Kürzester Weg) | ||
| Zeile 50: | Zeile 40: | ||
01 .. unknown Command | 01 .. unknown Command | ||
02 .. invalid data | 02 .. invalid data | ||
03 .. overflow (kann z.B. derzeit keine weiteren Richtungsanweisungen entgegennehmen) | |||
11 .. unbekannter Betriebsmodus (e.g. OPMXX) | 11 .. unbekannter Betriebsmodus (e.g. OPMXX) | ||
21 .. | 21 .. command refused, Labyrinth erkunden (OPMSM) vor [[NIBObee#Kalibrierung]] (OPMGA) | ||
=== Betriebsmodus === | |||
GA ... Kalibrieren (siehe [[NIBObee#Kalibrierung]]) | |||
SM ... Labyrinth erkunden | |||
GO ... kürzesten Weg nehmen (siehe Kürzester Weg) | |||
=== Wegpunkte === | |||
Die Übertragung eines Wegpunkts erfolgt durch Angabe der Richtung (S,W,N,E), gefolgt von der Anzahl der Streckenteile. | |||
Beispiel: WAPS4 der Wegpunkt befindet sich 4 Streckenteile südlich des zuletzt übertragenen Wegpunkts | |||
== Ablauf == | == Ablauf == | ||
| Zeile 59: | Zeile 59: | ||
Kommunikationen überschneiden sich nicht, das bedeutet, es findet zu jedem Zeitpunkt nur eine Kommunikation zwischen den Beteiligten statt. Daher ist auch zu jedem Zeitpunkt genau ein Teilnehmer der Sender, und ein Teilnehmer der Empfänger. | Kommunikationen überschneiden sich nicht, das bedeutet, es findet zu jedem Zeitpunkt nur eine Kommunikation zwischen den Beteiligten statt. Daher ist auch zu jedem Zeitpunkt genau ein Teilnehmer der Sender, und ein Teilnehmer der Empfänger. | ||
== | == Use Cases == | ||
Im folgenden werden Beispiele für die Kommunikation der unterschiedlichen Betriebsarten dargestellt. Daten vom Board werden normal, die von der NIBObee '''fett''' dargestellt. | |||
=== Kalibrieren === | |||
Beim Kalibrieren wird das Kommando vom Board an die NIBObee geschickt und auch bei Erhalt sofort quittiert (sonst würde es zu einem Timeout kommen). Nachdem die Kalibrierung abgeschlossen ist wird die Verbindung getrennt. | |||
''Beispiel:'' | |||
SEQ1 | |||
OPMGA | |||
'''ACK1''' | |||
'''ACC00''' | |||
'''SEQ2''' | |||
'''EOC''' | |||
ACK2 | |||
ACC00 | |||
=== Labyrinth erkunden=== | |||
Das Kommando wird vom Board an die NIBObee geschickt und auch bei Erhalt sofort quittiert (es muss vorher allerdings eine Kalibrierung durchgeführt worden sein). Danach werden laufend die Punkte geschickt die abgefahren werden. Wenn das ganze Labyrinth erfasst wurde wir die Kommunikation wieder beendet. | |||
''Beispiel:'' | |||
SEQ1 | |||
OPMSM | |||
'''ACK1''' | |||
'''ACC00''' | |||
'''SEQ2''' | |||
'''WAPN3''' | |||
ACK2 | |||
ACC00 | |||
'''SEQ3''' | |||
'''WAPE1''' | |||
... | |||
'''SEQ32''' | |||
'''EOC''' | |||
ACK32 | |||
ACC00 | |||
== Kürzester Weg == | === Kürzester Weg === | ||
Hier werden Richtungsanweisungen übertragen, die es der [[NIBObee]] ermöglichen, in einem Labyrinth den kürzesten Weg zu nehmen. | Hier werden Richtungsanweisungen übertragen, die es der [[NIBObee]] ermöglichen, in einem Labyrinth den kürzesten Weg zu nehmen. Die Richtungen werden wieder mit Himmelsrichtungen beschrieben, diesmal allerdings ohne Längenangabe da immer bis zur nächsten Kreuzung gefahren wird. | ||
Beispiel | In dem Beispiel wird der kürzeste Weg als S(üd)-W(est)-N(ord)-W(est) angegeben: | ||
SEQ1 | SEQ1 | ||
OPMGO | OPMGO | ||
'''ACK1''' | |||
'''ACC00''' | |||
SEQ2 | SEQ2 | ||
DIRS | DIRS | ||
'''ACK2''' | |||
'''ACC00''' | |||
SEQ3 | SEQ3 | ||
DIRW | |||
'''ACK3''' | |||
'''ACC00''' | |||
SEQ4 | |||
DIRN | DIRN | ||
'''ACK4''' | |||
'''ACC00''' | |||
SEQ5 | |||
DIRW | DIRW | ||
'''ACK5''' | |||
'''ACC00''' | |||
SEQ6 | SEQ6 | ||
EOC | EOC | ||
'''ACK6''' | |||
'''ACC00''' | |||
[[Kategorie:FH]] | |||
Aktuelle Version vom 26. Juni 2011, 23:20 Uhr
MaDeCo ist ein sehr einfaches textbasiertes Protokoll für die Kommunikation zwischen den Beteiligten im RoLoMa Projekt, den NIBObee Einheiten und der Basisstation, dem LPC2478.
Rollen
Es gibt unter den Beteiligten zwei festgelegte Rollen, Sender und Empfänger. Der Sender überträgt Information, der Empfänger hingegen hat eine überwiegend passive Funktion, er quittiert Nachrichten und übermittelt einen Acknowledge Code. Während der Kommunikation werden diese Rollen nicht gewechselt.
Format
Eine Nachricht besteht aus genau zwei Datensätzen, ein Datensatz besteht jeweils aus einem 3 Zeichen breiten Header Teil, einem 2 Zeichen breiten Datenteil (je nach Kommando optional oder mandatory) und einem Zeilenende ("\n"), das als einzelnes Zeichen CR (0x0d) realisiert ist.
Beide Teile der Nachricht werden unmittelbar hintereinander gesendet, also z.B. als SEQ13\nOPMSM\n.
Eine Nachricht, wie sie ein Sender erstellt, besteht aus:
<Sequence> <Command>
- <Sequence>
- besteht aus dem Header SEQ, der Datenteil aus einer Nummer zwischen 1 und 99.
- <Command>
- besteht aus dem 3 Zeichen langen Command-Code, und einem entsprechenden Datenteil.
Eine Nachricht muss mit einer Antwort quittiert werden. Diese besteht aus:
<Acknowledge> <Acknowledge Code>
- <Acknowledge>
- besteht aus dem Header ACK und der zu bestätigenden Sequence Number.
- <Acknowledge Code>
- besteht aus den Header ACC und dem Code.
Beispiel sind be den jeweiligen Use Cases zu finden.
Commands
EOC ... end of communication, signalisiert das Ende einer Kommunikation OPM ... Operation Mode (siehe Betriebsmodus) WAP ... Waypoint (siehe Wegpunkte) DIR ... Angabe der Richtung im GO Betriebsmodus (siehe Kürzester Weg)
Acknowledge Codes
00 .. OK, Command acknowledged 01 .. unknown Command 02 .. invalid data 03 .. overflow (kann z.B. derzeit keine weiteren Richtungsanweisungen entgegennehmen) 11 .. unbekannter Betriebsmodus (e.g. OPMXX) 21 .. command refused, Labyrinth erkunden (OPMSM) vor NIBObee#Kalibrierung (OPMGA)
Betriebsmodus
GA ... Kalibrieren (siehe NIBObee#Kalibrierung) SM ... Labyrinth erkunden GO ... kürzesten Weg nehmen (siehe Kürzester Weg)
Wegpunkte
Die Übertragung eines Wegpunkts erfolgt durch Angabe der Richtung (S,W,N,E), gefolgt von der Anzahl der Streckenteile.
Beispiel: WAPS4 der Wegpunkt befindet sich 4 Streckenteile südlich des zuletzt übertragenen Wegpunkts
Ablauf
Im RoLoMa Projekt muss die Kommunikation aus Nachricht-Antwort Sequenzen bestehen. Wird eine gesendete Nachricht nicht bestätigt, erfolgt eine Neuübertragung nach dem RETRANSMISSION_TIMEOUT Interval. Erfolgt auch nach RETRANSMISSION_COUNT Wiederholungen keine Antwort, wird die Übertragung abgebrochen und ein Fehler signalisiert.
Kommunikationen überschneiden sich nicht, das bedeutet, es findet zu jedem Zeitpunkt nur eine Kommunikation zwischen den Beteiligten statt. Daher ist auch zu jedem Zeitpunkt genau ein Teilnehmer der Sender, und ein Teilnehmer der Empfänger.
Use Cases
Im folgenden werden Beispiele für die Kommunikation der unterschiedlichen Betriebsarten dargestellt. Daten vom Board werden normal, die von der NIBObee fett dargestellt.
Kalibrieren
Beim Kalibrieren wird das Kommando vom Board an die NIBObee geschickt und auch bei Erhalt sofort quittiert (sonst würde es zu einem Timeout kommen). Nachdem die Kalibrierung abgeschlossen ist wird die Verbindung getrennt.
Beispiel:
SEQ1 OPMGA ACK1 ACC00 SEQ2 EOC ACK2 ACC00
Labyrinth erkunden
Das Kommando wird vom Board an die NIBObee geschickt und auch bei Erhalt sofort quittiert (es muss vorher allerdings eine Kalibrierung durchgeführt worden sein). Danach werden laufend die Punkte geschickt die abgefahren werden. Wenn das ganze Labyrinth erfasst wurde wir die Kommunikation wieder beendet.
Beispiel:
SEQ1 OPMSM ACK1 ACC00 SEQ2 WAPN3 ACK2 ACC00 SEQ3 WAPE1 ... SEQ32 EOC ACK32 ACC00
Kürzester Weg
Hier werden Richtungsanweisungen übertragen, die es der NIBObee ermöglichen, in einem Labyrinth den kürzesten Weg zu nehmen. Die Richtungen werden wieder mit Himmelsrichtungen beschrieben, diesmal allerdings ohne Längenangabe da immer bis zur nächsten Kreuzung gefahren wird. In dem Beispiel wird der kürzeste Weg als S(üd)-W(est)-N(ord)-W(est) angegeben:
SEQ1 OPMGO ACK1 ACC00 SEQ2 DIRS ACK2 ACC00 SEQ3 DIRW ACK3 ACC00 SEQ4 DIRN ACK4 ACC00 SEQ5 DIRW ACK5 ACC00 SEQ6 EOC ACK6 ACC00