Sur cette page

Utilisation du plugin PassThruCAN

Le plugin Pass-Thru CAN accède aux adaptateurs CAN via l'API Pass-Thru SAE J2534. SAE J2534 est une norme permettant d'accéder aux bus de véhicules à partir d'un PC Windows x86. Bien que l'API ne soit spécifiée que pour Windows 32 bits, certains fournisseurs proposent également des implémentations pour Windows 64 bits et d'autres systèmes d'exploitation tels que Linux.

Utilisation de PassThruCAN

Pour utiliser PassThruCAN, les pilotes du fournisseur correspondant à l'adaptateur CAN doivent être installés. Le fournisseur doit également fournir une implémentation de l'API J2534 par le biais d'une bibliothèque partagée. Actuellement, seule la version 04.04 de l'API Pass-Thru est prise en charge.

Lors de l'utilisation d'une version x64 de Qt, ce plugin ne fonctionne que si le fournisseur du périphérique CAN fournit également une version 64 bits de la bibliothèque de l'interface J2534 Pass-Thru. Si le fournisseur ne fournit qu'une interface J2534 32 bits, une version 32 bits de Qt est nécessaire pour l'utiliser.

Pour la découverte automatique des périphériques, le logiciel du fournisseur doit également répertorier et décrire les adaptateurs disponibles dans le registre Windows. Sur les systèmes autres que Windows, la découverte automatique n'est actuellement pas prise en charge.

Création de périphériques de bus CAN

Il convient tout d'abord de vérifier que QCanBus fournit le plugin souhaité :

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

passthrucan est le nom du plugin.

Sous Windows, la découverte automatique des périphériques doit être utilisée pour lister les adaptateurs CAN disponibles accessibles via l'API Pass-Thru :

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

Sur d'autres systèmes d'exploitation, la liste des adaptateurs découverts sera vide. En revanche, le chemin complet vers la bibliothèque d'interface J2534 fournie par le vendeur doit être indiqué à la place du nom du dispositif :

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

Pour des besoins particuliers, il est également possible de fournir un argument de nom de périphérique spécifique au fournisseur lors de l'ouverture de l'adaptateur Pass-Thru :

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

Toutes les opérations sur le dispositif de bus CAN Pass-Thru sont exécutées de manière asynchrone, y compris la connexion et la déconnexion. Afin d'être notifié lorsque le périphérique est prêt à lire et écrire des trames CAN, connectez-vous au signal stateChanged(QCanBusDevice::CanBusDeviceState state) :

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

state() renverra ConnectedState une fois que l'adaptateur CAN aura été connecté avec succès. Le dispositif est alors ouvert à l'écriture et à la lecture de trames CAN :

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

La lecture peut être effectuée à l'aide de la méthode readFrame(). Le signal framesReceived() est émis lorsqu'au moins une nouvelle trame est disponible pour la lecture :

QCanBusFrame frame = device->readFrame();

Le plugin CAN Pass-Thru prend en charge les options de configuration suivantes, contrôlables via setConfigurationParameter() :

Clé du paramètre de configurationDescription
QCanBusDevice::LoopbackKeyLorsqu'elle est activée, si une trame CAN est transmise sur le bus CAN, un écho local de cette trame sera reçu par l'adaptateur CAN. Les trames d'écho sont marquées par QCanBusFrame::hasLocalEcho(). Par défaut, le mode bouclage est désactivé.
QCanBusDevice::RawFilterKeyCette option permet de définir des filtres pour les messages entrants du bus CAN. Si elle est fournie, la valeur doit être QList<QCanBusDevice::Filter>. Seuls les filtres d'ID de trames de données sont pris en charge. Par défaut, les trames de données avec n'importe quel ID sont acceptées.
QCanBusDevice::BitRateKeyLe débit binaire du bus CAN sous la forme d'un entier non signé, en bits/s. Le débit binaire par défaut est de 500000 (500 kbit/s). Le réglage du débit binaire après que le dispositif a déjà été connecté peut déclencher une réinitialisation implicite de l'interface CAN.

Le plugin CAN Pass-Thru prend en charge le format de trame étendu (ID de 29 bits), mais pas le débit de données flexible (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.