CAN报文逆向工程
在没有DBC文件的情况下解析CAN报文获取物理信息需要逆向工程和系统分析。以下是详细步骤:
1. 数据采集与基础分析
-
采集原始数据:
- 使用CAN分析工具(如PCAN-Explorer、SavvyCAN或USB-CAN适配器配套软件)记录车辆在不同状态下的CAN数据(静止、加速、充电、仪表变化等)。
- 建议采集多组场景数据(例如:车速变化、电池电量变化、温度变化等)。
-
筛选关键ID:
- 统计所有ID的出现频率,高频率ID通常与关键控制信号相关(如车速、电机转速)。
- 关注低频率但数据内容变化的ID(如车门状态、故障码可能只在事件触发时发送)。
2. 信号逆向工程
-
字节变化模式分析:
- 对每个ID的数据帧,观察各字节在不同场景下的变化模式。例如:
- 车速:寻找某个ID中2个字节(可能小端序)随速度线性变化的信号。
- 电池电量:寻找某个字节或两字节数值在0-100%范围内缓慢变化的信号。
- 踏板信号:油门/刹车踏板通常对应0x00~0xFF的单字节或两字节数据。
- 对每个ID的数据帧,观察各字节在不同场景下的变化模式。例如:
-
信号边界确定:
- 静态信号:例如档位(P/R/N/D)通常用固定位模式表示(如0b0010=P档)。
- 动态信号:如车速,需确定其数据长度(8/12/16位)、偏移量(Offset)和缩放因子(Scale)。
-
字节序与编码方式:
- 大端序(Motorola):高位字节在前(如0x12 0x34 表示0x1234)。
- 小端序(Intel):低位字节在前(如0x34 0x12 表示0x1234)。
- 有符号数:若数值有负数(如温度),需处理二进制补码(例如0xFF=-1)。
3. 物理量计算
-
公式推导:
假设发现ID 0x200的第2-3字节(小端序)在车速变化时从0x0000到0xFFFF,实际车速为0-200 km/h:raw_value = (byte2 << 8) | byte3 # 合并两字节 speed_kmh = raw_value * 0.0030518 # 200/65535 ≈ 0.0030518
若数值为非线性,可能需要分段处理或查表。
-
特殊编码:
- 温度:可能以补码形式表示(如0xFF=-1°C),需转换。
- 状态位:如车灯状态可能用单个位表示(bit3=1 时近光灯开启)。
4. 工具辅助分析
-
自动化脚本(Python示例):
import cantools from can.interface import Bus# 即使没有DBC,也可用字典记录猜测的信号 custom_db = {'0x200': {'signals': {'Speed': {'start_bit': 16, 'length': 16, 'is_little_endian': True, 'scale': 0.0030518, 'offset': 0}}} }bus = Bus(interface='socketcan', channel='can0') for msg in bus:if hex(msg.arbitration_id) in custom_db:data = msg.datasignal_def = custom_db[hex(msg.arbitration_id)]['signals']['Speed']raw = int.from_bytes(data[2:4], byteorder='little' if signal_def['is_little_endian'] else 'big')speed = raw * signal_def['scale'] + signal_def['offset']print(f"Speed: {speed:.1f} km/h")
-
可视化工具:
- 使用SavvyCAN的图形化界面,将特定ID的数据字段映射为折线图,观察其随时间的变化趋势是否符合预期物理量(如电机转速随油门变化)。
5. 验证与优化
-
交叉验证:
- 对比实际车辆仪表显示与解析结果(例如同时录制CAN数据和仪表视频,同步时间戳)。
- 例如:踩下油门时,解析的油门开度信号应同步增加。
-
故障注入测试:
- 修改特定信号(如模拟车门开关)并观察车辆反应,确认信号功能。
6. 创建临时DBC
- 手动编写DBC(片段示例):
BO_ 200 VehicleStatus: 8 Vector__XXXSG_ VehicleSpeed : 16|16@1+ (0.0030518,0) [0|200] "km/h" Vector__XXXSG_ BatterySOC : 32|8@1+ (0.5,0) [0|100] "%" Vector__XXX
- 使用
cantools
库加载自定义DBC,验证解析结果。
- 使用
7. 高级技巧
-
多帧信号处理:
某些信号(如OTA数据)可能跨多帧传输,需按ISO-TP(如0x30/0x31帧)重组。 -
机器学习辅助:
对大量未知信号使用聚类算法(如K-means),按变化频率或模式分组,缩小分析范围。
常用工具推荐
- Wireshark:过滤和统计CAN ID。
- CANalyzer/CANoe:即使无DBC也可用图形化分析信号趋势。
- CANTools+Pandas:用Python批量处理数据并生成统计特征(均值、方差)辅助识别信号类型。
通过系统性地采集、标注、测试和迭代,即使没有DBC文件,也能逐步破解关键信号。最终建议将结果整理为临时DBC文件,便于后续长期使用。
相关文章:
CAN报文逆向工程
在没有DBC文件的情况下解析CAN报文获取物理信息需要逆向工程和系统分析。以下是详细步骤: 1. 数据采集与基础分析 采集原始数据: 使用CAN分析工具(如PCAN-Explorer、SavvyCAN或USB-CAN适配器配套软件)记录车辆在不同状态下的CAN数…...
文件包含漏洞学习
理论 什么是文件包含漏洞 就是允许攻击者包含并执行非预期的文件。也就是通过PHP函数引入文件时,传入的文件名(或者文件内容)没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入…...
Linux基本操作——网络操作文件下载
6.网络操作文件下载 (1)在VMware Workstation中配置固定IP 配置固定IP需要的两个大步骤 VMware Workstation中的配置 步骤概述:配置IP地址、网关和网段(IP地址范围) Linux系统中的配置 步骤概述:手动修改…...
【ARM AMBA AHB 入门 3.1 -- AHB控制信号】
文章目录 AHB控制信号传送状态HTRANS[1:0]批量传送HBURST[2:0]传送方向HWRITE传送大小HSIZE[2:0]保护控制HPROT[3:0]响应信号 HRESP[1:0] AHB控制信号 传送状态HTRANS[1:0] 在AHB总线上, Master (M) 的传送状态可由HTRANS[1:0]来表示,这两位所代表的意…...
Amazing晶焱科技:系统级 EOS 测试方法 - System Level EOS Testing Method
系统上常见的EOS测试端口以AC电源、电话线(RJ11)、同轴电缆(coaxial cable)以及以太网络(RJ45)最常见,这些端口因有机会布线至户外的关系,受到EOS/Surge冲击的几率也大大提升。因此电…...
基于DR模式的LVS集群案例
一.环境描述 如上图所示,后端是一个NFS服务器实现共享文件,调度器是一个高可用的环境, 这是基于LVS的DR模式实现的一个负载均衡集群。 keepalived在于LVS结合使用的时候,会自动实现很多功能。 比如,第一点我们可以修…...
Spark jdbc写入崖山等国产数据库失败问题
随着互联网、信息产业的大发展、以及地缘政治的变化,网络安全风险日益增长,网络安全关乎国家安全。因此很多的企业,开始了国产替代的脚步,从服务器芯片,操作系统,到数据库,中间件,逐步实现信息技术自主可控,规避外部技术制裁和风险。 就数据库而言,目前很多的国产数据…...
Chain-of-Draft (CoD) 是提示工程的新王者
图像由 DALLE 3 生成 推理型大模型,是当前 AI 研究的热门话题。 我们从最早的 GPT-1 一路走到现在像 Grok-3 这样的高级推理模型。 这段旅程可以说非常精彩,过程中也发现了很多重要的推理方法。 其中之一就是 Chain-of-Thought(CoT࿰…...
隐私计算技术及其在数据安全中的应用:守护数据隐私的新范式
前言 在数字化时代,数据已成为企业和组织的核心资产。然而,数据的收集、存储和使用过程中面临着诸多隐私和安全问题。随着法律法规对数据隐私的监管日益严格,企业和组织需要在数据利用与隐私保护之间找到平衡。隐私计算技术作为一种新兴的数据…...
使用Milvus向量数据库构建具有长期记忆的对话机器人
一、申请Milvus试用版 快速创建Milvus实例_向量检索服务 Milvus 版(Milvus)-阿里云帮助中心 二、配置 pip3 install pymilvus tqdm dashscope 由于在下文使用的时候需要用到Milvus的公网地址,而公网地址需要我们手动开启,参考下面这篇文章开启公网地…...
[Es_1] 介绍 | 特点 | 图算法 | Trie | FST
编程就是一门不断试错的艺术。不要害怕犯错,实践才会出真知。 什么是ElasticSearch? Elasticsearch是一个分布式的免费开源搜索和分析引擎 适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。 Elasticsearch在Apache Luc…...
企业安装加密软件有什么好处
企业安装加密软件可以有效保护敏感数据安全,防止信息泄露,并满足合规要求。以下是其主要好处及具体应用场景: 1. 防止数据泄露,保护核心资产 文件加密:对敏感文件(如财务数据、客户信息、设计图纸ÿ…...
【MVCP】基于解纠缠表示学习和跨模态-上下文关联挖掘的多模态情感分析
多处可看出与同专栏下的DCCMCI很像 abstract 多模态情感分析旨在从多模态数据中提取用户表达的情感信息,包括语言、声学和视觉线索。 然而,多模态数据的异质性导致了模态分布的差异,从而影响了模型有效整合多模态互补性和冗余性的能力。此外,现有的方法通常在获得表征后直…...
2025软考【系统架构设计师】:两周极限冲刺攻略(附知识点解析+答题技巧)
距离2025上半年“系统架构设计师”考试已经只剩最后两周了,还没有准备好的小伙伴赶紧行动起来。为了帮助大家更好的冲刺学习,特此提供一份考前冲刺攻略。本指南包括考情分析、答题技巧、注意事项三个部分,可以参考此指南进行最后的复习要领&a…...
企业该如何选择合适的DDOS防护?
在互联网行业当中,大型的网络游戏和网络视频企业会经常受到DDOS攻击和CC攻击,这些网络攻击会导致服务器崩溃或者是网络中断,给企业造成巨大的经济损失,所以企业通常会配备合适的DDOS防护来进行防御,但是,对…...
CPU-GPU-NPU-TPU 概念
1.CPU 中央处理器(Central Processing Unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。 2.GPU GPU࿰…...
DELL R770 服务器,更换OCP模块!
今天接到客户报修电话,说有一台 DELL PowerEdge R770服务器,网卡出现了故障,需要更换OCP模块。顺便做一个教程,分享给有需要的小伙伴们。 这一期的教程,听起来好像很高大上,很多小伙伴可能不知道OCP是什么…...
go.mod没有自动缓存问题
今天在安装Gin框架的时候遇到了一个问题 在Terminal运行下面命令安装时,包已经被下载安装到了GoPath中的bkg/mod go get -u github.com/gin-gonic/gin但是由于使用的是Go Modules,GPT以及大多数人给的说法是 运行完这个依赖包会被自动同步更新到go.mod…...
黑电平校正(Black Level Correction, BLC)算法
黑电平校正(Black Level Correction, BLC)算法 黑电平校正(BLC)是图像传感器(如CMOS/CCD)信号处理中的一个重要步骤,主要用于消除传感器暗电流(Dark Current)导致的基线…...
Ubuntu 安装 Keepalived
Keepalived 是什么 Keepalived 是一个用于实现高可用性(High Availability, HA)的服务,是一款基于 VRRP 协议的高可用软件,常用于主备切换和虚拟IP漂移,在服务故障时自动实现故障转移。 Keepalived 的核心功能 功能说…...
基于SpringBoot和PostGIS的应急运输事件影响分析-以1.31侧翻事故为例
目录 前言 一、技术实现路径 1、需要使用的数据 2、空间分析方法 二、相关模块设计与实现 1、运输路线重现开发 2、事故点影响范围实现 3、WebGIS可视化实现 三、讨论 1、界面结果展示 2、影响范围分析 四、总结 前言 在交通运输发达的当今社会,应急运输…...
ABP-Book Store Application中文讲解 - 前期准备 - Part 2:创建Acme.BookStore + Angular
ABP-Book Store Application中文讲解-汇总-CSDN博客 因为本系列文章使用的.NET8 SDK,此处仅介绍如何使用abp cli .NET 8 SDK SQL sevrer 2014创建Angular模板的Acme.BookStore。 目录 1. ABP cli创建项目 1.1 打开cmd.exe 1.2 创建项目 2. ABP Studio创建项…...
grpc到底是啥! ! !!
一、什么是RPC(Remote Procedure Call) 简单理解: RPC是一种让程序可以像调用本地函数一样去调用远程机器上的函数或方法。它的目标:让分布式系统中的不同计算机可以透明地互相通信,实现远程服务调用的封装。 举个例…...
ES6入门---第三单元 模块五:Map和WeakMap
map: users.map((user) 遍历 类似 json, 但是json的键(key)只能是字符串 map的key可以是任意类型 使用: let map new Map(); map.set(key,value); 设置一个值 map.get(key) 获取一个值 map.delete(key) 删除一项 map.has(key) 判断有没有 map.clear…...
【C++】【数据结构】【API列表】标准库数据结构
标准库数据结构 unordered_set 头文件:#include <unordered_set> 特性: 唯一性:所有元素唯一,重复插入无效无序性:元素存储顺序不固定自定义类型:若存储自定义类型需提供哈希函数和相等比较器 …...
三、Hadoop1.X及其组件的深度剖析
作者:IvanCodes 日期:2025年5月7日 专栏:Hadoop教程 一、Hadoop 1.X 概述 (一)概念 Hadoop 是 Apache 开发的分布式系统基础架构,用 Java 编写,为集群处理大型数据集提供编程模型,…...
stm32常见错误
1.使用LCD屏幕时,只用st-link时,亮度很暗,需要用usb数据线额外给屏幕供电; 2.移植freertos到f103c8t6芯片时,工程没有错误,但单片机没有反应; 需要将堆的大小改成10*1024; 3.在找已经…...
《Python星球日记》 第46天:决策树与随机森林
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、前言二…...
【Pandas】pandas DataFrame expanding
Pandas2.2 DataFrame Function application, GroupBy & window 方法描述DataFrame.apply(func[, axis, raw, …])用于沿 DataFrame 的轴(行或列)应用一个函数DataFrame.map(func[, na_action])用于对 DataFrame 的每个元素应用一个函数DataFrame.a…...
【SpringCloud GateWay】Connection prematurely closed BEFORE response 报错分析与解决方案
一、背景 今天业务方调用我们的网关服务报错: Connection prematurely closed BEFORE response二、原因分析 三、解决方案 第一步: 增加 SCG 服务的JVM启动参数,调整连接获取策略。 将连接池获取策略由默认的 FIFO(先进先出)变更为 LIFO(…...
【行业】一些名词
名词 分布式应用架构(分布式计算技术的应用和工具)中间件 中间件(Middleware)主流中间件技术1.通信类2.数据类3. **协调与治理类中间件**4. 监控与可观测性中间件5.**流处理与批处理**中间件6.云原生中间件 数据库Redismogodb 分布…...
深度学习模型的部署实践与Web框架选择
引言 在深度学习项目的完整生命周期中,模型训练只是第一步,将训练好的模型部署到生产环境才能真正发挥其价值。本文将详细介绍模型部署的核心概念、常见部署方式以及三种主流Python Web框架的对比分析,帮助开发者选择最适合自己项目的技术方…...
【笔记】当个自由的书籍收集者从canvas得到png转pdf
最近有点迷各种古书,然后从 www.shuge.org 下载了各种高清的印本,快成db狂魔了…上面也有人在各种平台上分享,不胜感激…只是有些平台可以免费看但是没法下载… 反正你都canvas了,撸下来自己珍藏… 于是让qwen写了一段代码&#…...
Ubuntu 配置网络接口端点(静态 IP 地址)详细教程
在 Ubuntu 系统中,配置网络接口端点通常指的是为您的有线或无线网卡设置一个固定的 IP 地址、子网掩码、网关以及 DNS 服务器。这对于服务器或者需要稳定网络标识的设备来说非常重要。 使用 Netplan (Ubuntu 17.10 及更高版本的默认方式)使用 ifupdown (通过 /etc/…...
JavaScript ES6+ 最佳实践
1. 变量声明:从 var 到 let/const 问题代码:var 存在变量提升,只有函数作用域,没有块级作用域,容易导致变量污染。 // 变量提升导致意外行为 console.log(num); // undefined 而非报错 var num 10;// 没有块级作用域…...
华为昇腾在智慧矿山机器人的应用及其技术解决方案
一、智慧矿山机器人的核心应用场景 1. 井下智能巡检机器人 搭载昇腾AI芯片的巡检机器人可实现 全自主导航与多模态感知,通过激光雷达视觉SLAM技术实时构建井下三维地图,精准识别巷道变形、设备漏油等异常状态47。结合昇腾边缘计算能力…...
发那科机器人3(机器人编程基础)
发那科机器人(机器人编程基础) 一、机器人编程基础1、程序构成2、程序创建3、程序修改4、程序操作5、程序的停止与恢复6、执行程序7、测试运转8、自动运转一、机器人编程基础 1、程序构成 什么是程序? 程序指的是由用户编写的一系列机器人指令以及其他附带信息构成,使机器…...
2014年写的一个文档《基于大数据应用的综合健康服务平台研发及应用示范》
项目目标与任务 项目目标与任务需求分析 当今社会已经处于高度信息化的时代,作为关系民生的重要领域,医疗行业的信息化直接涉及临床服务、社会保障、医学研究和大众健康等环节,对提升医疗服务水平,强化管理职能,改善…...
Python初学者笔记第十一期 -- (字符串编程练习题)
第20节课 【字符串编程练习题】 练习01 回文字符串 输入一个字符串,判断其是否是回文字符串。 # 思路1 # s1 "黄山落叶松叶落山黄" # s2 s1[::-1] # 反转 # print(s2) # print(s1 s2)# 思路2 def is_palindrome(s):l 0r len(s) - 1while l < r…...
[量化交易Backtrader] - 如何规避过拟合
一、回测中的过拟合:隐藏在数据背后的陷阱 过拟合发生在模型过度适应历史数据,以至于在新数据上表现不佳。这就像是为历史数据量身定制了一件衣服,却在新的数据集上穿不进去。 (一)过拟合的常见表现 曲线过于完美 当在回测报告中看到策略的净值曲线如同一条完美的上升直…...
前端日常 · 移动端网页调试
前端日常 移动端网页调试技巧集锦:5个工具 实战思路 在移动端开发中,调试网页内容常常不是“写完就跑”的顺滑体验。尤其当页面跑在 App WebView 里时,不同系统版本、设备特性、浏览器行为都可能带来各种“只有你遇得到”的玄学 Bug。本篇…...
SQLite数据库加密(Java语言、python语言)
1. 背景与需求 SQLite 是一种轻量级的关系型数据库,广泛应用于嵌入式设备、移动应用、桌面应用等场景。为了保护数据的隐私与安全,SQLite 提供了加密功能(通过 SQLCipher 扩展)。在 Java 中,可以使用 sqlite-jdbc 驱动与 SQLCipher 集成来实现 SQLite 数据库的加密。 本…...
【前端基础】6、CSS的文本属性(text相关)
目录内容 text-decoration:设置文本装饰线text-transform:文本中文字的大小写转换text-indent:首行缩进text-align:设置文本对齐方式 一、text-decoration:设置文本装饰线 常见值: None:没有…...
Kafka生产者send方法详解
Kafka生产者send方法详解 1. send方法的工作原理 1.1 基本流程 #mermaid-svg-EXvKiyf8oSlenrxK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EXvKiyf8oSlenrxK .error-icon{fill:#552222;}#mermaid-svg-EXvKiyf…...
RPA与After Effects 2024深度融合:自动化影视特效全链路革命
文章目录 一、RPA在影视后期中的核心应用场景1. 跨平台数据自动化采集与预处理2. 动态数据驱动动画:从Excel到AE的无缝衔接 二、After Effects 2024自动化增强技术1. Python脚本深度集成:批量生成三维动画2. 实时渲染优化:智能调度与多分辨率…...
【Python 实战】---- 使用Python批量将 .ncm 格式的音频文件转换为 .mp3 格式
1. 前言 .ncm 格式是网易云音乐专属的加密音频格式,用于保护版权。这种格式无法直接播放,需要解密后才能转换为常见的音频格式。本文将介绍如何使用 Python 批量将 .ncm 格式的音频文件转换为 .mp3 格式。 2. 安装 ncmdump ncmdump 是一个专门用于解密 .ncm 文件的工具。它…...
【上位机——MFC】序列化机制
相关类 CFile-文件操作类,封装了关于文件读写等操作 CFile::Open CFile::Write/Read CFile::Close CFile::SeekToBegin / SeekToEnd / Seek 代码示例 #include <afxwin.h> #include <iostream>using namespace std;void File() {CFile file;file.Ope…...
同步 / 异步、阻塞 / 非阻塞
前言 同步异步,在计算机科学中是一个非常重要的概念。作为一位软件开发工程师,我们每天都在和同步和异步打交道。 同步 同步-阻塞,顾名思义,就是同步和阻塞。调用方法后,必须等到结果返回,才能继续执行别…...
Java学习手册:ORM 框架性能优化
一、优化实体类设计 减少实体类属性 :仅保留必要的字段,避免持久化过多数据。例如,对于一个用户实体类,如果某些信息(如详细地址)不是经常使用,可以将其拆分到单独的实体类中。使用合适的数据类…...
标量/向量/矩阵/张量/范数详解及其在机器学习中的应用
标量(Scalar)、向量(Vector)、矩阵(Matrix)、张量(Tensor)与范数(Norm)详解及其在机器学习中的应用 1. 标量(Scalar) 定义࿱…...