このページでは

VirtualCANプラグインの使用

VirtualCANプラグインを使用すると、CANハードウェアなしで、ローカルTCP/IP接続を介してCANアプリケーションのテストを行うことができます。 最初のクライアントが createDevice() を呼び出すと、TCP サーバーが作成されます。デフォルトの TCP ポートは 35468 ですが、createDevice() に完全修飾 URL を指定することで変更できます。サーバーが一度起動すると、同じシステム上でそれ以上のサーバーは起動されません。

その後、すべてのクライアントは CAN フレームをサーバーに送信し、サーバーはそれらを他のクライアントに配信します。

CANバスデバイスの作成

まず、QCanBus に目的のプラグインが用意されているかを確認する必要があります。

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

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

次に、特定のインターフェースへの接続を確立できます:

QCanBusDevice *device = QCanBus::instance()->createDevice(
    QStringLiteral("virtualcan"), QStringLiteral("can0"));
device->connectDevice();

ここで、can0はアクティブなCANチャネル名です。VirtualCANプラグインは、「can0」から「can9」までの10個のチャネルを提供します。これらはすべて、CAN 2.0またはCAN FDチャネルとして使用できます。これらのチャネルのいずれかに接続されたすべてのアプリケーションは、そのチャネルに送信されたすべてのメッセージを受信します。

リモートサーバーに接続するには、インターフェース名として以下の完全修飾URLを使用します:

tcp://server:port/canX

例:

tcp://192.168.1.2:35468/can0

これで、デバイスは CAN フレームの書き込みおよび読み取りが可能になります:

QCanBusFrame frame;
frame.setFrameId(8);
QByteArray payload("A36E");
frame.setPayload(payload);
device->writeFrame(frame);

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

QCanBusFrame frame = device->readFrame();

VirtualCANは、setConfigurationParameter()を通じて制御可能な以下の設定をサポートしています:

設定パラメータのキー説明
QCanBusDevice::CanFdKey仮想CANバスがCAN FDモードで動作するかどうかを決定します。このオプションはデフォルトで無効になっています。
QCanBusDevice::ReceiveOwnKeyデフォルトでは、CANフレームを送信したのと同じデバイスでのCANフレームの受信は無効になっています。このオプションを有効にすると、CANバスに送信されたすべてのCANフレームが直ちに受信バッファに表示されます。これは、送信が成功したかどうかを確認するために使用できます。このオプションが有効になっている場合、受信されたフレームにはQCanBusFrame::hasLocalEcho() が付加されます

© 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.