精华内容
下载资源
问答
  • 1:运行RUNAPP2脚本 2:加载DBC文件 3:指定需要提取的信号 4:加载ASC文件(执行改步后数据已加载,后面就是利用MATLAB工具绘制波形) 5:运行GetTimeseriesDatFromAppV1脚本利用MATLAB工具绘制波形
  • ASC格式的CAN报文发送工具,基于吉比特Canalyest做的二次开发
  • 该脚本用于解析asc文件并筛选指定can信号,输出到excel文件中,使用前请仔细阅读readme.txt。 1、脚本可同时解析多个asc文件,文件命名0、1、2...; 2、脚本可以同时解析多个Can信号,用户只需设置需要解析的CAN信号...
  • 能够将.asc格式的文件转化成csv格式的文件。 使用方法:建立一个文件夹,将所需要转换的.asc文件复制到里面,将convert.exe文件也复制到里面。 双击运行convert.exe文件,将生成一个文件夹“”输出文件“”,该...
  • # !/usr/bin/env python3 """ Author: Qin Pan Date: 2021-06-03 10:10:04...Description: unzip bagfile to asc file FilePath: """ import rosbag import rospy import sys, getopt import os from datetime impor
    # !/usr/bin/env python3
    
    """
    Author: Qin Pan
    Date: 2021-06-03 10:10:04
    LastEditTime: 2021-06-03 10:10:04
    LastEditors: Qin Pan
    Description: unzip bagfile to asc file
    FilePath: 
    """
    
    import rosbag
    import rospy
    import sys, getopt
    import os
    from datetime import datetime
    
    class RosAscWriter():
        """
    	将bag文件中的CAN帧解析为asc文件
    	
    	Attributes:
            topic: 指定CAN帧的话题名称  
            output_filename:指定输出的文件名称  
            start:指定CAN帧的开始时间  
            end:指定CAN帧的结束时间  
    	"""
        # 参数初始化
        def __init__(self, topic="can0/received_messages", output_path = "", start = rospy.Time(0), end = rospy.Time(sys.maxsize)):
            self.opt_topic = topic
            self.out_path = output_path
            self.opt_start = start
            self.opt_end = end
    
        # 根据话题类型过滤话题
        def filter_can_msgs(self, topic, datatype, md5sum, msg_def, header):
            if(datatype=="can_msgs/Frame"):
                    return True;
            return False;
    
        # 从命令行读参数
        def parseArgs(self, args):
            opts, opt_files = getopt.getopt(args,"hsvr:o:t:p:",["opath=","topic=","start=","end="])
            for opt, arg in opts:
                if opt in ("-o", "--opath"):
                    self.out_path = arg
                elif opt in ("-t", "--topic"):
                    self.opt_topic = arg
                elif opt in ("--start"):
                    self.opt_start = rospy.Time(int(arg))
                elif opt in ("--end"):
                    self.opt_end = rospy.Time(int(arg))
            return opt_files
    
        # 将bag文件中的can信息写入asc文件
        def write_output_asc(self, filename):
            """解析bag文件
    
            Args:
                filename: bag文件名称
    
            Returns:
                None
    
            Raises:
                IOError: 输入输出异常
            """
    
            # 指定生成的asc文件名称
            if self.out_path == "":
                out_file = bagfile[:-4] + "_can" + ".asc"
            else:
                out_file = self.out_path + bagfile[:-4] + "_can" + ".asc"
            
            if self.out_path != "":
                for f in os.listdir(self.out_path):
                    if f.find(bagfile[:-4])>=0 and f.find("_can.asc")>=0:
                        os.remove(self.out_path + f)
            else:
                for f in os.listdir("./"):
                    if f.find(bagfile[:-4])>=0 and f.find("_can.asc")>=0:
                        os.remove(self.out_path + f)
    
            with open(out_file,'w') as file:
                # 写入asc文件表头
                now = datetime.now().strftime("%a %b %m %I:%M:%S.%f %p %Y")
                file.write("date %s\n" % now)
                file.write("base hex  timestamps absolute\n")
                file.write("internal events logged\n")
    
                # 指定数据写入格式
                FORMAT_MESSAGE = "{channel}  {id:<15} Rx   {dtype} {data}"
                FORMAT_EVENT = "{timestamp:9.6f} {message}\n"
    
                 # 打开bag文件
                bag_file = filename
                bag = rosbag.Bag(bag_file, "r")
                i = 0
    
                # 读取bag文件里的CAN帧信息,并按指定格式写入asc文件
                for topic, msg, t in bag.read_messages(connection_filter=self.filter_can_msgs, start_time=self.opt_start, end_time=self.opt_end):
                    if i == 0:
                        # 捕获第一帧的时间戳,后续CAN帧的时间戳以此时间为基准偏移
                        firstFrameTimeStamp = msg.header.stamp.to_sec()
    
                    timestamp =  msg.header.stamp.to_sec()
    
                    if msg.is_error:
                        message = "{}  ErrorFrame".format(msg.channel)
                        # message = "{}  ErrorFrame".format('1')
                        line = FORMAT_EVENT.format(timestamp=timestamp, message=message)
                        file.write(line)
                        i = i + 1
                        continue
    
                    if msg.is_rtr:
                        dtype = 'r'
                        data = []
                    else:       
                        dtype = "d {}".format(msg.dlc)
                        canframe = msg.data[0:msg.dlc]
                        data = ["{:02X}".format(byte) for byte in canframe]
    
                    arb_id = "{:X}".format(msg.id)
                    if msg.is_extended:
                        arb_id += 'x'
                    
                    # ros节点添加Channel后需要添加
                    message = FORMAT_MESSAGE.format(channel=msg.channel, id=arb_id, dtype=dtype, data=' '.join(data))
                    # message = FORMAT_MESSAGE.format(channel='1', id=arb_id, dtype=dtype, data=' '.join(data))
                    if timestamp >= firstFrameTimeStamp:
                        timestamp -= firstFrameTimeStamp  
                    line = FORMAT_EVENT.format(timestamp=timestamp, message=message)
                    file.write(line)
                    i = i + 1
    
                # 关闭打开的bag文件
                bag.close()
    
    if __name__ == '__main__':
        if len(sys.argv) < 2:
            print('请指定bag文件!')
            sys.exit(1)
        else :
            RosAscWriter = RosAscWriter()
            try:
                opt_files = RosAscWriter.parseArgs(sys.argv[1:])
            except getopt.GetoptError:
                sys.exit(2)
    
    
        # 遍历指定的bag文件
        for files in range(0,len(opt_files)):
            bagfile = opt_files[files]
            RosAscWriter.write_output_asc(bagfile)
        print("完成!")
    

    注意:can消息中我自己添加了channel,如果你们的can消息没有发布这个数据,自己手动将代码里的msg.channel更改成常量就行了,常量需要大于0,不然CANoe可能打不开。
    调用方式:直接命令行带参数调用就行了。

    觉得写的不错的,给俺点个赞吧。

    展开全文
  • CAN数据格式-ASC

    万次阅读 热门讨论 2018-05-06 10:20:38
    Vector工具录制的数据,一般有ASC和BLF两种格式,本文介绍ASC。...但文本文件占用空间大,而且车辆CAN通道越来越多,1个小时的数据可以超过1G,普通记事本或开源软件(如notepad++)已经无法打...

    欢迎关注《汽车软件技术》公众号,回复关键字获取资料。

    Vector工具录制的数据,一般有ASC和BLF两种格式,本文介绍ASC。

    1. ASC定义

    ASC(ASCII)即文本文件,数据已可视化的文本存储。

    2.ASC查看

    通常情况下,用记事本就可以打开。但文本文件占用空间大,而且车辆CAN通道越来越多,1个小时的数据可以超过1G,普通记事本或开源软件(如notepad++)已经无法打开。推荐使用UltraEdit。

    当然,使用CANalyzer/CANoe等回放数据才是最正确的方式。

    3.ASC组成

    安装完Vector软件后,可以在Doc\LoggingFormat_ASCII目录下看到《CAN_LOG_TRIGGER_ASC_Format.pdf》。此文档详细说明了ASC内容。

     

    1)示例

     

    2)CAN Message Event

     

    重点看一下CAN Message Event,这也是ASC文件的主要部分

    从左到右一次是:时间戳、CAN通道编号、帧ID(16进制)、帧方向(发送或接收)、d。之后跟的DLC、数据。

     

    4.ASC解析

    1)读取方式

    因ASC文件会有千万行以上的规模,因此选择效率最高的方式,至关重要。推荐使用ReadLine,每次读一行的形式。

    2)取值

    正则表达式(Regular Expression)是处理文本的好工具,多语言都支持。

    取出所有非空格的字符串:(\S+)

    输入:2.5009 1 64 Tx d 8 00 01 02 03 04 05 06 07

    输出:

    (回复“ASCI例子”获取)

    3)解析

    从ASC中获取CAN数据后,阅读本公众号DBC的文章,就可以了。

    展开全文
  • The document specifies the format of CAN events and general objects in the CANoe/CANalyzer BLF logging. The described structures can be used to read and write BLF logging files using the binlog.dll, ...
  • can分析工具

    2017-04-18 13:13:12
    can分析工具
  • ASC文件 - CAN报文回放

    千次阅读 2021-01-26 13:35:13
    打开CANoe10.0,将*.asc文件拖进trace窗口。 即可打开*asc文件。

    打开CANoe10.0,将*.asc文件拖进trace窗口。

    即可打开*asc文件。

     

    展开全文
  • matlab存储asc文件

    2013-02-01 23:16:34
    装matlab的矩阵转存成asc文件,基于arcgridwrite封装,使用更方便,支持arcgis支接读取 %存储为asc文件 % Example: % Z = peaks(100); % Z(Z )=-3721; % xllcorner = 10; yllcorner = -4; cellsize = 0.5; NODATA_...
  • 读取 asc-CAN 跟踪文件并以结构形式提供缩放数据。
  • 用Python处理CAN数据库

    千次阅读 2020-12-24 06:38:52
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼这是介绍如何用Kvaser数据库(kvadblib)和Python管理DBC数据库的文章第一部分(总计为2部分):在Python里处理CAN数据库发送和接收数据库信号随着CANlib SDK软件开发包v5.22...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    这是介绍如何用Kvaser数据库(kvadblib)和Python管理DBC数据库的文章第一部分(总计为2部分):

    在Python里处理CAN数据库

    发送和接收数据库信号

    随着CANlib SDK软件开发包v5.22的发布, 数据库(kvaDbLib) 性能增强,同时Python canlib 包装函数包(v1.5) 通过kvadblib 模块加强了对数据处理的支持。此 kvaDbLib数据库是用来生成,书写,读取和修改DBC 数据库。[1] 在这第一篇博客里,我们先介绍怎样用Python canlib包装函数包生成和检验一个DBC 数据库。 这个Python canlib包是以Python Wheel文件发布的,以便 using pip install安装。如果你还没安装它,请参阅博客 ‘Python samples are now bundled in a package[2] (Python 范例现在已包含在一个软件包里)’了解更多这方面的介绍。

    生成一个数据库

    我们需要一个数据库来把原始 CAN 数据转换为人工可读信号。在本范例中我们使用一个假设的汽车数据库。

    让我们先从头开始生成数据。首先,我们从canlib python包引进kvadblib,生成一个名为“Histogram”[3] 的数据库, 加上一个标识符为id “402”报文, dlc “8” 并命名此报文为 “LIM_002”。

    from canlib import kvadblib# 生成一个数据库db = kvadblib .Dbc(name=’Histogram ’ )# 加上报文message = db.new_message(name=’LIM_002’ , id=402, dlc=8)

    下一步是在我们刚刚生成的报文上加一个信号。让我们加一个名为“Load” 的float (浮标)信号,此信号附带了一个单位和评论文字。

    message . new_signal( name=’Load ’ , type=kvadblib . SignalType .FLOAT, byte_order=kvadblib . SignalByteOrder .INTEL, # 预设值 mode=kvadblib . SignalMultiplexMode .MUX_INDEPENDENT, # 预设值 size=kvadblib . ValueSize( startbit=0, length=32) , scaling=kvadblib . ValueScaling( factor=1, offset=0) , limits=kvadblib . ValueLimits(min=0, max=100) , unit=’ metric ton ’ , comment=’Measured load in system . ’ )

    在生成一个信号时,我们要限定很多方面的信息,现在我们来快速看一下这些选项:

    名字给此信号一个特别的字串。这个名字必须是在整个数据库里独一无二的。

    类型此信号可被设为 SIGNED, UNSIGNED, (DOUBLE[4] ), 或 FLOAT。 这个信号也可为列举信号,那样我们就在Python包里把信号设为 ENUM_SIGNED 或ENUM_UNSIGNED。

    模式 The signal byte order can be either INTEL or MOTOROLA, defaults to INTEL.

    模式 信号的预设模式是 MUX_INDEPENDENT, 也就是说这是一个普通信号。[5] 在一个CAN 报文中,如果将模式设为 MUX_SIGNAL,一个信号也可被定义为数据选择器。现在这个数据选择器在这个报文帧里选择传输哪个多路数据。此多路数据应被设为它应有的正整数值,这样这个多路数据信号才能被使用。kvadblib目前只支持简单的多路数据。对简单多路传输来说,只有多路数据器信号能在一个报文里被定义,对每个多路数据信号来说,只能定义一个多录数据器值。

    大小这个信号的起始位 (又称为startbit), 和它的长度,以bit数来度量。

    比例比例有一个系数和一个调整量。一个原始CAN值乘以这个系数,然后再由调整量增值,就被转换为一个物理值。

    限制此信号的最小和最大物理值。

    单位 一个字串代表这个信号的单位。

    注释 一个字串用来记录此信号。

    让我们以定义另外三个报文和信号来完成这个数据库。

    message = db.new_message(name=’ECM_004’ , id=504, dlc=8)message . new_signal(name=’Fuel ’ , type=kvadblib . SignalType .FLOAT size=kvadblib . ValueSize( startbit=0, length=32) , limits=kvadblib . ValueLimits(min=0, max=300) , unit=’ l /100 km’ , comment=’Current fuel consumption . ’ )message = db.new_message(name=’ECM_003’ , id=503, dlc=8)message . new_signal(name=’EngineTemp ’ , type=kvadblib . SignalType .FLOAT, size=kvadblib . ValueSize( startbit=0, length=32) , limits=kvadblib . ValueLimits(min=-60, max=200) ,

    最后一步是把我们的新数据库存到一个文件里并关上它。

    # 写数据库文件db. write_file ( ’db_histogram . dbc ’ )db. close ()检测我们的数据库

    让我们来看一下我们刚刚生成的DBC 数据库。我们从Python书写内容开始:

    import textwrapfrom canlib import kvadblibwith kvadblib .Dbc( filename=’db_histogram . dbc ’ ) as db: print (db) for message in db: print ( ’\n {} ’ . format(message) ) for signal in message : print (textwrap . f i l l ( ’ {} ’ . format( signal ) , 80))

    使用textwrap模块来生成一个简洁的80字宽输出:

    Dbc db_histogram: flags:0, protocol:CAN, messages:4 Message(name=’LIM_002’, id=402, flags=, dlc=8, comment=’’) Signal(name=’Load’, type=,byte_order=, mode=-1, size=ValueSize(startbit=0,length=32), scaling=ValueScaling(factor=1.0, offset=0.0),limits=ValueLimits(min=0.0, max=100.0), unit=’metric ton’, comment=’Measuredload in system.’) Message(name=’ECM_004’, id=504, flags=, dlc=8, comment=’’) Signal(name=’Fuel’, type=,byte_order=, mode=-1, size=ValueSize(startbit=0,length=32), scaling=ValueScaling(factor=1.0, offset=0.0),limits=ValueLimits(min=0.0, max=300.0), unit=’l/100 km’, comment=’Current fuelconsumption.’) Message(name=’ECM_003’, id=503, flags=, dlc=8, comment=’’) Signal(name=’EngineTemp’, type=,byte_order=, mode=-1, size=ValueSize(startbit=0,length=32), scaling=ValueScaling(factor=1.0, offset=0.0),limits=ValueLimits(min=-60.0, max=200.0), unit=’Celsius’, comment=’Systemtemperature consumption.’) Message(name=’ECM_001’, id=501, flags=, dlc=8, comment=’’) Signal(name=’EngineSpeed’, type=,byte_order=, mode=-1, size=ValueSize(startbit=0,length=32), scaling=ValueScaling(factor=1.0, offset=0.0),limits=ValueLimits(min=0.0, max=6000.0), unit=’rpm’, comment=’Current enginespeed.’)

    希望这里不要有什么不正常,所以让我们看一下我们的数据库在Kvaser 数据库编辑器里是怎么样。

    在Kvaser数据库编辑器的中间框里,我们能看到4个已定义的报文。在图1中1, 报文“LIM_002”被选择,该报文的内容显示在此报文下面。在我们的例子里,有一个名为“Load”的信号,它的单位unit被设为“metric ton”。在右边的方框中,当前报文的数据bits以一个布局(有阴影的格子)显示。 在图中 1, 我们能看到被选中的信号是从第一个byte 的bit 0 到第三个byte的bit 7, 这和开始位置0和给出的长度32相对应。

    这样我们就结束了此博客的第一部分,介绍怎样生成一个数据库。在下一个部分我们将看一下在发送和接收信号时怎样使用数据。

    注释

    1 DBC 数据库描述CAN 总线的属性,各连接节点,和CAN 报文及信号。

    2如果你看过CANlib SDK 软件开发包的t 范例CANlib SDK,你可能见过这个特别的数据库,因为你可以在文件夹folder Samples\tScript\Learn more\Misc\histogram 那里看到它。

    3 kvadblib目前不支持DOUBLE 型信号。

    4 我们只在此博客里介绍普通(非选择数据) 信号。

    展开全文
  • 一、背景描述 csv格式文件是一种类似于excel的文件格式 asc格式文件是一种可以用text打开的文本文件 ...需要的是将csv对应的某行某列的值prevalue,写成asc格式的文件,检验是否成功转换的方式:将转成的asc文件加载到a
  • ASC文件数据存储格式

    2018-10-23 22:13:44
    很详细的CAN报文数据存储格式的介绍,可用于嵌入式开发CAN logger使用
  • CAN总线CSV格式报文转ASC格式报文

    千次阅读 2020-05-29 11:26:08
    CAN总线报文- CSV转ASC格式 CANoe PcanExplorer
  • MATLAB进行CAN文件解析--PART2

    千次阅读 2019-09-12 14:40:01
    上部分讲述到数据划分,以及划分过的数据进行处理,本部分讲数据输出 要达到类似结构体方式输出,需要解决序列问题,i ...数据总行数dataline_i=total_i-sum(can_index) 输出行数数据 line_i=dataline_i+pe...
  • 如何利用Python将can报文asc,blf文件批量解析为csv文件
  • can数据中的intel和motorola区别

    千次阅读 2018-11-24 14:28:52
    链接地址
  • CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1国际标准化的串行通信协议。 在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统 被开发了出来。...
  • CAN log之blf/vsb/asc/trc

    千次阅读 2019-06-18 16:02:34
    CAN数据格式-ASC TRC(PEAK CAN TRC File Format) PEAK CAN TRC File Format BLF不能直接打开,需要使用Vector提供的binlog.dll VSB不能直接打开,但以bin格式打开可以看到具体的文件结构,官方提供了对应的...
  • C#读取CAN数据

    2018-03-21 16:40:57
    C#读取CAN数据,很好的资料,周立功盒子!!!!!!!
  • cantools是用于处理ASC,BLF,CLG,VSB,MDF和DBC文件的一组库和命令行工具。 这些工具可用于分析数据并将其转换为其他格式。 还提供了用于解析和访问这些文件的共享库。
  • 用于CAN网络中的数据文件转换,可由DBC生成Excel,也可由Excel生成DBC,支持相互转换,内附模板
  • CAN数据格式的讲解。引用自他人的博客,侵权请告知,立即删除。it is very useful, please download it.
  • 最近在用CANopen开发设备,在网上发现一款免费的CANopen...网上搜了N种方法,试了N多方法,还是不行,无意中看到bood123的canfestival中对象字典编辑器的打开(http://blog.csdn.net/bood123/article/details/5025716
  • 你在这里因为你有,有一个文件扩展名结尾的​​文件.asc.文件与文件扩展名.asc只能通过特定的应用程序推出。这有可能是.asc文件是数据文件,而不是文件或媒体,这意味着他们并不是在所有观看。什么是一&nbsp.asc...
  • Python罐头 ontroller甲REAÑetwork的C是设计成允许微控制器和设备彼此通信的总线标准。 它具有基于优先级的总线仲裁和可靠的确定性...许多不同的记录器和阅读器支持回放:ASC(CANalyzer 格式)、BLF(矢量二进制记录
  • C# 读取和输出asc文件

    2021-08-04 16:48:36
    C# 读取asc文件 读取asc文件 读取文件头和数据: /// <summary> /// 读取asc文件 /// </summary> /// <param name="path">需要读入的asc文件</param> /// <param name="data"&...

空空如也

空空如也

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

CANasc