RevPi Con CAN ansteuern

Du hast verschiedene Möglichkeiten, Dein RevPi Con CAN Modul anzusteuern. Wir zeigen Dir in diesem Tutorial, welche das sind. Bevor wir aber das RevPi Con CAN ansteuern können, müssen wir das Gerät zuerst im Linux Device Tree konfigurieren.

Voraussetzungen

  • Dein RevPi ConCAN ist an Dein RevPi Connect angeschlossen.
  • Dein RevPi Connect ist an die Spannungsversorgung angeschlossen.
  • Dein Rev Pi Connect ist mit dem Internet oder Deinem Netzwerk verbunden.
  • Du kennst die IP-Adresse Deines RevPi Connects.

Los geht’s!

  • Öffne Deinen Browser
  • Gib die IP-Adresse Deines RevPi Connect in die Adresszeile ein.

Der Webserver öffnet sich

  • Melde Dich mit Benutzernamen und Passwort an. Der Benutzername ist “admin”,  das Passwort findest Du auf dem Aufkleber an der Seite Deines RevPi Connect.
  • Klicke auf “Start PiCtory”.

PiCtory öffnet sich.

  • Ziehe ein RevPi Connect und ein RevPi Con CAN auf die virtuelle Hutschiene.
  • Speichere diese Datei.
  • Boote Dein RevPi Connect neu.
  • Melde Dich auf der Kommandozeile an.

Das RevPi Con CAN Modul ist jetzt als Netzwerkschnittstelle im System sichtbar. In der Regel erhält sie den Namen “can0”. Der Zugriff erfolgt über die SocketCAN Schicht.

Schnittstelle konfigurieren

Bevor Du auf die Schnittstelle zugreifen kannst, musst du eine Bitrate konfigurieren und die Schnittstelle hochbringen.

Die Bitrate bestimmt die Geschwindigkeit der Datenübertragung an einer Schnittstelle. Für den CAN Bus könntest Du eine Bitrate von bis zu 1 MBit/s verwenden. Du must dabei jedoch die Leitungslänge Deines CAN Busses berücksichtigen. Wenn Du eine sehr lange Leitung hast und eine schnelle Bitrate einstellst, ist es möglich, dass einige Geräte die gesendeten Informationen nicht erhalten. Das liegt daran, dass das Signal dann zu kurz anliegt, um alle Geräte in Deinem Netzwerk in der vorgegebenen Zeit zu erreichen.

Wir empfehlen Dir, diese Bitraten für die entsprechende Leitungslänge:

Leitungslänge Bitrate
40 Meter 1000 kBit/s
100 Meter 500 kBit/s
500 Meter 100 kBit/s
1000 Meter 50 kBit/s

Möchtest du beispielsweise als Bitrate 1 MBit/s nutzen, musst Du folgende Kommandos in die Kommandozeile schreiben:
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up

Ansteuerung auf der Kommandozeile

Mit Hilfe der vorinstallierten can-utils kannst du jetzt:

  • Ein einzelnes Paket senden
    cansend can0 123#1122334455667788
  • Pakete mit Zufallsdaten in einer Endlosschleife senden
    cangen can0 -g 0 -i -x
  • Empfangene Pakete ausgeben
    candump can0
  • Überwachen, ob bei der Übertragung Bitfehler auftreten
    ip -details -statistics link show can0

Treten Bitfehler gehäuft auf, geht die Schnittstelle zunächst in den “Error Passive” und schließlich in den “Bus Off” Fehlerzustand. Im “Bus Off” Fehlerzustand sendet und empfängt die Schnittstelle keine Pakete mehr. Du musst die Schnittstelle dann durch folgendes Kommando wieder in den Normalzustand versetzen:
sudo ip link set can0 type can restart

Möglich ist auch eine automatische Rückkehr in den Normalzustand nach einer Wartezeit:
sudo ip link set can0 down
sudo ip link set can0 type can restart-ms 100
sudo ip link set can0 up

Ansteuerung mit Python und C/C++

Mit der vorinstallierten python-can Bibliothek kannst du die Schnittstelle bequem aus Python Scripten ansprechen. Die Bitrate legst du beim Öffnen der Schnittstelle mit dem can.interface.Bus() Konstruktor fest.

Für C/C++ verwende die libsocketcan Bibliothek.

Eine API-Dokumentation im HTML-Format kannst Du mit den Paketen python-can-doc und libsocketcan-doc nachinstallieren. Falls Du eine Kommunikationsmatrix verwendest, könnten für Dich außerdem die Pakete python-canmatrix, python3-canmatrix und canmatrix-utils interessant sein.

Mitschnitt der CAN-Kommunikation

Du kannst die CAN-Kommunikation mit tcpdump mitschneiden, um sie auf einer anderen Maschine mit wireshark zu analysieren.

Gib dazu folgenden Befehl  in der Kommandozeile ein:
sudo tcpdump -i can0 -w out.pcap

Alternativ kannst Du wireshark auf Deinem RevPi Connect installieren und lokal anzeigen lassen, oder die Bildschirmausgabe über das X Windows Protokoll oder VNC auf eine entfernte Maschine umleiten.