CAN 多节点通信设计方案

CAN 多节点通信设计方案

1. 引言

针对大规模设备节点接入场景,传统单总线 CAN 网络在节点数量增加后,容易面临总线负载升高、仲裁冲突加剧、心跳报文集中发送、低优先级节点饥饿以及主控侧分包数据交错接收等问题。为提升系统的扩展性、稳定性和工程可实施性,本文提出一种基于 CAN Hub 树状组网的多节点通信方案。

本方案从通信链路、Slave 设备端发送策略以及 Master 端接收组包机制三个方面进行设计,目标是在支持大容量节点接入的同时,兼顾总线公平性、在线检测准确性以及多节点分包通信的可靠性。

2. 方案目标

本方案的主要目标如下:

  • 支持最多 448 个设备节点接入
  • 通过分层组网实现接入层与骨干层解耦
  • 抑制多节点周期心跳同时发送导致的心跳风暴
  • 缓解 CAN 总线高负载下的节点饥饿问题
  • 提高整体系统的可扩展性和工程落地性

3. 通信链路设计

3.1 总体组网结构

系统采用两层 CAN Hub 树状组网结构:

第一层 CAN Hub
  • Slave 端波特率:10 kbps
  • Master 端波特率:100 kbps
  • 每个 Slave 端口接入 32 个设备节点
  • 每个第一层 CAN Hub 具有 7Slave 端口
第二层 CAN Hub
  • Slave 端波特率:100 kbps
  • Master 端波特率:500 kbps
  • 第二层 CAN Hub 具有 2Slave 端口
  • 每个第二层 Slave 端口连接一个第一层 CAN Hub

因此,系统链路结构为:

设备节点 -> 第一层 CAN Hub -> 第二层 CAN Hub -> Master

3.2 容量计算过程

第一层容量计算

已知:

  • 单个第一层 CAN Hub 的每个 Slave 端口接入 32 个设备节点
  • 第一层 CAN Hub7Slave 端口

则第一层容量为:

第一层容量 = 32 × 7 = 224(个节点)

即单个第一层 CAN Hub 最多支持 224 个节点。

第二层容量计算

已知:

  • 第二层 CAN Hub2Slave 端口
  • 每个 Slave 端口连接一个第一层 CAN Hub
  • 单个第一层 CAN Hub 可接入 224 个节点

则第二层总容量为:

第二层总容量 = 224 × 2 =448(个节点)

即整网最大可支持 448 个设备节点。

3.3 通信链路部署图

在这里插入图片描述

4. Slave 设备端设计

4.1 心跳分组与时间窗口机制

在多节点系统中,如果所有节点按固定周期同时发送心跳,会造成总线瞬时冲突显著增大,形成心跳风暴。为抑制该问题,本方案在 Slave 设备端引入基于系统时钟与节点号的心跳分组机制。

设计方式如下:

  • 设置统一心跳周期 T
  • 将心跳周期划分为 N 个时间窗口
  • 每个节点根据 NodeId 和系统时钟确定所属发送窗口
  • 节点仅在其对应窗口内发送心跳

参考实现方式:

windowIndex = (SystemTick / T_base + NodeId) % N

也可简化为:

windowIndex = NodeId % N
sendTime = periodStart + windowIndex × windowSize

该机制的优点:

  • 将节点心跳均匀分散在整个周期内
  • 降低同一时刻大规模抢占总线的概率
  • 提高大节点数场景下的链路稳定性

4.2 节点饥饿避免机制

CAN 总线基于报文 ID 进行仲裁,高优先级消息更易获得发送权。若网络长时间高负载运行,低优先级节点可能反复仲裁失败,最终出现发送超时甚至节点饥饿。

为避免该问题,本方案在 Slave 侧设计超时重发优先级提升机制:

  • 报文首次发送时采用默认优先级
  • 若发送超时,则进入重发状态
  • 重发时提高该条消息的 CAN 仲裁优先级
  • 对于一条分包消息,其所有分包帧均采用相同的优先级
  • 整条消息发送完成后,再恢复到默认优先级体系

该机制可实现:

  • 超时数据尽快重新获得总线发送机会
  • 缓解低优先级节点长期无法发送的问题
  • 提升整体节点发送公平性

4.3 Slave 端发送流程建议

  1. 节点上电后读取 NodeId
  2. 根据 NodeId 和系统时钟计算心跳时间窗口
  3. 到达指定窗口时发送心跳帧
  4. 业务数据发送前判断是否需要分包
  5. 对单条分包消息的所有帧统一使用同一优先级
  6. 若发送成功,则清除超时标记
  7. 若发送超时,则提升该条消息优先级并重发
  8. 消息完整发送结束后退出优先级增强状态

5. Master 端设计

5.1 节点在线机制

Master 侧采用统一在线判定机制:

  • 收到节点心跳,视为节点在线
  • 收到节点业务数据,同样视为节点在线
  • 若在规定超时时间内未收到心跳和业务数据,则判定节点离线

该方式的优点是:

  • 减少仅依赖心跳所带来的在线误判
  • 对业务高频节点更友好
  • 降低在线状态管理复杂度

5.2 组包机制设计

由于 CAN 报文在总线中按优先级进行仲裁,多个节点的分包数据在 Master 端可能会交错到达。因此,Master 必须支持多节点并行组包,而不能简单按接收顺序拼接。

本方案规定:

组包 Key = NodeId + MsgId

即使用 NodeIdMsgId 作为唯一组包标识。

每个组包上下文建议包含
  • NodeId
  • MsgId
  • 总包数或总长度
  • 分包接收位图
  • 数据缓存区
  • 首包接收时间
  • 最后包接收时间
  • 组包超时定时器
组包处理流程
  • 接收到一帧数据后,解析 NodeIdMsgId、序号等字段
  • 使用 NodeId + MsgId 查找组包上下文
  • 若不存在,则创建新的组包上下文
  • 将当前分包写入缓存区对应位置
  • 若全部分包收齐,则进行完整组包并上送业务层
  • 若超时未收齐,则丢弃该组包上下文

5.3 Master 端组包流程

在这里插入图片描述

6. 方案特点

6.1 分层组网,扩展性强

通过两层 CAN Hub 进行树状扩展,可将网络容量从 32 节点扩展至 448 节点,并保持结构清晰、易于维护。

6.2 心跳错峰发送,抑制风暴

通过时间窗口发送心跳,可显著降低心跳报文集中上报造成的拥塞风险。

6.3 优先级提升重发,改善公平性

对发送超时消息实施优先级提升,可缓解长期仲裁失败问题,避免部分节点长期饥饿。

6.4 基于 Key 的并行组包,适应复杂接收场景

通过 NodeId + MsgId 建立独立组包上下文,可支持多节点、多消息并发交错分包接收。

7. 结论

本方案基于 CAN Hub 树状组网实现了大规模 CAN 节点的层次化接入,并从 Slave 端心跳控制、超时重发优先级调节以及 Master 端在线管理和分包组包三方面提升系统整体通信性能。该方案适用于节点数量多、业务并发高、要求通信稳定性的分布式 CAN 系统。

HUB4CAN型 世界上最小的、唯一零延时的 CAN光隔1拖4口HUB(集线器) 一 用途 CAN光隔1拖4口HUB(型号HUB4CAN)用于增加CAN信号的驱动能力、延长通信距离,还可以用于CAN组成星形网。HUB4CAN还实现CAN的上、下位机之间的光电隔离。 二 安装及性能 HUB4CAN有1个上位机CAN口和4个下位机CAN口。 HUB4CAN的下位机侧的CAN(0)、CAN(1)、CAN(2)、CAN(3)可以分别接4个下位机的CAN口。HUB4CAN支持通信速率0—500Kbps、无需任何设置、自动适应,隔离电压2500V。HUB4CAN支持任何版本的CAN协议通信,包括CAN2.0和CAN1.0等。HUB4CAN同时具有吸收浪涌电流的抗雷击保护功能。由于HUB4CAN特有波仕零延时智能转换技术,所以确保适合所有CAN通信软件。 当4个下位机CAN口中有一个、二个甚至三个CAN短路或者烧坏时,HUB4CAN的上位机CAN仍然可以与剩余的正常的CAN下位机通信。使用HUB4CAN组网后,保证某一个或多个节点损坏后不影响其它节点的正常通信! HUB4CAN可以堆叠,即将多个HUB4CAN的上位机CAN端并联起来即可,可以公用一个+5V电源。HUB4CAN的各个下位机CAN口(0号、1号、2号、3号)功能是完全一样的。 三 外形图 HUB4CAN的外形为DB-25/DB-25转接盒大小,如图。是世界上最小的CAN隔离HUB。 四 引脚分配 HUB4CAN的下位机侧(DB-25针、有对应的接线端子)引脚分配如下: (+A表示CAN-H,-B表示CAN-L) 2 3 5 6 8 9 11 12 22 (16) +A0 -B0 +A1 -B1 +A2 -B2 +A3 -B3 GND (+5V) (0# CAN) (1# CAN) (2# CAN) (3# CAN) 地 (电源正) HUB4CAN的上位机侧的引脚分配(有对应的接线端子)如下: HUB4CAN(DB-25针) 5 6 7 22 16 +A —B GND GND +5V CAN信号 电源 HUB4CAN对外接的+5V电源要求电压4.5~5.5V(功耗电流<100mA)。上、下位机的两端各供一个独立电源以保证相互隔离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechIot@tpzw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值