使用VectorCAN插件

VectorCAN插件封装了用于与Vector Informatik CAN适配器协同工作的底层API。

此插件需要Vector CAN设备驱动程序和vxlapi.dll(64位构建的vxlapi64.dll)。

创建CAN总线设备

最初需要检查QCanBus是否提供所需的插件

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

其中vectorcan是插件名称。

接下来,可以建立到特定接口的连接

QString errorString;
QCanBusDevice *device = QCanBus::instance()->createDevice(
    QStringLiteral("vectorcan"), QStringLiteral("can0"), &errorString);
if (!device) {
    // Error handling goes here
    qDebug << errorString;
} else {
    device->connectDevice();
}

其中can0是活动的CAN信道名称。VectorCAN插件从can0can63提供了64个通道(由Vector API中的XL_CONFIG_MAX_CHANNELS定义)。其中一些通道可能是虚拟的,因此可以不使用实际的CAN硬件即可使用。要查找虚拟通道,可以使用包含在Vector驱动程序包中的程序"Vector Hardware Config"(vcanconf.exe)。availableDevices()方法返回当前可用的设备列表。

设备现在可以用于写入和读取CAN帧

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

可以通过使用readFrame()方法进行读取。当至少有一个新帧可供读取时,将发出framesReceived()信号

QCanBusFrame frame = device->readFrame();

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

配置参数键描述
QCanBusDevice::BitRateKey确定CAN总线连接的波特率。
QCanBusDevice::ReceiveOwnKey默认情况下,禁用接收与发送同样CAN帧的同一设备上的CAN帧。启用此选项后,发送到CAN总线上的所有CAN帧将立即出现在接收缓冲区中。这可以用于检查发送是否成功。如果启用此选项,因此接收到的帧带有QCanBusFrame::hasLocalEcho()标记
QCanBusDevice::CanFdKey在CAN总线连接上启用CAN FD的使用。如果启用此选项,则无法接收发送的自己的CAN帧,因此设置QCanBusDevice::ReceiveOwnKey为true没有效果。自Qt 5.15起。
QCanBusDevice::DataBitRateKey确定CAN总线连接的数据波特率。仅当将QCanBusDevice::CanFdKey设置为true时才可用。自Qt 5.15起。

VectorCAN支持以下附加功能

© 2024 Qt公司有限公司。其中包含的文档贡献的版权属于其各自的拥有者。本提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3的条款进行许可的。Qt及其标志是芬兰的Qt公司以及/或在全世界其他国家的商标。所有其他商标是各自所有者的财产。