使用 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接口,则需要使用Qt的32位构建版本来使用它。

为了自动发现设备,供应商软件必须在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状态) 信号

if (!device) {
    // Error handling goes here
} else {
    connect(device, &QCanBusDevice::stateChanged,
            this, &MyClass::canStateChanged);
    device->connectDevice();
}

state()将会返回ConnectedState,一旦CAN适配器成功连接后。此时设备可以打开以写入和读取CAN帧

QCanBusFrame frame;
frame.setFrameId(8);
frame.setPayload(QByteArray("\xA3\x6E\x74\x9C", 4));
device->writeFrame(frame);

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

QCanBusFrame frame = device->readFrame();

Pass-Thru CAN插件支持以下可通过setConfigurationParameter()控制的配置选项

配置参数键描述
QCanBusDevice::LoopbackKey当启用时,如果在CAN总线上发送CAN帧,CAN适配器将接收到该帧的本地回声。回声帧带有QCanBusFrame::hasLocalEcho标记。默认情况下,回环模式是禁用的。
QCanBusDevice::RawFilterKey此选项允许设置用于接收CAN总线消息的过滤器。如果提供,值应为QList<QCanBusDevice::Filter>。仅支持数据帧ID过滤器。默认情况下,接受任何ID的数据帧。
QCanBusDevice::BitRateKeyCAN总线的波特率作为未签名的整数,单位为bit/s。默认波特率为500000(500 kbit/s)。在设备已连接后设置波特率可能触发CAN接口的隐式重新初始化。

Pass-Thru CAN插件支持扩展帧格式(29位ID),但不支持灵活的波特率(CAN FD)。

© 2024 Qt公司。文档中的贡献均为各自所有者的版权。所提供的文档是在GNU自由文档许可证版本1.3的条款下授权的,该许可证由自由软件基金会发布。Qt及其相关商标是世界各地芬兰和/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。