读取CAN数据库 转换成16进制 标准数据

读取CAN数据库 转换成16进制 标准数据

背景

当你在工作中,你只获得了CAN DB 文件,或者通信文档
当你在工作中,又缺少像CANoe 这种高大上的工具的时候
当你需要简发送信号的时候,
当你手头只有收发器时候,
此时你需要知道如何将信号转换成标准 CAN 数据信号 发送给机器
那么今天我们要做的就是这个任务

数据编码格式

CAN 数据的编码格式有两种 ,一种是 英特尔的格式 ,另外一种是摩托罗拉的格式
英特尔格式在编码时,如果遇到跨字节的情况就会显得比较不顺序
在这里插入图片描述
官方解释如下:
该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节(LSB)的低位。这样,信号的起始位就是低字节的低位。对于一个信号的数据长度不超过一个字节,但是采用跨字节方式实现的这种情况,因其对信号解析和编码以及信号完整性都存在不利因素,所以主机厂在定义某一车型(系)的整车通信矩阵时,不太可能设计出这种编码结构。

此时我们来看摩托罗拉格式的
在这里插入图片描述
嗯,是按顺序来的 ,所以本文只讨论摩托罗拉格式,直接有效,车厂都用的这种格式

CAN 数据矩阵

下面来了解CAN 数据矩阵,如下图所示
在这里插入图片描述
我们再来看下机器可识别的标准CAN 数据
分为帧ID 和数据, 一个字节 有 8 位

在这里插入图片描述

帧ID 是定义的,我们单纯对比矩阵与数据来看下 ,下图蓝色区域为数据场编号
在这里插入图片描述

一个字节 对应两个 xx ,所以 每个字节前四位对应 一个 x ,不要考虑编号 理解此处,转换无忧

如何转换

首先要根据相关文档,知道某个信号的起始位是多少,长度是多少
我们此处假设起始位 为 45 长度为 3
然后同样需要阅读相关文档,知道定义的值是多少 ,
假设文档定义 0X02 为 OFF 0x03 为ON
假设我们要发送ON 的信号
在这里插入图片描述
图中绿色是我们要发送的数据,
0X03 是16进制,我们要转换成二进制填入字节6 ,3 十六进制转 二进制位 11
我们有三个长度位 ,11 是两个,所以前面数据补0
所以字节6 最后的数据是 0 1 1 0 0 0 0 0
最后我们要把字节6 转换成两个 xx , 二进制0110 转换成 16 进制 是 6
0000 二进制转16 还是0 ,所以我们知道此字节的数据是 60
所以我们最后用CAN 收发器发送数据
00 00 00 00 00 60 00 00
以此类推
需要什么你就转什么
妈妈再也不担心你没有CANoe 了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值