Forum: Mikrocontroller und Digitale Elektronik Rs485 BUS-ID zuweisen


von Steffen (Gast)


Lesenswert?

Hallo Leute,

ich stehe vor einem kleinen Problem, das sicher im Laufe der Menschheit 
schon x mal gelöst wurde ;) Allerdings kann ich nicht danach suchen, 
weil mir die Begrifflichkeit fehlt.

Kurz um: Es geht um einen Rs485 Bus mit etwa 100 Sensoren. Die Sensoren 
haben kein Display, keine DIP schalter und werden ständig zwischen 
verschiedenen Bussen hin und her bewegt.

Folglich soll nicht jedes mal eine BUS-ID programmiert werden, sondern 
diese vom BUS automatisch zugewiesen werden.

Soweit so gut, wenn alles läuft und ich mache alle 5 Sekunden ein  "Wen 
gibt's hier denn noch nicht, melde dich!" "einer antwortet"  "ok, du 
bist nummer 30"

Aber was passiert beim einschalten, 200 Geräte melden sich weil sie noch 
keine ID haben = Jede Buskommunikation kaputt.


Lösung1) Jedes gerät lauscht am Bus, wenn die Aufforderung kommt wartet 
es eine zufällige Zeit und versucht dann sich zu melden. Ausser es 
merkt, dass schon ein anderer davor drann war.  Da gibt es am Anfang 
sicher einige Kollisionen, aber zunehmend weniger


Lösung2) Statt BUS-ID eine Seriennummer. Allerdings müsste man dann z.b. 
165535 adressen abgrasen, ob zufälligerweise ein Busteilnehmer mit 
dieser Seriennnummer angeschlossen ist...



Wonach suche ich?! :D

von Achim M. (minifloat)


Lesenswert?

Sowas hier
http://de.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
wäre schon mal eine Anlaufstelle.

Beim USB wird es ähnlich gemacht. Man kann ja 127 Geräte an einen Port 
anschließen. Jedes neu hinzugekommene Gerät hat die Adresse 0. Dabei 
kann ein ganz neu hinzugekommenes Gerät auch warten, bis es gefragt 
wird.

Ich denke nicht, dass alle deine Busteilnehmer 100% gleich sind? So 
bräuchtest du eine Kollisionserkennung und -vermeidung. CSMA-CD wäre das 
Minimum. Dazu braucht man nur eine zufällige Wartezeit bevor ein neuer 
Versuch startet.
mf

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Joachim минифлоть schrieb:
> Beim USB wird es ähnlich gemacht.

Ist dort aber deutlich einfacher, weil USB defacto kein Bus ist, sondern 
eine geordnete Punkt-zu-Punkt-Struktur aufweist. Jedes Gerät ist auch 
ohne Nummer eineindeutig durch den USB-Pfad adressierbar, denn es hängt 
einzeln an einem identifizierbaren Port bzw. einer Verkettung von 
identifizierbaren USB-Hub-Ports.

Und DHCP wiederum ist hier auch kein gutes Beispiel, weil dort jedes 
Gerät durch seine MAC-Adresse eineindeutig identifizierbar ist.

von Rangi J. (rangi)


Lesenswert?

Ja, ich hab sowas auch schon gemacht. Dabei fragt der Busmaster zyklisch 
alle nicht belegten Adressen ab. Der Timeout ist dabei knapp bemessen, 
um nur wenig Zeitverlust zu haben.
Die Teilnehmer haben alle eine Adresse, die sich normalerweise nicht 
ändert. Um die dann aber trotzdem zu ändern habe ich einen Jumper. Nur 
wenn dieser gesteckt ist, kann mit einem speziellen Kommando eine neue 
Adresse programmiert werden.
Nachteil ist jedoch das es bis zu 1 min dauern kann (je nach Buslast) 
bis ein neues Gerät erkannt wird.

von Nochwas (Gast)


Lesenswert?

Ich hab sowas auch schon gemacht, das Problem hier ist aber ein anderes. 
Man moechte Messwerte irgendwann den Positionen zuweisen koennen. Daher 
muss irgendwie klar werden welche ID wo im Bus steckt. Der Rest, dh die 
dynamische Zuweisung der IDs ist eher trivial.

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.