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
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.