应用场景
在进行台架测试的时候经常需要验证硬件条件如电流、电压等状态与软件采集结果是否匹配,在这种场景下,使用CANape、CANoe等方式由于采样率、报文回报率等问题,采集的数据与示波器之间存在较大差异,且CANape、CANoe等方式的信号回报率越高,对CPU的占用也越严重,因此使用劳特巴赫进行采集,通过 TRACE32 的 SNOOPer 组件,可以实现us级采样,配合示波器进行问题分析;
SNOOPer采样
在完成固件加载后,点击 Trace->Configuration 打开Trace配置界面

配置SNOOPer组件
在 METHOD 中勾选到 SNOOPer 切换 Trace 工作模式,随后在 SIZE 中设置采样长度大小,输入一连串9…9后回车即可,会自动设置到受支持的最大值 357913941. ,Rate 设置采样间隔,根据需要设置即可,这里设置100us一次,注意工作模式 Mode 为 Fifo,即先入先出模式;

添加要监测的变量
在 SELect 中点击 select... ,输入要监测的变量名后点击 Add ,一次添加一个,可以同时添加多个变量;

在 SELect 中点击 ... 可以在下方的命令窗口看到已经添加的监测量,可以进行增删减改,除了上述的方式添加监测量,也可以直接在命令行中输入以下指令的方式直接添加:
SNOOP.SEL V.RANGE(<变量1>) V.RANGE(<变量2>)由于后续可能需要多次使用这些变量组合,最好是在完成变量配置后将 SNOOP.SEL 指令复制下来;
采样录制
一切准备就绪后,在 commands 区域中点击 init 清理缓冲区(清除历史数据),然后在 state 中点击 Arm 开始录制变量,正常情况下,used 窗口中会持续跳动,下方 max 表示两次采样的最常间隔,录制完成后,在 state 中点击 OFF 结束录制;

数据导出
录制结束后,在 commands 区域中点击 List 即可展开录制完成的数据;

单击 B::SNOOPer.List 左侧的图标,在展开菜单内点击 To Clipboard all 可以将复制 List 录制的所有内容到剪切板;

当数据过大时,可能会卡顿,此时可以使用命令行调用打印机组件方式保存文件,相关指令如下:
1. Printer.FILE <file> <type> 指定输出的文件名及输出文件格式2. PRinTer.FileType <type> 指定输出文件的格式 <type> : ASCIIE (*.txt ) CSV (*.csv ) XHTML (*.html) ...3. WinPrint.SNOOPer.List 保存SNOOPer.List中的内容例如,你可以使用如下指令将 SNOOPer.List 的内容保存到当前用户桌面的 Lauterbach.txt 中:
Printer.FILE ~/Desktop/Lauterbach.txt ASCIIEWinPrint.SNOOPer.List使用打印机输出的内容比直接复制到剪切板的内容多了一个首行,其余内容完全相同;
数据处理
SNOOPer.List 内容大致如下,以打印机生成的 Lauterbach.txt 部分数据为例:
B::SNOOPer.List_____record|run|address_____|cycle__|data____________|symbol_________________________|ti.back-0001188145| 0| D:FE537DF0 snoop 0804 .qn\m_IoHwAbDirectIDC_GetAdcRaw-0001188144| 0| D:FE53A4A0 snoop 3236 .PinchCtrlZCT\gVR_BatVoltageVal 68.880us-0001188143| 0| D:FE537DF0 snoop 0804 .qn\m_IoHwAbDirectIDC_GetAdcRaw 69.820us-0001188142| 0| D:FE53A4A0 snoop 3236 .PinchCtrlZCT\gVR_BatVoltageVal 64.180us-0001188141| 0| D:FE537DF0 snoop 0803 .qn\m_IoHwAbDirectIDC_GetAdcRaw 72.830us-0001188140| 0| D:FE53A4A0 snoop 3236 .PinchCtrlZCT\gVR_BatVoltageVal 65.370us-0001188139| 0| D:FE537DF0 snoop 0804 .qn\m_IoHwAbDirectIDC_GetAdcRaw 68.100us-0001188138| 0| D:FE53A4A0 snoop 3236 .PinchCtrlZCT\gVR_BatVoltageVal 64.480usrecord列表示当前行在录制的所有数据中的位置,从首行可以看出,本次录制了1188145行数据,由于我们选取了 Fifo 模式, 最新的数据会出现在最前面,ti.back 表示两次采集数据之间的时间间隔;
要将上述内容处理成可用的波形数据,需要编写脚本或者使用一些额外工具(后面会提到),将其处理成简单如下格式的csv文件即可:
time ,value1 ,value20.00 ,1 ,20.01 ,2 ,30.02 ,3 ,4... ,... ,...为什么要处理成这个形式?后续需要将处理好的数据以更加直观的方式展现,可以借助 Matlab 自带的仿真数据检查器对数据进行分析,但其对csv表格的内容有要求,可以参考这里;
如果不想使用 Matlab,csv表格也可以直接用Excel打开,借助表格绘图组件直接进行绘制,但还是卖力推荐一下 Matlab 的仿真数据检查器 Simulink.sdi.view ,是真的很好用;
SNOOPerToCSV
虽然 SNOOPer.List 的内容格式简单,但如果你不想自己编写处理脚本,也可以试试我已经做好且编译完成的工具:SNOOPerToCSV ,它是一个C++编写的非GUI程序,使用时需要通过终端传入参数进行调用,与 Python 脚本等相比的优势是体积小巧、开箱即用、无环境依赖,你可以在这里找到它:
如何使用?
这个工具处理的任务并不复杂,仅需要简单的命令调用即可:
SNOOPerToCSV.exe <file1> <file2> ... -t <time>其中,<file> 指定了要处理的文件,可以传入多个文件依次处理;
-t 指定了起始时间轴,主要是用来跟示波器录制的波形数据对轴使用,通常很难手动控制示波器和劳特巴赫精确地同时开启录制,使用 -t 参数,可以很方便地调整数据起始时间,快速对轴;
例如使用如下的命令将 Lauterbach.txt 以 12.3s 为时间轴起始进行处理:
SNOOPerToCSV.exe Lauterbach.txt -t 12.3最终会生成一个 Lauterbach.txt.csv,可以直接使用Excel方式打开;
数据查看
Matlab Simulink 仿真数据检查器
仿真数据检查器是一个相对较新的组件,如果你的Matlab比较旧,可能需要更新,这里使用的版本为2022b,其作为Simulink的子组件,可以直接在Simulink打开任意模型时在工具栏找到它:

除此之外,也可以通过Matlab命令行的方式直接打开:
Simulink.sdi.view
导入数据
在数据查看器左侧的侧边栏点击导入:

点选从文件导入,从资源管理器中选择需要导入的文件:

导入先前生成的 Lauterbach.txt.csv ,可以在下方列表中看到加入的信号量,单击导入进入下一步:

配置信号显示
在上方工具栏点击可视化和布局选项卡:

- 时间图
所有的信号共用一个Y轴 - 迷你图
每个信号拥有自身单独的Y轴
我个人比较常用迷你图,用于对比同一时间基线上的信号状态;
配置完可视化后,在左侧信号栏勾选要查看的信号:

勾选完成后,即可查看处理好的信号:

数据分析
接下来介绍一些常用的数据分析工具使用;
缩放及自适应
点选缩放工具,有四种类型,其中按时间轴缩放较为常用,因为加入信号时会进行一次自适应缩放,Y轴通常较为合理,但X轴时间跨度会被摞在一起,有时候需要查看一些持续时间较短的信号跳变时就需要用到这个工具了,点选该工具后在图像区域横向拖拽即可放大要显示的框选区域:

当需要取消缩放时,可以点击自适应,恢复初始状态:

游标
使用游标,可以在同一时间基线查看数据详细值:

双游标可以很方便地查看数据跳变沿时间长度、信号持续时间等,你可以在游标下方找到两个游标的时间基线差值:

单击游标下方的框可以设置游标的跳转位置,单击中间的时间间隔框可以设置第二根游标距离第一根游标的间隔距离;
在结合示波器数据一同分析时,可以先将示波器数据(通常是CSV文件)用文本格式打开,修改首行部分以满足数据查看器的格式需求再一同导入数据查看器,使用游标测量出 SNOOPer.List 数据与示波器数据的关键帧之间的间隔长度,重新再调用SNOOPerToCSV 添加 -t 参数进行对轴;
快照
虽然你可以直接截图,但是也可以试试使用数据检查器的快照组件对信号进行截取:
