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のみがサポートされています。
Qtのx64ビルドを使用する場合、このプラグインは、CANデバイスのベンダーがJ2534 Pass-Thruインターフェイスライブラリの64ビットバージョンも提供している場合にのみ動作します。ベンダーが32ビットのJ2534インターフェースのみを提供している場合、それを使用するには32ビットビルドのQtが必要です。
デバイスを自動検出するためには、ベンダーのソフトウェアが 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::BitRateKey | CANバスのビットレート(符号なし整数、単位はbit/s)。デフォルトのビットレートは500000(500 kbit/s)。デバイスが接続された後にビットレートを設定すると、CANインターフェースが暗黙的に再初期化される場合があります。 |
Pass-Thru CANプラグインは、拡張フレームフォーマット(29ビットID)をサポートしていますが、フレキシブルデータレート(CAN FD)はサポートしていません。
© 2025 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.