使用VirtualCAN插件

VirtualCAN插件允许通过本地TCP/IP连接测试CAN应用,而不需要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"和"can1"。两者都可以用作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()方法进行读取。当至少有一个新帧可供读取时,会发出framesReceived()信号

QCanBusFrame frame = device->readFrame();

VirtualCAN支持以下可通过setConfigurationParameter()控制的配置

配置参数键描述
QCanBusDevice::CanFdKey确定虚拟CAN总线是否在CAN FD模式下运行。此选项默认禁用。
QCanBusDevice::ReceiveOwnKey同一设备上接收与发送CAN帧相同的CAN帧默认情况下是禁用的。当启用此选项时,发送到CAN总线上的所有CAN帧将立即出现在接收缓冲区中。这可以用来检查发送是否成功。如果此选项被启用,因此接收到的帧将带有QCanBusFrame::hasLocalEcho()标记

© 2024 Qt公司有限公司。此处包含的文档贡献的版权归其所有者所有。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可协议的第1.3版许可的。Qt及其相应徽标是芬兰和/或世界其他地区Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。