Forum: Mikrocontroller und Digitale Elektronik Datenübertragung per RS485 und Protokoll


von Christian_RX7 (Gast)


Lesenswert?

Hallo Leute,
ich hab mir ein neues Projekt vorgenommen und bin mir nicht sicher ob 
das so funktionieren kann. Ich wie so etwas ähnliches wie eine Schaltuhr 
bauen, bei der die Schaltkanäle mit der Schaltuhr über ein Bussystem 
verbunden sind.
Meine Rahmenbedingungen:
  1 Busmaster
  30 Slaves (Schaltkanäle) Endausbau sollen 120 sein
  Kabellänge: max 400m
  Kabeltyp: unbekannt (kann schlimmstenfalls auch ein 5x15mm² sein, ohne 
Schirm)
  Datenübertragung: RS485?
  Geschwindigkeit: 300bit/s würden reichen, etwas mehr wäre kein Fehler
Kann die Datenübertragung auch ohne Schirm klappen?
Bei der Geschwindigkeit denke ich schon oder ist es besser eine andere 
Übertragungsmethode zu suchen, ein Aufmodulieren des Signals auf die 
Betriebsspannung (ähnlich EIB) wäre mir noch lieber, gibt’s da gute 
Unterlagen oder Infos wie man so was macht?
Als Protokoll hätte ich mir folgendes gedacht:
1 Byte Adresse Slave
4 Byte Daten
1 Byte Checksumme
Danach hat der Empfänger ein Zeitfenster, in dem er eine 
Empfangsbestätigung an den Master zurückschicken muss, wird dies nicht 
gemacht, wiederholt der Master den Befehl bis zu 3 Mal, wenn es dann 
immer noch nicht klappt, zeigt er eine Störmeldung an.
Die Empfangsbestätigung soll ähnlich aufgebaut sein:
1 Byte Adresse Slave (da die Daten ja sowieso für den Master bestimmt 
sind)
4 Byte Daten (damit ich eventuell später auch noch Statusmeldungen 
übertragen kann)
1 Byte Checksumme

Bei einigen Protokollen hab ich gesehen, dass ein Anfangs- und Endbyte 
verwendet wird, warum? Wird das nur bei variabler Datenlänge benötigt, 
um des Ende anzuzeigen?

Danke,
Christian

von Falk B. (falk)


Lesenswert?

@ Christian_RX7 (Gast)

>Meine Rahmenbedingungen:
>  1 Busmaster
>  30 Slaves (Schaltkanäle) Endausbau sollen 120 sein
>  Kabellänge: max 400m
>  Kabeltyp: unbekannt (kann schlimmstenfalls auch ein 5x15mm² sein, ohne
>Schirm)
>  Datenübertragung: RS485?
>  Geschwindigkeit: 300bit/s würden reichen, etwas mehr wäre kein Fehler

Na dan nimm RS485, das passt. Andere werden CAN vorschlagen, geht sicher 
auch.

>Kann die Datenübertragung auch ohne Schirm klappen?

Ja.

>Bei der Geschwindigkeit denke ich schon oder ist es besser eine andere
>Übertragungsmethode zu suchen, ein Aufmodulieren des Signals auf die

Unsinn. Rate mal wie Ethernet (10mBit/s9 oder FastEthernet (100 Mbit/s) 
arbeiten.

>Als Protokoll hätte ich mir folgendes gedacht:
>1 Byte Adresse Slave
>4 Byte Daten
>1 Byte Checksumme

Kann man so machen.

>Bei einigen Protokollen hab ich gesehen, dass ein Anfangs- und Endbyte
>verwendet wird, warum?

Vereinfacht die Erkennung und prüfung von Daenpaketen.

> Wird das nur bei variabler Datenlänge benötigt,
>um des Ende anzuzeigen?

Jain. Kann man machen, muss aber nicht.

MfG
Falk

von Peter P. (bonsaibaum)


Lesenswert?

Hallo!

Vielleicht wäre es auch geschickt wenn du noch ein Byte einbaust, wo du 
siehst von 'Wem' die Message kommt und ev. auch noch eine MessageID ... 
macht einiges einfacher ;)

lg
    Peter

von Severino R. (severino)


Lesenswert?

Peter P. wrote:
> Hallo!
>
> Vielleicht wäre es auch geschickt wenn du noch ein Byte einbaust, wo du
> siehst von 'Wem' die Message kommt und ev. auch noch eine MessageID ...
> macht einiges einfacher ;)
>
> lg
>     Peter

Senden tut ja immer der Master, also ist klar von wem.
Und in der Antwort ("Empfangsbestätigung") ist ja die Slave-Adresse 
drin.

von Peter P. (bonsaibaum)


Lesenswert?

Ajo genau (dachte an ring)... MessageID wäre aber trotzdem nicht 
schlecht, dann muss man nicht immer alle Daten übertragen

lg
    Peter

von Severino R. (severino)


Lesenswert?

Ja, einverstanden mit der MessageID

von Christian_RX7 (Gast)


Lesenswert?

Die Senderadresse mitzuschicken hab ich mir auch schon gedacht, dachte 
mir dann aber folgendes:
Wenn der Master Befehle an einen Slave sendet, reicht mir die 
Empfängeradresse, damit der Empfänger weiß, dass er gemeint ist.
Wenn der Slave eine Antwort an den Master sendet, steht als Adresse die 
des Slaves drinnen, dadurch ignorieren alle anderen das Telegramm und 
der Master liest es, da er darauf wartet und nur in dem kurzen 
Zeitfenster auf Empfang steht.

Werd mir das noch überlegen, die Struktur um ein Byte zu erweitern:
Adresse (Empfänger)
Adresse (Sender)
Daten
Checksumme

Danke
Christian

von thkais (Gast)


Lesenswert?

Tipp: Schau Dich mal beim seriellen Protokoll von Frequenzumrichtern um. 
Ich habe das Protokoll von Lenze abgewandelt (weil der Frequenzumrichter 
sowieso Bestandteil des Bus ist) und benutze es mit Erfolg.
Dort werden z.B. keine Daten als Byte geschickt sondern als Ascii-Zahl, 
das ergibt zwar mehr Traffic, aber dafür einen Gewinn an 
Übertragungssicherheit.

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.