CAN协议制定如何减少带宽占用


CAN协议帧类型分为标准帧(11位ID)和扩展帧(29位ID),两种CAN数据帧都有一个帧数范围,总会有使用完的时候,因此如果是在功能复杂的协议中要尽可能的减少ID的个数,不仅能减少资源的占用还能提高协议的可阅读性。

CAN协议的制定无非就是设备与设备两者之间的一种约定,设计者可根据自己的使用需求去命名CAN  ID的以及帧内容,在设计时应当要考虑到通讯效率、安全性、准确性等问题。

在这里,本伽椰子通过工作经验总结了几种减少带宽占用率方法:

1.使用协议嵌套的方式,例如此时有一个CANID为0x180,但是需要使用此ID来实现5个功能,此时可以将 CAN数据帧的第0个Byte用作标识,Byte0==1是对应某某功能,Byte1==2对应某某功能,以此类推。

CANID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x180

Byte0 == 1 : 功能一

Byte0 == 2 : 功能二

     ...

功能一数据内容

功能二数据内容

     ...

功能一数据内容

功能二数据内容

     ...

功能一数据内容

功能二数据内容

     ...

功能一数据内容

功能二数据内容

     ...

功能一数据内容

功能二数据内容

     ...

功能一数据内容

功能二数据内容

     ...

功能一数据内容

功能二数据内容

     ...


 2、多层嵌套,在1的基础上可将Byte1、Byte2...等用作功能标识,虽然能减少带宽占用,但会增加数据解析所需的时间;

CANID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x180

Byte0 == 1 : 功能一

Byte0 == 2 : 功能二

     ...

Byte0 == 1  , Byte1 == 1 :功能三

Byte0 == 1  , Byte1 == 2 :功能四

Byte0 == 2  , Byte1 == 1 :功能五

Byte0 == 2  , Byte1 == 2 :功能六

数据内容

数据内容

数据内容

数据内容

数据内容

数据内容

 3、物尽其用,将每帧里面每个bit都考虑到位,对每个bit都赋予意义;

CANID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x180

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...


4、减少数据帧长度,一般的CAN帧长度为8Byte,若CAN帧中存在空数据(即无用数据位),可考虑不发送该Byte 例如CANID  0x180 只有Byte0和Byte1有用,那么在CAN数据帧打包时可将后面的5个Byte不发送;

CANID Byte0 Byte1
0x180

bit0 : 某开关量

bit1 : 某开关量

    ...

bit0 : 某开关量

bit1 : 某开关量

    ...


 5、数据定时发送,对数据量大,但是读取频率要求不高的数据帧可定时发送(如10分钟发送一帧),减少带宽占用 ;0x180与0x181都有X轴与Y轴数据,如果对0x180数据帧读取频率要求不高,则可以对0x180做定时发送,减少同一时间总线上数据量的大小,从而达到减少带宽占用。

CANID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x180

X轴

Y轴

秒 

CANID Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x181

X轴

Y轴          

注:在CAN协议中,ID越小的数据帧优先级越高,这是由CAN协议底层决定了;