CAN-Message kommt nicht überall an

Gast #5731370
Lesenswert?
• ▲
▼
Hallo,

wahrscheinlich habe ich eine spezielle Funktionsweise noch nicht ganz 
verstanden. Als CAN Analyzer habe ich den von Microchip.
Der Effekt der mich die Haare raufen lässt, ist folgender: mit einem 
Gerät sende ich eine Message auf den Bus, ein anderes Gerät soll diese 
Message verarbeiten. Diese Message wird vom Analyzer angezeigt. Sie 
kommt aber beim Gerät nicht an, bzw. wird nicht verarbeitet. Das ist mir 
aufgefallen, weil ich ihn von Modus "Normal" auf "listen only" 
umgeschaltet habe, er also sein Ack nicht senden kann. Dann geht es. Die 
Nachricht kommt an und wird verarbeitet. Soweit kein Problem, mit nur 
zwei Teilnehmern funktioniert es anscheinend. Mein Gedanke ist aber: 
Wenn ich mehr als zwei normale Teilnehmer am Bus angeschlossen habe, 
wird es wahrscheinlich wieder so sein, dass der erste, der die Message 
erhält, sein Ack sendet und die Nachricht von den langsameren 
Teilnehmern nicht erkannt wird, weil der Sender nur so oft sendet, bis 
einer sein Ack gesendet hat. Ich habe schon eine Abfrage geschrieben, 
welche den Erhalt der Message zurücksendet und den Sender erkennen 
lässt, dass die Message angekommen ist. Ich hatte ihn so oft senden 
lassen, bis die Nachricht akzeptiert wurde. Es wurden z.B. 67 Messages 
versendet, bis die Antwort kam. Bei mehreren Teilnehmern kann man das 
doch unmöglich so machen, oder doch? Wie wird dieses Problem 
üblicherweise gelöst?
Danke für jede Erleuchtung!
#5731382
Lesenswert?
• ▲
▼
Haareraufer schrieb:
> Es wurden z.B. 67 Messages
> versendet, bis die Antwort kam.

Da ist was faul, normal ist das nicht.

Häng doch mal ein Logic Analyzer oder Oszi an den RX-Ausgang des 
CAN-Transceivers von Deinem Empfänger-Gerät.

Siehst Du dort die korrekte Nachricht?

Wenn ja, dann ist das Problem vermutlich im Gerät oder dessen Software 
zu suchen.

Wenn nein, dann vermutlich bei der Verdrahtung des CAN oder der 
Transceiver ist kaputt oder falsch beschaltet.
Gast #5731400
Lesenswert?
• ▲
▼
Ich werde mich morgen nochmal damit auseinandersetzen. Vielleicht habe 
ich dann neue Ideen. Jetzt ist erstmal Feierabend. Danke für den Tip mit 
dem Transceiver, den werde ich mir nochmal vorknöpfen.
#5731608
Lesenswert?
• ▲
▼
Haareraufer schrieb:
> mit nur
> zwei Teilnehmern funktioniert es anscheinend.

Hast Du denn auch GND mit verbunden?
Die CAN-Transceiver erlauben nur maximal +/-5V Störspannung zwischen den 
GND-Potentialen.

Haareraufer schrieb:
> wird es wahrscheinlich wieder so sein, dass der erste, der die Message
> erhält, sein Ack sendet und die Nachricht von den langsameren
> Teilnehmern nicht erkannt wird

Nein. Der Teilnehmer, der einen Fehler erkennt, sendet einen Errorframe, 
worauf auch der mit dem ACK die Nachricht verwirft.
Langsam und schnell gibt es nicht, alle müssen die gleiche Baudrate 
benutzen.
Eine Nachricht kann nur dann verloren gehen, wenn Du keine Pufferung 
eingerichtet hast und das nächste Paket eintrifft, bevor das vorherige 
ausgelesen wurde.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.