QT CAN编程2 - SocketCAN插件使用

QT CAN编程2 - SocketCAN插件使用,第1张

SocketCAN插件封装了用于访问CAN设备的Linux套接字API。该API是一组由大众汽车研究公司(Volkswagen Research)向Linux内核提供的CAN驱动程序和网络堆栈。

该插件需要具有SocketCAN支持的Linux内核和用于所用CAN硬件的SocketCAN设备驱动程序。

要列出所有(包括未配置的)网络接口, ifconfig -a 可以使用该命令。

要使用SocketCAN,必须加载相应的Linux内核模块,并且必须配置网络接口。

本节假定设备驱动程序已加载(最有可能在连迹拦镇接CAN硬件时自动加载)。

要将设备can0设置为250 kBit / s的比特率,请执行以下 *** 作:

要在100毫秒后自动从“总线关闭”错误中恢复,可以使用以下命令:

要将设备can0设置为500 kBit / s的仲裁比特率和4 MBit / s的数据比特率姿粗(对于具有比特率切换标志的帧):

注意: 要使用CAN FD,必须将MTU(最大传输单元)设置为72字节。

以下使用的命令行测试程序来自 can-utils 包:

首先,有必要检查 QCanBus 是否提供了所需的插件:

其中 socketcan 是插件名称。

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

其中 can0 是活动的CAN接口名称。CAN接口的作用类似于Linux系统上的常规网络接口,可以使用来发现 ifconfig 。同样, availableDevices() 方法返回当前可用设备的列表。

该设备现已打开,可以写入和读取CAN帧:

可以使用 readFrame() 方法完成读取。当至少一个新的帧可用于读取时 framesReceived() 信号信号被触发:

SocketCAN支持以下配衡橘置,可以通过 setConfigurationParameter() 进行控制:

例如:

SocketCAN支持扩展的帧格式和灵活的数据速率。

SocketCAN支持以下附加功能:

控制器局域网(CAN)是一种车辆总线标准,旨在允许微控制器和设备在没有主机的情况下在应用程序中相互通信。

它是一种基于消息的协议,最初是为汽车内的多路电气布线设并山链计的,但也用于许多其他情况。

CAN Bus API提供了一些通用的API来访问CAN设备:

多家供应商为CAN设备提供了各种API进行访问。该 QtSerialBus 模块支持CAN总线插件的设置如下:

如果Qt提供的插件不适合所需的目标平台,则可以实施定制的CAN总线插件。该实现遵循实现Qt插件的标准方法。自定义插件必须部署到 $QTDIR/plugins/canbus 。

每个插件必须定义一个Key值,该Key值用于加载插件。这是通过一个小的json文件完成的。例如,socketcan插件使用以下 plugin.json 内容:

该Key值必须与CAN总线适配器的接口名称一起传递给 QCanBus :: createDevice() 。 QCanBus 使用 QCanBusFactoryV2 接口加载和实例化插件,每个插件必须将其实现为中央入口点。接口充当工厂,其唯一目的是返回 QCanBusDevice 实例。上面提到的接口名称是通过 QCanBusFactory :: createDevice() 工厂方法传递的。以下是 socketcan 插件的工厂实现:

下一步是提供 QCanBusDevice 的唯返实现。至少必须实现以下纯虚函数功能:

在open() 和 close() 方法分别配合 QCanBusDevice :: connectDevice() 和 QCanBusDevice :: disconnectDevice() 使用。检查功能文档以了解实施细节。

QCanBusDevice :: writeFrame() 负责进行完整性检查,例如 QCanBusFrame 的有效性以及设备是否仍处于连接状态。假设检查通过,它将帧写入CAN总线。成功后,它将发出 QCanBusDevice :: framesWritten() 信号;否则,将使用适当的错误消息调用 QCanBusDevice :: setError() 。此功能也可以用于实现异步写入 *** 作。插件实施者有责任在适当绝孙的时间发出适当的信号。

最后但并非最不重要的一点是, QCanBusDevice :: interpretedErrorFrame 提供了一种方便的方法来将CAN总线错误帧的内容转换为人类可读的错误字符串。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12532013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存