专栏名称: 谦益行
ECU研发快10年,有系统,硬件和软件内容输出,也有汽车人的成长故事,经验分享和行业洞见
目录
相关文章推荐
观察者网  ·  《哪吒2》预测破150亿!股价狂飙! ·  昨天  
扬子晚报  ·  官宣!元宵晚会节目单来了! ·  昨天  
半岛晨报  ·  大连市游泳馆突发紧急通知! ·  2 天前  
新疆是个好地方  ·  看完《哪吒2》,来新疆一起消灭“虾兵蟹将”! ·  2 天前  
51好读  ›  专栏  ›  谦益行

你知道CAN报文的发送类型有哪些吗?

谦益行  · 公众号  ·  · 2024-06-05 06:20

正文

我们在用 CANoe 进行CAN总线的测试时,会发现CAN报文的 发送类型 有很多种,有些类型不太容易理解,有些类型之间又容易混淆,一不小心就会用错,今天我们就来介绍下CAN报文的发送类型。

CAN报文的发送类型分为 基本 发送类型和 混合 发送类型两大类。

基本 发送类型包括 Cyclic 周期发送、 OnChange 变化时发送、 OnWrite 写入时发送和 IfActive 有效时发送。

基本发送类型中的Cyclic称为 周期型 ,而其他3个类型称为 事件型 event)。

混合 发送类型就是指基本类型中的 周期 型与 事件 型的 组合 ,包括 Cyclic and OnChange Cyclic and OnWrite Cyclic and IfActive

1. 基本发送类型

1.1 Cyclic周期发送

周期发送 是指报文 独立 信号 ,按照 固定 的周期发送,也就是报文的发送与报文中的 信号 变化 没有 关系。

周期性发送报文是我们最常用的报文,这类报文中包含的通常都是需要经常使用或者变化频率 较高 的信号,比如车速、转速等信号。

Cyclic周期性发送报文示例

如上图示例所示,ID为201的报文按照 200ms 固定 周期发送 车速信号 ,车速信号在这个期间会有些变化,从52->51->52->53>,但是 无论 信号如何变化,报文周期都是6.8-6.6=7.0-6.8=7.2-7.0= 200ms

周期型报文就像大城市的公交汽车,报文中的信号就像是乘车的人员,一旦公交汽车发车周期确定了,比如10分钟,则每间隔10分钟都会有一辆车从始发站启动后发出,无论车上有几个人,都会按时发送。

周期型报文(公交车)按固定时间发送,即使信号为0(空车)也要发送

1.2 OnChange变化时发送

变化时发送 是指当报文中的 信号变化 时,报文才会发送。

这类报文中包含的通常都是变化频率 不高 的信号,比如通过中控屏进行的按键调节信号, OnChange报文的 目的是为了 节省 总线资源。

OnChange变化时发送报文示例

如上图示例所示,ID为368的报文为OnChange变化时发送的报文,假如 当前 的背光亮度为30,此时总线上 没有 368报文;

此时通过中控屏的触摸按键将背光设置 改为32 ,则中控屏会发出 一帧 ID为 368 ,背光信号为 32 的报文。

1.3 OnWrite写入时发送

写入时发送 是指当报文中的信号被 重新写入 时,报文才会发送。这里的重新写入主要是指在测试软件中对信号的 重新设置 写入,在ECU中也可以认为是 应用层 底层 通信信号的写入。

OnWrite与OnChange的主要区别是OnWrite重新写入 不一定 就是数值的 改变 ,也 可以 保持 不变

还是以中控屏的背光设置为例,比如背光原来为30,可以再次设置为 32 ,设置后又 继续 设置 了两次,但都是 32 ,并没有改变这个值。

OnWrite写入时发送报文示例

以上示例中,最后两帧的背光信号都是32,对比第2帧并 没有 改变,但是中控屏依然会 发出 这两帧,因为都是 写入 的操作。

这里要注意的是发送时间都是 实时随机 的时间(中控按键确认的时间),并没有固定发送周期。

1.4 IfActive有效时发送

有效时发送 是指当报文中的信号为 有效值 时,报文会以一个 快速的周期 (cycle time fast)发送,当信号变为 无效时 ,报文就 不再发送

无效值 Inactive Value也就是 默认值 比如BCM的报文ID是380,其中的 DoorOpen 门开信号的 无效值 0 ,表示门关, 有效值 1 表示门开, 快速周期 100ms

开始状态为 门关 ,总线上 没有 报文,当门开有效,即 门开 信号为 1 时,380报文立即以100ms为周期发送报文;当 门关 后,即门开信号为 0 时,报文立即 停发

IfActive有效时发送报文示例

以上示例中,报文是以 快速周期100ms 发送的,不发送时就表示门开信号为 0 (无效)。

OnChange OnWrite IfActive 属于 事件型 报文,这类报文就像在出租车站点等待的出租车,没人打车的时候不需要上路,只有乘客打车时才会上路,否则大量的空载出租车在道路上行驶,不仅没有作用,反而容易挤占道路资源,造成道路拥挤。

事件型报文(出租车)没有信号触发(无人打车)时不需要发出

1.5 Repetitions重复发送参数

对于 基本型 中的 OnChange OnWrite 来说,它们虽然 不是 周期发送,但是并 不是 说只能发一次,也 可以 发送 多次 。对于 IfActive 来说,也可以按快速周期发送的同时 限制 发送次数 。而发送次数是通过定义 Repetitions 重复次数来实现的。

所以基本型中又衍生出 3 个子类型 OnChangeWithRepetition、OnWriteWithRepetition和IfActiveWithRepetition。

比如在 OnChangeWithRepetition 子类型中,如果设置了 Repetitions = 3 ,则报文会连续发送 三次 ,三次之间的时间 不小于 最小报文发送的 延迟时间Delay time

OnChangeWithRepetition示例

注意连续发送报文的时间间隔都比较短,但是也不能小于最小报文发送的延迟时间Delay time,示例中的间隔为100ms。

再比如在 IfActiveWithRepetition 子类型中,Repetitions= 2 ,快速 发送周期cycle time fast=100ms, 则报文只发送 两帧

IfActiveWithRepetition示例

注意此时报文的发送周期是按照cycle time fast 快速周期时间 100ms发送,虽然与上面的 间隔时间 100ms相等,但是含义不同。

2. 混合型

2.1 Cyclic and OnChange

周期和变化时发送 是指报文平时是周期性发送,当报文中的信号变化时,此报文会额外的发送一次,原来的周期不变。

Cyclic and OnChange示例

如上图示例所示,其中的 第3帧 就是 额外 发送的帧,它的发送时间为 6.920 s,是个实时的 随机 时间,不是按照周期发送的。

2.2 Cyclic and OnWrite

周期和写入时发送 是指报文 平时 是周期性发送,当报文中的信号被重新写入时,此报文会 额外 的发送一次,原来的周期不变。

Cyclic and OnWrite示例

如上图示例所示,其中的 第3帧 第5帧 就是写入时 额外 发送的帧,它们的发送时间分别为 6.920s 7.110s ,都是实时的 随机 时间,不是按照周期发送的。

注意第5帧的重新写入数据 仍然 是32,没有改变,这也是 OnWrite OnChange 的主要区别。

2.3 Cyclic and IfActive

周期和有效时发送 是指报文 平时 是按 正常周期 cyclic time发送,当报文中的信号为 有效值 时,报文会按IfActive报文的 快速周期cyclic time fast 发送,等到信号变为无效值时,报文又会 恢复 到原来的 正常 周期 发送。

Cyclic and IfActive示例

如上图示例所示,其中 前4帧 是按正常周期1s发送,信号为 无效值0 ;从第5帧开始,当信号变为有效值1时,则按照快速周期100ms发送,所以 中间4帧 是快速发送。后面4帧, 信号又恢复为 无效值0, 周期也恢复为 正常周期1s。

快速周期时间 cycle time fast 这个参数仅在 IfActive 及其组合的类型中使用。

混合型的报文就像旅游景点的接驳班车,平时人少时(基本不变),可以 慢周期 发车;等到节假日乘客突然很多(变化)时就临时改为快速发车。这样平时可以较少的占用道路资源,假日期间又可以解决临时客流量大的问题。

混合型的报文(接驳班车)发送周期平时慢,紧急时快

信号触发(人流量变化)时需要快速的把消息发送出去

3应用实例

在实际使用时,有些信号涉及到 相互同步 的问题,比如 仪表 中控 背光 设置。

传统产品中, 仪表 的按键可以设置 仪表屏 的背光亮度, 中控 按键可以设置 中控屏 的背光亮度。在智能座舱的架构中,希望仪表和中控的背光能 一体化 联动,同步变化。也就是通过仪表或中控 可以设置 车内屏幕 的统一亮度,这时就需要仪表和中控信号 同步 ,互相 发送 背光亮度信息。

如果仪表和中控都按 周期 报文发送,两者是可以实时同步,一方发现对方的需求与自己不同时,与对方同步即可。

但这种方式也有缺点,就是对 软件处理 的时序要求很高,比如在中控系统上进行手动设置后,在中控发出新的报文给仪表时,仪表在 未收到 新报文前已经将包含 旧数值 的报文发给中控系统,而中控系统 误以为 这个旧报文是仪表的 新设置 ,就会导致仪表和中控两者 不停 地向对方同步,陷入 死循环 ,背光一直在跳变,无法达成稳定状态。







请到「今天看啥」查看全文