当前位置: 首页 > news >正文

将can日志数据提取到excle中

一、目标:

读取.blf文件,
提取信号can::HAP_FD1::BrkDistance
并按照20ms的帧率存储到excle中

二、安装python库和依赖

1.所需的库

1)can
2)pandas
3)cantools
4)openpyxl

2.在PyCharm中通过图形界面安装:

1)打开PyCharm
2)点击 File > Settings > Project: [你的项目名] > Python Interpreter
3)点击右上角的 + 按钮
4)搜索 cantools
5)选中后点击 Install Package
6)显示 安装成功 即可。
在这里插入图片描述

三、python编码

1.通过dbc解析blf文件提取数据

import can
import pandas as pd
from can import BLFReader
import cantoolsdef extract_brake_distance_with_dbc(blf_file_path, dbc_file_path, output_excel_path):"""使用DBC文件从BLF中提取刹车距离信号(Motorola格式):param blf_file_path: BLF文件路径:param dbc_file_path: DBC文件路径:param output_excel_path: 输出Excel路径"""# 加载DBC数据库db = cantools.database.load_file(dbc_file_path)data = []previous_timestamp = Nonetry:with BLFReader(blf_file_path) as reader:for msg in reader:# 只处理HAP_FD1报文(假设已知其CAN ID)if msg.arbitration_id == db.get_message_by_name('HAP_FD1').frame_id:# 解码整个报文decoded = db.decode_message(msg.arbitration_id, msg.data)# 20ms采样控制if previous_timestamp is None or (msg.timestamp - previous_timestamp) >= 0.02:data.append({'Timestamp': msg.timestamp,'BrakeDistance': decoded['APS_ESP_BrkDistance']})previous_timestamp = msg.timestamp# 保存到Exceldf = pd.DataFrame(data)df.to_excel(output_excel_path, index=False)print(f"刹车距离数据已保存到 {output_excel_path}")except Exception as e:print(f"处理过程中发生错误: {str(e)}")if __name__ == "__main__":# 文件路径配置input_blf = "test.blf"  # 替换为你的BLF文件dbc_file = "test.dbc"  # 替换为你的DBC文件output_xlsx = "brake_distance.xlsx"extract_brake_distance_with_dbc(input_blf, dbc_file, output_xlsx)

2.通过信号字节序列 提取数据

在这里插入图片描述

信号 BrkDistance 所在报文ID=0x123
BrkDistance信号在报文中位于20、21字节,起始位20字节的0位,字节长度12位
字节序列是motorola格式

import can
import pandas as pd
from can import BLFReader
import cantoolsdef extract_brake_distance_manual(blf_file_path, output_excel_path):data = []previous_timestamp = Nonetry:with BLFReader(blf_file_path) as reader:for msg in reader:if msg.arbitration_id == 0x123:  # 替换为HAP_FD1的实际CAN ID# Motorola格式解析 (起始字节20,位0,长度12)byte20 = msg.data[20]byte21 = msg.data[21]# 合并两个字节并提取12位信号combined = (byte20 << 8) | byte21brake_distance = (combined >> 4) & 0xFFF  # 取12if previous_timestamp is None or (msg.timestamp - previous_timestamp) >= 0.02:data.append({'Timestamp': msg.timestamp,'BrakeDistance': brake_distance})previous_timestamp = msg.timestampdf = pd.DataFrame(data)df.to_excel(output_excel_path, index=False)print(f"数据已保存到 {output_excel_path}")except Exception as e:print(f"发生错误: {str(e)}")
http://www.xdnf.cn/news/702973.html

相关文章:

  • HOMIE——遥操类似ALOHA主从臂的外骨骼驾驶舱收集数据:通过上肢模仿学习和全身控制RL训练自主策略
  • JVM虚拟机监控及性能调优实战!
  • mqtt c语言publish topic
  • 6 质量控制中的常用缩略语和符号(OEE)以及解释
  • 嵌入式学习之系统编程(七)线程的控制(互斥与同步)和死锁
  • CPG开源项目对比
  • 18度的井水
  • C++补充基础小知识:为什么要继承、什么时候继承、什么时候直接用
  • 高并发计数器LongAdder 实现原理与使用场景详解
  • Jmeter性能测试(应用场景、性能测试流程、搭建测试环境)
  • 实例与选项对象
  • SpringBoot+Vue+Echarts实现可视化图表的渲染
  • 自动生成程序的heap文件
  • #!/usr/bin/env python
  • JS中的属性描述符
  • Day 20
  • 生成式引擎在不同行业的应用案例
  • 第十章 Java基础-Static静态变量
  • 基于物理约束的稀疏IMU运动捕捉系统
  • spring和Mybatis的各种查询
  • Rust 学习笔记:使用迭代器改进 minigrep
  • 力扣刷题Day 61:子集(78)
  • 【案例94】笛卡尔积导致报“临时表空间不足”
  • bat 批处理通过拖拽,来获取拖入文件的信息
  • 【25-cv-00656】Whitewood律所代理Olga Drozdova 蝴蝶版权图维权案
  • 【Web应用】若依框架:基础篇07功能详解-定时任务
  • 不同坐标系下的 面积微元
  • Android-Room + WorkManager学习总结
  • 2G Nand Jlink烧录报错Failed to allocated 0x1B000000 bytes of memory!
  • 5G 核心网中 NRF 网元的功能、接口及参数详解