Utilisation du plug-in PassThruCAN
Le plug-in Pass-Thru CAN accède aux adaptateurs CAN via l'API Pass-Thru SAE J2534. La norme SAE J2534 permet d’accéder aux bus des 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 sous la forme d’une bibliothèque partagée. Actuellement, seule la version 04.04 de l’API Pass-Thru est prise en charge.
Lorsque vous utilisez une version x64 de Qt, ce plugin ne fonctionne que si le fabricant du périphérique CAN fournit également une version 64 bits de la bibliothèque d'interface J2534 Pass-Thru. Si le fabricant ne fournit qu’une interface J2534 32 bits, une version 32 bits de Qt est nécessaire pour pouvoir l’utiliser.
Pour la détection automatique des périphériques, le logiciel du fabricant doit également répertorier et décrire les adaptateurs disponibles dans le registre Windows. Sur les systèmes autres que Windows, la détection automatique n’est actuellement pas prise en charge.
Création de périphériques CAN
Il faut tout d’abord vérifier que QCanBus propose le plugin souhaité :
if (QCanBus::instance()->plugins().contains(QStringLiteral("passthrucan"))) {
// plugin available
}où « passthrucan » est le nom du plugin.
Sous Windows, la détection automatique des périphériques doit être utilisée pour répertorier 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 les autres systèmes d’exploitation, la liste des adaptateurs détectés sera vide. À la place, le chemin d’accès complet à la bibliothèque d’interface J2534 fournie par le fournisseur doit être indiqué à la place du nom du périphérique :
QCanBusDevice *device = QCanBus::instance()->createDevice(
QStringLiteral("passthrucan"), QStringLiteral("/path/to/libj2534-vendor.so"));Pour des besoins particuliers, il est également possible de passer 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 périphérique de bus CAN Pass-Thru sont exécutées de manière asynchrone, y compris la connexion et la déconnexion. Afin d’être averti lorsque le périphérique est prêt pour la lecture et l’écriture de trames CAN, abonnez-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 la connexion à l’adaptateur CAN aura été établie avec succès. Le périphérique est alors accessible pour 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 Pass-Thru CAN prend en charge les options de configuration suivantes, contrôlables via ` setConfigurationParameter()` :
| Clé du paramètre de configuration | Description |
|---|---|
| QCanBusDevice::LoopbackKey | Lorsqu’il est activé, 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 boucle de retour est désactivé. |
| QCanBusDevice::RawFilterKey | Cette option permet de configurer des filtres pour les messages entrants sur le bus CAN. Si elle est fournie, la valeur doit être une 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, quel que soit leur ID, sont acceptées. |
| QCanBusDevice::BitRateKey | Le débit binaire du bus CAN, exprimé sous forme d’entier non signé, en bits/s. Le débit binaire par défaut est de 500000 (500 kbit/s). La modification du débit binaire après la connexion de l’appareil peut déclencher une réinitialisation implicite de l’interface CAN. |
Le plugin Pass-Thru CAN prend en charge le format de trame étendu (identifiants 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.