车联网 CAN Bus 协议介绍与数据实时流处理

文章介绍了CANBus通信协议及其在汽车和工业自动化中的应用,强调了数据收集和传输的挑战。文中提出了利用开源项目eKuiper进行边缘计算,处理CANBus数据,以及使用EMQX作为MQTTBroker实现实时传输到云端。这种方法解决了带宽限制和网络不稳定的问题,同时提到了eKuiper的解码、过滤和信号处理功能,以及EMQX的扩展性和安全性优势。

什么是 CAN Bus?

CAN(Control Area Network)Bus 是一种串行通信协议,能够让设备之间可靠而高效地传输数据。它广泛应用于车辆领域,像神经系统一样连接车辆内部的各个电子控制单元。

CAN Bus 最初由博世公司在 20 世纪 80 年代为汽车应用而设计。它是一种多主、多从、半双工、具有容错能力的协议,非常适合汽车领域的需求。它简单、低成本、可靠,能够在恶劣的环境中工作。CAN Bus 为车辆中所有电子控制单元提供了一个统一的接入点,方便进行连接和诊断。

CAN Bus 数据能够反映连接设备的性能和状态。然而,由于数据量大、带宽有限以及网络不稳定等因素,收集和处理 CAN Bus 数据可能面临一些挑战。

为了应对这些挑战,可以利用 MQTT 协议,确保在网络状况不佳的情况下及时将车辆数据传输到云端。EMQX 是一款开源的 MQTT Broker,能够搭建可靠且可扩展的 MQTT 基础设施,用来收集 CAN Bus 数据。

Collecting CAN bus data

CAN Bus 的发展简史

CAN Bus 由德国跨国工程技术巨头博世在 20 世纪 80 年代初开发,旨在为汽车应用提供一种高效的通信系统,主要目的是简化车辆内部线束的复杂程度。

1986 年,博世发布了首个 CAN 协议,由于其可靠性和健壮性,很快受到了汽车制造商的青睐。1993 年,它成为 ISO-11898 国际标准。该协议演进过程大致如下:

  • 1991 年:梅赛德斯-奔驰在其 W140 S 级车型中采用了 CAN Bus ,成为最早采用 CAN Bus 的汽车制造商之一。
  • 2004 年:推出了 CAN FD,相比传统 CAN 网络,提供了更高的数据速率和更大的有效载荷。
  • 2015 年:使用 ISO-16845:2015 作为一致性测试的测试方案,用于对实现了经典 CAN 以及 CAN FD 协议的设备进行一致性测试。

除了汽车领域外,CAN Bus 协议还逐渐应用于其它行业,例如工业自动化系统(CANopen)和船用电子设备(NMEA 2000)。它的广泛应用主要得益于它能够在恶劣的条件下稳定运行,并且实施成本较低。

CAN Bus 的工作原理

CAN Bus 是一种分布式的通信协议。它的分布式特点使它非常适合对可靠性和实时性有较高要求的应用,如汽车和工业系统。

在 CAN 网络中,所有的节点都通过双绞线或光纤相连。每个节点都有自己的微控制器,负责处理收到的消息和发送的消息。数据由节点在共享总线上广播,所有其它节点都能收到。通信过程的几个关键阶段包括:

  1. 仲裁:为了避免多个节点同时发送数据产生冲突,CAN 采用了一种基于消息优先级的仲裁过程。消息的标识符值越小,优先级越高。
  2. 错误检测:内置的错误检测机制保证了 CAN 网络中数据的完整性。这些机制包括循环冗余校验(CRC)、帧校验序列(FCS)以及接收节点确认位。
  3. 故障界定:如果节点在传输过程中检测到错误或故障,它会进入“被动错误”状态,直到问题解决。这种机制可以防止故障对整个系统功能造成干扰。

这些特性相互配合,使得 CAN Bus 能够高效运行,确保车辆或工厂自动化设备等复杂系统中各个组件之间的可靠通信。

CAN 协议的消息结构

在 CAN Bus 系统中,消息结构对于设备间的高效通信非常重要。该协议的数据帧格式由以下几个字段组成:标识符、控制字段、数据字段和错误检测机制。

  • 标识符 (CAN ID):这是一个唯一的值,用于确定网络上每条消息的优先级。标准的 11 位标识符(CAN 2.0A)提供了多达 2048 种不同的优先级。扩展的 29 位标识符(CAN 2.0B)提供了更多的选择,有超过五亿个优先级。
  • 数据长度码(DLC):位于控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值