记录

会话录制与回放

偶发故障在现场录下来,回到办公室想看几遍看几遍。

本页内容

会话录制与回放

几个小时才出一次的故障,最难交接。会话录制把每个连接收发的每个字节连同发生的时刻写进一个 .spulog 文件;会话回放在独立窗口里按原来的节奏重放它——可以在本机,也可以在办公室同事的电脑上,不需要设备,也不需要连接任何端口。

典型的用法:现场工程师开始录制后就让它一直录着,设备一出异常就按 F9 记下这一刻,然后继续干活。回到办公室,有人打开文件、跳到书签,把故障前后的过程按任意速度反复看。录制在 Free 里就能用,客户不必购买任何东西,也能把问题录下来发给你。

入口都在主窗口的文件菜单:

  • 文件 → 录制会话… 开始录制;录制期间同一个菜单项变为停止录制;
  • 文件 → 添加书签(F9)在当前连接上标记此刻;
  • 文件 → 打开录制… 在回放窗口里打开 .spulog 录制,或文件 → 导出会话…保存的 JSON Lines 文件;
  • 文件 → 回放本次会话 直接回放本次会话中 SPU 保留的数据,无需先保存。

回放只负责显示:回放的数据绝不会发往端口、不会触发自动应答、也不会进入桥接,所以同一台设备连着的时候也可以放心回放。

回放窗口在一份两个连接的录制中暂停于 1 分 16 秒处,两个连接并排显示:p1 COM3 是文本形式的设备日志,p2 COM5 是十六进制的 Modbus 请求与响应,其中一行星号标出「从站超时」书签。上方是播放按钮、设为 10x 的速度框、「跳过超过 5 秒的空闲」、「在录制中查找」框和带两个书签标记的时间轴;右侧书签列表列出「从站超时」和「CRC 错误」及其备注
回放窗口:每个连接一个视图,时间轴上是收发疏密与书签,播放控制在最上方。

现场录制

文件 → 录制会话… 需要确认三项:

  • 文件:录制写到哪里。默认建议「文档」下 SPU Recordings 文件夹里的 SPU-日期-时间.spulog,并记住你选的文件夹。之前的录制不会在不询问的情况下被覆盖。
  • 从本次会话中 SPU 已保留的数据开始:默认勾选。SPU 在内存里为每个连接保留最近的收发(每个连接 2~8 MB,合计不超过 32 MB),勾选框后面会写明现有多少,例如「2 个端口, 3.21 MiB 自 13:40 起」。勾上它,你想到要录制之前刚刚出现的那次异常也会在文件里。
  • 每 100 MB 另起一个文件:长时间录制会分成若干卷(…-part2.spulog、…-part3.spulog……),每卷 16~2048 MB。回放播到一卷的末尾时,会出现一行提示,点打开即可接着看下一卷。

点开始录制。窗口里的全部连接都会被录制,收发两个方向按时间合并,直到你停止。之后新加的连接会自动加入;参数修改、端口打开或关闭、连接移出窗口,都会在文件里记一笔。打开别的工程不会中断录制,关闭 SPU 时录制会正常收尾。

录制期间,状态栏显示红色的 ● 录制中,以及已录时长和文件大小。点它可以停止录制、添加书签、在文件夹中显示,或回放此录制——打开截至目前已写入的部分。

文件每 250 毫秒写一次盘。SPU 或电脑意外退出时,最多丢掉最后不到一秒,文件照样能打开,回放窗口会提示录制在一行中间结束。写盘失败(磁盘满了、U 盘被拔掉)时,录制立即停止并说明原因,已写入的部分仍然可读。Mac App Store 版的录制始终是一个文件,每次都由保存面板选择位置。

F9 在当前连接上标记此刻:不弹窗,也不用打字,这一刻不会错过。书签自动命名为 书签 1、书签 2……,回到回放窗口再改名。不在录制时 F9 同样有效:书签随本次会话保留,之后以「从本次会话中 SPU 已保留的数据开始」开始的录制、回放本次会话都会带上它,它还会作为一条备注出现在该连接的会话导出和诊断包里。

录制进行中的主窗口下半部分:接收区不断收到设备日志,状态栏右侧是红色的 ● 录制中 00:00:06 · 3.82 KiB
录制期间,状态栏显示已录时长和大小;点它可以停止录制、添加书签或打开已录制的部分。

回放窗口

文件 → 打开录制… 在独立窗口里打开录制。可以同时打开多份,每份一个窗口,关闭 SPU 时一并关闭。大文件打开时读一遍并显示进度,之后跳到任意时刻都是即时的。

录制里的每个连接各有一个视图,并排显示;视图 → 竖向排列 改为上下排列。一开始显示前四个,视图 → 端口 可以逐个显示或隐藏。视图标题显示播放头所在时刻该端口的名称和参数。

每个视图有自己的视图 ▾菜单:接收与发送分别选 Hex 或文本,接收编码、发送编码、时间戳、显示发送数据、放大、缩小、重置缩放,以及两个按录制时间重现的面板:

  • 波形图把数据里的数值画成曲线,间隔与当时到达时一致,见实时波形图;
  • 协议解码把收发按帧列成表,往返时间与原始通信一致,见协议解码视图。使用的是主窗口里的帧模板。

在视图里右键,可以选区复制为(C 数组、Hex Dump 或十六进制字节)、选区另存为…、查找…(只在本视图里查找)和在此处添加书签。

时间轴下方一行显示播放头所在的时刻、从开头算起的时间与总长(+00:12:34.567 / 01:05:00.000),以及当前是第几条事件、共几条。时间按本机时区显示;录制是在别的时区做的,鼠标停在时间上会显示录制地,例如「录制于 Asia/Shanghai(UTC+08:00)」。

播放控制

工具栏依次是回到开头、后退一帧、播放/暂停、前进一帧,然后是:

  • 速度:0.25x、0.5x、1x、2x、5x、10x、100x 或最快。1x 时数据按线路上原来的间隔出现。视图跟不上时(例如繁忙线路上的 100x),状态栏会说明,并尽可能快地显示。
  • 跳过超过 5 秒的空闲:默认勾选。超过这个时长(1~60 秒)的静默一律按这个时长播放,等故障等了一个小时,回放时不必再干等一个小时。取消勾选则保留每一段原始间隔。速度和这项设置都会被记住。

时间轴显示整份录制的收发疏密、上方的书签标记和播放头。点任意位置即跳到那里;拖动时时间跟着鼠标走,松开才跳转。鼠标停在书签标记上会显示书签名和时间,点它直接跳过去。播放 → 转到时间… 可以精确到毫秒地跳到某个时刻。

跳转后,每个视图会重新画出这一刻之前的数据,保证有上下文;一行 -- 从 … 开始显示 -- 标出重画部分的起点。前进一帧在显示着的连接上显示下一段数据——一次接收或一次发送,后退一帧把最后一段撤回。

按键 在回放窗口中
空格 播放/暂停
. 和 , 前进一帧/后退一帧
Home 回到开头
Ctrl+G 转到时间…
Ctrl+Shift+F 在录制中查找
F9 在播放头处添加书签
] 和 [ 下一个书签/上一个书签
Ctrl+S 保存书签
F5 重新载入:读入仍在增长的文件新写入的部分
F11 全屏
Ctrl+W 关闭

macOS 上用 ⌘ 代替 Ctrl。焦点在按钮、下拉框或列表上时,空格照常归它们使用。

在录制中查找

工具栏上的在录制中查找输入框(播放 → 在录制中查找,Ctrl+Shift+F)搜索整份文件,包括还没播到的部分,直接跳到匹配处:回车或下一个匹配从播放头向后找,Shift+回车或上一个匹配向前找。视图会画到匹配结束的位置,并高亮匹配内容。

  • 文本按第一个显示着的视图的接收编码查找。勾选 Hex 可以直接输入字节,如 48 65;Aa 区分大小写。
  • 搜索范围是显示着的连接的收发两个方向、录制里的备注(例如端口关闭)以及书签名。
  • 一条回复分两次到达(串口上很常见)照样能匹配;不同端口、不同方向或不同 TCP 客户端的数据不会拼在一起匹配。
  • 大文件在后台搜索,进度显示在状态栏,按 Esc 停止。

视图右键菜单里的查找…只在该视图显示的内容里查找。

书签与循环

右侧的书签列表(书签 → 显示书签列表)列出每个书签的时间、端口、名称和备注。书签有三个来源:现场按的 F9;回放窗口里按的 F9(在播放头处,归属焦点所在的视图);视图右键菜单里的在此处添加书签(在所点那一行的时刻)。

  • 双击名称或备注即可编辑;双击时间或端口则跳到该书签。按 Delete 删除选中的书签。
  • ] 和 [ 在书签之间前后跳转。播放经过书签时,视图里会出现一行书签标记。
  • 文件 → 保存书签(Ctrl+S)把书签保存进录制文件本身,文件发给谁,书签就跟到谁那里。有未保存的修改时标题栏带 *,关闭窗口时会询问。只读文件、仍在录制的文件和「回放本次会话」的临时文件存不进去,改用文件 → 另存副本…保留书签。

要反复播放某一段——演示,或者盯着一次故障直到看明白——在列表里选一个书签(到下一个书签为止)或两个书签(两者之间),再点在书签之间循环。播放会一直绕着这一段转,直到再点一次;这一段在时间轴上以浅色标出。给一屋子人演示时,视图 → 全屏(F11)加上各视图的放大,投影上也看得清。

本次会话与仍在写入的文件

  • 文件 → 回放本次会话 回放本次会话中 SPU 在内存里保留的数据(各连接最近的收发),连同期间按下的 F9 书签。无需先保存:回放用的是临时文件,关闭窗口即删除;文件 → 另存副本…可以把它连同书签存成 .spulog。
  • 仍在录制的文件也能打开:点状态栏录制菜单里的回放此录制,或用「打开录制」。文件 → 重新载入(F5)读入之后新写入的部分,播放头停在原处不动。这份文件的书签要等录制停止后再保存,或者另存副本。

发送与导出

  • 发送文件。 .spulog 包含各连接收发的全部数据、端口名称与参数,以及保存进去的书签。分卷的录制要把全部分卷放在同一个文件夹里一起发送。发给公司以外的人之前,先确认录制里有什么。
  • 脚本也能读。 .spulog 是 JSON Lines 格式,与「文件 → 导出会话…」导出的 JSON Lines 相同(见导出数据与诊断包)。
  • 文件 → 导出区间… 把录制的一段保存为 JSON Lines、CSV 或文本:开着循环时导出循环段;否则导出列表里选中的书签(两个或以上)之间的一段;再否则导出整份录制——都只包括显示着的连接。
  • 文件 → 另存副本… 把整个文件连同书签另存为新文件。

Free 与 SPU Pro

把问题录下来并交出去所需的一切,Free 里都有:

  • 录制,包括自动分卷和 F9 书签,时长与次数都不限;
  • 打开录制、时间轴、书签(命名、备注与保存)以及在整份文件里「在录制中查找」。

回放在 Free 里播放每份录制的前 10 分钟:

  • 时间轴仍显示整份录制,10 分钟之后的部分画斜线;那里的书签照常列出,跳过去会停在 10 分钟处;
  • 「在录制中查找」会统计 10 分钟之后的匹配数,但不跳过去显示;
  • 10 分钟从整份录制的开头算起,而不是每一卷各算一次,长录制的后续分卷没有自己的 10 分钟;
  • 回放本次会话取本次会话最近的 10 分钟;
  • 导出区间导出区间内每个连接最近的 500 条记录;
  • 回放里的波形图和协议解码不计入额度:不占用实时连接每次启动的 120 秒绘图时长和 120 秒解码时长,同一段数据不会被计两次。不消耗额度的限制照常生效:波形图只绘制前 2 个通道,只有第一个帧模板参与解码。

播放第一次撞到限制时,SPU 会提示一次(每次运行只提示一次);之后视图上方会有一行说明限制在哪里,旁边是了解 SPU Pro。

SPU Pro 回放整份录制和 SPU 保留的全部会话数据,导出区间导出整个区间,每次最多 64 MB。

这篇文档是否有帮助?