Kollision bei CAN?

Guest
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
 
steffenweissbach@web.de schrieb im Beitrag <63d0b1e9.0312080236.7a8d37de@posting.google.com>...

Diese haben die Eigenschaft, dass sie auf eine Nachricht mit dem
Identifier 0x700 alle mit einer Nachricht mit dem Identifier 0x780
reagieren
Das ist selbstverstaendlich verboten.

(auf die Firmware dieser Geräte habe ich keinen Einfluss).
Egal, muss geaendert werden.

Das geschieht natürlich zeitgleich.
Nicht ganz (offenbar kein phasengleicher Takt)

Seltsamerweise funktioniert das.
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.

Müsste nicht eigentlich die Arbitrierung versagen, wenn mehrere
Teilnehmer gleichzeitig unter gleichem Identifier senden?
Ebent.

Muss man solche Ereignisse einfach vermeiden
Ja.

oder wurden bei CAN auch dafür Vorkehrungen getroffen.
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/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
steffenweissbach@web.de schrieb:

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).
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ß.
http://www.autometer.de

==================================================================
In a world without walls and fences, who needs Windows and Gates ?
(Sun Microsystems)
 
Herzlichen Dank erstmal, für die schnelle Antwort. Manchmal ist man
unsicher, ob man richtig dedacht hat.
Diese haben die Eigenschaft, dass sie auf eine Nachricht mit dem
Identifier 0x700 alle mit einer Nachricht mit dem Identifier 0x780
reagieren

Das ist selbstverstaendlich verboten.
Kann ich mich dabei nur auf den logischen Menschenverstand berufen,
oder kann man sowas auch irgendwo nachlesen ? (wegen Diplomarbeit..)
 
<steffenweissbach@web.de> schrieb im Newsbeitrag
news:63d0b1e9.0312080236.7a8d37de@posting.google.com...
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.
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
 

Welcome to EDABoard.com

Sponsor

Back
Top