对CAN signal 的一点理解
2016-01-31 12:16
295 查看
首先每个 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)
相关文章推荐
- Handler,Looper,HandlerThread浅析
- Spring的声明式事务管理
- Spring的声明式事务管理
- Spring的声明式事务管理
- Linux下修改Mysql的用户(root)的密码
- 1月22日--1月31日(剩3195小时)
- PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
- CURL函数简单介绍,CURL简单用法,初识CURL
- 从无到有写一个运维APP(二)
- 算法_1: 数论
- python求线性回归斜率
- 软件工程的引入:Scrum开发框架总结
- iOS 安全攻防系列(四):分析二进制软件
- Dynamics CRM 2015/2016 Web API:新的数据查询方式
- zyltdlhr
- 井冈山
- 开启自己的博客之旅,
- 系统学习bootstrap——day1
- Java中使用Runtime和Process类运行外部程序
- Tango学习笔记(一)