Skip to main content
从一个 cargo test 里驱动示波器:设置它的通道、时基和触发,控制采集,并读取测量值。它适用于 Rigol MSO5000 和 PicoScope Net,需要 Box 软件 0.55.0 或更高版本。

句柄

示波器在 Box 上保存为两种 Net:
  • 一个代表仪器本身的 scope Net
  • 每个输入各一个 scope-channel Net
lager.scope(name) 接受这两种中的任意一种。通道设置和测量需要通道 Net。其余一切都属于仪器本身,通过任意一种 Net 都可以使用。

方法

类型

Measurement

电压以伏特为单位,时间以秒为单位,频率以赫兹为单位,占空比和过冲以百分比表示。

EdgeTrigger

TriggerSettings 和 Measurements

trigger() 返回一个 TriggerSettings,其中包含 mode、source、slope、level,以及示波器报告时的 holdoff。每个字段都是 Option,采用仪器自己的写法。 measure_all() 返回一个 Measurements,每个量各有一个 Option<f64> 字段。Measurements::get(Measurement) 读取其中一个。

ScopeCapture

capture() 和 ScopeStream::next_capture() 返回一次采集: 对于不在这次采集中的通道,volts() 和 counts() 返回 None。

控制设置与结果

带类型的控制方法接受并返回以下类型。输入结构体 DisplaySettings、FftOptions 和 CursorSettings 实现了 Default:设置所需字段,其余用 ..Default::default() 补齐。

方法参考

measure(m: Measurement) -> Result<Option<f64>>

从该通道读取一个量。
返回: 当采集中不包含该量时返回 None。例如,直流电平没有周期。这是一个答案,而不是错误。

measure_all() -> Result<Measurements>

读取该次采集支持的每一个量。每次 measure() 调用都会进行自己的采集,因此对于实时信号,分开调用得到的值可能来自不同的时刻。measure_all() 从同一次采集中读取全部值,因此它们彼此一致。

trigger_edge(trigger: &EdgeTrigger) -> Result<()>

配置边沿触发。Box 只应用已设置的字段。因此只设置 level 时只会移动触发电平,触发源和斜率保持不变。
TriggerMode::Single 让示波器为一次采集做好准备,与台式示波器上的行为相同。没有设置任何字段的调用会被 Box 拒绝。

capture() -> Result<ScopeCapture>

获取示波器最新一次采集。如果还没有,它会立即采集一次,因此请先用 run() 或 single() 启动示波器。需要 scope-trace feature:
capture_timeout(timeout) 按您给定的时间等待。到时仍没有采集时,以 Error::Timeout 失败。

stream() -> Result<ScopeStream>

订阅从现在起的每一次采集。读取较慢的一方得到的是最新的采集而不是积压的数据,因此看到的只是较低的帧率。用 next_capture(timeout: Duration) 读取,用 close() 结束。把流 drop 掉同样会关闭它。

带类型的控制方法

count 是在 AcquisitionMode::Average 下参与平均的采集次数(设置之前为 16)。时间光标需要一次采集来读取其下方的波形;电压光标不需要。

command(action: &str, params: Value) -> Result<Value>

运行一个没有类型化方法的示波器操作,并返回它的 value。

示例

测量一个时钟

受支持的硬件

说明

  • 在仪器 Net 上执行通道操作会失败。 把 set_scale() 或 measure() 发给 scope Net 时,Box 会以 Error::Box 和 HTTP 400 应答。错误信息会列出应改用的通道 Net。
  • 早于 0.55.0 的 Box 对示波器 Net 应答 HTTP 501,crate 将其返回为 Error::UnsupportedByBox。
  • 每次调用允许 45 秒。Box 把单条示波器命令限制在 30 秒,因此 Box 自己的超时错误会在 crate 停止等待之前到达。
  • 波形采集需要能够流式传输的示波器。 capture() 和 stream() 使用 Box 的 /scope 页面背后的 WebSocket。它们适用于 PicoScope Net,以及已配对 HDMI 采集卡的 Rigol MSO5000 Net(Box 软件 0.57.0 或更高版本)。在没有采集卡的 Rigol 上,Box 会拒绝该请求,返回 Error::Box。
  • capture() 和 stream() 只在阻塞客户端上提供,并且需要普通的 http:// Box URL。
  • 逻辑分析仪 Net 没有 Rust 句柄,因为 Box 在 /net/command 上没有 logic 角色。待办清单在 MISSING_ENDPOINTS.md 中。
  • 来自 AsyncLagerBox::scope 的 AsyncScope 提供同样的方法,以 .await 调用。