不管你是测试还是开发人员,一定免不了和总线打交道,对于测试工程师,提bug时经常需要上传log文件,其中就涉及到总线数据的保存;对于软件工程师,分析问题时需要用总线数据文件进行回放复现,这些都离不开记录总线数据的log文件
Log文件类型
BLF文件
什么是BLF文件
Binary Logging Format(binary format),二进制格式文件
由于是二进制文件,又做了压缩,无法通过Notepad的方式打开直接看到它的物理数值
可以借助CANoe打开查看里面的内容,借助的就是binlog.DLL文件的解析
binlog.DLL的用法请参考相关工程cfg
BLF格式支持所有的总线类型/协议和环境变量
ASC文件
什么是ASC文件
ASCII Frame Logging,ASCII格式文件
选择ASCII格式时,数据将保存为可读文本文件,这意味着可以用Notepad等编辑器打开,方便查看
ASCII格式的主要目的是允许与外部程序交换数据或将Trace数据传输到文档中
ASC文件是手上没有CANoe等工具的开发人员喜欢的格式
PCAP/PCAPNG文件
PCAP/PCAPNG格式文件,专门用于记录以太网数据包
两种格式有何不同呢
- PCAPNG格式受以太网和AFDX总线系统支持,PCAP仅受以太网总线支持
- 对于PCAP,不支持通道号和传输方向(Rx、Tx)
- 对于PCAPNG,不支持方向/传输方向,但支持各种通道
可以看出,优先选择PCAPNG保存以太网报文
PCAP/PCAPNG格式文件,可以用CANoe或者Wireshark打开查看
不支持用Notepad查看
CANoe中如何保存、导入与转换格式
保存
保存功能测试人员用的比较多,经常在提给开发人员的bug中,需要附加总线数据文件
有两种方式保存
自动保存
在Measurement Setup里,Logging模块必须是Active的,然后还要设置log文件的保存路径
这样当CANoe停止运行时,总线数据就会自动保存在log文件中
当然,你也可以在capl中通过调用函数来start log和stop log
手动保存
当运行CANoe时,总线数据除了会流到Logging模块,也会流到Trace模块里(当然前提是你在Measurement Setup里激活了它)
这样你就可以在Trace窗口手动导出数据
其中,Export是导出全部数据,Export Selection是导出选择的数据
切记,不管是自动保存,还是手动保存,文件格式都是可选的,在保存前一定要选择合适的文件格式
对于CAN消息数据,建议保存为ASC格式,对于以太网帧数据,建议保存为PCAP/PCAPNG格式
因为ASC文件方便开发人员用Notepad查看,PCAP/PCAPNG文件方便开发人员用Wireshark查看
导入
导入也有两种方式
Measurement Setup里
在Measurement Setup里,在Offline模块上,右击,选择Offline File List
这里记住,如果你想让导入的文件数据显示在trace窗口,上图的中间开关一定要打到offline那条线
然后在Offline File List界面,把文件导入,这样就完了吗,并不是,你还需要运行
其实这种方式相当于对文件的回放功能,顺便可以在trace窗口查看回放的内容
记住,添加文件后,还需要点击Start运行
当然,你也可以在Simulation Setup界面的总线上添加Replay节点,添加文件后回放,也是一种方法
Trace窗口里
这应该是我们分析报文或者转换报文最常用的方式了
在trace窗口,右击,选择Import导入文件
有的人会说,为什么弹出的添加文件窗口,我找到了正确的路径,为什么没显示我想添加的log文件呢,它明明就在那里啊
我想说,是不是你选择的文件格式不对啊
除了选择文件导入,你也可以直接把文件拖进trace窗口中
转换格式
有时候测试人员把log文件保存成了blf格式,开发人员拿到后,又没有工具来分析,他们就会让测试人员帮忙把blf转换成asc,或者是把blf转换成pcap
这也可以借助CANoe来实现不同格式的log文件的转换
思路吗,其实上面也说了,就是先把文件导入trace窗口,然后再导出,导出的时候选择你想要的格式就好啦
一个文件这样转换是方便,那如果有大量的文件,需要批量转换呢
之前有个朋友问过我这个事情,我也没有什么好的办法,后来她通过别的途径获得了一个小工具,我看了下,其实也是借助的CANoe,我猜测应该是用C sharp语言调的CANoe Application,重复导入导出,实现批量转换功能
我自己后来用python写了个exe程序,可以实现CAN消息的blf文件,批量转换成asc文件,当然,这种方式,也可以asc转blf,或者和csv转,以太网怎么转,能力有限,我就不懂了
代码水平不行,我就不放出来让大家看笑话了,自己看看就行了