Forum: Mikrocontroller und Digitale Elektronik RS485 Kollisionserkennung


von Friedrich (Gast)


Lesenswert?

Hallo,

kann man beim RS485 auch eine Kollisionserkennung nach CSMA/CD 
realisieren?
Welche Möglichkeiten bestehen noch?

Danke!

von STK500-Besitzer (Gast)


Lesenswert?

Friedrich schrieb:
> Welche Möglichkeiten bestehen noch?

Man liest das zurück, was man gesendet hat. Wenn die beiden Daten nicht 
übereinstimmen, ist ein Fehler aufgetreten.

So macht das CAN.

von Ingo W. (uebrig) Benutzerseite


Lesenswert?

Da die Ausgänge in beide Richtungen etwa gleich stark sind (kein 
dominanter Pegel), kann man sich aber auch nicht sicher drauf verlassen, 
eine Kollision sicher zu erkennen, wenn der Gegner am anderen Ende des 
Busses hängt.

von Peter D. (peda)


Lesenswert?

Bei einer Kollision wird der stärkere Transceiver den schwächeren 
überstimmen und der schwächere in die thermische Abschaltung gehen.
Bei hohen Leitungswiderständen kann es auch passieren, daß beide ihr 
gesendetes Paket fehlerfrei zurücklesen.
Eine zuverlässige Kollisionserkennung ist daher nur in höheren 
Protokollschichten möglich. Professionelle RS-485 Protokollstacks sind 
daher oft recht aufwendig.

von Friedrich (Gast)


Lesenswert?

CSMA/CD sind jedoch beim Profibus & beim Modbus Protokoll möglich oder?
Wäre das auch verlässöich/ zu empfehlen?
Welche Methoden gäbe es noch?

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Nein, CSMA/CD ligt unter der Schicht für die Protokolle. Da Profibus und 
Modbus RTU auf RS485 basieren, haben auch diese kein CSMA/CD. Dazu 
brauchst du Treiber wie sie z.B. CAN Verwendet, mit einem dominanten und 
einen rezessiven Pegel. Modbus RTU verwendet ein Singel-Master System 
und zusätzlich CRC um eine störungsfreie Kommunikation zu gewärleisten. 
Profibus hat glaube ich ein Token System.

von Max M. (Gast)


Lesenswert?

Friedrich schrieb:
> kann man beim RS485 auch eine Kollisionserkennung nach CSMA/CD
> realisieren?

Nein, nicht wirklich.
Master / Slave funzt aber ganz wunderbar bei RS485.
Kein Slave sendet ohne das der Master ihn was gefragt hat und kein Slave 
verlässt das Zeitfenster das er zum Antworten hat.
Fehler werden über CRC erkannt.

Multimaster führt bei RS485 zu einem Haufen Probleme die man nicht 
einfach lösen kann.
Selbst wenn man erst auf den Bus hört und dann sendet, ist das keine 
Garantie das das nicht auch zeitgleich ein anderer Teilnehmer macht.
Busfehler können nicht in Bitzeit erkannt werden und je nach 
Leitungslänge, Schleifenwiderstand und Transceiverpower werden die auch 
garnicht erkannt.
Nur die CRC bietet Übertragungssicherheit und bis man die ausgewertet 
hat ist schon viel Zeit verloren.
DANN muss man das Chaos erstmal auflösen bis man neu übertragen kann.

Warum immer und immer wieder die gleiche Frage nach RS485 Multimaster 
kommt kann ich einfach nicht begreifen.
Die Sache ist bis zum Erbrechen ausdiskutiert und dafür gibt es 
Bussysteme die das in Hardware sehr gut machen.

Der Witz ist das jeder der sowas fragt meint das Multimaster schneller 
wäre, aber das stimmt nicht für RS485.
Geht eine Multimaster Übertragung fehlerfrei durch, ist die schnell.
Wird die zernagelt, warten beide Kontrahenten eine zufällige Zeit ab, 
senden nochmal, Teilnehmer 3 hat aber mittlerweile Bus Idle erkannt und 
sendet auch gerade. Nun gibt es schon drei die um den Bus kämpfen un je 
länger das dauert umso mehr Chaos ist auf dem Bus.
Lange Bussegmente mit langer Signallaufzeit und Busauslastung >30-50% 
kann man sich abschminken.
Das dauert eine unbekannte Zeitspanne bis sich der Bus wieder fängt und 
alle Ihre Telegramme losgeworden sind.
Master  Slave ist immer gleich schnell  langsam, kann bestimmte Slaves 
priorisieren und verhindert Kollisionen durch das Design.

Der RS485 ist ein toller Bus, der mit geringem Aufwand an jedem UART 
funzt, aber Multimaster ist einfach nicht das wofür der gebaut wurde.

von Dieter W. (dds5)


Lesenswert?

Multimaster geht recht gut mit Token passing.
Da braucht es nur für den Fall des Tokenverlusts eine gute Strategie für 
den Neustart.

von Friedrich (Gast)


Lesenswert?

Max M. schrieb:
> Nein, nicht wirklich.
> Master / Slave funzt aber ganz wunderbar bei RS485.
> Kein Slave sendet ohne das der Master ihn was gefragt hat und kein Slave
> verlässt das Zeitfenster das er zum Antworten hat.
> Fehler werden über CRC erkannt.

Vielen vielen Dank für diese ausführliche Antwort, auch an allen anderen 
vielen lieben Dank!

Komischerweise findet man in verschiedenen Büchern/Artikeln, 
verschiedene Informationen zu der Thematik.
Das klingt hier für mich aber sehr plausibel.

von Dieter W. (dds5)


Lesenswert?

Dieter W. schrieb:
> Multimaster geht recht gut mit Token passing.
> Da braucht es nur für den Fall des Tokenverlusts eine gute Strategie für
> den Neustart.

Ergänzung:
Echtzeit - im Sinne von jeder plärrt los wenn er was zu sagen hat - geht 
damit natürlich nicht.
Es darf eben immer nur der Master loslegen, der gerade das Token hat.

von Peter D. (peda)


Lesenswert?

Den CAN-Bus hat man schließlich nicht aus langer Weile entwickelt, 
sondern weil man schwerwiegende Nachteile von RS-485 beseitigen wollte.

Es hat schon seinen Charme, wenn der Master die Slaves nicht ständig 
erneut abfragen muß, sondern per Autosend die Slaves selber neue 
Meßwerte und Statusänderungen rausplärren können. Das funktioniert bei 
CAN hervorragend.
Selbst eine Busauslastung von 100% ist kein Problem.

von Max M. (Gast)


Lesenswert?

Peter D. schrieb:
> Das funktioniert bei
> CAN hervorragend.
> Selbst eine Busauslastung von 100% ist kein Problem.

CAN ist aber auch echt ausgefuchst.
Kollisionserkennung in Bitzeit, ohne das das dominante Bit des höher 
priorisierten Teilnehmers dabei zerstört wird.
Da dadurch keine Neuübertragungen notwendig werden tritt die race 
condition nicht auf, die bei anderen Kollisionsbussen ab 50% Auslastung 
zum Kollaps führt.

Dieter W. schrieb:
> Es darf eben immer nur der Master loslegen, der gerade das Token hat.
Bis dann das Token bei Übertragungsfehler zerstört wird und einer der 
Master ein neues erzeugen muss.
Ein Fass ohne Boden und deterministisches Zeitverhalten geht als erstes 
über Bord.

von Purzel H. (hacky)


Lesenswert?

Mittlerweile gibt es ARCnet ueber RS485. Arcnet verwendet Tokenpassing, 
und kann dadurch den Bus maximal belasten. 10MBit mit einem COM20022i, 
mit einigen Buffern von je 256 bytes, und einem Parallel Interface, DMA, 
falls gewuenscht. Inkl einem Lowlevelprotocol, welches auch 
Tokenrecovery, und Rekonfiguration kann. Bei 2.5MBit ist eine 
Leitungslaenge von 4 miles moeglich

Waehrend CAN eher die Billigloesung fuer die Autoindustrie ist. CAN hat 
als maximale Packetlaenge etwa 6 bytes.

Aber man sollte sich schon beantworten, ob man eine Multimaster Loesung 
moechte.

: Bearbeitet durch User
von Bauform B. (bauformb)


Lesenswert?

Kollisionserkennung für arme Leute: Der RS-485-Transceiver und der uC 
werden aus einem gemeinsamen Spannungsregler mit definierter 
Strombegrenzung betrieben ;)

von ziege (Gast)


Lesenswert?

Purzel H. schrieb:
> CAN hat als maximale Packetlaenge etwa 6 bytes.

Da muss ich schon widersprechen. CAN hat bis zu 8 Bytes und CAN FD bis 
zu 64 Bytes Nutzdaten in einem Frame.

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.