CANopen Analyser, Protokoll Stack, EDS-Editor – alles Open-Source<

CanOpenMonitor

Erstes Open-Source CANopen Analysetool für Windows. Die Software dient der Inspektion von CANopen-Nachrichten, ermöglicht das Lesen und Schreiben im Objektverzeichnis, überträgt Firmware-Updates, konfiguriert CANopen Devices, setzt NMT-Kommandos ab und simuliert Fehler-Nachrichten. Im „CanOpen Log“-Fenster werden CANopen-Nachrichten aufgezeichnet und dekodiert.

Der Datenverkehr lässt sich mittels Filterfunktion auf das Wesentliche beschränken. Die aufgezeichneten Daten lassen sich als XML-Datei speichern und in das Programm zurückladen. NMT- und Emergency-Nachrichten werden zusätzlich in separaten Fenstern angezeigt. Ein nettes Gimmick ist, dass das Plug-ins die Möglichkeit haben, empfangene Nachrichten zu dekodieren und den Text in der Spalte „Info“ zu ändern. Der CanOpenMonitor ist Plug-in-fähig, die Liste der bereits existierenden Plug-ins ist bemerkenswert:

Wie bereits in der Einleitung erwähnt, ist der CanOpenMonitor ein Open-Source-Projekt. Die Quellen und eine Executable Version stehen auf GitHub zum Download bereit:

https://github.com/MHS-Elektronik/CanOpenMonitor
GIT Repository

Die Applikation sowie die Plug-ins sind ursprünglich von Robin Cornelius entwickelt worden. Ich habe die Benutzeroberfläche ansprechender gestaltet, viele Bugs gefixt, die Tiny-CAN Hardware implementiert sowie den Weg für CAN-FD eröffnet. Das Programm und die Plug-ins sind in C-Sharp basierend auf Microsoft Forms entwickelt. Die CAN-Treiber wurden in C entwickelt. Kompilieren lässt sich das Ganze mit der Visual Studio 2022 Community Edition: https://visualstudio.microsoft.com/de/vs/community

Tiny CANopen Node IO

Eine virtuelle CANopen Digital-IO Baugruppe

Das zweite Open-Source-Tool, ein Spaßprojekt für Lehrzwecke, wird von mir zum Testen des CANOpenMonitor verwendet. Als physikalisches CAN-Interface dient ein Tiny-CAN Adpter, die Kommunikation zwischen Tiny CANopen Node IO sowie dem CANOpenMonitor findet also auf einem physikalischen CAN-Bus statt, lediglich die Schalter und LEDs sind nicht echt. „Tiny CANopen Node IO“ basiert auf den CiA Standards 301 und 401-1 (https://can-cia.org). Als CANopen Backend läuft „CANopenNode“. Auf das Objektverzeichnis wird über die API-Calls von „CANopenNode“ zugegriffen, zusätzliche Informationen wie Daten-Type, Zugriffs-Type, Parameter-Name werden aus der EDS-Datei ausgelesen. Die Software ist in „C“ programmiert, basiert auf „GTK3“ (https://gtk.org) und „GooCanvas“, läuft somit unter Linux, Windows und auf dem kleinen Rasperry PI. Die Quellen und compilierte Versionen für alle oben genannten Systeme finden Sie hier:

https://github.com/MHS-Elektronik/TinyCanOpen
GIT Repository

Als Entwicklungsumgebung für das Programm wurde Code::Blocks verwendet: https://www.codeblocks.org

CANopenNode

Freier ANSI C Embedded CANopen Stack

Mit über 1.600 Stars auf GitHub ist es wohl das größte Highlight in dieser Liste der Open-Source-Programme, https://github.com/CANopenNode/CANopenNode. Zu CANopenNode gibt es bereits einen sehr guten Artikel, den Sie hier finden: https://can-newsletter.org/software/protocol-stacks/220628_open-source-canopen-protocol-stack-extended_cnlm">https://can-newsletter.org/software/protocol-stacks/220628_open-source-canopen-protocol-stack-extended_cnlm Ich will hier lediglich auf einige programmtechnische Details eingehen. Der CANopenNode Stack ist so entwickelt worden, dass er ohne ein Echtzeitbetriebssystem auskommt. Im Wesentlichen ist zur Funktion des Protokoll-Stacks der Aufruf von drei Funktionen notwendig, all diese drei Funktionen sind nicht blockierend. Die Funktion „CO_CANinterrupt“ ist die Interrupt-Routine, die beim Empfang und Versenden von CAN Paketen aufgerufen wird. Die Funktion „tmrTask_thread“ wird von einem Timer Interrupt zyklisch, normalerweise alle 1 ms aufgerufen. Dann ist noch die „CO_process“-Funktion zu erwähnen, die zyklisch von der Main-Schleife aus aufgerufen werden muss. Die Zeitdifferenz des letzten Aufrufs muss der Funktion als Parameter übergeben werden. In ein Projekt sollten alle Dateien des Stacks eingebunden werden. Die einzelnen Module werden schließlich über die „define“-Makros in „301/CO_config.h“ eingebunden sowie konfiguriert.

CANopenEditor

EDS-Datei Editor und noch vieles mehr

Neben dem Laden und Speichern von EDS-Dateien werden weitere Dateiformate wie z. B. XDD unterstützt. Das Programm lässt sich zum Konvertieren der Dateien verwenden. Beim Erzeugen eines neuen Projekts ist die Import-Profile-Funktion sehr hilfreich, Teile einer vorhandenen EDS/XDD-Datei lassen sich importieren. Die CANopen Profile DS301, DS401 und DS302 können aus Template-Dateien importiert werden. Zusätzlich ist das Erstellen der Dokumentation im „HTML“- oder „Markdown“-Format möglich. Der CANopenEditor ist der größte Liebling von CANopenNode. Das Programm erzeugt die beiden für den Betrieb von CANopenNode essenziellen Dateien „OD.c“ und „OD.h“. Die beiden Dateien beinhalten das Objektverzeichnis. Der Zugriff auf das Objektverzeichnis kann direkt oder über API-Funktionen von CANopenNode stattfinden.

Fazit

Die Open-Source-Welt bietet alle für die Entwicklung von CANopen-Devices notwendigen Werkzeuge an. CANopenNode sowie der CANopenEditor müssen sich nicht mehr hinter kommerziellen Tools verstecken. CANopenNode ist sauber strukturiert in C programmiert, eine Dokumentation und viele Beispiele für diverse Mikrocontroller, Linux und Windows sind vorhanden. Der CANopen Stack wird permanent weiterentwickelt und gepflegt. Beim CANopenEditor verhält es sich ähnlich, auch dieses Programm wird gepflegt und weiterentwickelt. Der CANopenMonitor hinkt seinen beiden Brüdern etwas hinterher, aber auch hier tut sich gerade einiges. Für alle Tools gilt: Die Portierung nach CAN-FD ist meiner Meinung nach nur noch eine Frage der Zeit.