精华内容
下载资源
问答
  • CAN报文解析

    2021-09-03 10:08:06
    文章目录CAN报文定义CAN编码格式(Intel、Motorola)CAN总线数据传输规则Intel格式编码Motorola格式编码注意CAN协议中CAN报文种类CAN报文的组成帧ID的组成数据段的组成CAN报文解析 CAN报文定义 CAN报文是指发送...

    CAN报文定义

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

    CAN编码格式(Intel、Motorola)

    CAN总线数据传输规则

    对于单个Byte,CAN总线在进行数据传输时,首先传输一个字节的高位(MSB),最后传输该字节的低位(LSB)。
    一般情况下,主机厂在定义CAN总线信号的时候,都会明确定义字节的发送顺序,总共有两种顺序:1.首先发送byte0(LSB),然后byte1,byte2,…,最后byte7(MSB)。
    2.首先发送byte7(MSB),然后byte6,byte5,…,最后byte0(LSB)。
    其中前者发送顺序(先LSB,后MSB)是目前主机厂的主流。
    下面以CAN总线报文的发送顺序为首先发送LSB,最后发送MSB的方式为前提,介绍Intel格式和Motorola格式这两种编码方式的不同。

    Intel格式编码

    当一个信号的数据长度不超过1 Byte,并且信号在一个字节内实现时,该信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位。
    当一个信号的数据长度超过1 Byte或者数据长度不超过1 Byte,但是采用跨字节的方式实现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节(LSB)的低位,这样信号的起始位就是低字节的低位。

    Motorola格式编码

    当一个信号的数据长度不超过1 Byte并且信号在一个字节内实现时,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位,这样,信号的起始位就是该字节的低位。
    当一个信号的数据长度超过1 Byte或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节(LSB)的低位,这样信号的起始位就是高字节的低位。

    注意

    当一个信号的数据长度不超过1 Byte时,Intel和Motorola两种格式的编码结果完全一致,但是当数据长度超过1 Byte时,两者的编码结果出现了明显的不同。

    CAN协议中CAN报文种类

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

    CAN报文的组成

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

    帧ID的组成

    接收到的十六进制的ID实际上是由 29 位标识符转换而来,目前大多数的通信协议中都直接给出了相应的帧ID,不需要换算。如表 1 所示。请添加图片描述
    表1中,P为优先级,有3位,可以有8个优先级( 0 ~ 7 );R为保留位,有 1位,固定为0 ;DP为数据页,有1位,固定为0;PF为报文的代码,有8 位;PS为报文的目标地址(也就是报文的接收方),有8位;SA为报文的源地址(也就是报文的接收方),有8位。

    数据段的组成

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

    例如 ,通信协议中需要的报文(ID:0000060B ): 0000060B 57 4e 01 7d 00 6d 11 00 。
    第 1 个字节57中的5为高 4 位,7为低 4 位。第 1 、 2字节表示横向距离,而且注明Byte 1 为低字节,Byte 2 为高字节,那么解析时就应该为: 4e57。

    CAN报文的解析

    根据需要收到CAN报文之后,需要根据具体的通信协议解析,然后分析解析出的数据是否正确。下面进行报文实例解析。数据类型定义如表 所示。
    在这里插入图片描述
    在这里插入图片描述

    解析实例:
    在这里插入图片描述
    我们看到有8个signal。分别是ID、纵向距离、横向距离、纵向速度、横向速度、动态属性、RCS、class(在这里没用)。
    拿纵向距离跟横向距离解释一下:
    目标纵向距离:
    在这里插入图片描述
    在这里插入图片描述
    这个signal有13个位组成,字节1为 0x4E*32的意思是向左移动5位,(2的5次幂是32),0xc4<<3是右移三位,跟上面的字节对齐,相加形成一个13位的信号。请添加图片描述
    目标横向距离:
    在这里插入图片描述

    0xc4与上0x70是保留后三位。乘以256(2的8次幂是256)是左移8位,给下面的8为字节留地方(补0)。
    在这里插入图片描述
    请添加图片描述

    展开全文
  • CAN报文解析—案例

    千次阅读 多人点赞 2021-02-06 18:51:35
    通常接收到的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的组成

    接收到的十六进制的ID实际上是由 29 位标识符转换而来,目前大多数的通信协议中都直接给出了相应的帧ID,不需要换算。如表 1 所示。
    在这里插入图片描述
    表1中,P为优先级,有3位,可以有8个优先级( 0 ~ 7 );R为保留位,有 1位,固定为0 ;DP为数据页,有1位,固定为0;PF为报文的代码,有8 位;PS为报文的目标地址(也就是报文的接收方),有8位;SA为报文的源地址(也就是报文的接收方),有8位。
    在这里插入图片描述

    3.2 数据段的组成

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

    例如 ,收到表2所示通信协议中需要的报文(ID:1818D0F3 ):
    1818D0F3 ce 0d 00 7d 00 6d 11 00 。
    第 1 个字节ce中的c为高 4 位,e为低 4 位。第 1 、 2字节表示总电压,而且注明Byte 1 为低字节,Byte 2 为高字节,那么解析时就应该为: 0dce。

    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: 180460F4的报文(180460F4数据帧扩展帧
      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是二进制
      在这里插入图片描述
    展开全文
  • CAN报文解析:根据实际值、精度、偏移量计算16进制数据; CAN负载率:计算总线负载率百分比; 静态电流:根据静态电流大小计算可存放天数; 助力转向匹配:EPS系统基本匹配计算; 仪表速比:组合仪表车速速比计算。
  • 基于简单工厂模式的CAN报文解析 1、概述 所谓工厂模式,就是通过对象创建模式绕开new,来避免对象创建(new)过程中所导致的紧耦合,从而支持对象闯将的稳定。具体实现是通过定义一个用于创建对象的接口,让子类实例化...

    基于简单工厂模式的CAN报文解析

    1、概述

    所谓工厂模式,就是通过对象创建模式绕开new,来避免对象创建(new)过程中所导致的紧耦合,从而支持对象闯将的稳定。具体实现是通过定义一个用于创建对象的接口,让子类实例化哪一个类,本例中应用的是简单工厂模式,基类为Parse_Frame,定义了解析CAN报文的数据结构以及解析的方法,子类为Parse_Frame_A和Parse_Frame_B,在工厂Frame_Factory中生成返回相应的子类,再调用基类里的函数,实现多态调用子类的解析或者其他方法,具体关系图如下所示:
    简单工厂
    借用某老师的一句话,在设计代码过程中,就是要寻找到代码中稳定和变化,然后隔离变化,让代码高内聚,低耦合,以达到稳定的目的,就像中国武术中的太极一样,要动中有静,静中有动,在其中找到一种平衡,使代码稳定。

    2、解析类

    在解析基类Parse_Frame中定义了解析CAN报文的数据结构,和需要多态调用的虚函数,具体代码如下:

    #pragma once
    /*
      @author:Jack_Young
      @fuc: 定义了CAN报文的数据结构和解析基类
    */
    #include <iostream>
    #include <vector>
    #include <linux/can.h>
    #include <linux/can/raw.h>
    using namespace std;
    struct Object_60a{    //60a的数据结构
      int NofObjects;
      int MeasCounter;
      int InterfaceVersion;
    };
    struct Object_60b{   //60b的数据结构
      int ID;
      double Distlong;
      double Distlat;
      double vrelong;
      double vrelat;
      int DynProp;
      double Rcs;
    };
    struct Data_Frame{   
        Object_60a frame_60a;
        Object_60b frame_60b;
    };
    class Parse_Frame{
      public:
        Parse_Frame() = default;
        virtual ~Parse_Frame() = default;
        virtual void parse(const can_frame* frame) = 0;
        virtual void show() = 0; 
        virtual Data_Frame get() = 0;
      protected:
        Data_Frame data_frame_;
    };
    

    在解析子类中继承父类,并重写解析函数。

    void Parse_60a::parse(const can_frame* frame){     //解析60a
      this->data_frame_.frame_60a.NofObjects = frame->data[0];
      this->data_frame_.frame_60a.MeasCounter = (frame->data[1]*256) + frame->data[2];
      this->data_frame_.frame_60a.InterfaceVersion = (frame->data[3]>>4)&0x0f;
      this->data_frame_.frame_60b.ID = 0;
      this->data_frame_.frame_60b.Distlong = 0.0;
      this->data_frame_.frame_60b.Distlat = 0.0;
      this->data_frame_.frame_60b.vrelong = 0.0;
      this->data_frame_.frame_60b.vrelat = 0.0;
      this->data_frame_.frame_60b.DynProp = 0;
      this->data_frame_.frame_60b.Rcs = 0.0;
    }
    void Parse_60b::parse(const can_frame* frame){  //解析60b
      this->data_frame_.frame_60a.NofObjects = 0;
      this->data_frame_.frame_60a.MeasCounter = 0;
      this->data_frame_.frame_60a.InterfaceVersion = 0;
      this->data_frame_.frame_60b.ID=frame->data[0];
      this->data_frame_.frame_60b.Distlong=(0.2*float((frame->data[1]*32)+((frame->data[2]>>3)&0x1f))) - 500.00;
      this->data_frame_.frame_60b.Distlat=0.2*float((frame->data[2]&0x07)*256+frame->data[3]) - 204.6;
      this->data_frame_.frame_60b.vrelong=0.25*float(frame->data[4]*4+((frame->data[5]>>6)&0x03)) - 128.0;
      this->data_frame_.frame_60b.vrelat=0.25*float((frame->data[5]&0x3f)*8+((frame->data[6]>>5)&0x07)) - 64.00;
      this->data_frame_.frame_60b.DynProp=frame->data[6]&0x07;
      this->data_frame_.frame_60b.Rcs=0.5*float(frame->data[7]) - 64.0;
    }
    

    3、工厂类

    在工厂类中返回创建的子类对象。

    class Frame_Factory{
      public:
        static Parse_Frame* create_frame(const can_frame& frame){//调用子类对象
           switch(frame.can_id){
              case 0x60a:
                  return new Parse_60a;break;
              case 0x60b:
                  return new Parse_60b;break;
              default:
                  break;
           }
        }
    };
    
    

    4、调用

          for(auto frame : v_data){
             Parse_Frame* m1 = Frame_Factory::create_frame(frame);//通过简单工厂模式构造子类并返回
             m1->parse(&frame);
             m1->show();
             delete m1; 
          }   
    
    展开全文
  • 基于Simulink实现CAN报文解析(unpack)与打包(pack)任务

    千次阅读 热门讨论 2020-06-12 17:31:15
    CAN报文解析   在如今的汽车电子中,常用到雷达,激光雷达等多种传感器。传感器各种信号根据其信号长度与编码类型,打包成CAN报文发送到控制器,则控制器需要做出解析。   如下图所示:一帧CAN...

    CAN报文的解析与打包

      在如今的汽车电子中,常用到雷达,激光雷达等多种传感器。传感器各种信号根据其信号长度与编码类型,打包成CAN报文发送到控制器,则控制器需要做出解析。
      如下图所示:一帧CAN报文里可存放许多信号(各信号根据长度,编码格式“塞”进CAN报文)
      对于解析工作,可采取结构体位域方式,也可采取Simulink加载dbc的方式。前者直观方便,但对于Motorola编码的CAN报文需要反向定义,手写代码易出错。后者是基于dbc实现的模型代码生成,较为方便可靠性强。
      本文将介绍基于Simulink的方式实现的CAN报文解析工作,对于结构体位域法可参照作者另一篇文章。
    在这里插入图片描述

    Simulink CAN UNPACK使用

    方式一(粗糙版):
      首先unpack模块需要接入CAN_MSG,这里可以拉取一个CAN_Receive模块来作为unpack的输入。下一步,配置CAN_Configuration,调整波特率。
    在这里插入图片描述  接下来,拉取CAN unpack解析模块,模块的输出(即解析后的信号)可以手动添加,也可以利用dbc文件来导入。实际工程中多用dbc的方式。如下图所示:
    在这里插入图片描述
      信号解析过后,通常会将解析后的各种信号以结构体的形式封装起来。这里就需要用到Bus Creator控件
    在这里插入图片描述  这里注意,Bus Creator中的Output data type需要利用Bus editor进行编辑,可以自己手动添加。也可以利用Matlab命令读取我们先前写好的头文件
    在这里插入图片描述
    PS!!!头文件定义的结构体,信号一定要与unpack模块输出的顺序和数量保持一致,否则会编译出错。
    在这里插入图片描述
      保存工程,生成代码(Embedded Code Generation),如下所示:在这里插入图片描述

    方式二(推荐):
      一般来说,在解析CAN报文前,都会在Simulink中制作相关的sldd/mat文件,主要定义如下结构:
    1.CAN_RX_BUS结构
      在搭建模型前,我们要清楚模型的输入是什么?解析模型的输入->即控制器接收到的原始CAN报文,如今CAN报文的接收大多采用中断的方式,一旦控制器收到了一条CAN报文,笔者会人为将这个报文转移至自己定义的buffer,以避免CAN报文发送周期过快导致当前报文来不及处理的丢帧现象,因此需要定义一个结构体,作为CAN报文的Buffer。
      对应到Simulink中,需要新建一个input模块,类型转为Bus,如下图所示:
    在这里插入图片描述
    2.定义Bus成员
      如下图所示,博主定义了CAN_RX_BUS(转化为C语言即结构体),其内部为诸如ConfigX_8_Receive_CAN_x_ID_XXX结构体成员。每一个Bus成员的格式为标准的CAN_MESSAGE, 格式如下图所示(可以自己裁剪或定义,但必须要有uint32格式的ID和8个字节的Data) 用于暂存接收到的原始CAN报文,同时也作为Simulink解析模型的input,如下图所示:

    在这里插入图片描述

    在这里插入图片描述
    2.根据dbc定义各报文的结构体
      模型的输入问题已经由步骤1-2解决,下面就需要定义模型的输出,即解析后的信号如何输出?我们需要根据dbc文件定义好各报文的结构体,这一步通常需要和应用层商讨,从而确定接口格式。如下图所示,博主和将模型解析后的信号输出到自己定义的接口。这样应用层可直接通过此接口获取解析后的信号值。
    在这里插入图片描述
    3.搭建CAN_UNPACK模型
      搭建完CAN_RX_BUS和各报文的结构体后,就可以搭建模型了,节选一个报文为例,如下图所示:
    在这里插入图片描述
    4.生成代码

    CAN_RX_BUS及各报文的结构体在.h文件中生成,如下所示
    在这里插入图片描述
    解析函数在.c文件中定义,如下所示在这里插入图片描述

      总结,无论采用哪种方式,解析的方式都是一样的,即UNPACK模块,但解析过程的报文输入和解析结果输出有所不同,也就是方式一和方式二的区别,核心是掌握Simulink中Bus Creator和Bus Selector的用法,灵活使用。

    解析过程实则非常简单,但由于笔者表达能力有限,可能没有解释透彻,如需进一步交流,
      可加笔者的微信zhao598042621,

    顺便给自己的公众号做个小广告:智能驾驶软件宝典

    在这里插入图片描述

    二. CAN PACK
      CAN PACK过程相反,CAN PACK模块的输入为各报文的信号值。
    在这里插入图片描述在这里插入图片描述
      CAN信号的输出会根据out1模块的命名生成相应的  CAN_MESSAGE结构体,将此结构体与底层CAN_TX API接口关联即可。

    三.总结
      不论是UNPACK还是PACK,其本身的模块是不变的,重要的是如何根据需求生成相应的数据结构,这取决于我们对BUS的灵活应用。
      如有疑问,欢迎指出,相互学习。

    联系方式:
    WX:zhao598042621
    公众号:智能驾驶软件宝典(汽车电子,数据分析,机器学习)

    展开全文
  • 本发明涉CAN通信技术领域,具体为一种基于Matlab的CAN报文解析方法。背景技术:当前,汽车电子行业相关电子控制系统(BMS、VCU、MCU、地面或车载充电机、智能仪表等)之间都普遍采用了CAN总线通信方式进行数据的交互。...
  • can整车报文解析

    万次阅读 2018-08-16 17:53:54
    下面详细介绍如何解析整车报文的详细过程     Can1控制器发,Can2控制器接收。发送比较简单,设置好发送函数,配置一下ID就完事了,接收也同样简单,只需滤波一下需要的ID就行。但是如果是整车报文解析就不...
  • CAN总线报文解析

    千次阅读 2018-11-07 10:23:14
    CAN报文格式 在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。 在标准格式中,报文的起始位称为帧起始(SOF),然后...
  • 电动汽车直流充电桩can报文解析,以及充电流程。。
  • CAN报文解析与应用

    2018-12-25 15:03:56
    本文论述CAN报文定义、接收CAN报文的方法以及CAN报文的组成与帧结构;通过实解析电动汽车整车控制与电池管理系统之间CAN通信报文的含义,并分析如何应用CAN报文解析来诊断有关电动汽车的故障。
  • CAN总线之报文解析

    万次阅读 多人点赞 2019-01-02 17:16:52
    上一节中初步接触CAN总线,梳理了一些关于CAN总线的基础内容。本节将深入了解CAN总线的结构,包括报文的组成,内容和处理形式。 看到一个关于CAN总线工作原理非常形象的一个比喻: ...CAN报文协议 C...
  • 支持asc,cvs,txt等等等格式方便好用,离线曲线解析更方便,CAN报文自动解析工具,只需要加载协议以及报文,即可实现自动解析报文信息。
  • 电动汽车CAN报文解析及应用.pdf
  • 周立功CAN通讯(txt格式) 报文解析

    千次阅读 2019-07-15 01:26:22
    周立功CAN通讯(txt格式) 报文解析 from numba import jit import numpy as np import os import sys import xlwt import xlrd import pandas as pd import matplotlib.pyplot as plt from tkinter import * import...
  • GBT 27930-2015-2011_CAN报文自动解析工具脚本: 新能源行业直流快充充电标准,CAN报文自动解析工具脚本,只需将CAN报文粘贴至相应位置,即可实现自动解析CAN报文信息。 如果需要了解详情和细节,可私信小编。
  • Simulink解析CAN报文数据

    千次阅读 2020-03-16 15:48:34
    Simulink解析CAN报文数据
  • 国标27930报文解析工具。可以通过宏修改适用于多种工具产生的CAN报文。使用linux的awk脚本实现该功能,所以只能在linux上使用。
  • 汽车电子嵌入式CAN网络UDS诊断协议相关报文实例分析,CANlog解析学习笔记,新手入门解惑,备忘查询。
  • Python 解析CAN报文数据

    2021-09-14 16:46:09
    Python 解析CAN报文数据 Can报文数据如果不借助Vector或者一些市面上其他的CAN工具来导入DBC文件去看的话,很难去知道对应的信号值是怎样,下面这个函数能根据DBC信息解析出一些相关的信号值,以便于我们来查看。 ...
  • /** cansend.c - simple command line tool to send CAN-frames via CAN_RAW sockets** Copyright (c) 2002-2007 Volkswagen Group Electronic Research* All rights reserved.** Redistribution and use in source ...
  • 基于labview的CAN上位机定制开发,CAN报文离线解析 工具,可支持zlg、gc、cx等主流CAN卡。
  • Labview 用DBC文件解析CAN报文以及DBC格式发送CAN 载入DBC格式文件,解析数据,修改后可以发送,调用的dll有使用说明。 参考程序后续可以自己改动 复制这条消息后,打开闲鱼€1y5gcYErL74€后打开闲鱼 ...
  • 2.Simulink CAN unpack模块建模 3.加载DBC选择报文及信号 4.设置模型的输入与输出 5.模型的参数设置 6.开始代码生成 7.Simulink代码生成报告 8.生成代码的解读 8.1 生成的模型头文件 msg_unpack.h 8.2 模型...
  • 行业资料-电子功用-CAN报文滤波解析方法、系统及电子控制单元.pdf
  • [Matlab脚本]如何解析标准CAN报文

    万次阅读 多人点赞 2018-07-10 20:58:20
    测试过程中需要现场采集CAN报文数据,并对数据进行解析; 数据的组成如下: 标准帧; 发送周期不一致; 存在多种不同的报文; 不同报文信息需要不同的解析方法 可对特定的数据进行绘图处理 CAN报文的格式: ...
  • 如何利用Python将can报文asc,blf文件批量解析为csv文件
  • CAN数据如何解报文呢?请各位大师指点一下,有解析例题的最好发一份解析一下,谢谢
  • CAN报文协议教程|CAN报文分析

    千次阅读 2020-09-14 17:38:28
    但是,CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。 总线使用不归零位填充。模块以线与逻辑连接到总线:如果只有一个节点向总线传输逻辑0,那么不管有多少个节点向总线传输逻辑1,整个总线...
  • Motorola和Intel格式报文解析的区别

    万次阅读 多人点赞 2018-08-20 21:39:19
    图1 CAN报文中byte与bit顺序 从图中可以看出,每行表示一个字节的8个位,从右到左依次是bit0, bit1...bit7. 一共有8行,从上到下依次是byte0, byte1...byte7.这也正是每帧CAN报文数据能容纳的最多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,462
精华内容 2,984
关键字:

can报文解析