新客立减

CAN

信号值解析

本⽂提供⼀种可以解析

CAN

信号各信号值的⼀种⽅法并进⾏说明。

⼀般情况下,⾼端⼀点的设备会计算每⼀个信号的值,但是接受到

CAN

信号的报⽂实际上有各种情况,如何通过设定的起始位和数据长度来

获取某⼀信号的值,详情请参考,本⽂⽅法⽐较笨拙,如有更好的办法,欢迎指教。

假设,我们获取到的数据长度为

8byte

,即

DLC

8

CAN Matrix

表格如下:

我们约定,⼀种表⽰信号的⽅式如下:

1. 

lsb

起始位

2. 

数据长度

按照上⾯的图来说,该信号起始位为

40

,长度为

10

。所以,该信号表⽰值的范围在

0-1023

之间,⾄于具体表⽰的物理量的含义需要有其他

的⽂件规定。

获取到⼀帧数据以后,如何通过⼀系列的运算来得到信号值呢?

这⾥提供⼀种思路:

根据起始位和长度信息确定信息跨越的

byte

根据起始位确定

LSB

所在的

bit

根据跨越的

byte

位组合为数据

把以上组合的数据进⾏位与,得到信号值。

⼤概分为以上的

4

部分,以下分别说明:

设定:

lsbbit,lsbbyte,msbbyte,start,length.

按照以上的例⼦就是:

  

lsbbit  = 0

      lsbbyte = 5

      msbbyte = 4

      start = 40

      length = 10

计算

lsbbit

  

lsbbit = start & 7