mikrocontroller.net

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


Autor: Christian_RX7 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter P. (bonsaibaum)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter P. (bonsaibaum)
Datum:

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

lg
    Peter

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, einverstanden mit der MessageID

Autor: Christian_RX7 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.