Kollision bei CAN?

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
Im Rahmen meiner Diplomarbeit, hab ich eine Applikation zu schreiben,
die sich mit mehreren CAN-Controllern unterhält.
Diese haben die Eigenschaft, dass sie auf eine Nachricht mit dem
Identifier 0x700 alle mit einer Nachricht mit dem Identifier 0x780
reagieren (auf die Firmware dieser Geräte habe ich keinen Einfluss).
Das geschieht natürlich zeitgleich. Seltsamerweise funktioniert das.
Müsste nicht eigentlich die Arbitrierung versagen, wenn mehrere
Teilnehmer gleichzeitig unter gleichem Identifier senden? Ich habe in
der Literatur nichts darüber gefunden was geschieht wenn zwei TN unter
gleicher ID senden. Muss man solche Ereignisse einfach vermeiden, oder
wurden bei CAN auch dafür Vorkehrungen getroffen.

Danke, Steffen

Re: Kollision bei CAN?
snipped-for-privacy@web.de schrieb im Beitrag

Quoted text here. Click to load it

Das ist selbstverstaendlich verboten.

Quoted text here. Click to load it

Egal, muss geaendert werden.

Quoted text here. Click to load it

Nicht ganz (offenbar kein phasengleicher Takt)

Quoted text here. Click to load it

Nicht wirklich. Da ein CAN-Sender detektiert, ob jemand anders auf
der Leitung eine Mikrosekunde vorher sendet, unterlaesst er sein
eigenes Telegramm, aber *irgendwann* liegen beide Takte zeitgleich
und dann knallts.

Quoted text here. Click to load it

Ebent.


Ja.


Offenbar interessiert es niemanden, welche Vorkehrungen getroffen
wurden (naemlich die verschiedenen IDs) weil Vorgaben vom Hersteller
aus Bequemlichkeit ignoriert werden. Da kann dann das bester
Verfahren nichjts dran machen.
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff /
We've slightly trimmed the long signature. Click to see the full one.
Re: Kollision bei CAN?
Herzlichen Dank erstmal, für die schnelle Antwort. Manchmal ist man
unsicher, ob man richtig dedacht hat.
Quoted text here. Click to load it
 Kann ich mich dabei nur auf den logischen Menschenverstand berufen,
oder kann man sowas auch irgendwo nachlesen ? (wegen Diplomarbeit..)

Re: Kollision bei CAN?
snipped-for-privacy@web.de schrieb:

Quoted text here. Click to load it

Ergänzend zu den Antworten von MaWin:

Es könnte vielleicht sein, daß dieses Telegramm nur für die Konfiguration
verwendet werden soll, wenn genau einer dieser Teilnehmer z.B. mit einem
Programmiergerät verbunden ist. Dann sind solche "Broadcasts" ggf. sinnvoll,
da man die Teilnehmeradresse u.U. nicht kennt.

Im normalen Betrieb sind Broadcasts zu vermeiden, die Antworten mit
identischen IDs verursachen. Bei CANopen z.B. gibt es auch Broadcasts,
aber die Antworten der Teilnehmer enthalten schon in der ID deren
Teilnehmernummer und können damit arbitriert werden.

--
Dipl.-Ing. Tilmann Reh
Autometer GmbH Siegen - Elektronik nach Maß.
We've slightly trimmed the long signature. Click to see the full one.
Re: Kollision bei CAN?

Quoted text here. Click to load it

Die ID hat ja nur den einen Sinn, die einzelnen Kontroller zu unterscheiden.
Es sollte also vermieden werden, dass sich verschiedene Teilnehmer mit der
selben ID melden.

Senden die Module alle den Selben Datensatz? Wenn sie natürlich alle absolut
zeitgleich genau die gleichen Werte senden, bemerkt keiner, dass mehrere
Teilnehmer am Bus hängen. Der CAN Kontroller schreibt seine Daten auf den
Bus und horcht diesen gleichzeitig ab. Er erkennt erst eine Kollision, wenn
etwas anderes vom Bus gelesen wird, als geschrieben wurde. Schreiben alle
Module das Selbe ist dies keine Kollision.

Wahrscheinlicher ist aber, dass die Module nicht genau zeitgleich mit dem
senden beginnen. Dasjenige welches später dran ist, erkennt dass der Bus
schon belegt ist und wartet, versucht also später nochmals zu senden. In
diesem Fall würdest du von mehreren das Telegramm empfangen.

Auch eine Möglichkeit wäre, dass mehrere die Übertragung relativ zeitgleich
starten, aber mit etwas unterschiedlicher Bitrate senden. Früher oder später
tritt dann eine Überlappung auf. Mindestens ein Kontroller erkennt den
Fehler und überschreibt die Daten durch eine Error Meldung. Alle stoppen
daraufhin die Aussendung und versuchen es später wieder.

Dass es also funktioniert ist nichts besonderes. Nur ist nicht genau
abzuschätzen, welcher der obigen Fälle eintritt (vorausgesetzt alle senden
das Selbe). Senden die Kontroller verschiedene Telegramme mit verschiedener
ID sollten früher oder später alle ankommen.

Sinn macht das ganze natürlich nicht, da du die Meldungen nicht zuordnen
kannst.

Infos zum CAN:
http://www.can-cia.de

CAN Spec. ursprünglich von Bosch. Schau dort mal nach Infos.

1999 gab es mal eine dreiteilige Serie über CAN in Elektor. Falls du keinen
Zugriff darauf hast, kann ich dir gerne einen Scan mailen.

Viele Grüße
Wolfgang Berger



Site Timeline