CANopen-Kommunikation zwischen Host und Smart Display
Für die Steuerung eines Smart Displays sind eine Systemschnittstelle und ein Kommunikationsprotokoll erforderlich. Dieser Artikel zeigt anhand eines praktischen Arduino-Beispiels aus Sicht der Host-Steuerung, wie der HOST Befehle sendet, um die Farbe eines Indicators auf dem Smart Display zu ändern. In diesem Beispiel wird ein Touch-Button in der Benutzeroberfläche platziert und ein physischer Taster mit dem Arduino verbunden. Wird entweder der physische Taster oder der Touch-Button betätigt, ändert sich die Farbe des Indicators auf dem Display und die externe LED wird ein- bzw. ausgeschaltet.
Dieses Anwendungsbeispiel zeigt, wie ein 3,5-Zoll CAN Smart Display mit einem Arduino-Entwicklungsboard gesteuert wird. Dazu gehören die Programmierung des physischen Tasters, des Touch-Buttons, des Indicators auf dem Display und der LED auf dem Board sowie der Empfang von Befehlen vom HOST durch das Smart Display. Als Host-Controller dient ein Arduino Mega 2560 mit CAN Bus Shield, der über CANopen mit dem Smart Display kommuniziert.
Das Systemblockdiagramm ist nachfolgend dargestellt:

Systemblockdiagramm
Für diese Anwendung werden folgende Komponenten benötigt:
- 3,5-Zoll CANopen Smart Display
- Arduino Mega 2560
- CAN Bus Shield für Arduino Mega 2560
- CAN Bus Dongle
- Physischer Taster
- LED
- Smart Display GUI Builder v0.4.2 oder höher
Dieses Beispiel gliedert sich in drei Teile:
- Projekt in GUI Builder erstellen
- Projekt erstellen und hochladen
- Arduino-Host programmieren
Projekt in GUI Builder erstellen
Erstellen Sie zunächst ein neues Projekt und geben Sie einen Projektnamen ein. Wählen Sie anschließend den Gerätetyp aus; in diesem Beispiel wird ein 3,5-Zoll-Gerät verwendet. Wählen Sie CANopen als Kommunikationsprotokoll und stellen Sie die Displayausrichtung auf Landscape ein. Wählen Sie anschließend unter den UI-Vorlagen die Option Blank Template und klicken Sie auf Create, um das neue Projekt zu erstellen, wie nachfolgend dargestellt.

Nach Abschluss dieser Einstellungen wird eine leere Seite geöffnet.

Für dieses Anwendungsbeispiel werden ein Touch-Button und ein Indicator-Widget zum Arbeitsbereich hinzugefügt. Wählen Sie die benötigten Widgets im Bedienfeld aus und ziehen Sie sie per Drag-and-drop in den Arbeitsbereich, wie nachfolgend dargestellt.

Projekt erstellen und hochladen
Nachdem die vorherigen Einstellungen und das UI-Design abgeschlossen sind, kann das Projekt erstellt und hochgeladen werden. Klicken Sie in der Symbolleiste von GUI Builder auf Device und wählen Sie Device Property. Im Fenster Device Property können Sie die voreingestellte Baudrate verwenden oder diese entsprechend den Anforderungen Ihrer Anwendung anpassen. Stellen Sie sicher, dass die im Arduino-Programm konfigurierte Baudrate mit der Einstellung in GUI Builder übereinstimmt. Klicken Sie anschließend auf Upload, um das Projekt auf das Smart Display zu übertragen, wie nachfolgend dargestellt.

Nach Abschluss des Projekt-Uploads wird die Meldung "Upload project completed" angezeigt. Klicken Sie auf OK, um das Fenster zu schließen, wie nachfolgend dargestellt.

Nach Abschluss des Uploads zeigt das Smart Display den Startbildschirm an, wie nachfolgend dargestellt.

Nach dem Startbildschirm wechselt das Smart Display zur hochgeladenen Anwendungsseite. Damit ist das Projekt erfolgreich erstellt und hochgeladen.

Arduino-Host programmieren
In diesem Beispiel wird Arduino IDE v2.0.4 zur Programmierung des Arduino-Hosts verwendet. Für die CAN-Bus-Kommunikation kommen die Bibliothek mcp2515_can.h sowie mehrere unterstützende Bibliotheken zum Einsatz. Weitere Einzelheiten finden Sie im Arduino-Code. Beim Aufbau der Kommunikation zwischen Host und Smart Display ist es wichtig, die den Objekten zugeordneten Adressen zu überprüfen. Weitere Informationen zur CAN-Bus-Kommunikation zwischen Host und Smart Display finden Sie im Kommunikationsprotokoll von GUI Builder. Die erforderlichen Objektadressen sind im Arduino-IDE-Programm definiert, wie nachfolgend dargestellt.

In der CANopen-Struktur entspricht der Index des Button-Stils 0 (0x2000), während der Index des Indicator-Stils 1 (0x2001) entspricht. Der jeweilige Index eines Objekts muss bei der Programmierung berücksichtigt werden. Ist der Index eines Objekts bekannt, kann dessen Status über das Arduino-Host-Programm geändert werden. Die entsprechenden Objektindizes lassen sich anhand der Befehlsinformationen in der nachfolgend dargestellten Simulation-Log-Tabelle erkennen:


Hier wird der Datentyp der einzelnen Objekte definiert. Wenn weitere Objekte hinzugefügt werden sollen, müssen auch deren entsprechende Datentypen im Programm definiert werden.

Die folgende Abbildung zeigt, wie ObjectFunCallback die von den einzelnen Objekten empfangenen Werte verarbeitet. Der Code kann entsprechend den Anforderungen der Anwendung angepasst oder um die Verarbeitung weiterer Objekte ergänzt werden.

Wenn der Arduino-Host eine Änderung des Zustands des physischen Tasters erkennt, sendet er den entsprechenden Wert über CANopen an das Smart Display. Der folgende Code zeigt die in der Befehlsstruktur verwendeten IDs und Subindizes. Dieser Programmabschnitt aktualisiert den Wert des Indicators (object index 2) entsprechend dem Zustand des physischen Tasters.

Definieren Sie die Registeradressen für alle Objekte, konfigurieren Sie die Pin-Modi für externe Komponenten wie den physischen Taster und die LED als Ein- bzw. Ausgänge und stellen Sie die Baudrate ein, wie nachfolgend dargestellt:


Abschließend wird in loop() die für dieses Anwendungsszenario erforderliche Programmlogik definiert. Wird entweder der physische Taster oder der Touch-Button auf dem Smart Display betätigt, ändert das System die Farbe des Indicators auf dem Display und schaltet die externe LED ein bzw. aus.

Nachdem das Programm in Arduino IDE erfolgreich überprüft und hochgeladen wurde, wird durch Betätigen des physischen Tasters oder des Touch-Buttons auf dem Smart Display die LED eingeschaltet und die Farbe des Indicators auf Grün geändert. Ist der Indicator rot und die LED ausgeschaltet, wird weder der physische Taster noch der Touch-Button betätigt, wie nachfolgend dargestellt.

Das oben beschriebene Programm kann über den GitHub-Link heruntergeladen werden. In den Beispielen stehen außerdem weitere Dateien und Informationen zu diesem Demo-Projekt zur Verfügung. Der tatsächliche Hardwareaufbau ist nachfolgend dargestellt.

Nach Abschluss dieser Schritte können der physische Taster oder der Touch-Button auf dem Smart Display verwendet werden, um den Status des Indicators auf dem Display und die externe LED zu steuern. Damit ist diese Smart Display CANopen-Kommunikationsdemo abgeschlossen.
Fazit
Dieses Beispiel veranschaulicht die Bedienung und Anwendung von GUI Builder und zeigt, wie sich Host-seitige Steuerungsanwendungen über CAN Bus entwickeln lassen. Darüber hinaus wird erläutert, wie der Host Befehle sendet und empfängt, um das Smart Display zu steuern. Anhand dieses Beispiels erhalten Entwickler ein besseres Verständnis der CANopen-Kommunikation und -Steuerung zwischen Host und Smart Display und können es als Referenz für die Entwicklung weiterer Smart Display-Anwendungen nutzen.