Modulerkennung

Aus PyroNeo Wiki
Zur Navigation springenZur Suche springen

Die Modulerkennung dient zum automatischen Auffinden von erreichbaren Modulen/Geräten. Sie basiert auf einem statistischen Verfahren, so dass es nur sehr wahrscheinlich ist, dass alle Module erkannt werden. Aus diesem Grund sollte die Anzahl der gefundenen Module mit der erwarteten Anzahl verglichen werden.


Technischer Hintergrund

Das PyroNeo-Funkprotokoll beruht auf der Annahme, dass immer nur eine zentrale Stelle (der Commander) Anfragen/Befehle aussenden darf. Modulen ist es eigentlich nicht erlaubt, von sich aus Daten per Funk zu senden.

Daher scheidet eine Erkennung von Zündmodulen aus, bei der die Module regelmäßig selbstständig eine Identifikationsnachricht aussenden würden. Zudem würde dies den Stromverbrauch der Modul in die Höhe treiben, da diese dann auch senden würden, wenn die Nachricht von niemandem empfangen werden kann.

Stattdessen wird ein anderer Ansatz verfolgt: Der Commander sendet einen speziellen Befehl an alle Module, der diese dazu veranlasst darauf in einem vom Modul zufällig bestimmten Zeitschlitz zu antworten. Der Commander gibt dabei sämtliche wichtigen Parameter (vor allem die Anzahl der Zeitschlitze aus denen gewählt werden darf) vor.

Dadurch das jedes Modul unabhängig von allen anderen einen Zeitschlitz auswählen kann, gibt es zwei mögliche Fälle:

  • ein Modul wählt einen Zeitschlitz, in dem sonst kein anderes Modul seine Antwort sendet oder
  • zwei oder mehrere Module wählen den gleichen Zeitschlitz, so dass die Nachrichten nicht oder nur unvollständig empfangen werden (weil mehrere Funknachrichten sich überlagern).

Im ersten Fall ist alles gut, der Commander empfängt die Antwort vom betreffenden Modul und fügt es seiner intern geführen Modulliste als bekannt hinzu. Er informiert nach Ablauf aller Zeitschlitze die Module, die erfolgreich erkannt wurden, so dass diese am weiteren Verfahren nicht mehr teilnehmen müssen. Im zweiten Fall werden die Module vom Commander nicht erkannt, sie werden also auch nicht der Modulliste hinzugefügt und bekommen auch keine Nachricht dass sie "entdeckt" wurden.

Der Commander startet nun eine zweite Runde mit der halben Anzahl an Zeitschlitzen, auf die sich die beim ersten Durchgang nicht erkannten Module nun verteilen müssen. Das Verfahren wird so lange wiederholt, bis die Anzahl der Zeitschlitze (die ja in jeder Runde halbiert wird) auf 0 gesunken ist. Die Erkennung ist dann abgeschlossen.

Statistik

Damit dieses Verfahren funktioniert ist es wichtig, dass in jeder Runde mehr als die Hälfte der noch verbleibenden Module gefunden wird. Der Erwartungswert der gefundenen Module pro Runde muss also deutlich über 50% liegen. Um das zu gewährleisten, muss die Anzahl der zu findenden Module vorher bekannt sein.

Dann ergibt sich (das haben Simulationen bestätigt), dass für ein gutes Funktioneren der Erkennung mindestens 3,5 mal so viele Zeitschlitze benötigt werden, wie Module gefunden sollen. Bei einer Länge von 10ms pro Zeitschlitz ergibt das eine Zeit von 20ms pro zu findendem Modul; also bei 500 Modulen (dem angenommenen Maximum) ein theoretische Zeit von 10 Sekunden * (1/1 + 1/2 + 1/4 + 1/8 ..) = ca. 20 Sekunden zur Erkennung aller Module (nur die Zeitschlitze). Hinzu kommt die Zeit, die der Commander benötigt um die neuen Runden anzustoßen und Modulen bekannt zu geben, dass sie gefunden wurden.

Insgesamt gibt es also vier mal so viele Zeitschlitze, wie Module gefunden werden sollen.