Verwendung des PassThruCAN Plugins

Das Pass-Thru CAN Plugin greift auf CAN-Adapter über die SAE J2534 Pass-Thru API zu. SAE J2534 ist ein Standard für den Zugriff auf Fahrzeugbusse von einem x86 Windows PC. Obwohl die API nur für 32-Bit Windows spezifiziert ist, bieten einige Hersteller auch Implementierungen für 64-Bit Windows und andere Betriebssysteme wie Linux an.

Verwendung von PassThruCAN

Um PassThruCAN nutzen zu können, müssen die entsprechenden Herstellertreiber für den CAN-Adapter installiert sein. Der Hersteller muss außerdem eine Implementierung der J2534 API in Form einer Shared Library bereitstellen. Derzeit wird nur die Version 04.04 der Pass-Thru API unterstützt.

Bei Verwendung eines x64-Builds von Qt funktioniert dieses Plugin nur, wenn der Hersteller des CAN-Geräts auch eine 64-Bit-Version der J2534 Pass-Thru-Schnittstellenbibliothek bereitstellt. Wenn der Hersteller nur eine 32-Bit J2534-Schnittstelle anbietet, ist ein 32-Bit-Build von Qt erforderlich, um diese zu nutzen.

Für die automatische Geräteerkennung muss die Herstellersoftware auch die verfügbaren Adapter in der Windows-Registrierung auflisten und beschreiben. Auf anderen Systemen als Windows wird die automatische Erkennung derzeit nicht unterstützt.

Erstellen von CAN-Bus-Geräten

Zunächst muss geprüft werden, ob QCanBus das gewünschte Plugin bereitstellt:

if (QCanBus::instance()->plugins().contains(QStringLiteral("passthrucan"))) {
    // plugin available
}

Dabei ist passthrucan der Name des Plugins.

Unter Windows sollte die automatische Geräteerkennung verwendet werden, um die verfügbaren CAN-Adapter aufzulisten, die über die Pass-Thru API zugänglich sind:

const auto adapters = QCanBus::instance()->
        availableDevices(QStringLiteral("passthrucan"));
for (const QCanBusDeviceInfo &info : adapters) {
    // List available adapter in the user interface.
    uiListBox->addItem(info.name());
}

Auf anderen Betriebssystemen ist die Liste der gefundenen Adapter leer. Stattdessen sollte anstelle des Gerätenamens der vollständige Pfad zu der vom Hersteller bereitgestellten J2534-Schnittstellenbibliothek angegeben werden:

QCanBusDevice *device = QCanBus::instance()->createDevice(
    QStringLiteral("passthrucan"), QStringLiteral("/path/to/libj2534-vendor.so"));

Für spezielle Anforderungen ist es auch möglich, beim Öffnen des Pass-Thru-Adapters ein herstellerspezifisches Gerätenamen-Argument zu übergeben:

QCanBusDevice *device = QCanBus::instance()->createDevice(
    QStringLiteral("passthrucan"), info.name() + QChar::fromLatin1('%') + deviceName);

Alle Operationen auf dem Pass-Thru-CAN-Bus-Gerät werden asynchron ausgeführt, einschließlich Connect und Disconnect. Um benachrichtigt zu werden, wenn das Gerät zum Lesen und Schreiben von CAN-Frames bereit ist, verbinden Sie sich mit dem stateChanged(QCanBusDevice::CanBusDeviceState state) Signal:

if (!device) {
    // Error handling goes here
} else {
    connect(device, &QCanBusDevice::stateChanged,
            this, &MyClass::canStateChanged);
    device->connectDevice();
}

state() gibt ConnectedState zurück, sobald die Verbindung zum CAN-Adapter erfolgreich hergestellt wurde. Das Gerät ist dann offen für das Schreiben und Lesen von CAN-Frames:

QCanBusFrame frame;
frame.setFrameId(8);
frame.setPayload(QByteArray("\xA3\x6E\x74\x9C", 4));
device->writeFrame(frame);

Das Lesen kann mit der Methode readFrame() durchgeführt werden. Das Signal framesReceived() wird ausgegeben, wenn mindestens ein neuer Frame zum Lesen verfügbar ist:

QCanBusFrame frame = device->readFrame();

Das Pass-Thru CAN Plugin unterstützt die folgenden Konfigurationsoptionen, die über setConfigurationParameter() gesteuert werden können:

Schlüssel der KonfigurationsparameterBeschreibung
QCanBusDevice::LoopbackKeyWenn diese Option aktiviert ist, wird, wenn ein CAN-Frame auf dem CAN-Bus gesendet wird, ein lokales Echo dieses Frames vom CAN-Adapter empfangen. Die Echo-Frames sind mit QCanBusFrame::hasLocalEcho() gekennzeichnet. In der Voreinstellung ist der Loopback-Modus deaktiviert.
QCanBusDevice::RawFilterKeyDiese Option ermöglicht das Einrichten von Filtern für eingehende CAN-Bus-Nachrichten. Falls angegeben, sollte der Wert ein QList<QCanBusDevice::Filter> sein. Es werden nur Datenrahmen-ID-Filter unterstützt. Standardmäßig werden Datenrahmen mit beliebiger ID akzeptiert.
QCanBusDevice::BitRateKeyDie Bitrate des CAN-Busses als ganze Zahl ohne Vorzeichen, in Bit/s. Die Standard-Bitrate ist 500000 (500 kbit/s). Das Setzen der Bitrate, nachdem das Gerät bereits angeschlossen wurde, kann eine implizite Neuinitialisierung der CAN-Schnittstelle auslösen.

Das Pass-Thru-CAN-Plugin unterstützt das erweiterte Frame-Format (29-Bit-IDs), aber nicht die flexible Datenrate (CAN FD).

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.