このページの内容

PassThruCANプラグインの使用方法

Pass-Thru CANプラグインは、SAE J2534 Pass-Thru APIを介してCANアダプタにアクセスします。 SAE J2534 は、x86 Windows PC から車両バスにアクセスするための規格です。この API は 32 ビット Windows 向けにのみ規定されていますが、一部のベンダーは 64 ビット Windows や Linux などの他のオペレーティングシステム向けの実装も提供しています。

PassThruCANの使用方法

PassThruCAN を使用するには、CAN アダプタに対応するベンダー製ドライバをインストールする必要があります。また、ベンダーは共有ライブラリを通じて J2534 API の実装を提供している必要があります。現在、Pass-Thru API のバージョン 04.04 のみがサポートされています。

x64ビルドのQtを使用する場合、このプラグインが動作するのは、CANデバイスのベンダーが64ビット版のJ2534 Pass-Thruインターフェースライブラリも提供している場合に限られます。 ベンダーが32ビット版のJ2534インターフェースのみを提供している場合、それを利用するにはQtの32ビットビルドが必要です。

デバイスを自動的に検出するには、ベンダーのソフトウェアが Windows レジストリに利用可能なアダプタの一覧と説明を登録している必要があります。Windows 以外のシステムでは、現在、自動検出はサポートされていません。

CANバスデバイスの作成

まず、QCanBus が目的のプラグインを提供しているかどうかを確認する必要があります。

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

ここで、passthrucanはプラグイン名です。

Windows では、Pass-Thru API 経由でアクセス可能な CAN アダプタを一覧表示するために、自動デバイス検出を使用する必要があります:

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

その他のオペレーティングシステムでは、検出されたアダプタのリストは空になります。その代わりに、デバイス名の代わりに、ベンダーが提供する J2534 インターフェースライブラリへのフルパスを指定する必要があります:

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

特別な要件がある場合は、Pass-Thruアダプタを開く際に、ベンダー固有のデバイス名引数を渡すことも可能です:

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

Pass-Thru CANバスデバイスに対するすべての操作(接続および切断を含む)は非同期で実行されます。デバイスがCANフレームの読み書き準備が整った際に通知を受けるには、stateChanged (QCanBusDevice::CanBusDeviceState state)シグナルに接続してください:

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

state() は、CANアダプタへの接続に成功するとConnectedState を返します。これにより、デバイスはCANフレームの読み書きが可能になります:

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

読み取りは、readFrame() メソッドを使用して行うことができます。framesReceived() シグナルは、読み取り可能な新しいフレームが少なくとも 1 つ利用可能になったときに発火します:

QCanBusFrame frame = device->readFrame();

Pass-Thru CANプラグインは、setConfigurationParameter()を介して制御可能な以下の設定オプションをサポートしています:

設定パラメータのキー説明
QCanBusDevice::LoopbackKey有効にすると、CANバス上でCANフレームが送信された場合、そのフレームのローカルエコーがCANアダプタによって受信されます。エコーフレームにはQCanBusFrame::hasLocalEcho()がマークされます。デフォルトでは、ループバックモードは無効になっています。
QCanBusDevice::RawFilterKeyこのオプションを使用すると、受信する CAN バスメッセージのフィルタを設定できます。値を指定する場合は、QList<QCanBusDevice::Filter> の形式で指定する必要があります。サポートされているのはデータフレーム ID フィルタのみです。デフォルトでは、すべての ID のデータフレームが受け入れられます。
QCanBusDevice::BitRateKeyCANバスのビットレート(bit/s単位の符号なし整数)。デフォルトのビットレートは500000(500 kbit/s)です。デバイスの接続後にビットレートを設定すると、CANインターフェースの暗黙的な再初期化がトリガーされる場合があります。

Pass-Thru CANプラグインは拡張フレーム形式(29ビットID)をサポートしていますが、フレキシブルデータレート(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.