Verwendung des PassThruCAN-Plugins
Das Pass-Thru-CAN-Plugin greift über die SAE J2534 Pass-Thru-API auf CAN-Adapter zu. SAE J2534 ist ein Standard für den Zugriff auf Fahrzeugbusse von einem x86-Windows-PC aus. Obwohl die API nur für 32-Bit-Windows spezifiziert ist, bieten einige Anbieter 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 zudem eine Implementierung der J2534-API in Form einer gemeinsam genutzten Bibliothek bereitstellen. Derzeit wird nur Version 04.04 der Pass-Thru-API unterstützt.
Bei Verwendung einer x64-Version von Qt funktioniert dieses Plugin nur, wenn der Hersteller des CAN-Geräts auch eine 64-Bit-Version der J2534-Pass-Thru-Schnittstellenbibliothek bereitstellt. Stellt der Hersteller nur eine 32-Bit-J2534-Schnittstelle bereit, ist eine 32-Bit-Version von Qt erforderlich, um diese nutzen zu können.
Für die automatische Geräteerkennung muss die Herstellersoftware zudem 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 überprüft werden, ob unter QCanBus das gewünschte Plugin bereitgestellt wird:
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 über die Pass-Thru-API zugänglichen CAN-Adapter aufzulisten:
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 erkannten Adapter leer. Stattdessen sollte anstelle des Gerätenamens der vollständige Pfad zur 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 außerdem möglich, beim Öffnen des Pass-Thru-Adapters ein herstellerspezifisches Argument für den Gerätenamen zu übergeben:
QCanBusDevice *device = QCanBus::instance()->createDevice(
QStringLiteral("passthrucan"), info.name() + QChar::fromLatin1('%') + deviceName);Alle Operationen am Pass-Thru-CAN-Bus-Gerät werden asynchron ausgeführt, einschließlich des Verbindungsaufbaus und der Trennung. Um benachrichtigt zu werden, wenn das Gerät zum Lesen und Schreiben von CAN-Frames bereit ist, muss eine Verbindung zum Signal „ stateChanged “ (QCanBusDevice::CanBusDeviceState state) hergestellt werden:
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 steht dann zum Lesen und Schreiben von CAN-Frames bereit:
QCanBusFrame frame;
frame.setFrameId(8);
frame.setPayload(QByteArray("\xA3\x6E\x74\x9C", 4));
device->writeFrame(frame);Das Lesen kann mit der Methode „ readFrame()“ erfolgen. Das Signal „ framesReceived()“ wird ausgelöst, sobald 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 des Konfigurationsparameters | Beschreibung |
|---|---|
| QCanBusDevice::LoopbackKey | Wenn diese Option aktiviert ist und ein CAN-Frame über den CAN-Bus übertragen wird, empfängt der CAN-Adapter ein lokales Echo dieses Frames. Die Echo-Frames sind mit „ QCanBusFrame::hasLocalEcho()“ gekennzeichnet. Standardmäßig ist der Loopback-Modus deaktiviert. |
| QCanBusDevice::RawFilterKey | Diese Option ermöglicht die Einrichtung von Filtern für eingehende CAN-Bus-Nachrichten. Falls angegeben, sollte der Wert ein „ QList<QCanBusDevice::Filter>“ sein. Es werden nur Filter für Datenrahmen-IDs unterstützt. Standardmäßig werden Datenrahmen mit beliebiger ID akzeptiert. |
| QCanBusDevice::BitRateKey | Die Bitrate des CAN-Busses als vorzeichenlose Ganzzahl in Bit/s. Die Standardbitrate beträgt 500000 (500 kbit/s). Das Einstellen 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), jedoch nicht die flexible Datenrate (CAN FD).
© 2026 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.