使用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插件从can0到can63提供了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公司以及/或在全世界其他国家的商标。所有其他商标是各自所有者的财产。