学习笔记|电动汽车上CAN报文解析

news2024/11/26 1:59:19

电动汽车,以电池和电机系统取代了内燃机汽车的发动机系统,使得汽车上主要的结构和电气件发生了很大变化。在传统汽车上已经比较成熟的CAN总线技术,电动汽车仍然需要作出必要调整才能够使用。

1 电动汽车的CAN协议

常用车辆CAN总线通讯协议,大多直接采用SAE-J1939的形式制定。电动汽车首先遇到了电池系统,电机系统等新加入电气需要重新设定PGN码等问题。CAN协议始终处在诸侯割据的状态。在过去的几年中,国家及相关机构也一直在对电动汽车的CAN通讯协议进行研究,希望形成统一的协议体系。统一的CAN协议,首先是零部件供应商的福音。当前主流主机厂,每家都有自己的整车通讯协议,各个供应商,需要根据整车厂的定义,修改零部件的CAN协议。

制定电动汽车的CAN协议,基本的思路是在SAE-J1939的基础上,根据自身电动汽车的需求,做出必要的调整。

1.1 原则

常用的CAN总线协议标准SAE-J1939中,标准给OSI(开放系统互联参考模型)定义成七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。其中物理层和数据链路层是最基础的两层,在标准ISO 11898中进行定义,并且不可变更。而SAE-J1939定义了应用层的相关会话规则,所谓通讯协议。因此我国的CAN 通信协议的制定主要包括物理层和应用层协议两个方面,其中最主要的工作还是集中在应用层上。

1.2 物理层

物理层对一系列硬件参数进行了规定,包含总线供电电压、接入系统设备数目、允许的连接器类型、线缆长度以及波特率等。我们的物理层特性基本完全继承J1939物理层规范,相应的,参数基本与J1939保持一致。比如CAN2.0B,接入系统的设备书目,最多30个;终端电阻阻值120欧姆,波特率250bits,线束建议采用双绞线、同轴电缆等等。

1.3 应用层

应用层主要规定的内容包括:标识符的分配,报文的发送和接收规则,系统内节点的优先级分配等等。

鉴于电动汽车与传统汽车相比存在的很多不同特点,针对一款新车型建立CAN通讯协议,需要明确的事项包括:确定拓普网络结构,具体分配节点地址源码,定义报文发送周期等等。

整车CAN通讯协议的基本拓扑结构

电动汽车上的电气设备数量比较多,使得通讯系统也变得复杂。下面是两种整车通讯的结构形式,前者列举的是混合动力汽车单一总线结构的拓扑图,后者是一种纯电动汽车CAN通讯网络的情形,电池、电机、故障诊断挂在同一条CAN网络上,其余电气集中在另外一条网络上。两条网络不能直接交换数据,只能以整车控制器VCU为中转站,进行沟通。

从这两个实例也可以看出,CAN总线的拓扑结构,常常四根据不同车辆的实际需要设计的,目前还没有统一的要求。

多个设备集中在同一条信息通道上,对总线波特率的要求也会相应比较高,同时,系统冗余比较小的话,系统出错率会上升。

需要增加定义的参数

电动汽车CAN总线系统,应用层部分参数需要重新定义。定义过程需要综合考虑系统内节点的重要程度,对刷新频率的需求等因素,制定应用层协议中需要明确几个参数,节点源地址、节点优先级,参数组编码。

1)节点地址(Source address,SA)。CAN系统中,每个节点会获得一个唯一的地址码,用以标示节点身份。一个节点如果包含几种功能,则不同功能可以获得不同地址码。网络中重要性最大的节点,地址代码数字越小,相应的优先级越高。在CAN报文的帧定义中,专门设置了地址代码位,下图是CAN2.0B29位扩展帧的形式。

2) 优先级(Priority,P),优先级P,占用3个2进制位,有8中不同级别。最高0级和最低7级,报文优先级可以设置,可以修改。报文优先级的主要影响因素是节点信息的发送频率,越是重要性高的节点,信息刷新频率也越高,占用总线的权限就越高,几个因素有联动关系。

3)参数组定义,同一个设备内不同的功能构成参数组,为了提高总线的使用效率,刷新频率接近的参数尽量放在一个参数组内发送,可以减少节点信息发送次数,提高总线利用率。比如同一个设备的电流监测值和电压监测值就可以放在一个参数组中。

新节点定义

新加入系统的节点都需要重新分配地址,每个节点内的参数再进行参数配置。在J1939基础上新增的节点包括:整车控制器,自动换挡变速器,DCDC,电动助力转向,电动助力制动,电机控制器,电空调控制器,动力电池管理系统。

2 CAN报文解析

CAN报文解析,是技术人员处理电动汽车故障的常用方法,基本过程:将设备准备齐全,获得通讯协议和报文原文,翻译,针对故障现象,得出初步处理建议。

下面内容来自钟文浩的论文《电动汽车CAN报文的解析及应用》,详细介绍了解析CAN报文的全部过程。

获得CAN报文的过程

准备软硬件环境,硬件周立功CAN卡,软件使用ZLGCANTest,安装在电脑上;通过CAN卡连接整车CAN或者调试端口,通过软件交互界面获取CAN报文。

CAN2.0B报文基本格式

接收到的报文,是一串十六进制的字符,而报文格式定义和位数是按照二进制定义的。29位扩展标识符,报文帧格式如下图所示。表格中,上面一行为字段代号,下面一行表示字段的位数。SA为报文的源地址,有8位。

报文基本组成

如下面抓图所示,我们初始能够获得的是帧ID的一串字符,就是前面的29位扩展标识符,通过帧ID找到目标所在行,进而找到数据段。数据段包含的信息,是我们需要的部分。

数据段的组成

数据段由8个字节组成,对应通信协议中约定的含义。每个字节有2个字符,前边字符代表高4位,后边字符代表低4位。

例如,一串报文1818D0F3 ce 0d 00 7d 00 6d 1100(ID是1818D0F3)。第1个字节ce中的c为高4位,e为低4位。如果通讯协议规定,第1、2字节表示总电压,而且注明Byte1为低字节,Byte2为高字节,那么解析时就应该为:0dce。

具体CAN报文解析过程

收到的报文为:1818D0F3ce 0d 00 7d 00 6d 11 00。

第一、二字节,协议中规定了,1818D0F3ID帧内,第一、二字节表示电压,并且,高字节表示高字节表示电压数值的高位,低字节表示电压数值的低位,比例因子0.1V。

数据中0dce代表总电压,转为十进制为3534,乘以0.1 V的单位,则得到总电压值为353.4 V。

第三、四字节,协议中规定报文的第三、四字节表示总电流,又总电流的单位为0.1 A,偏移量为32000。数据中7d00转为十进制为32000,乘以0.1再减去3200的偏移量0,则说明此时电池组没有被充电或放电,电流为0。

第六、七字节,协议中规定报文的第六、七字节表示最高单体电池电压及位置。单体电池电压单位为0.01 V,最高4位代表箱号。数据中116d,其中1代表箱号,即最高电池电压在第1箱。16d代表最高电池电压,转为十进制为365,乘以0.01 A的单位,则得到最高电池电压为3.65 V。

十六进制转换成十进制数的方法,从最低位开始,16的0次方加第一位+16的1次方加第二位数……比如前文中的116d,最高4位代表箱体编号,16^0+1=1,因此箱体号为1;后面的12位代表单体电压,计算方式(16^0+13)+(16^1+6)+(16^2+1)=365,算式中的13是报文中的d。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1342970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】排序之插入排序

排序目录 1.前言2. 排序的概念及其运用2.1 排序的概念2.2 排序的运用2.3 常见的排序算法 3. 插入排序3.1 基本思想3.2 直接插入排序3.2.1 直接插入排序实现3.2.1.1 分析3.2.1.2 代码实现 3.3 希尔排序3.3.1 希尔排序实现3.3.1.1 分析3.3.1.2 代码实现 4. 附代码4.1 sort.h4.2 s…

【第七在线】为什么智能商品管理是对传统商品管理模式的颠覆?

智能商品管理确实在一定程度上颠覆了传统的商品管理模式。传统商品管理通常依赖于人工的经验和决策,而智能商品管理则利用人工智能和相关技术来提供更智能化和高效化的解决方案。 智能商品管理通过数据分析和预测能力,可以更准确地预测市场需求和销售趋…

AI智能分析网关V4区域人数超员算法模型的应用原理及使用场景

视频AI智能分析技术已经深入到人类生活的各个角落,与社会发展的方方面面紧密相连。从日常生活中的各种场景,如人脸识别、车牌识别,到工业生产中的安全监控,如工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品…

医院绩效考核系统源码,java源码,商业级医院绩效核算系统源码

医院绩效定义: “医院工作量绩效方案”是一套以工作量(RBRVS,相对价值比率)为核算基础,以工作岗位、技术含量、风险程度、服务数量等业绩为主要依据,以工作效率和效益、工作质量、患者满意度等指标为综合考…

D9741 PWM控制器电路,定时闩锁、短路保护电路,输出基准电压(2.5V) 采用SOP16封装

D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点:● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电…

MAC运行Windows专用软件 CrossOver v23.7.1中文版 macOS

CrossOver v23.7.1中文版是一款系统兼容软件,让您可以在 Mac 和 Linux 系统上运行 Windows 应用,不必购买 Windows 授权,不必重启系统,不必使用虚拟机。通过 CrossOver, 您可以从 dock 直接启动 Windows 应用&#xff…

WEB 3D技术 three.js 色彩空间讲解

上文 WEB 3D技术 three.js 设置环境贴图 高光贴图 场景设置 光照贴图 我们讲了基础材质的各种纹理 但是 我们的图片 到了界面场景中 好像绿的程度有点不太一样了 这里的话 涉及到我们的色彩空间 他有两种 一种是线性的 一种是 sRGB类型的 线性呢 就是根据光照强度 去均匀分…

nodejs+vue+ElementUi农产品团购销售系统zto2c

目标是为了完成小区团购平台的设计和实现,在疫情当下的环境,方便小区业主购入生活所需,减小居民的生活压力 采用B/S模式架构系统,开发简单,只需要连接网络即可登录本系统,不需要安装任何客户端。开发工具采…

OrientDB使用教程:全面了解图数据库

图数据库在当今数据处理领域中扮演着越来越重要的角色,而OrientDB作为一种多模型的数据库,具有图数据库、文档数据库和对象数据库的特性,为应对不同场景提供了灵活的解决方案。本教程将简要介绍OrientDB的使用,包括基本概念、安装…

3-链表-删除链表的倒数第 N 个结点

这是链表的第三篇算法,力扣链接。 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1],…

为什么TCP会粘包

硬核图解|tcp为什么会粘包?背后的原因让人暖心 数据包报文格式(IP包、TCP报头、UDP报头) TCP,Transmission Control Protocol。传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP粘包是指发…

vue2中使用百度地图BMapGL

1、npm 命令安装 npm install vue-bmap-gl --save2、main.js 中文件引入 import VueBMap from vue-bmap-gl import vue-bmap-gl/dist/style.css VueBMap.initBMapApiLoader({// 百度的keyak:*********,// 这个密钥请使用自己注册的 }) Vue.use(VueBMap)3、页面调用 <temp…

一篇文章带你入门PHP魔术方法

PHP魔术方法 PHP 中的"魔术方法"是一组特殊的方法&#xff0c;它们在特定情况下自动被调用。这些方法的名称都是以两个下划线&#xff08;__&#xff09;开头。魔术方法提供了一种方式来执行各种高级编程技巧&#xff0c;使得对象的行为可以更加灵活和强大。以下是一…

SourceTree的安装和使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装&#xff1a;二、使用步骤1.获取地址2.放入sourceTree 3.点击推送 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 简单讲解一…

F12开发者工具如何找到对应接口

Web问题定位 1、进入 NetWork页面2、点击Fetch/XHR&#xff0c;这里可以看到页面发起的接口3、找到出问题的接口4、NetWork页面怎么看接口详情5、问题定位 最常用的定位前后端问题的方法。即&#xff1a;一般用来查看是后端返回给前端的数据有误&#xff0c;还是前端显示有误。…

【27.5K⭐】Spacedrive:功能强大且便捷的跨平台文件管理器

【27.5K⭐】Spacedrive&#xff1a;功能强大且便捷的跨平台文件管理器 在日常生活和工作中&#xff0c;我们经常需要使用不同的设备和云存储服务来存储和管理我们的文件。然而&#xff0c;这样做往往会导致文件的分散、重复和混乱&#xff0c;给我们带来不便和困扰。那么&…

免费在线客服软件推荐:经济实用的客户沟通解决方案

好用的在线客服软件是企业是必不可少的工具&#xff0c;他让企业流程更流畅高效&#xff0c;让客户服务更完善优质。市场上的在线客服软件有很多&#xff0c;说着免费使用的软件也不在少数。今天小编就来推荐一款免费在线客服软件。 不过&#xff0c;我们选择免费在线客服软件…

如何让python在手机上运行,python程序在手机上运行

大家好&#xff0c;给大家分享一下python怎么在手机上运行爱心代码&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1. 写在前面的话 天天都在PC端运行Python代码的我&#xff0c;今天突然灵光一现&#xff0c;想着是不是能够在移动端运行P…

R503S指纹识别模块的指令系统(一)

1.采集指纹图像 GetImage&#xff08;0x01&#xff09; 功能说明&#xff1a;探测手指&#xff0c;探测到后录入指纹图像存于 ImageBuffer&#xff0c;并返回录入成功确认码&#xff1b;若探测不到手指&#xff0c;直接返回无手指确认码(模块对于每一条指令都快速反应&#xf…

day3双指针

输入一字符串&#xff0c;然后将该字符串中的单词分割开来 #include <iostream> #include <string.h> using namespace std; int main() {char str[1000];gets(str);int nstrlen(str);for(int i0;i<n;i){int ji;while(str[j]! &&j<n) j;for(int ki;k…