CAN
信号值解析
本⽂提供⼀种可以解析
信号各信号值的⼀种⽅法并进⾏说明。
⼀般情况下,⾼端⼀点的设备会计算每⼀个信号的值,但是接受到
信号的报⽂实际上有各种情况,如何通过设定的起始位和数据长度来
获取某⼀信号的值,详情请参考,本⽂⽅法⽐较笨拙,如有更好的办法,欢迎指教。
假设,我们获取到的数据长度为
8byte
,即
DLC
为
8
。
CAN Matrix
表格如下:
我们约定,⼀种表⽰信号的⽅式如下:
1.
lsb
起始位
2.
数据长度
按照上⾯的图来说,该信号起始位为
40
,长度为
10
。所以,该信号表⽰值的范围在
0-1023
之间,⾄于具体表⽰的物理量的含义需要有其他
的⽂件规定。
获取到⼀帧数据以后,如何通过⼀系列的运算来得到信号值呢?
这⾥提供⼀种思路:
根据起始位和长度信息确定信息跨越的
byte
位
根据起始位确定
LSB
所在的
bit
根据跨越的
位组合为数据
把以上组合的数据进⾏位与,得到信号值。
⼤概分为以上的
4
部分,以下分别说明:
设定:
lsbbit,lsbbyte,msbbyte,start,length.
按照以上的例⼦就是:
lsbbit = 0
lsbbyte = 5
msbbyte = 4
start = 40
length = 10
计算
lsbbit
:
lsbbit = start & 7