PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funk Übertragung mit easyRadio über mehrere Clients



EDatabaseError
30.04.2007, 23:35
Ist es möglich einen AVR Server mit einem easyRadio Transreceiver auszustatten und zudem 2 AVR Clinents und mit dieser konstelation eine bidirektionale Datenübertragung mit Adressen aufzubauen.

Also bsp:
Der Client1 sendet OPEN1 an das Funknetz und alle hören mit. Nun besteht eine Verbindung zwischen C1 und Server. C2 bekommt die Daten zwar auch, ingnoriert sie aber. Wenn C1 fertig ist sendet er CLOSE1. Das bekommen wieder alle mit und nun ist das Netz wieder offen, d.h. jetzt könnte C2 ein OPEN2 senden und auch wieder übertragen bis zum CLOSE2.

Ist dies mit den easyRadio Modulen aus dem rnShop möglich?

Mfg

izaseba
01.05.2007, 00:11
Hallo,
ich denke das geht schon, ausprobiert habe ich es noch nicht, aber wenn der dritte nicht dazwischen funkt müßte es schon klappen.
Als alternative könnte man ja auf verschiedenen Frequenzen funken.
Gruß Sebastian

BastelWastel
01.05.2007, 01:47
Hm...
wenn du dir ein Programm einfallen läßt bei dem sich die clients nicht gegenseitig 'zu-müllen' sollte das machbar sein.

Vllt in der art dass der 'server' der reihe nach alle clients quasi 'an-pingt' durch nen string auf den nur der jeweilige client reagiert.
Hat der server keine task's für den client, der client keine task's für den server oder der client bricht der server ab und beginnt mit dem nächsten client..

gibt aber bestimmt effizientere lösungen..

MfG, der BastelWastel

EDatabaseError
01.05.2007, 09:36
Ich hab mir das so vorgestellt. Jedes Modul hat eine Variable welcher Clinet gerade zum Server sendet/senden darf. Diese Variable wird durch so eine Art Befehl OpenData[ID des Clinets] geöffnet. In dieser Zeit halten alle anderen Clinets still bis der CloseData[ID des Clinets] kommt. Dann dürfen wieder alle senden.

Mfg

pongi
01.05.2007, 10:02
Sollte gehen. Ausser es werden Acknowledge Signale beim Empfangen an den Server zurückgeschickt. In diesem Fall hast du ein Problem: denn OpenData[xx] müssen alle Clients empfangen, um zu wissen, wer weiter mithören soll. Aber wenn alle gleichzeitig ihren Ack an den Server zurücksenden, weiss der Server nicht, was los ist. Das musst du also prüfen.
Ausserdem hast du in diesem Fall das Problem, dass nach einem OpenData[xx] die anderen Clients auch mithören, und obwohl du die empfangenen Daten nicht weiterverarbeitest, werden sie die Acks versenden, sie müssen also abgeschaltet werden. Wenn sie aber abgeschaltet sind, hören sie den CloseClient[xx] Befehl nicht.
Am besten wäre vielleicht Zeitspannen für jeden Client festzulegen, wo sie überhaupt eingeschaltet sind. Diese Zeitspannen müssen am Anfang synchronisiert werden, und danach weiss der Server, welcher Client wann eingeschaltet ist, also wann sie empfangen können. Ist zwar nicht umbedingt effizient, aber vielleicht einfacher.
Oder du sendest in verschiedenen Frequenzkanälen, ist bei den EasyRadios möglich, wenn ich mich nicht irre.

Hoffentlich war alles verständlich, es ist noch sehr früh :-D

MfG

pongi

EDatabaseError
01.05.2007, 10:15
Hmm...können nicht alle, alles mithören oder senden die easyRadios immer ACKs beim empfangen eines Bytes? Dat wäre doof...

Ich möchte im Prinzip ein Funknetzwerk aufbauen.

Das heißt nach dem OpenData[ID] können alle mithören aber nur der angesprochene darf senden bis zu dem CloseData[ID].

Mfg

pongi
01.05.2007, 17:39
Ja, aber die Sendung von Acks ist ja auch ein Sendevorgang, was Interferenzen verursacht...

EDatabaseError
01.05.2007, 17:46
Laut dem was in dem Datenblatt steht:


Any other Easy-Radio Transceiver within range that hears the transmission will decode the message and place the recovered data within a receive buffer that can then be unloaded to the receiving host for processing and interpretation. Transmission and reception are bi-directional half duplex i.e. transmit OR receive but not simultaneously.

Müsste das aber ohne Probleme gehen...oder

pongi
01.05.2007, 17:51
Dann gehts.
Ich hab ja nicht gesagt, dass es nicht geht, ich hab nur gesagt, dass du nachschauen sollst :D

womb@t
01.05.2007, 22:29
Was passiert wenn C2 nicht mithört dass C1 CLOSE1 sendet? Er wird so lange nichts mehr sagen bis er irgendwann ein CLOSE1 wieder hört! Also zeitlich begrenzen...

EDatabaseError
01.05.2007, 22:32
Jap...aber hauptsache es funktioniert im Prinzip.

BastelWastel
01.05.2007, 23:44
Wie gesagt, ich würd den Server die übertragungen initieren lassen, sprich jeden client der Reihe nach 'an-pingen'.
Kommt innerhalb einer definierten Zeit eine Empfangsbestätigung die Daten übertragen, andernfalls timeout und mit dem nächsten client weiter machen.
So kreuzen sich keine Daten und du läufst nicht Gefahr dass sich ein client auf taub stellt..

EDatabaseError
02.05.2007, 13:22
Ich hab in meinem Beispiel nur 2 Clinets. Das können aber auch mehr werden...

In meiner Anwendung sendet aber der Client das Request...muss es senden...

Ich bestell mir mal 3 easyradios und probier ein bisschen.

Mfg

pongi
02.05.2007, 14:11
Client sendet ein Request? Das ist mir entgangen. Dann ist auf alle Fälle besser was BastelWastel vorgeschlagen hat. Denn du kannst ja nicht ausschliessen, das zwei Clients gleichzeitg einen Request senden, oder?

EDatabaseError
02.05.2007, 14:23
Diese Wahrscheinlichkeit ist etwa so wie vom Blitz getroffen zu werden...wie groß ist die Wahrscheinlichkeit das 2 Personen zum gleichen Zeitpunkt (in 1000nstel Sekunden) ein Taste drücken ;-)

Mfg

pongi
02.05.2007, 15:16
Abhängig davon, was durch das Eintreten eines solches Ereignisses an Schaden hervorgerufen werden kann, ist dieses Wahrscheinlichkeit auch nicht zu vernachlässigen. (zB Medizin, Verkehr...)
Ausserdem bietet das eine Fehlerquelle, die du dann spater u.U nicht zurückverfolgen kannst.
Ich sehe es aber ein, das für Hobbyanwendungen dies vielleicht doch eine Haarspalterei ist.... Obwohl ich selbst (als Ingenieur in Ausbildung) sowas nicht zulassen würde... ;)

EDatabaseError
02.05.2007, 15:27
Ok...überstimmt... ;-)

Ich werde es dann so machen...wenn die Useraction am Clinet vorgenommen wird speichert er die Daten in eine Art Dataoutputbuffer.
Der Server fragt in regelmäßigen Abständen die Clinets ob sie daten haben welche sie dann senden dürfen.

Kleine Backgroundinfo...das soll eine Art Datenerfassungssystem werden, also eigentlich nichts Sicherheitsrelevantes...aber das Stückchen Sicherheit bau ich dann ein. Ist ja eh nur Software ;-)

In diesem Sinne ;-)

Mfg