NI-CAN Channel API

Überblick


Dieses Dokument beschreibt die Grundlagen der Kanal-API für NI-CAN Treibersoftware. Es ist nützlich für Ingenieure, die gerade mit NI-CAN 2.0 und neuer beginnen. Einen vollständigen Überblick über die Software finden Sie im NI-CAN Hardware and Software User Manual


NI-CAN ist kompatibel mit Versionen von LabVIEW bis LabVIEW 2018, für Benutzer, die spätere LabVIEW Versionen verwenden, lesen Sie bitte den Leitfaden zum Migrieren von NI-CAN Anwendungen auf NI-XNET.

Inhalt

Einführung

Die NI-CAN-Treibersoftware stellt zwei vollständige Application Programming Interfaces (APIs) sowie Tools für Konfiguration und Analyse im NI Measurement & Automation Explorer (MAX) bereit. Mit NI-CAN APIs können Sie Anwendungen für Ihre speziellen Test- und Simulationsanforderungen entwickeln. Mit der Kanal-API können Sie benutzerfreundliche High-Level-Funktionen für den Zugriff auf CAN-Kanäle verwenden, die in Vektordatenbank (*.dbc) oder NI-CAN-Datenbank (*.ncd) definiert sind. Die Kanal-API wird für Anfänger empfohlen. Die Frame-API bietet Low-Level-Zugriff auf die über den CAN-Bus übertragenen Bits und wird für fortgeschrittene Benutzer empfohlen. Dieses Dokument konzentriert sich auf die Kanal-API. Weitere Informationen zur Frame-API finden Sie im NI-CAN Hardware and Software Manual.

Die NI-CAN Channel API nutzt vordefinierte CAN-Kanäle, um CAN-Programmierung ähnlich wie NI-DAQ-Programmierung zu gestalten. Das grundlegende Programmiermodell für die Kanal-API ist in Abbildung 1 dargestellt.

Grundlegendes Programmiermodell der NI-CAN Channel API in LabVIEW


Abbildung 1 Grundlegendes Programmiermodell der NI-CAN Channel API in LabVIEW

Kanalkonfiguration


Zuerst müssen die CAN-Kanäle definiert oder importiert werden. Verwenden Sie dazu den Measurement & Automation Explorer (MAX), ein konfigurationsbasiertes Utility zum Installieren, Testen und Konfigurieren der meisten NI-Hardware einschließlich CAN-Schnittstellen. MAX kann auch zum Importieren oder Erstellen von CAN-Datenbankdateien verwendet werden und enthält zusätzliche Tools wie den CAN-Bus-Monitor und CAN-Kanal-Testpanels.


Abbildung 2 CAN-Kanäle im Measurement & Automation Explorer

Importieren von Kanälen aus einer Datenbankdatei


Oft ist es wünschenswert, CAN-Kanäle aus Datenbankdateien zu importieren. Zum Importieren von CAN-Kanälen aus einer Vektordatenbankdatei (*.dbc) erweitern Sie die Baumstruktur Datenumgebung, um CAN-Kanäle anzuzeigen. Klicken Sie mit der rechten Maustaste auf CAN-Kanäle und wählen Sie Aus CANdb-Datei importieren. Diese Datenbankdateien werden oft von den Ingenieuren erstellt, die die CAN-Geräte entwerfen. Navigieren Sie nun, bis die gewünschte Datenbankdatei gefunden wurde. Sobald die Datei gefunden und ausgewählt wurde, können Sie entweder alle Nachrichten in der Datei importieren oder bestimmte Kanäle auswählen. Klicken Sie auf die Schaltfläche Importieren und dann auf Fertig. Die Nachrichten und Kanäle werden nun im MAX unter CAN-Kanäle angezeigt (siehe Abbildung 2). Diese Nachrichten und Kanäle können durch Erweitern der Nachrichtenbaumstruktur, Rechtsklick auf den gewünschten Kanal und Auswahl von Eigenschaften angezeigt und bearbeitet werden. Durch Anzeigen der Eigenschaften eines Kanals können Sie die Position des Kanals in der Nachricht im Nachrichtenraster sehen.

Erstellen von Kanälen im Measurement & Automation Explorer


Manchmal haben Sie keine Vektordatenbankdatei zur Verfügung und müssen die Kanäle im MAX erstellen. Klicken Sie zunächst mit der rechten Maustaste auf CAN-Kanäle und wählen Sie Nachricht erstellen. Geben Sie den Namen, die Arbitration-ID, die Anzahl der Datenbytes und die Standardschnittstelle an und wählen Sie OK. Nun werden einzelne Kanäle durch einen Rechtsklick auf die Nachricht und Auswahl von Kanal erstellen erstellt. Sie sollten Kanalnamen, Startbit, Bitanzahl, Skalierungsangaben und Einheiten angeben. Beachten Sie, dass beim Festlegen der Startbits und der Bitanzahl das Gitter rechts unten die Position des Kanals in der Nachricht anzeigt.

Wenn Sie auf OK klicken, wird der Kanal im MAX unter der Nachricht angezeigt. Zum Erstellen eines anderen Kanals klicken Sie erneut mit der rechten Maustaste auf die Nachricht und wählen Sie Kanal erstellen. Beachten Sie, dass das Gitter die Bits hervorgehoben hat, die Sie für den vorherigen Kanal reserviert haben. Wenn Sie versuchen, einen anderen Kanal für dieselben Bits zu konfigurieren, wird eine rote Fehleranzeige angezeigt. Die verbleibenden Schritte sind die gleichen für das Erstellen von Kanälen zum Vervollständigen der Nachricht. Sie können die Nachricht mit einer Kombination aus analogen und digitalen Kanälen konfigurieren. Sie können bis zu 64 digitale Kanäle mit jeweils 1 Bit verwenden.

Sobald Sie eine gewünschte Kanalkonfiguration haben, können Sie diese für die Verwendung auf anderen Computern speichern. Klicken Sie mit der rechten Maustaste auf CAN-Kanäle und wählen Sie Kanalkonfiguration speichern. Dadurch wird die Konfiguration als NI-CAN-Datenbankdatei (*.ncd) gespeichert, die mit Treibersoftware ab NI-CAN 2.0 in den MAX importiert oder direkt aus Ihrer Anwendung aufgerufen werden kann. Wie bereits mit Vektordatenbankdateien (*.dbc) demonstriert, können Sie auch Datenbankdateien (*.ncd) von National Instruments aus einer gespeicherten Konfiguration in den MAX importieren. Klicken Sie dazu mit der rechten Maustaste auf CAN-Kanäle und wählen Sie Kanalkonfiguration laden, navigieren Sie zur *.ncd-Datei und wählen Sie die gewünschten Nachrichten aus. Wählen Sie Load und klicken Sie dann auf Done. Die Kanäle werden nun wieder im MAX angezeigt.

Kanal-API-Funktionen


Das grundlegende NI-CAN Programm besteht aus einem Initialisierungs-, Lese- oder Schreibvorgang und einem Löschvorgang (siehe Abbildung 1). Das Bindeglied zwischen den Funktionen ist der Task. Ein CAN-Task ist eine Gruppe von CAN-Kanälen mit der gleichen Timing- und Kommunikationsrichtung (Lesen/Schreiben). Ein Task kann mehrere Nachrichten umfassen, aber alle müssen sich auf derselben Schnittstelle (Port) befinden. Dieses Programmiermodell ist das gleiche, egal ob Sie mit LabVIEW, LabWindows/CVI, C/C++ oder Visual Basic 6.0 arbeiten. Eine Anleitung zu LabVIEW finden Sie auf ni.com/tutorials.

CAN - Start starten


Start-VI "CAN Init": Die Funktion "CAN Init Start" initialisiert eine Kanalliste als einen Task und startet die Kommunikation für diesen Task. Die Funktion "CAN Init Start" verwendet die folgenden Eingangsparameter:

CAN-Startfunktion
Kanalliste—Gibt die Liste der Kanäle für den Task an.
Schnittstelle—Gibt die CAN-Schnittstelle (CAN0, CAN1 usw.) für den Task an.
mode—Gibt den I/O-Modus (Datenübertragungsrichtung) für den Task an.
Sample-Rate—Gibt die Sample-Rate (Samples pro Sekunde) für die Datenübertragung an.

CAN Read


Mehrere Lesemodi erleichtern das Anpassen Ihrer Anwendung. Es gibt drei Modi zum Lesen in NI-CAN. Jeder wird in den folgenden Abschnitten besprochen:

1. Einzelwert
2. Kontinuierlich
3. Zeitstempel

Wenn "Init Start" auf "Input" eingestellt ist, muss Ihre Anwendung die Funktion "Read" aufrufen, um Samples zu erhalten. Ihre Anwendung ruft in der Regel "Lesen" in einer Schleife auf, bis sie fertig ist. Die Funktion "Lesen" ist CAN Read in LabVIEW (alle Arten, die nicht auf Time & Dbl enden) und nctRead in anderen Sprachen. Die Funktionsweise von Lesen hängt von der initialisierten Sample-Rate ab:

CAN-Read-VIs:

CAN - Lesen in LabVIEW

Einzelwert lesen (Modus = Eingabe, Sample-Rate = 0)
Dieser Lesevorgang gibt ein Sample der letzten vom Netzwerk empfangenen Nachricht(en) aus. Für jeden Kanal in der Startliste wird ein Sample ausgegeben. Sie ist besonders nützlich, wenn Sie schnellen Zugriff auf die neueste CAN-Nachricht wünschen.


Abbildung 3 zeigt ein Beispiel für "Lesen mit Sample-Rate = 0". A, B und C stellen Nachrichten für die initialisierten Kanäle dar. Wenn seit dem Start der Anwendung keine Nachricht empfangen wird, wird der Standardwert im MAX (Standard) zusammen mit einer Warnung ausgegeben.


Kontinuierliches Lesen (Modus = Eingabe, Sample-Rate > 0)
Der kontinuierliche Modus ist nützlich, wenn Sie Daten zusammen mit analogen oder digitalen Daten von einem DAQ-Gerät protokollieren möchten. Dieser Lesevorgang gibt ein Array aus Samples für jeden Kanal in der Startliste aus. Jedes Mal, wenn die angegebene Zeit verstrichen ist, wird ein Sample der letzten Nachricht(en) in die Arrays eingefügt. Das heißt, die Samples werden im Array mit der angegebenen Rate wiederholt, bis eine neue Nachricht empfangen wird. Der kontinuierliche Modus ist nützlich, wenn Sie Daten zusammen mit analogen oder digitalen Daten von einem DAQ-Gerät protokollieren möchten. Durch Verwendung der gleichen Sample-Rate mit NI-DAQ-Analogeingangskanälen können CAN- und DAQ-Samples im Laufe der Zeit verglichen werden.


Abbildung 4 zeigt ein Beispiel für "Lesen mit Sample-Rate > 0". A, B und C stellen Nachrichten für die initialisierten Kanäle dar. Δt steht für die durch die Sample-Rate angegebene Zeit zwischen den Samples. Standard ist der Standardwert im MAX.


Lesen mit Zeitstempel (Modus = Eingang mit Zeitstempel)
Der Zeitstempelmodus eignet sich für Testanwendungen, bei denen eine CAN/DAQ-Synchronisation erforderlich ist, aber keine weitere CAN-Datenverarbeitung erforderlich ist. Wenn der Startmodus Zeitstempelgestützte Erfassung lautet, muss Ihre Anwendung die Funktion Zeitstempel lesen aufrufen, um Werte zu erhalten. Ihre Anwendung ruft in der Regel "Zeitstempel lesen" in einer Schleife auf, bis sie fertig ist. Die Funktion "Zeitstempel lesen" gibt Samples aus, die Nachrichten aus dem Netzwerk entsprechen. Für jede Nachricht wird ein zugehöriges Sample zusammen mit einem Zeitstempel ausgegeben, der angibt, wann die Nachricht eingetroffen ist. Für jeden Kanal in der InitStart-Liste wird ein Array aus Samples mit Zeitstempel ausgegeben. Die Funktion "Zeitstempel lesen" ist in LabVIEW CAN Read (Typen, die auf Time & Dbl enden) und in anderen Sprachen nctReadTimestamped.


A, B und C stehen für Nachrichten für die initialisierten Kanäle.


Abbildung 5 zeigt ein Beispiel für "Zeitstempel lesen". A, B und C stellen Nachrichten für die initialisierten Kanäle dar. At, B, C t stellen die Zeitpunkte dar, zu denen jede Nachricht empfangen wurde.

CAN Write


Mehrere Schreibmodi erleichtern das Anpassen Ihrer Anwendung. Es gibt drei Schreibmodi in NI-CAN. Jeder wird im folgenden Abschnitt besprochen:

1. Einzelwert
2. Kontinuierlich
3. Zeitstempel

Wenn der Startmodus auf Ausgabe (oder Ausgabe zuletzt) eingestellt ist, muss Ihre Anwendung die Funktion Schreiben aufrufen, um Werte auszugeben. Ihre Anwendung ruft normalerweise "Schreiben" in einer Schleife auf, bis sie fertig ist. Die Funktion "Schreiben" ist in LabVIEW CAN Write und in anderen Sprachen nctWrite. Die Funktionsweise von Schreiben hängt von der initialisierten Sample-Rate ab:

VI "CAN Write.vi"

CAN - Schreiben in LabVIEW

Nicht periodisches Schreiben eines Werts (Modus = Ausgabe, Sample-Rate = 0)
Schreiben überträgt eine Nachricht sofort im Netzwerk. Die zum Schreiben bereitgestellten Samples werden zur Bildung der Nachrichtendatenbytes verwendet. Für jeden Kanal in der Startliste muss ein Sample angegeben werden. Der Startmodus muss für dieses Verhalten "Ausgabe" lauten (nicht "Ausgabe zuletzt"). Abbildung 6 zeigt ein Beispiel für "Schreiben mit Sample-Rate = 0". A, B, C und D stellen Nachrichten für die initialisierten Kanäle dar. Bei jedem Schreiben werden die zugehörigen Nachrichten schnellstmöglich übertragen.



Abbildung 6: Beispiel: Schreiben mit Sample-Rate = 0

Kontinuierliches Schreiben (Modus = Ausgabe, Sample-Rate > 0)
Sie stellen für jeden Kanal in der Startliste ein Array aus Samples bereit. Jedes Mal, wenn die angegebene Zeit vergeht, wird die nächste Nachricht gesendet. Jede Nachricht verwendet das nächste Sample des Arrays zur Bildung der Datenbytes der Nachricht. Das heißt, die Samples aus dem Array werden periodisch in das Netzwerk übertragen. Bei Verwendung der gleichen Sample-Rate mit NI-DAQ-Analogausgangskanälen können Sie im Laufe der Zeit simultan CAN- und DAQ-Samples ausgeben.



Abbildung 7 zeigt ein Beispiel für Schreiben mit Sample-Rate > 0 und Ausgabemodus. A, B, C und D stellen Nachrichten für die initialisierten Kanäle dar. Δt steht für die durch die Sample-Rate angegebene Zeit zwischen der Nachrichtenübertragung.


Einzelwert schreiben (Modus = Ausgabe zuletzt, Sample-Rate > 0, Für jeden Kanal in der Startliste wird ein Sample angegeben. Jedes Mal, wenn der Takt mit der angegebenen Rate tickt, wird die nächste Nachricht mit dem zuletzt angegebenen Sample übertragen. Der Ausgabemodus ist nützlich, wenn mehrere Tasks mit unterschiedlichen Raten ausgeführt werden, da Sie Samples für alle Tasks in einer Schleife schreiben können. Abbildung 8 zeigt ein Beispiel für "Schreiben" mit Sample-Rate > 0 und Ausgabemodus "Zuletzt".



Abbildung 8: Beispiel: Schreiben mit Sample-Rate > 0, Ausgabemodus

CAN löschen


VI "CAN Clear.vi" Die Funktion Löschen beendet die Kommunikation für den Task und löscht die Konfiguration. Für jeden Task, den Sie initialisieren, müssen Sie Löschen aufrufen, bevor Sie Ihre Anwendung beenden. Die Funktion "Clear" ist in LabVIEW CAN Clear und in anderen Sprachen nctClear.

CAN Clear in LabVIEW

Zusätzliche Kanal-API-Funktionen


In den folgenden Abschnitten finden Sie Informationen zur Erweiterung des grundlegenden Programmiermodells.

Namen ermitteln
Wenn Sie eine Anwendung entwickeln, die von einer anderen Person verwendet wird, möchten Sie möglicherweise keine feste Kanalliste in Ihrer Anwendung angeben. Idealerweise möchten Sie, dass Ihr Endnutzer die gewünschten Kanäle aus Elementen der Benutzeroberfläche auswählt (z. B. Listenfelder). Die Funktion Namen ermitteln fragt den MAX oder eine CAN-Datenbank ab und gibt eine Liste aller Kanäle oder Nachrichten in dieser Datenbank aus. Mit dieser Liste können Sie Elemente der Benutzeroberfläche ausfüllen. Sie können dann Kanäle aus diesen Elementen auswählen, ohne dass Sie jeden Namen über die Tastatur eingeben müssen. Sobald die Auswahl getroffen wurde, kann Ihre Anwendung die resultierende Liste an Init Start übergeben. Die Funktion Namen ermitteln lautet in LabVIEW CAN Get Names und in anderen Sprachen nctGetNames.

Synchronisierung
Die NI-CAN Channel API verwendet RTSI, um bestimmte Funktionseinheiten auf jeder Karte zu synchronisieren. Bei CAN-Karten ist die Funktionseinheit die Schnittstelle (der Port). Bei DAQ-Karten ist die Funktionseinheit ein spezifisches Maß, wie z. B. Analogeingang oder Analogausgang. Jede Funktion leitet zwei Signale über die RTSI-Verbindung:
· Zeitbasis—Gibt einen gemeinsamen Takt für mehrere Karten an, um eine Taktdrift zu verhindern.
· Start-Trigger—Gibt das Startsignal an, das von einer Karte zur anderen gesendet wird, um Startlatenzen zu vermeiden

Eigenschaft festlegen
Mit dieser Funktion können Sie Eigenschaften des Netzwerks wie Baudrate, Transceivertyp und Filtermodus festlegen. Die Funktion "Init Start" verwendet die Schnittstellen- und Kanalkonfiguration wie im MAX oder in der CAN-Datenbankdatei angegeben. Wenn Sie diese Konfiguration in Ihrer Anwendung ändern müssen, können Sie Init Start nicht verwenden, da die meisten Eigenschaften während der Ausführung des Tasks nicht geändert werden können. Verwenden Sie stattdessen zuerst Init, legen Sie dann die Eigenschaft fest und starten Sie den Task.

Eigenschaft ermitteln
Mit dieser Funktion können Sie die Eigenschaften Ihrer Kanäle, Nachrichten oder Ihres Netzwerks ermitteln, einschließlich Baudrate, Nachrichten-ID und Kanalskalierungsfaktor.


Weitere Informationen zur Channel-API oder zur Frame-API finden Sie im NI-CAN Hardware and Software Manual and Specifications von ni.com/manuals.


Zugehörige Links:
NI Controller Area Network (CAN) - Startseite
Synchronisation von CAN- und Analogsignalen für die Gerätevalidierung

Was this information helpful?

Yes

No