En esta página

Uso del complemento PassThruCAN

El plugin Pass-Thru CAN accede a los adaptadores CAN a través de la API Pass-Thru SAE J2534. SAE J2534 es un estándar para acceder a buses de vehículos desde un PC x86 con Windows. Aunque la API sólo está especificada para Windows de 32 bits, algunos proveedores también proporcionan implementaciones para Windows de 64 bits y otros sistemas operativos como Linux.

Uso de PassThruCAN

Para utilizar PassThruCAN, es necesario instalar los controladores correspondientes del proveedor para el adaptador CAN. El proveedor también debe proporcionar una implementación de la API J2534 mediante una biblioteca compartida. Actualmente, sólo se admite la versión 04.04 de la API Pass-Thru.

Cuando se utiliza una versión x64 de Qt, este complemento sólo funciona si el proveedor del dispositivo CAN también proporciona una versión de 64 bits de la biblioteca de la interfaz J2534 Pass-Thru. Si el proveedor sólo proporciona una interfaz J2534 de 32 bits, se requiere una compilación de 32 bits de Qt para utilizarla.

Para la detección automática de dispositivos, el software del proveedor también debe enumerar y describir los adaptadores disponibles en el registro de Windows. En sistemas distintos de Windows, la detección automática no está soportada actualmente.

Creación de dispositivos de bus CAN

En primer lugar es necesario comprobar que QCanBus proporciona el plugin deseado:

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

Donde passthrucan es el nombre del plugin.

En Windows, el descubrimiento automático de dispositivos debe utilizarse para listar los adaptadores CAN disponibles accesibles a través de la 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());
}

En otros sistemas operativos, la lista de adaptadores descubiertos estará vacía. En su lugar, se debe proporcionar la ruta completa a la biblioteca de interfaz J2534 proporcionada por el proveedor en lugar del nombre del dispositivo:

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

Para necesidades especiales, también es posible pasar un argumento de nombre de dispositivo específico del proveedor al abrir el adaptador Pass-Thru:

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

Todas las operaciones en el dispositivo de bus CAN Pass-Thru se ejecutan de forma asíncrona, incluidas la conexión y la desconexión. Para ser notificado cuando el dispositivo está listo para leer y escribir tramas CAN, conéctese a la señal stateChanged(QCanBusDevice::CanBusDeviceState state):

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

state() devolverá ConnectedState una vez que se haya conectado con éxito al adaptador CAN. El dispositivo está entonces abierto para escribir y leer tramas CAN:

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

La lectura puede realizarse utilizando el método readFrame(). La señal framesReceived() se emite cuando hay al menos una nueva trama disponible para lectura:

QCanBusFrame frame = device->readFrame();

El plugin Pass-Thru CAN soporta las siguientes opciones de configuración controlables a través de setConfigurationParameter():

Clave del parámetro de configuraciónDescripción
QCanBusDevice::LoopbackKeyCuando está activado, si se transmite una trama CAN en el bus CAN, el adaptador CAN recibirá un eco local de esta trama. Las tramas de eco se marcan con QCanBusFrame::hasLocalEcho(). Por defecto, el modo loopback está desactivado.
QCanBusDevice::RawFilterKeyEsta opción permite establecer filtros para los mensajes entrantes del bus CAN. Si se proporciona, el valor debe ser QList<QCanBusDevice::Filter>. Sólo se admiten filtros de ID de trama de datos. Por defecto, se aceptan tramas de datos con cualquier ID.
QCanBusDevice::BitRateKeyLa tasa de bits del bus CAN como un entero sin signo, en bits/s. La tasa de bits por defecto es 500000 (500 kbit/s). El ajuste de la tasa de bits después de que el dispositivo ya se haya conectado puede provocar una reinicialización implícita de la interfaz CAN.

El plugin CAN Pass-Thru es compatible con el formato de trama ampliado (ID de 29 bits), pero no con la velocidad de transmisión de datos 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.