Qt CAN编程1- CAN总线整体介绍

Qt CAN编程1- CAN总线整体介绍,第1张

控制器局域网(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总线错误帧的内容转换为人类可读的错误字符串。

plc接收CAN总线上的信息,可以配置成CANopen基本协议进行9针口程序编写。

CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。

CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。

CAN总线使用串行数据传输方式,可以1Mb/s的速率在40m的双绞线上运行,也可以使用光缆连接,而且在这种总线上总线协议支持多主控制器。

扩展资料:

CAN协议总线的工作原理:

CAN与I2C总线的许多细节很类似,但也有一些明显的区别。当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。

每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。

在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。

参考资料来源:百度百科—可编程逻辑控制器 (可编程控制器件)

参考资料来源:百度百科—CAN总线协议


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存