使用 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::BitRateKey | CAN总线的波特率作为未签名的整数,单位为bit/s。默认波特率为500000(500 kbit/s)。在设备已连接后设置波特率可能触发CAN接口的隐式重新初始化。 |
Pass-Thru CAN插件支持扩展帧格式(29位ID),但不支持灵活的波特率(CAN FD)。
© 2024 Qt公司。文档中的贡献均为各自所有者的版权。所提供的文档是在GNU自由文档许可证版本1.3的条款下授权的,该许可证由自由软件基金会发布。Qt及其相关商标是世界各地芬兰和/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。