【CAN信号解析】使用python-can/cantools解析CAN数据

news2024/11/24 12:30:11

文章目录

  • 1. 如何解析CAN消息
    • 1.1 简介
    • 1.2 python-can库使用
  • 2. python-can库介绍
    • 2.1 完整解析流程
    • 2.2 简单示例
  • 3. 总结与坑
  • 4. 代码示例
    • 1. 解析一个DBC
    • 2. 生成一个DBC
    • 3. 解析.asc数据 保存为.csv格式

1. 如何解析CAN消息

关于CAN的基础知识,可阅读如下链接:

  1. CAN协议详解
  2. CAN消息解析

此部分参考自:https://zhuanlan.zhihu.com/p/635594421

1.1 简介

用python分析asc,blf等格式数据,python-can这个包是必备的cantools这个包虽然理论上非必须,但用它处理起来更方便。另外cantools这个包本身依赖python-can,所以直接装个cantools就能直接上手干了。

pip install python-can
pip install cantools

另外,要分析asc, blf格式的数据,还得需要相应的数据库文件,也就是.dbc.arxml文件。DBC(Database Container)是一种CAN数据定义文件,用于描述车辆网络系统中的消息、信号和节点之间的关系和通信规则。在Python中,我们可以使用第三方库cantools来读取和解析DBC文件,以便在开发过程中使用。

下面是以blf格式数据为例展示解析方法,asc格式数据类似。

1.2 python-can库使用

按官网的说法,python-can这个工具非常强大,不仅能离线的分析CAN数据,还能通过在线的方式与Vector工具箱、SocketCAN、PCAN等主流工具直接联动,把在线数据灌入python里进行在线运算与分析,只要写一下配置文件就行

如果是离线分析CAN数据的话,这个工具也是简单到离谱:python-can直接提供一个.BLFReader函数(或.ASCReader(asc_path)),输入blf/asc文件名,直接输出结构化的CAN数据,简单粗暴。

import can

blf_data = can.BLFReader("log1.blf")
#asc_data = can.ASCReader("xxx.asc")

for msg in blf_data:
    print(msg)

在这里插入图片描述
以上代码中,blf_data = can.BLFReader(...)实际上是建立一个can.BLFReader类,本身是不怎么耗时的。
下面的for循环实际上是调用的BLFReader类的__iter__方法,得到的msg是一个can.message类。由于can.message类重写了__str__方法,因此我们在调用print(msg)时,就会自动把message里的内容格式化输出。格式化输出的格式和Vector工具箱中的Trace几乎完全一样,因此即使用惯了Vector工具箱的人看起来也毫无压力。

更细化的,我们可以翻到can.message类__str__方法的实现代码,具体看一下我们print(msg)时,print出的究竟是什么东西。

我们在print(msg)时,输出格式里从左到右分别是

  • 这条msg的时间戳
  • 这条msg的can_id
  • 这条msg的属性(比如是否是canfd帧、是否是错误帧、是rx还是tx帧等等)
  • 这条msg的长度(也就是dlc)
  • 以16进制格式输出的raw data
  • 这条msg的can channel

由于我们没有用dbc或arxml文件去解析msg里的数据,因此也只能打印出raw data,打印不出来具体的信号值

另外,由于msg本身就是一个can.message类,因此我们也可以手动取到它的各种属性,比如:
在这里插入图片描述

比较常用的有:

  • msg.channel —— channel,取决于录制blf时的channel mapping
  • msg.timestamp —— 录制blf时记录的本条数据时间戳
  • msg.arbitration_id —— can id,或者叫frame id
  • msg.data —— bytearray格式的raw data

raw data如果直接打印的话,默认是按bytearray格式打印的。比如,我们可以筛选出channel=2,id=0x51的数据帧,打印出它们的raw data:

import can

blf_data = can.BLFReader("log1.blf")

for msg in blf_data:
    if msg.channel == 2 and msg.arbitration_id == 0x51:
        print(msg.data)

在这里插入图片描述
更进一步的,如果我们知道相应的数据帧中的每一位的定义,也可以自己筛出我们需要的信号的物理值

比如这里的channel=2,id=0x51的数据帧,我们通过其他工具(比如Vector Autosar Explorer)翻到其内部定义,可以看到它第2个byte中的后4个bit,以及第3个byte中的第4-6个bit都是某个有物理意义的值
在这里插入图片描述
然后我们就可以按需把这个物理值取出来:

import can

blf_data = can.BLFReader("log1.blf")

for msg in blf_data:
    

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

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

相关文章

作为SiteGPT替代品,HelpLook的优势是什么?

在当今快节奏的数字化世界中,企业不断寻求创新方式来简化运营并增强客户体验。由于聊天机器人能够自动化任务、提供快速响应并提供个性化互动,它们在业务运营中的使用变得非常重要。因此,企业越来越意识到像SiteGPT和HelpLook这样高效的聊天机…

分享5个自动生成PPT的网站

1、Mindshow 之前公众号里分享过这款做PPT的AI工具,这次再拿出来分享一次。 没别的原因,确实好用。 而且也是目前能够和ChatGPT结合使用最好的PPT工具之一。 直接在ChatGPT生成PPT内容,转成Markdown格式复制进来一键排版,一份P…

MySQL ——多表连接查询

一、(左、右和全)连接概念 内连接: 假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来。A和B两张表没有主付之分,两张表是平等的。 关键字:inner join on 语句&#xf…

更好用的的MybatisPlus:MybatisFlex(上)

更好用的的MybatisPlus:MybatisFlex(上) 前言 Mybatis 是我们常用的一个 ORM 框架,而 MybatisPlus (以下简称 MP) 则是对 Mybatis 进行了一层封装,便捷了我们的开发工作,但是由于其…

进程管理--进程调度基本概念

进程调度 进程调度的核心代码实现参考 kernel/sched/ 目录文件,主要包含以下几个部分: 调度算法:Linux 中实现了多种不同的进程调度算法,如 CFS(Completely Fair Scheduler)、O(1) 调度算法、实时调度算法…

RocketMQ Dashboard说解

RocketMQ Dashboard 是 RocketMQ 的管控利器,为用户提供客户端和应用程序的各种事件、性能的统计信息,支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 介绍​ 功能概览​ 面板功能运维修改nameserver 地址; 选用 VIPChannel驾驶舱查看 …

python编程:加速计算机,优化性能的关键一步——清理临时文件夹Temp

引言: 随着时间的推移,您可能会注意到计算机的性能开始变慢。这可能是由于许多因素导致的,其中一个常见的问题是临时文件的积累。临时文件是由操作系统和应用程序生成的临时性文件,它们在使用后往往被遗忘或忽视。在本篇博客中&am…

[移动通讯]【Carrier Aggregation-4】【LTE-6】

前言: 这里主要介绍一下CA 技术里面,物理层主要工作。 参考: 载波聚合(CA) 目录: 1: CA 总体分析流程 2: CA 物理层 一 CA 总体分析流程 二 CA物理层 2.1 载波聚合LOG分析的相关包…

基于微信小程序的英语互助小程序设计与实现(亮点:小组制打卡、模拟考试答题、错题本、学习论坛)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

如何看待中小企业实现数字化转型难的问题?_光点科技

随着科技的飞速发展和市场的竞争日益激烈,传统制造型企业不得不迎头赶上数字化时代的步伐,以保持竞争力并实现可持续增长。数字化转型已成为企业生存和成功的必经之路,但对于那些长期依赖传统方法的企业来说,这个过程可能会充满挑…

积加ERP与金蝶云星空对接集成日期范围报告查询打通销售出库新增

积加ERP与金蝶云星空对接集成日期范围报告查询打通销售出库新增 对接源平台:积加ERP 积加创始人及核心产品技术团队,深耕于跨境电商技术领域十余年,深刻领悟卖家在Amazon业务运营各环节的核心诉求,结合多年技术管理经验,全面考虑中…

18年互联网老兵:技术人如何快速成长?!

见字如面,我是军哥。 先问你几个问题。 你是不是每天996,但技术能力还是没有提高? 你是不是明明很努力却进步缓慢? 你是不是在同一家公司干了三年,感觉自己就有三年工作经验了? 你是不是明明知道想要什么&a…

【调度算法】进程调度算法、内存页面置换算法、LRU算法、LFU算法、磁盘调度算法等重点知识汇总

目录 进程调度算法 内存页面置换算法 LRU算法实现 LFU算法实现 磁盘调度算法 进程调度算法 当 CPU 空闲时,操作系统就选择内存中的某个「就绪状态」的进程,并给其分配 CPU。 什么时候会发生 CPU 调度呢?通常有以下情况: 当…

数字孪生燃气可视化系统的九问九答

关键词:数字孪生燃气、智慧燃气、数字孪生燃气系统、智慧燃气平台、智慧燃气场站 谈谈数字孪生燃气系统? 数字孪生燃气是将数字孪生技术应用于燃气运营中,与燃气系统物理实体、数据中心、信息系统等相结合,从而完成辅助管网设计…

想要在手机上查看三维模型、正射影像、激光点云?快来试试这款app

「四维轻云」是一款轻量化的地理空间数据管理云平台,支持地理空间数据的在线管理、编辑及分享。平台有项目管理、场景搭建、发布分享、素材库等功能模块,支持多用户在线协作管理,实现了轻量化、便捷化的空间数据应用。 很多行业用户想要在手…

Observability:使用 OpenTelemetry 自动检测 Java 应用程序

作者:David Hope 在快节奏的软件开发领域,特别是在云原生领域,DevOps 和 SRE 团队日益成为应用程序稳定性和增长的重要合作伙伴。 DevOps 工程师不断优化软件交付,而 SRE 团队则充当应用程序可靠性、可扩展性和顶级性能的管理者。…

linux使用操作[2]

文章目录 版权声明网络传输ping命令wget命令curl命令端口linux端口端口命令和工具 进程管理查看进程关闭进程 主机状态top命令内容详解磁盘信息监控 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相…

视频转码软件 EditReady mac中文版介绍

EditReady for Mac是一款专业高效的视频转码器,拥有快速,强大的特点,可以调整视频大小,对视频进行旋转,重新定时等功能,对于需要的朋友,还可以查看和编辑元数据,EditReady Mac中文版…

Ubuntu 安装 Docker 的详细步骤

文章目录 简介1.更新2.安装必要的软件包2.1 基于阿里源 3.验证 Docker 安装是否成功4.安装后的一些常规设置及常用的命令4.1 启动 Docker4.2 Docker 在系统启动时自动运行4.3 运行一个 Hello World 镜像4.4 查看docker运行状态 欢迎来到这篇关于在 Ubuntu 上安装 Docker 的教程…

【数据库——MySQL】(10)视图和索引

目录 1. 视图1.1 创建视图1.2 查询视图 2. 索引2.1 索引的分类2.2 索引的建立 参考书籍 1. 视图 1.1 创建视图 基础语法: CREATE [OR REPLACE] VIEW 视图名[(列名表)]ASSELECT语句[WITH CHECK OPTION]说明: 在默认情况下,将在当前数据库创…