PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS485 Protokoll



kelly
04.09.2008, 20:02
Hat Jemand ein Beispielprotokoll für ein RS485-Bus? Ich sollte ein Übertragungsprotokoll entwerfen, zwar ein Master und acht Slaves. Habe leider keine Ahnung, wie ein solches Protokoll aussieht. Es sollte eine vollduplex Übertragung sein. Kann mir hier jemand helfen? Ich bin für jede Hilfe sehr dankbar!

Jaecko
04.09.2008, 21:42
Ne direkte Vorlage hab ich nicht, aber wenns ein Master und mehrere Slaves sein soll, wäre eine Idee, es ähnlich wie beim I2C-Bus zu machen.
Kommt jetzt drauf an, was an Daten gesendet werden soll.
Als "Startbedingung" könnte z.B. das ASCII-Zeichen "STX" gesendet werden, danach ein Byte mit der Adresse des Slaves. D.h. jeder Slave hört mit und lauscht, ob er sich angesprochen fühlt.
Danach die Nutzdaten senden und die Übertragung mit "ETX" abschliessen.

Wenn ein Slave Daten von sich aus Senden soll, wirds etwas komplizierter, da dann gesichert werden muss, dass nie mehrere Slaves gleichzeitig senden. Lässt sich verhindern, in dem der Master z.B. abfragt, ob der Slave Daten hat.

Da kann man dann natürlich noch Feinheiten wie Prüfsummen, Fehlerkorrektur etc. einbauen. Aber sowas verwend ich bei mir nicht, da ich bisher so auch nie Probleme hatte.

kelly
04.09.2008, 22:16
vielen dank für deinen Tipp. Wie wäre es, wenn ich zwischen den Master und Slaves ein Slave Manager anschließen? Kann das gleiche Protokoll verwendet werden oder?

Jaecko
04.09.2008, 22:39
Was genau soll der Slave Manager machen?
Wenns nur darum geht, die Kommunikation zwischen den Slaves zu Regeln, dann verwendet man eigentlich nen Master, bzw. es ist dessen Aufgabe.

Vitis
04.09.2008, 22:42
ein Busprotokoll ist im Prinzip Freistil,
das kannste Dir entweder selber stricken
oder hal n fertiges wie SNAP oder Profibus
implementieren

Duplex macht die Geschichte einfach.
Bei halbduplex ists kniffliger wegen
dem Timing, aber Duplex ist easy.

Gehste einfach hin und machst Dir
mal ne Liste welche Daten übertragen werden
sollen und welches Format die haben sollen.
Dann brauchste nen Befehlssatz für
die vom Slave auszuführenden Aktionen
und dann solltest Du Dir überlegen wie
groß das ganze Projekt werden soll und
ob das ggf. erweitern können soll und schon haste
Deine Adressierung.
Dann noch nen Fehlercheck, Zeichenzähler,
CRC,MD5 oder irgend ne andere Prüfsumme und
fertig ist Dein Protokoll.

kelly
05.09.2008, 10:17
Was genau soll der Slave Manager machen?
Wenns nur darum geht, die Kommunikation zwischen den Slaves zu Regeln, dann verwendet man eigentlich nen Master, bzw. es ist dessen Aufgabe.

Die Daten sollen parallel an den Slaves übertragen werden,deshalb wird ein Slave Manager geraucht, wenn ich es richtig verstanden habe. Sorry, mir ist selbst noch nicht so klar, wie das ganze system funktionieren sollte. Habe gerade angefangen. :-(

kelly
05.09.2008, 10:28
ein Busprotokoll ist im Prinzip Freistil,
das kannste Dir entweder selber stricken
oder hal n fertiges wie SNAP oder Profibus
implementieren

Duplex macht die Geschichte einfach.
Bei halbduplex ists kniffliger wegen
dem Timing, aber Duplex ist easy.

Gehste einfach hin und machst Dir
mal ne Liste welche Daten übertragen werden
sollen und welches Format die haben sollen.
Dann brauchste nen Befehlssatz für
die vom Slave auszuführenden Aktionen
und dann solltest Du Dir überlegen wie
groß das ganze Projekt werden soll und
ob das ggf. erweitern können soll und schon haste
Deine Adressierung.
Dann noch nen Fehlercheck, Zeichenzähler,
CRC,MD5 oder irgend ne andere Prüfsumme und
fertig ist Dein Protokoll.

Danke sehr! Aber wie sollte ein Befehlssatz definert werden? Eine Prüfsumme und ein Fehlerkorrektur sollen im Protokoll enthalten. Was für eine Prüfsumme ist günstig für so ein Protokoll, also ein Master, ein Slave Manager und acht Slaves? CRC 16? Mit der Adressierung ist mir auch nicht so klar,was du meinst. Ich glaube, bei einem RS 485 Bus können max. 32 Slaves angeschlossen werden. Das heißt, für Adresse reicht 5 Bit aus oder? Ich hoffe,dass du meine Fragen verstehst. Ansonst kannst du mich gern nochmal fragen. Beste Danke :-)

Vitis
05.09.2008, 11:39
die 32 Slaves sind keine feste Größe,
der Max487 kann z.B. mehr treiben.

Dann kommt halt noch drauf an, wie
schnell dass die ganze Geschichte gehen soll,
einmal die Baudrate und dann wie oft je Sekunde
Deine Message rüber soll.

Bei einem meiner Projekte hab ich schnelle
Übertragung gebrauch und das Protokoll dann
quasi bitweise gestrickt, da war dann z.B.
das erste übertragene Byte so verknaspelt, dass
15 verschiedene Befehle + Flag ob Master oder
Slave Datenpaket + Prüfsumme 2 Bit und
Paketlänge mit drin war.
Dann hab ich auch mal das Profibus, das auch auf
Bitebene läuft verwendet, das war auch schnell.

Bei nem anderen Projekt hab ich einfach die Befehle
als Klartext geschickt, weil das noch ewig schnell
genug war ... war dann in etwa so:
set-sla-001-ti1-2500
set ist klar,
sla = slave
001 = Slave ID
ti1 = timer1
2500 war dann der output compare, abgeschlossen
wurde der String dann mit CR ...
wenn der Slave das geschluckt hat hat innerhalb
ner bestimmten Zeit n ACK zurückgeschickt,
kam das nicht wurds noch 2-mal probiert
und dann einfach übergangen mit Fehlermeldung.

Da Du ja über Deine Anwendung keine Angaben
gemacht hast kann man Dir auch nur schwerlich
einen gezielten Vorschlag machen.