Skip to main content
通过 Lager CLI 控制示波器 Net,用于波形采集、触发、测量和串流。
Rigol MSO5000 上的已知限制。 边沿触发和 SPI 触发可以工作。脉冲、UART 和 I2C 触发在 Rigol MSO5000 上会失败。CAN 触发以及 Python API 中的所有总线解码器同样会失败。失败的命令会打印错误并以 1 退出。Issue #418 跟踪这项工作。

语法

不带命令时,lager scope 列出 Box 上的 scope 和 scope-channel Net。不带 NET_NAME 的命令使用默认的示波器 Net。用 lager defaults add --scope-net NET_NAME 设置默认值。

示波器及其通道

一台示波器对应两种 Net。scope Net 是仪器本身。scope-channel Net 是它的一路输入,每个通道一个 Net。对于双通道 PicoScope,lager nets tui 提供三个 Net:两个通道,以及它们所属的示波器。 这种划分与硬件一致。有六项设置属于通道,其余设置属于仪器: 两种 Net 的用法相同:
仪器命令也可以作用于它的某个通道 Net。一个通道只属于一台示波器,因此该命令没有歧义。早于 scope Net 的脚本无需修改即可继续工作。反过来则不行。lager scope picoscope1 coupling ac 没有指明通道,Box 也不会去猜测。错误信息会列出应改用的通道 Net。
早于 scope Net 的 Box 只有通道 Net,保存时的角色为 scope。Box 第一次读取 Net 时会转换它们。每个旧 Net 都变成同名、同引脚的 scope-channel Net。旁边会出现一个以型号命名的 scope Net,例如 picoscope1。没有引脚的旧 scope Net 仍然是 scope Net,代表整台仪器。您无需重新添加任何内容,也可以重命名新的 Net。

全局选项

每条命令也都接受 --box。通道、采集控制、autoscale、measure 和 cursor 命令还接受 --mcu MCU,除 holdoff 以外的各种触发类型也接受。没有任何 lager scope 命令使用它的值。

命令

边沿触发在 PicoScope 和 Rigol 上都可用。脉冲触发和协议触发(I2C、SPI、UART)仅限 Rigol。trigger holdoff 仅限 PicoScope。
测量在两种仪器上都可用,但两者的计算方式不同。Rigol 回答关于它所显示波形的 SCPI 查询。对于 PicoScope,守护进程根据采集到的数据块计算该值,因为 PicoTech 的任何 API 都没有与 :MEAS:VPP? 等价的命令。因此 --display 和 --cursor 仅限 Rigol。它们把读数显示在仪器的屏幕上,而 PicoScope 没有屏幕。PicoScope 采集期间,测量和光标读数使用守护进程最近一次串流发出的采集。因此它们描述的是 Web UI 中的波形,而不是片刻之后的另一次采集。停止之后,它们描述最后一次采集,就像停止状态下台式示波器上的读数一样。

校验范围

CLI 在把命令发送到示波器之前会先检查这些值:

受支持的硬件

守护进程从所连接的 PicoScope 读取通道数、电压量程、带宽、存储深度和 ADC 分辨率。它不根据系列假定这些值。要查看守护进程检测到的内容,请在 Web UI 的控制台中输入 capabilities。 添加 Net 时,lager nets tui 从型号读取通道数。对双通道型号,它提供两个通道 Net;对四通道型号,提供四个。8 通道的 4824A 同样得到四个,即通道 A 到 D,因为 Lager 不为 D 之后的通道命名。无法识别的型号得到两个。

功能对比


基本控制命令

enable

启用 scope-channel Net 的通道。

disable

停用 scope-channel Net 的通道。

start

开始波形采集。不带 --single 时,示波器以已设置的触发模式连续采集。
选项:
  • --single - 准备一次采集,然后停止(单次模式)
不带 --single 运行 start 时,处于 single 模式的 PicoScope 会切换为 auto。单次采集在一次采集后停止,因此无法连续运行。

stop

停止波形采集。

force

不等待触发条件,立即触发。当信号不满足触发条件时,使用它。

status

在一次回复中显示所有示波器设置:通道、时基、触发和采集。仅限 PicoScope。
回复来自守护进程最近发布的设置。Web UI 也根据同一状态绘制它的控件。

autoscale

自动调整垂直刻度和水平时基(仅 Rigol)。该命令可能需要 10 到 15 秒。
PicoScope 会拒绝 autoscale,因为它的 SDK 没有自动设置功能。请自行设置 scale 和 timebase。

通道配置

coupling

设置通道的输入耦合方式。
参数:
  • MODE - 耦合方式:dc、ac 或 gnd
PicoScope 会拒绝 gnd,因为没有任何 PicoScope 系列具备接地开关。要阻断直流分量,请使用 ac,或者停用该通道。

probe

设置探头衰减比,以获得准确的电压测量。
参数:
  • RATIO - 探头衰减比:1、10、100 或 1000
2000 系列 PicoScope(2204A、2205A)初始为 10x。2000a、3000a、4000a 和 5000a 系列初始为 1x。请把衰减比设置为与您的探头一致。

scale

设置通道的垂直刻度(每格伏特数)。
参数:
  • VOLTS_PER_DIV - 垂直刻度,单位伏特每格(0.001 至 100.0)

timebase

设置示波器的水平时基(每格秒数)。
参数:
  • SECONDS_PER_DIV - 水平时基,单位秒每格(1e-9 至 50.0)
上面的范围是该命令接受的范围,而不是某台设备能达到的范围。示波器按一组固定的采样间隔采样,因此会把请求舍入到最接近的一级。最快时基还取决于数据块深度,而不只取决于采样率。例如,2204A 以 100 MS/s 采集 8000 个采样点时,最快为 8 us/div。在 PicoScope 上,status 报告的是实际使用的时基,而不是您请求的时基。

measure 子命令

在任一种仪器上测量波形特性。Rigol 返回它自己计算的读数。对于 PicoScope,Box 采集一个数据块,由守护进程根据采样点计算该值。您不需要串流或 CSV 导出。 每次 PicoScope 测量都需要单独的一次采集,因此读取多个值需要多次采集。要从一次采集中读取全部测量值,请使用 Python API 中的 measurement.all()。 所有 measure 命令的通用选项:

时间测量

measure period

测量波形周期。

measure freq

测量波形频率。

measure pulse-width-pos

测量正脉宽。

measure pulse-width-neg

测量负脉宽。

measure duty-cycle-pos

测量正占空比(信号为高电平的时间占比)。

measure duty-cycle-neg

测量负占空比(信号为低电平的时间占比)。

电压测量

measure vpp

测量峰峰值电压。

measure vmax

测量最大电压。

measure vmin

测量最小电压。

measure vavg

测量平均电压。

measure vrms

测量有效值(均方根)电压。

trigger 子命令

显示或设置触发。边沿触发在 PicoScope 和 Rigol 上都可用。协议触发(I2C、SPI、UART)和脉冲触发仅限 Rigol。

trigger

不带子命令时,trigger 显示触发的模式、触发源、边沿和电平。在 PicoScope 上,如果设置了释抑,它也会显示释抑。
pulse、i2c、spi 和 uart 的选项: 这四条命令每次都会应用 --mode 和 --coupling。因此,不带这两个选项的调用会把它们设置为 normal 和 dc。trigger edge 没有默认值,它只更改您给出的设置。
--coupling 是触发比较器前面的滤波器,而不是通道的输入耦合。这两项设置共用一个词,但作用不同。触发滤波器让示波器能在有噪声或漂移的边沿上触发,而波形不会改变。lager scope <net> coupling 改变通道所通过的信号,波形会随之移动。只有 Rigol 具备触发滤波器。PicoScope 会拒绝该标志,也不会把它改用于输入耦合。
--mode 设置运行中的示波器如何触发。在 auto 模式下,如果没有边沿越过电平,示波器会自行触发,因此波形始终在更新。在 normal 模式下,屏幕只在真实触发时更新,这能让重复波形保持稳定。在 PicoScope 上,--mode single 还会准备一次采集,与 lager scope <net> start --single 相同。单次采集无法连续运行。因此,不带 --single 的 start 会把 single 改为 auto。在其他模式下,start 保持您设置的模式。

trigger edge

设置边沿触发。它在 PicoScope 和 Rigol 上都可用。
选项: 每个选项都是可选的,未给出的选项保持原值。在 PicoScope 上,请至少给出一个选项。一个都不给时,命令会打印错误并以 1 退出。 在 PicoScope 上,--source 接受通道字母(A 到 D)、通道编号(1 到 4)或 scope-channel Net 的名称。在 Rigol 上,--source 接受 scope-channel Net 的名称。 示例:

trigger holdoff

每次触发之后,在 SECONDS 秒内忽略触发,取值范围为 0 到 10。不给值时,该命令显示释抑时间。仅限 PicoScope。
对于有多个边沿越过电平的信号(例如突发信号或一个串行字节),释抑能让波形保持稳定。示波器会等一次突发结束之后,再在下一次突发上触发。

trigger pulse

设置脉宽触发(仅 Rigol)。当脉宽满足条件时,示波器触发。 在 Rigol MSO5000 上,这个触发还不能工作。请参阅本页顶部的限制说明。
选项(在上述选项之外): trigger-on 条件: 该条件目前还不选择极性:每个 positive 值与对应的 negative 值设置的是同一个宽度条件。缺少所需的宽度时,命令不会更改任何宽度条件,并打印一条提示。

trigger i2c

设置 I2C 协议触发(仅 Rigol)。示波器在 I2C 总线事件上触发。 在 Rigol MSO5000 上,这条命令还不能工作。请参阅本页顶部的限制说明。
选项(在 --mode 和 --coupling 之外): trigger-on 条件:

trigger spi

设置 SPI 协议触发(仅 Rigol)。示波器在 SPI 总线事件上触发。
选项(在 --mode 和 --coupling 之外): 示例:

trigger uart

设置 UART 协议触发(仅 Rigol)。示波器在 UART 串行事件上触发。 在 Rigol MSO5000 上,这条命令还不能工作。请参阅本页顶部的限制说明。
选项(在上述选项之外):

采集与显示

这些命令仅限 PicoScope。Rigol 在前面板上完成同样的工作,Box 会对 Rigol Net 拒绝这些命令。

acquire

设置连续多次采集的组合方式。不给模式时,该命令显示当前模式。
--count 需要配合模式使用。只给 --count 而不给模式时,命令会打印错误。

roll

设置滚动模式,它让慢速时基连续串流。不给模式时,该命令显示当前模式。

fft

报告某个通道最强的频率分量。Box 根据屏幕上的采集计算频谱。幅度为探头尖端处的 RMS 电压,单位为 dBV。
在 scope Net 上请给出 --channel,因为仪器本身没有通道。一般用途请使用 hann;当某个单音的幅度很重要时,请使用 flattop。对于恰好填满采集窗口的信号,请使用 rectangular。

display

设置 Web UI 绘制波形的方式。不带子命令时,display 显示当前设置。这些设置保存在 Box 上,因此打开的页面会跟随来自 CLI 的更改。

cursor 子命令

两组不同的命令共用这个名称。 cursor time、cursor volts 和 cursor off 在 PicoScope 的采集采样点上放置光标。您需要输入这些命令,因为它们没有旋钮,绘图上也没有拖动手柄。这对光标保存在 Box 上,因此您从终端放置的光标会由 Web UI 画出来。Web UI 的控制台接受同样的 cursor 命令。 cursor set-a、set-b、move-a、move-b 和 hide 通过 SCPI,以屏幕坐标移动 Rigol 前面板显示屏上的标记。PicoScope 没有供它们使用的显示屏。

cursor

不带子命令时,cursor 读取已设置的光标。仅限 PicoScope。

cursor time

放置两个时间光标,单位为相对触发点的秒数。负的时间位于触发之前,采集的一半就在那里。
回复给出两个光标之间的时间间隔、作为频率的间隔倒数,以及每个光标下波形的电压。因此,相隔一个周期的一对光标会直接显示频率。Box 在采样点之间插值计算电压,因为光标停留在您放置的位置,而不是对齐到采样网格。

cursor volts

放置两个电压光标,单位为探头尖端处的伏特。
回复给出两者的差值。这对光标不需要采集,因此回复无需等待触发。

cursor off

清除两对光标,并让 Web UI 停止绘制它们。
示例:
两对光标相互独立。放置时间光标时,电压光标保持原位。每一对光标都要成对放置,因为单个光标读不出任何东西。您需要的量是两个光标之间的差值。位于采集窗口之外的光标不报告电压。最近的采样点来自另一个时刻,因此 Box 不使用它。回复会指明该窗口,因此原因一目了然。

cursor set-a / cursor set-b

仅限 Rigol。 设置光标 A 或 B 的绝对位置。
选项:

cursor move-a / cursor move-b

仅限 Rigol。按相对于当前位置的偏移量移动显示光标。
选项:

cursor hide

仅限 Rigol。隐藏仪器的显示光标。
示例:

stream 子命令(PicoScope)

从 PicoScope 实时串流示波器数据。Lager Box 上的一个守护进程拥有该 PicoScope,Box 上的一个网页显示波形。

守护进程架构

所有访问都经由端口 9000 上的 Box HTTP 服务器到达示波器,其他所有 Net 也使用这个端口。拥有 PicoScope 的守护进程只监听环回地址。您无法从 Box 外部访问它: 采集帧以 LSCP/1(一种紧凑的二进制格式)穿过中继。一帧包含 64 字节的帧头、每个通道 16 字节的描述符,然后是连续的 int16 ADC 计数。中继不解码就转发帧,因此它的开销不会随采集大小增长。
早期版本把守护进程直接发布在端口 8081-8085 上。它们通过 WebTransport 向浏览器串流,这需要在容器中运行 QUIC 监听器并配置证书。这种设计已经移除。现在只有一个监听器,位于环回地址,也只有一个入口。

stream start

在 PicoScope 上启动串流采集,并打印 Web UI 的链接。
选项: 该命令按顺序应用各项设置,然后启动采集。如果守护进程拒绝某项设置,命令会打印错误并以 1 退出,采集也不会启动。触发源就是被串流的通道。 启动之后,命令打印指向 http://<box>:9000/scope 的链接。使用 --json 时,该链接位于 visualization_url 字段中。在位于访问网关之后的 Box 上,该链接带有您的登录令牌,与摄像头串流相同。 对于不是 PicoScope 的示波器,命令会打印错误,并建议使用 lager scope NET_NAME start --single。 示例:

stream stop

停止串流采集。如果守护进程拒绝,命令会打印错误并以 1 退出。

stream status

检查示波器守护进程是否在运行。该命令显示命令端口、通道数以及是否有采集已就绪。它不需要 Net 名称。
如果守护进程没有应答或无法连接示波器,命令以 1 退出。因此,脚本可以用它检查示波器是否已准备好串流。

stream web

在浏览器中打开示波器 Web UI。
选项:
  • --port - Box HTTP 服务器端口(默认 9000)
该命令打开 http://<box>:<port>/scope。在位于访问网关之后的 Box 上,该链接带有您的登录令牌,与摄像头串流相同。令牌过期后,再次运行 stream web 即可获得新的链接。 Web 界面是一个无依赖的 HTML5 示波器显示,由 Box 在 http://<box>:9000/scope 提供。波形以 LSCP 二进制帧的形式经 WebSocket 到达,由浏览器解码。页面根据所连接设备的能力信息构建控件,因此双通道示波器不会显示通道 C。页面还有一个命令控制台。它接受此 CLI 的大多数命令,另外还接受 offset、hpos、vpos、sidebar 和 capabilities。在控制台中,作用于单个通道的命令可以指定通道:scale B 0.5、coupling B ac、probe B 10、offset B 0.1、vpos B -0.5 和 measure B vpp。请把通道写在最前面。请用字母表示通道,因为 scale 2 设置的是 2 V/div。不指定通道时,命令使用第一个已打开的通道,与测量面板相同。控制台中的回复会写明通道。 收起控制侧栏,把全部宽度留给波形和控制台。使用页眉中的 Hide sidebar 按钮,或输入 sidebar off。sidebar on 和 Show sidebar 把它显示回来。不带参数的 sidebar 说明当前是显示还是隐藏。页面为下次访问保留这个选择。 关闭一个通道会去掉它的波形,包括已经显示在屏幕上的那一条。disable B 可以做到,通道的开关同样可以。 拔掉正在串流的示波器会停止实时会话。页面显示当前没有串流。再插上示波器会重新打开设备。随后 Start 在新的会话上运行。 页面有两个位置控件,它们的工作方式不同:
  • 单位。 在控制台中,可以输入以秒或伏特为单位的数值,也可以加上单位:hpos 100ms、hpos 0.1 和 hpos 1e-3 都正确。在侧边栏中,每个字段旁边的选择器改变字段所显示数值的单位,不改变位置本身。
  • 范围。 范围以格为单位,所以改变刻度时范围也会改变。如果位置超出范围,页面会把它移到范围边缘,并在控制台中写一条提示。改变伏特/格时,垂直位置保持相同的电压,除非它超出范围。
  • 应用数值。 在水平字段中输入的数值,在按 Enter 或离开字段时才生效,因为每次改变都会开始一次新的采集。按 Escape 恢复上一次的数值。在垂直字段中输入的数值立即生效。
  • 方向键和按钮。 每个字段的右边缘有一个向上按钮和一个向下按钮。在两个字段中,按钮和上下方向键的每一步都立即生效。它们改变字段所显示的最后一位数字:1.14 变为 1.13,1.1 变为 1.2。字段保持相同的小数位数,所以 1.19 变为 1.20。如果字段只显示 0,步长为十分之一格。按住按钮可以连续步进。
  • offset 不是 vpos。 offset 在示波器硬件中、在 ADC 之前移动信号。测量结果会改变;对于不以 0 V 为中心的信号,可以使用更小的伏特/格以获得更高的分辨率。vpos 只在屏幕上移动波形。旧款 PicoScope 2000 型号(例如 2204A)没有模拟偏移。在这些型号上,控制台会拒绝非零的 offset,并提示使用 vpos。
  • status 还会显示每个通道的垂直位置。position 是 hpos 的旧名称,将在以后的版本中删除。

stream capture

把串流中的 PicoScope 在 --duration 期间完成的采集记录到 CSV 文件。请先运行 stream start。
选项: 该命令把 CSV 文件写在 Box 上,而不是您的计算机上。相对路径以 Box 上的 /tmp 为基准。采集结束后,命令会打印一条 scp 命令,用于把文件复制到您的计算机。 该命令要么采集到数据,要么失败。如果示波器已停止,或者在 --duration 内没有采集到达,它会打印原因并以 1 退出。在 normal 和 single 模式下,示波器会等待触发,因此请检查触发电平和触发源。 CSV 的列为 capture、channel、sample_index、time_ns 和 voltage。 示例:

stream config

更改串流设置,而不启动或停止采集。
选项: 请至少给出一项设置。--volts-per-div、--coupling、--enable 和 --disable 作用于 --channel 指定的通道。不带 --channel 时,它们作用于该 Net 的通道,否则作用于通道 A。命令会打印它应用的每一项设置。遇到守护进程拒绝的第一项设置时,它会停止并以 1 退出。 示例:

示例

Rigol 基本流程

通道配置

测量

触发

光标测量

PicoScope 串流


命令结构


说明

  • Net 名称就是您用 lager nets 搭建实验台时分配的名称
  • 仪器命令可以作用于 scope Net,也可以作用于它的某个 scope-channel Net。通道命令需要 scope-channel Net
  • 串流命令仅适用于 PicoScope 设备
  • 测量在两种仪器上都可用。--display 和 --cursor 仅限 Rigol,因为它们在仪器的屏幕上绘制
  • cursor time、cursor volts 和 cursor off 仅限 PicoScope。显示光标命令仅限 Rigol
  • status、acquire、roll、fft、display 和 trigger holdoff 仅限 PicoScope
  • 边沿触发是 PicoScope 和 Rigol 都支持的唯一触发类型
  • 在 Rigol MSO5000 上,只有边沿触发和 SPI 触发可以工作(见 issue #418)
  • Web UI 需要能访问 Lager Box 上的端口 9000
  • CLI 会在把值发送到硬件之前拒绝超出允许范围的值
  • 运行 lager scope --box BOX 列出 scope 和 scope-channel Net

参见