CAN报文解析—案例

CAN报文解析—案例1 CAN 报文定义 CAN 报文是指发送单元向接受单元传送数据的帧 我们通常所说的 CAN 报文是指在 CAN 线 内部 CAN 整车 CAN 充电 CAN 上利用 ECU 和 CAN 卡接收到的十六进制报文 2 CAN 协议中 CAN 报文种类报文传输过程中有 数据帧 远程帧 错误帧 过载帧和帧间隔 3 CAN 报文的组成通常接收到的 CAN 报文由很多部分 图 1 组成 解析报文时用到的主要是帧 ID 和数据两部分 3 1 帧 ID 的组成接收到的十六进制的 ID 实际上是由 29 位标识符转换而来 目前大多数的通信协议中都直接给出

1. CAN报文定义

CAN报文是指发送单元向接受单元传送数据的帧。我们通常所说的CAN报文是指在CAN线(内部CAN、整车CAN、充电CAN)上利用ECU和CAN卡接收到的十六进制报文

2. CAN协议中CAN报文种类

报文传输过程中有:数据帧远程帧错误帧过载帧帧间隔

3. CAN报文的组成

通常接收到的CAN报文由很多部分(图1)组成,解析报文时用到的主要是帧ID数据两部分。
在这里插入图片描述

3.1 帧ID的组成
3.2 数据段的组成

数据段一般由1 ~ 8个字节(Byte)组成,来代表通信协议中相应的含义。每个字节有2个字符,分为高4位和低4位。有的数据需要相邻的2个字节组合才能表示,则需要分为高字节和低字节。

4 CAN报文的解析

根据需要收到CAN报文之后,需要根据具体的通信协议解析,然后分析解析出的数据是否正确。下面进行报文实例解析。数据类型定义如表 4 所示。
在这里插入图片描述
报文内容如表2所示。收到的报文为:1818D0F3 ce 0d 00 7d 00 6d 11 00 。

  • 协议中规定报文的第一、二字节表示总电压,高字节在前,低字节在后。又总电压的单位为0.1 V。所以在上面的数据中 0 dce代表总电压,转为十进制为 3534,乘以0.1V的单位,则得到总电压值为353.4 V。
  • 协议中规定报文的第三、四字节表示总电流,又总电流的单位为 0.1A,偏移量为 32000 。所以在上面的数据中 7d00 代表总电流,转为十进制为32000 ,乘以 0.1 再减去 3200 的偏移量等于0 ,则说明此时电池组没有被充电或放电,电流为 0 。
  • 协议中规定报文的第六、七字节表示最高电池电压及位置。单体电池电压单位为0.01V。最高 4 位代表箱号。所以在上面的数据中116d 代表最高电池电压及位置,其中1代表箱号,即最高电池电压在第1 箱。 116 d代表最高电池电压,转为十进制为 365 ,乘以 0.01 A的单位,则得到最高电池电压为3.65 V。
5 CAN报文的解析—案例分析
5.1 江淮3代车仪表无SOC和电池总压
  • 首先找到相应的通信协议,如表5所示。
  • 然后通过整车CAN收到相应报文,如表6所示。
  • 接着找到ID: F4的报文(F4数据帧扩展帧
    0x08 60 5f 00 07 0c 76 07 d0 )进行解析。
  1. 当前SOC=95(5f转换为十进制)×1%(分辨率)+ 0(偏移量)= 95%。
  2. 电池组电压=3190(0c76转换为十进制)× 0.1(分辨率)+ 0(偏移量)= 319 。
  • 最后得出结论:BMS已经正常发送SOC和电池总压至整车CAN,仪表未显示可能是仪表本身问题或者仪表连接整车CAN线路出了问题。
    在这里插入图片描述
    在这里插入图片描述

5.2 江淮 4 代车无法进行慢充
  • 首先插上充电枪后确认充电回路已形成(充电机直流输出端能测到电池电压)。
  • 再找到通信协议中BMS的慢充部分,如表 7 所示。
  • 然后通过整车CAN接收到报文,如表 8 所示。
  • 接着找到ID:403 ( 0 x 00000403 数据帧 标准帧 0x08 03 00 3c 0d 8e 00 00 00 )进行解析。
  1. 控制指令: 03 转换为二进制为 11 —充电器开启(11为二进制),说明BMS允许充电。
  2. 充电电流需求= 60 ( 003c转换为十进制)× 0.1 (分辨率)+ 0 (偏移量)= 6 A。
  3. 充电电压需求= 3470 (0d8e转换为十进制)×0.1(分辨率)+0(偏移量)= 347V。
  • 最后可以得出结论:在充电回路形成、BMS允许充电、充电需求正常的情况下,充电机仍然无输出,肯定是充电机本身有问题。
    0字节处的11是二进制
    在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222139.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:29
下一篇 2026年3月17日 下午4:29


相关推荐

  • React框架开发使用部分常见问题

    React框架开发使用部分常见问题

    2021年7月3日
    99
  • linux node升级_linux系统升级到指定版本

    linux node升级_linux系统升级到指定版本问题在docker容器中启动node项目,但不希望每次都要npmi,所以要把源代码采用挂载的方式,放在镜像中。需要在服务器中npmi,之后启动容器,结果报错了,原因是node版本不对。后来采用了先挂载安装包,后再启动容器。其实我们可以选择升级一下本地主机的node版本就方便多了升级nodenode-v 首先清理npm的缓存 npmcacheclean-f 安装版本管理工具 npminstall-gn 更新到最新的版本 nl..

    2025年6月10日
    4
  • Spring的两种动态代理Jdk与Cglib

    Spring的两种动态代理Jdk与CglibSpring的两种动态代理Jdk与Cglib

    2022年4月23日
    40
  • 非递归方式实现二叉树后序遍历_二叉树递归遍历

    非递归方式实现二叉树后序遍历_二叉树递归遍历二叉树前序遍历对于一种数据结构而言,我们最常见的就是遍历,那么关于二叉树我们该如何去遍历呢?请看大屏幕。。。。上图是一棵二叉树,前序遍历结果:124536咦,我想你可能会异或什么叫做前序遍历,其实很简单,就是按照根-》左-》右的方式去遍历二叉树。首先让我们来看看如何递归的去前序遍历二叉树注:在这里我特别强调一点,在我们二…

    2025年10月21日
    4
  • bowtie结果sam文件解读

    bowtie结果sam文件解读sam 文件解读 HD nbsp nbsp VN 1 0 nbsp nbsp SO unsorted SQ nbsp nbsp SN chr1 nbsp nbsp LN SQ nbsp nbsp SN chr2 nbsp nbsp LN PG nbsp nbsp ID Bowtie nbsp nbsp VN 1 0 0 nbsp nbsp CL bowtiegenome hg19 qreads SRR fastq m1 p4 S S

    2026年3月17日
    2
  • python for循环语句用法_python中for语句

    python for循环语句用法_python中for语句这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下for循环本系列前面“探索Python,第5部分:用Python编程”一文讨论了if语句和while循环,讨论了复合语句以及适当缩进Python语句来指示相关Python代码块。该文的结尾介绍了Pythonfor循环。但就其使用和功能来说,for循环更值得关注…

    2022年8月12日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号