RS-485 Master-Slave Adressierung

OP #7541996

Hallo,

ich habe eine Frage zum RS-485 Bus. Wenn ich einen Master und mehrere Slaves auf dem Bus habe, wie kann ich jeden einzelnen Slave ansprechen? Bzw. wir weise ich jedem Slave eine Adresse zu? Ist das Abhängig vom verwendeten Protokoll zb UART oder Modbus oder benötigt jeder Slave ein Treiberbaustein mit einer festgelegten Adresse?

Vielen Dank für eure Antworten!

#7542007

Thomas E. schrieb:

ich habe eine Frage zum RS-485 Bus. Wenn ich einen Master und mehrere Slaves auf dem Bus habe, wie kann ich jeden einzelnen Slave ansprechen?

Über ein passendes Protokoll.

Bzw. wir weise ich jedem Slave eine Adresse zu?

Per DIP-Sachalter oder in dessen Software.

Ist das Abhängig vom verwendeten Protokoll zb UART oder Modbus oder

Ja.

benötigt jeder Slave ein Treiberbaustein mit einer festgelegten Adresse?

Siehe oben.

(Firma: egal) #7542069

Thomas E. schrieb:

RS-485

RS-485 legt erstmal nur die elektrische Übertragungsart fest. Die gebräuchliche serielle Übertragung mit z.B. 8N0 ist eigentlich schon von UART/RS-232 entliehen und könnte auch was beliebig anders sein. Sowas wie Adressierung kennen die aber alle erstmal nicht. Genaugenommen noch nichtmal so Begriffe wie Master/Slave. Prinzip ist einer sendet und alle anderen hören zu. Was du da sendest und was die Empfänger ggf. damit anstellen ist rein deine Sache und muss von dir entsprechend in einer höheren Protokollschicht in deiner Software passend implementiert werden.

OP #7542080

Irgend W. schrieb:

RS-485 legt erstmal nur die elektrische Übertragungsart fest. Die gebräuchliche serielle Übertragung mit z.B. 8N0 ist eigentlich schon von UART/RS-232 entliehen und könnte auch was beliebig anders sein. Sowas wie Adressierung kennen die aber alle erstmal nicht. Genaugenommen noch nichtmal so Begriffe wie Master/Slave. Prinzip ist einer sendet und alle anderen hören zu. Was du da sendest und was die Empfänger ggf. damit anstellen ist rein deine Sache und muss von dir entsprechend in einer höheren Protokollschicht in deiner Software passend implementiert werden.

Danke soweit für die Antwort!

Wenn ich jetzt verschiedenen Servos am Bus habe und nur einen bestimmten ansteuern will, wie kann ich das konkret machen? Noch konkreter, wie weis der entsprechende Slave das er angesprochen wird? Läuft das über den Treiber der eine bestimmte Adresse hat, die ich dann Header des verwendeten Protokolls definiere?

#7542086

Thomas E. schrieb:

Wenn ich jetzt verschiedenen Servos am Bus habe und nur einen bestimmten ansteuern will, wie kann ich das konkret machen?

Simpelste Möglichkeit: Du schickst immer zwei Bytes. Im ersten steht die Nummer des Servos, im zweiten der Sollwert. Die Servos lauschen am Bus und wenn das erste Byte ihre Nummer ist, werten sie das zweite aus, sonst machen sie nichts. Das ganze kannst Du dann nach belieben mit Rüchmeldungen, Prüfsummen etc ergänzen.

Beitrag #7542087 wurde von einem Moderator gelöscht.
#7542109

Thomas E. schrieb:

Wenn ich jetzt verschiedenen Servos am Bus habe und nur einen bestimmten ansteuern will, wie kann ich das konkret machen?

Das sollte in der Protokollbeschreibung des unbekannten Servos stehen. Eine Möglichkeit ist der 9-Bit Mode. Das 9. Bit legt fest, ob eine Adresse oder Daten übertragen werden. Nicht adressierte Slaves können dann ihre UART so konfigurieren, daß Datenbytes ignoriert werden. Die Adreßzuweisung könnte z.B. über Jumper oder Befehle erfolgen.

#7542212

Oliver R. schrieb:

Simpelste Möglichkeit: Du schickst immer zwei Bytes. Im ersten steht die Nummer des Servos, im zweiten der Sollwert.

Dann musst du dem Empfänger nur noch mitteilen, welches Byte das erste ist (falls er einmal außer Tritt kommt). Dafür brauchst du ein weiteres Bit.

Irgend W. schrieb:

Die gebräuchliche serielle Übertragung mit z.B. 8N0 ist eigentlich schon von UART/RS-232 entliehen

Das macht dem Empfänger die Sache nicht leicht. Wenigstens ein Stop-Bit sollte man sich gönnen, damit der Empfänger sich schneller wieder synchronisieren kann, falls bei der Übertragung einmal etwas schief geht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 2 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.