标签:
首先每个 ECU是一个网络节点,每个网络节点可收发一些 Message,每个Message 由CAN signals构成。每个 CAN signal利用一个或多个连续的2进制位来表示承载的信息。下面就来举个列子简要介绍如何理解 CAN signal的定义。
以节点 IPC中ESP_STATUS 这个CAN message 中的 ESP_VehicleSpeed这个CAN signal 为例,查看 DBC中的定义如下图:
可以看到这个 signal由13 个bit构成,字节序是 Motorola,单位是KPH ,Factor是 0.05625,
无效值是 0x1FFF,最大值是460.69 KPH 。
怎么来理解这个 13bit以及Factor 和最大值呢?
首先可以看 Layout,这个signal 占了2个字节,其中一个占了 8位,另一个占了5位,合在一起正好是 13位,而13 个bit可以表示的无符号范围正好是 0 – 0x1FFF,因此一般把最大的那个范围定做 Invalid Value,如果CAN signal 是这个值,那么此时获取的 CAN signal就是无效的。
那么怎么理解 factor呢?可以把它理解为精度,即每一个 CAN signal的整数值所代表的有单位的数值,即 0表示0 KPH , 1表示 1*0.05625即0.05625KPH ,2表示 2*0.05625即0.1125 KPH ,n表示 n*0.05625 KPH,注意这里的n是十进制数值。因此可以把收到的 CAN signal整数值对应转换为实际数值,自然的可以理解最大值是怎么来的,即 0x1FFF即十进制8191 ,与0.05625相乘得到的 460.69。
如何根据 layout获得相应的CAN signal 数值呢,写代码获取该 CAN signal的数值应该是这样:
(Msg.ESP_VehicleSpeed_0 << 0) + (Msg.ESP_VehicleSpeed_1 << 5)
标签:
原文地址:http://www.cnblogs.com/autogeek/p/5173085.html