Forum: HF, Funk und Felder Methode zur Synchronisierung mehrer Sender


von Mike J. (linuxmint_user)


Lesenswert?

Ich suche eine Lösung, eine bessere Idee oder auch nur einen 
Lösungsansatz.

Frage:
Gibt es eine elegante Methode mehrere Sender so zu synchronisieren dass 
sie zu keinem Zeitpunkt gleichzeitig senden?



Aufbau:
Es gibt mehrere Sender und einen Empfänger.


Jeder Sender schläft zu 99,958% der Zeit und verschicken in einem 
bestimmten Intervall ein Datenpaket, zum Beispiel jede Minute oder auch 
nur jede Stunde.

(Der Sender ist nur vornehmlich ein Sender und der Empfänger kann 
auch Senden, aber ich will mit der Bezeichnung nur die Hauptrichtung 
verdeutlichen.)

Der Empfänger nimmt solch ein Datenpaket an, liest die Kennung des 
Senders aus und schickt dem Sender, nachdem das Datenpaket 
vollständig empfangen wurde, Korrekturdaten oder neue Einstellungen, wie 
zum Beispiel der Länge des Sende-Intervalls.


Der Sender kann durch den Empfänger nicht aufgeweckt werden da ich 
ihn wirklich in den Tiefschlaf versetze und das Funkmodul deaktiviert 
ist.

Ich habe jetzt also eine Maximale Zeit die der Sender braucht um das 
Datenpaket zu verschicken und dann noch eine gewisse Zeit für die 
Rückantwort des Empfängers eingeplant.

Wenn die Intervalle unterschiedlich lang sind wird es unter Garantie 
manchmal zu einer Überlagerung der Sendungen kommen.

Das will ich aber verhindern!


Gegenmaßnahmen die ich treffe:
Ich behalte das aktuelle Datenpaket im Speicher (Puffer für mehrere 
Pakete) und sende sie einfach noch mal wenn es keine Bestätigung 
(Rückantwort) des Empfängers gab.

Theoretisch verliere ich somit keine Daten.
Wenn aber zu viele Kollisionen auftreten werden die Datenpakte zu diesen 
Zeitpunkt immer verworfen, der Puffer wächst an und damit auch die Zeit 
um ein Datenpaket zu übertragen, was wiederum die Wahrscheinlichkeit 
erhöht dass es Kollisionen gibt.
So kann das ganze System zugemüllt werden und es findet keine 
Kommunikation mehr statt obwohl alle senden und die Puffer schon 
übergelaufen sind.


Jetzt kann man die Sender aber auch noch alle auf "Echtzeit" stellen und 
den Intervall zum Beispiel auf eine Sekunde legen.
Bei einer Anzahl von nur 4 Sendern ist diese Intervallzeit zum 
Beispiel schon voll da ein Sender bis zu 250ms braucht um das 
Datenpaket zu senden.

Bei über 4 Sender müsste ich dann schon Pakete verwerfen oder ich 
müsste die Sender auf eine höhere Intervallzeit setzen.

Die Sender besitzen eine RTC und der Empfänger auch.

Mein Ansatz ist der, dass bei einer Veränderung der Intervallzeit über 
ein grafisches Interface die nächsten Intervall-Zeitpunkte und die 
Sendelänge + Rückantwortlänge aller Sender berechnen zu lassen und die 
Sender dadurch zu synchronisieren da ich die Kollisionen somit 
berechnen kann.

Wenn so ein Sender wieder mal ein Paket sendet kann der Empfänger (der 
alle Zeitpunkte kennt) ihm ein positives ober negatives zeitliches Delay 
als Zeit-Offset für die nächste Übermittlung senden.

Alternativ könnte er auch sagen dass er das nächste Paket aussetzen soll 
um den Äther nicht zu verschmutzen und die in der Zeit gesammelten Daten 
werden dann später in einem anderen Daten-Paket mit versendet.



Mir geht es also um eine sinnvolle Synchronisierung der Sender.
Gibt es da schon Lösungen?
Wie würdet ihr das machen?

von oszi40 (Gast)


Lesenswert?

Es kommt ja auch auf die Häufigkeit an. Wenn z.B. zu jeder zur vollen 
Minute nacheinander einer sendet, könntest Du bis zu 59 Sender in der 
Stunde senden lassen. Da aber auch mit Störungen zu rechnen ist, wäre 
eine Verschachtelung der Zeiten zu überlegen, wenn z.B. eine Störung von 
Minute 17 bis 23 auftritt. Eine weitere Frage der zeitlichen 
Synchonisierung ist das weglaufen der genauen Zeit. Deshalb hat man sich 
bei NTP viele Gedanken gemacht. 
https://de.wikipedia.org/wiki/Network_Time_Protocol

von Adib (Gast)


Lesenswert?

Hallo Mike,

ich sehe da mehrere Ansätze:

- Aloha, also die Sendezeitpunkte mittels Zufalssequenz verändern
Tritt einmal eine Kollision auf, sollte sie zum nächsten Intervall nicht 
nocheinmal auftreten.
Du nimmst Kollisionen in kauf ohne sie zu erkennen.
Das wird typischerweise bei TRanspondern angewendet

- Listen before talk, du schaust erst einmal, ob ein anderer gerade 
sendet und sendest erst dann.
Collision "avoidance", aber Kollisionen lassen sich nicht zu 100% 
vermeiden.
Schema wie bei Zigbit

- beacon-synchronisation, der sender horcht erst mal eine Weile und 
wartet eine Sendung eines anderen ab. Mit Empfang der Message kann er 
die nächste Aussendung des anderen vorhersagen. Dann ist er aktiv zu 
dessen Sendezeitpunkt (Nachtriggern) und sendet kurz darauf selber.
Collision avoidance, wenn die Gap zum eigenen Aussenden abhängig von der 
ID ist, können sich beliebig viele Sender synchronisieren.
üblich in ANT+

Grüße, Adib.

von Mike J. (linuxmint_user)


Lesenswert?

@ Adib (Gast)
Das mit der ID klingt interessant.

Also wenn der Sender Nr. 19 lauscht und von einem anderen Sender die 
ID empfängt, dann kann er aus dessen ID berechnen wann er senden darf.

Also er weiß dass Sender Nummer 12 gerade aktiv ist und durch ein 
genau definiertes "Gap" welches vielleicht eine halbe Sekunde beträgt 
kann er sein Paket in 7*Gap = 3,5 Sekunden versuchen absenden.

Es könnte gerade noch ein Sender aktiv sein und er muss vielleicht 0,5 
Sekunden warten, aber wenn nicht, dann kann er sofort senden.


In meinem Fall kann es sein dass die Sender sich untereinander nicht 
empfangen können.
Außerdem gibt es ja die Möglichkeit dass Sender1 alle 2 Minuten sendet 
und Sender2 alle 5 Minuten oder auch mal diese Echtzeit (jede Sekunde 
oder alle 10 Sekunden) aktiviert werden muss um das Verhalten mal 
genauer beobachten zu können.

Ich werde den aktuellen Intervall wohl trotzdem ab und zu verschieben 
müssen.

Der Empfänger steckt an meinem Laptop und ich kann dort auch größere 
Berechnungen durchführen und sie dann über den Empfänger zu den 
Sendern schicken. Ich habe da quasi einen kleinen Sender-Wald den ich 
auslesen würde! XD

@ oszi40 (Gast)
Danke für den Link auf NTP oder SNTP.
Ich könnte die Reaktionszeit (das Delay) durch einen sehr kurzen Ping 
ermitteln und so auf das Delay für die Antwortzeit schließen, dann habe 
ich eine Zahl für die Verzögerung und kann die Zeit genauer einstellen 
da ich die Delays kenne.

von Michael B. (laberkopp)


Lesenswert?

Mike J. schrieb:
> Gibt es eine elegante Methode mehrere Sender so zu synchronisieren dass
> sie zu keinem Zeitpunkt gleichzeitig senden?

Nun ja, GPS Satelliten machen die Synchronisation mit jeweils einer 
Atomuhr an Bord.

> Jeder Sender schläft zu 99,958% der Zeit und verschicken in einem
> bestimmten Intervall ein Datenpaket, zum Beispiel jede Minute oder auch
> nur jede Stunde.

An deiner Stelle würde ich einfach häufig genug senden, z.B. wenn du die 
Daten jede Stunde brauchst eben jede Viertelstunde.

Aber der eine Sender sendet alle 900+2 Sekunden, der nächste alle 900+3, 
der nächste alle 900+5 der nächste alle 900+7(Primzahlenfolge) Sekunden 
für jeweils seine 30 Millisekunden sein Datenpaket. Falls sich die 
Sendeimpulse also mal zufälligerweise überlappen sollten, werden sich 
die nächsten Datenpakete schon nicht mehr überlappen, und innerhalb der 
Stunde wird man zumindest ein Datenpaket ungestört empfangen können.

Eine Anforderung, daß man GARANTIERT jedes Datenpaket IMMER sicher 
empfangen kann, ist bei Funk sowieso nicht möglich.

Mike J. schrieb:
> Wenn so ein Sender wieder mal ein Paket sendet kann der Empfänger (der
> alle Zeitpunkte kennt) ihm ein positives ober negatives zeitliches Delay
> als Zeit-Offset für die nächste Übermittlung senden.

Dazu müsste der Sender ja einen Empfänger besitzen. Wenn er das hat, 
kann er die Kollision selbst erkennen, in dem er die anderen abhört. Da 
aber auch hier gilt "Was ein Empfänger ungestört hört, muss nicht dem 
entsprechen was ein andere ungestört hört" weil je nach Feldstärke die 
Störungen unterschiedlich sein können, funktioniert das nuur mit 
erfolgreich empfangenen Nachrichten.

von oszi40 (Gast)


Lesenswert?

Michael B. schrieb:
> Dazu müsste der Sender ja einen Empfänger besitzen.

Dieser Empfänger benötigt auch Strom, solange er empfangen soll! Meine 
Auto-Fernbedienung dagegen sendet nur WENN ich auf den Knopf drücke. 
Deshalb hält die Batterie ewig. Wahrscheinlich sollte man gar nicht 
synchronisieren solange genug Pausen zwischen den Sendungen sind und 
lieber mehrfach mit Prüfzahlen gesichert den selben Text senden? Wenn 
natürlich alle Sender z.B. nach Stromausfall zur gleichen Zeit starten, 
sollte man an Hand der Adresse verschiedene, sinnvolle Wartezeiten 
einbauen um Kollisionen möglichst zu vermeiden (so ähnlich wie im LAN).

von Mike J. (linuxmint_user)


Lesenswert?

Ach ja, der Empfänger hat ständig Strom da er per USB angebunden ist.

Noch mal zur Information, sowohl das was ich als Sender, also auch das 
was ich als Empfänger bezeichne können senden und empfangen da ich ja 
ein Acknowledge übertragen muss um den Datenverkehr etwas steuern zu 
können.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Dafür gibt es keinen perfekten Ansatz, u.a. wegen dem Hidden Station 
Problem, was man bei Funk immer hat im Gegensatz zu LAN oder anderen 
streng gekoppelten Systemen.
Schau dir mal MACA von Karn an.

Eigentlich gibts zu diesem Thema tonneweise im Web zu lesen.

: Bearbeitet durch User
von Sebastian L. (der_mechatroniker)


Lesenswert?

> Dieser Empfänger benötigt auch Strom, solange er empfangen soll! Meine
> Auto-Fernbedienung dagegen sendet nur WENN ich auf den Knopf drücke.
> Deshalb hält die Batterie ewig

Vom Thema Auto-Fernbedienungen, das du gerade so schön ins Spiel 
gebracht hast, kann man sich auch einen Lösungsansatz abschauen, nämlich 
wie es die Wegfahrsperren und die elektronischen Schlüssel (die man nur 
in der Tasche haben muss, wenn man den Startknopf drückt) machen:

Wenn man den Startknopf am Auto drückt, sendet das Auto sein 
Abfragesignal, welches primitiv aufgebaut ist und mit ausreichend 
Leistung auf irgendeiner "Mittelwellenfrequenz" gesendet wird und mit 
einem einfachen Detektor empfangen werden kann, welcher im Standby 
keinen Strom verbraucht. Die eigentliche Kommunikation findet dann m.W. 
im 433-Mhz-Band statt. Ergebnis ebenfalls: die Batterie hält ewig.

von Pandur S. (jetztnicht)


Lesenswert?

Waere es moeglich in festen Intervallen eine Sync Nachricht zu senden, 
zB zur vollen Sekunde/Minute/Stunde.
Jeder zu dieser Zeit auf Empfang gehaltenen Empfaeger, kann von da mit 
seiner ID seine Sendezeitscheibe berechnen und genau dann senden.
Diese Sendezeitscheibe muss fuer Wasauchimmer hin & zurueck reichen. Je 
nach "Echtzeit" steigen die Anforderungen.
Muss man wegen der benoetigten Datenmenge & Zeitscheibenlaenge auf die 
Sekunde/Milisekunde/Mikrosekunde genau sein ?

Dieses Vorgehen geht, wenn alle Empfaeger der Sender direkt empfangen. 
Nicht mehr, wenn etwas dazwischen ist, resp dann wird's schwieriger.

: Bearbeitet durch User
von W.A. (Gast)


Lesenswert?

Sebastian L. schrieb:
> Wenn man den Startknopf am Auto drückt, sendet das Auto sein
> Abfragesignal, welches primitiv aufgebaut ist und mit ausreichend
> Leistung auf irgendeiner "Mittelwellenfrequenz" gesendet wird und mit
> einem einfachen Detektor empfangen werden kann, welcher im Standby
> keinen Strom verbraucht.

Du meinst so was wie "Keyless gone"?
http://www.heise.de/ct/ausgabe/2015-26-Autodiebe-tricksen-kontaktlose-Schliesssysteme-aus-3013915.html

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

W.A. schrieb:
> Sebastian L. schrieb:
>> Wenn man den Startknopf am Auto drückt, sendet das Auto sein
>> Abfragesignal, welches primitiv aufgebaut ist und mit ausreichend
>> Leistung auf irgendeiner "Mittelwellenfrequenz" gesendet wird und mit
>> einem einfachen Detektor empfangen werden kann, welcher im Standby
>> keinen Strom verbraucht.
>
> Du meinst so was wie "Keyless gone"?
> 
http://www.heise.de/ct/ausgabe/2015-26-Autodiebe-tricksen-kontaktlose-Schliesssysteme-aus-3013915.html

Vermutlich meint Sebastian die normale Induktionsspule ums Zündschloss, 
die vom Schlüssel empfangen wird und sowohl den Sender im Schlüssel 
auslöst, als ihn auch speist.
@TE: M.E. ist 'Listen before Talk' hier am wirtschaftlichsten. Der Node 
startet den Empfänger, prüft auf freie Frequenz und sendet seine Daten. 
Dann kann er wieder schlafen.

: Bearbeitet durch User
von Hp M. (nachtmix)


Lesenswert?

Mike J. schrieb:
> Frage:
> Gibt es eine elegante Methode mehrere Sender so zu synchronisieren dass
> sie zu keinem Zeitpunkt gleichzeitig senden?

Sicher.
Loran-C z.B. macht das.
https://de.wikipedia.org/wiki/LORAN

von Pandur S. (jetztnicht)


Lesenswert?

> Frage:
Gibt es eine elegante Methode mehrere Sender so zu synchronisieren dass
sie zu keinem Zeitpunkt gleichzeitig senden?


Schau unter Mobilfunk. GSM, usw. Da laufen die Zeitscheiben synchron. 
Sogar die Oszillatoren sind frequenzgelockt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.