Skip to main content
Net 是 Lager 中用来表示被测设备上物理测试点、信号或总线的核心抽象。每个 Net 把一个易读的名称映射到某个仪器通道。

语法

全局选项

命令

命令参考

列出 Net(默认)

列出 Lager Box 上全部已保存的 Net。不提供子命令时就是这个默认行为。
输出按仪器分组。每个分组以仪器名称和它的地址开头,该分组的 Net 以树状形式跟在后面。 输出列: 只有当至少有一个 Net 具有相应值时,ScriptOpenOCDPurpose 列才会出现。运行 lager nets show NAME 可以看到完整的 purpose 文本。 输出示例:

add

通过指定名称、类型、通道和仪器地址创建一个新的 Net。
参数:
  • NAME - 该 Net 的唯一名称(例如 supply1debug_main
  • ROLE - Net 类型:power-supplybatterysolardebugadcdacgpioscopelogiceloaduartusbwebcamarmwatt-meterenergy-analyzerthermocouplei2cspi。旧的写法 supplybatt 作为输入别名被接受,并归一化为 power-supply / battery —— 保存的 Net 总是带有规范角色。
  • CHANNEL - 通道标识,与 lager instruments 列出的一致(例如 1AIN0FIO0I2C0STM32F4
  • ADDRESS - VISA 地址或设备路径,与 lager instruments 列出的一致(例如 USB0::0x0CD5::0x0007::::INSTR
选项:
  • --box TEXT - Lager Box 名称或 IP
  • --jlink-script FILE - 调试 Net 的 J-Link 脚本文件(保存在 Box 上)
  • --openocd-config FILE - 调试 Net 的 OpenOCD .cfg/.tcl 文件(保存在 Box 上)
  • --sda PIN / --scl PIN - i2c Net 的自定义 LabJack 引脚
  • --cs PIN / --sck PIN / --mosi PIN / --miso PIN - spi Net 的自定义 LabJack 引脚
  • --interface A|B|C|D - FT2232H 或 FT4232H 上 gpioi2cspi Net 的 FTDI 通道。默认是 A。请参阅下面的多通道 FTDI 调试适配器
引脚值接受 LabJack 的 DIO 名称或原始 DIO 编号。两个 LabJack 系列接受的引脚不同: U3 没有 MIO 引脚。它的 FIO0-FIO3 是固定的模拟输入,因此 Lager 拒绝把它们用于 gpioi2cspi Net。 U3 的 EIO 和 CIO 线位于它的 DB15 连接器上。 给出引脚选项时,CHANNEL 参数会被忽略 —— 请传 custom。如果所选引脚与另一个已保存的 LabJack Net 重叠,会打印警告,但 Net 仍会创建。 --cs 是可选的:做 3 线 SPI、手动控制片选时可以省略它。 示例:
--jlink-script 选项只适用于调试 Net。用在其他 Net 类型上时会打印警告,并忽略该选项。
校验规则:
  • Net 名称必须在所有类型中全局唯一
  • (角色、仪器、通道、地址)这个四元组必须与某台已连接的仪器匹配
  • 通道必须是 Box 为该角色提供的通道之一。运行 lager instruments 查看列表。
  • 地址必须唯一标识一台设备。请参阅下方的同型号的两台设备
  • 通道绑定遵循下方通道与角色约束中描述的按仪器规则
当通道无效时,add 会打印该角色的有效通道,并以代码 1 退出:
最后一行只在 U3 上为 FIO0-FIO3 创建 gpioi2cspi Net 时出现。
通道列表保存在 Box 上。较新的 CLI 对较旧的 Lager Box 会按较旧的列表校验。请运行 lager update 获取最新列表。

通道与角色约束

不同的仪器系列把 Net 绑定到通道的方式不同。Lager 把每一台受支持的仪器归入三个类别之一,并在 addadd-all 和 TUI 中一致地执行这些规则。

1. 多通道仪器

具有物理上独立的输出/输入的仪器。每个通道都是自己的一路电路,可以承载自己的 Net。 规则: 每个 (仪器, 地址, 角色, 通道) 四元组最多一个 Net。共享 (仪器, 地址, 角色) 但通道不同的两个 Net 没有问题 —— 多通道正是为此而生。

2. 单通道多模式仪器

只有一路物理通道、可以运行在若干模式之一、但不能同时运行多个模式的仪器。角色告诉 Box 要把芯片切换到哪种固件模式。Lager 对这类芯片分两组区别对待。 单路输出仪器(每个角色一个 Net,并给出提示): 规则: 同一颗芯片上每个角色可以保存一个 Net。当该芯片已经有一个 Net 时, add 会打印这条提示,并保存第二个 Net:
对某个 Net 的每条命令都会把仪器切换到该 Net 的模式,这次切换会中止另一个模式正在做的事。对于没有任何已保存 Net 的芯片,add-all 不会替您挑选角色:它会跳过该芯片并给出警告。 TUI 也不允许您在一批操作中同时选中一颗芯片的两个角色。 模式互斥的芯片(总共只能有一个 Net): 规则: 每个 (仪器, 地址) 最多一个 Net。一旦该芯片上保存了任意角色,其他所有角色都会从 add-all 和 TUI 的可添加列表中消失。要切换模式,请先删除已有的 Net。 这些芯片在 cli/commands/box/nets.pycli/commands/box/net_tui.py 中由 _SINGLE_CHANNEL_INST(Keithley、EA)和 _MODE_EXCLUSIVE_INST(FTDI_FT232H)跟踪。

3. 单角色调试探针

独立的调试器设备 —— 一个探针驱动一个目标 MCU。 规则: 每个 (仪器, 地址) 最多一个 debug Net。

4. 多通道 FTDI 调试适配器

FT2232H(2 个通道:A、B)和 FT4232H(4 个通道:A、B、C、D)在物理上提供多个 USB 接口。通道 A 和 B 带有 MPSSE 引擎;在 FT4232H 上,C 和 D 没有。这一点是按Net 类型而不是按芯片起作用的。 debugspii2c 都是 MPSSE 协议,因此只能用 A 和 B。 gpio 以异步 bitbang 方式运行,不需要 MPSSE,四个通道都能用。用户为每个 Net 指定接口。 调试 Net 把通道编码在设备字段中:
等价写法:@A/@0@B/@1@C/@2@D/@3。没有 @ 后缀的设备默认使用 OpenOCD 接口配置所选的接口(通常是通道 A)。 GPIO、I2C 和 SPI Net 在添加 Net 时通过 --interface 指定通道:
lager nets add 会把该通道作为 params.interface 存进 Net 记录。没有 interface 的 Net 使用通道 A,那也是 FT232H 唯一的通道。Net 管理器 TUI 不会询问通道,因此它添加的这类 Net 都在通道 A 上。 lager nets add 会拒绝该芯片在这种 Net 类型上不具备的通道,并指出哪些通道可用。i2cspi Net 不能使用通道 C 或 D,因为这两个通道没有 MPSSE 引擎。gpio Net 可以使用该芯片具备的任意通道。对于您手工编辑的 Net 记录,Box 侧的驱动适用同样的规则,并且同样接受 A-D0-3 UART Net 按 tty 路径区分通道。USB 扫描器会枚举绑定到该芯片 USB 序列号的每一个 /dev/ttyUSB<N>。每一个都会作为独立的可添加项出现,因此在 FT4232H 上您最多会看到四个 UART 选项。 规则: 通道是 Net 身份的一部分。调试 Net 按 (仪器, 地址, 通道后缀) 唯一,gpioi2cspi Net 按 (角色, 仪器, 引脚, 地址, interface) 唯一。因此单颗 FT2232H 可以承载:
  • @A 上的一个 debug Net
  • @B 上的一个 debug Net
  • 一个 uart Net,位于您没有用于 MPSSE 的那些通道所对应的某个 /dev/ttyUSB<N>
  • --interface 所指定的每个通道上的 gpioi2cspi Net。同一个引脚号可以在每个通道上各承载一个 Net
不把同一通道重复占用(例如同时有 debug@A 接口 A 上的 spi Net)是用户的责任;Box 目前不校验这一点。

快速判断表

同型号的两台设备

Lager 是根据设备地址、而不是根据型号来判断能否创建 Net 的。包含唯一序列号的地址唯一标识一台设备。同一台 Lager Box 上有两台该型号的设备时,两台都能工作。例如,两台 8 端口 Acroname 集线器可以提供十六个 usb Net。 LabJack T7 和 LabJack U3 不报告序列号,因此它们的地址中序列号字段为空。同一台 Lager Box 上的两台 T7 或两台 U3 会报告相同的地址。 Net 无法说明它指的是哪一台,因此 Lager 拒绝创建:
add 会以代码 1 退出。add-all 和 TUI 会用同样的信息跳过这些设备。 lager instruments 会隐藏它们并打印该信息。同一台 Lager Box 上一台 T7 加一台 U3 可以正常工作,因为它们的地址不同。

add-all

为所有已连接仪器的所有可用通道自动创建 Net。这在快速配置一台新的 Lager Box 时很有用。
选项:
  • --box TEXT - Lager Box 名称或 IP
  • --yes - 跳过确认提示
示例:
输出:
在列表之前,add-all 会为它跳过的每一台设备打印一条警告。它会跳过报告相同地址的同型号两台设备,也会跳过没有任何已保存 Net 的单输出或模式互斥芯片 —— 那种芯片提供多个角色,而 add-all 不会替您选择。

add-batch

从 JSON 文件创建多个 Net,便于高效批量配置。
参数:
  • JSON_FILE - 含有 Net 定义的 JSON 文件路径
选项:
  • --box TEXT - Lager Box 名称或 IP
JSON 格式:
每条记录都需要 namerolechanneladdress。可选的 instrument 键用于指明仪器;不写时,命令会根据地址查出仪器。该命令不读取其他键,因此记录中不能携带 params。若要设置自定义的 LabJack 引脚,请用 lager nets add 配合 --sda/--scl--cs/--sck/--mosi/--miso 校验: 在保存任何内容之前,命令会把每条记录的通道与 Box 为该角色提供的通道作比较。它会列出所有通道不正确的记录,打印 No nets were saved.,并以代码 1 退出:
命令不会校验两类记录:
  • 地址不在当前仪器扫描结果中的记录,例如未连接的仪器
  • uart 记录,因为它的通道是各设备的 tty 路径
示例:

assign

把 USB 串口线缆分配给 Box 无法自动识别的已知仪器。 有些仪器没有 USB 控制端口。您通过通用的 USB 转串口适配器,用 RS-232 访问这类仪器 —— 例如接在 Prolific 线缆之后的 Rigol DP711 电源。 Box 只看得到适配器(一个 uart 设备),看不到它后面的仪器。 assign 在 Box 上记录下”这根线缆就是 DP711 的串行线”。此后扫描器就会报告仪器本身:它会出现在 lager instruments 和 TUI 中,您可以像对待任何自动识别的设备那样,用 lager nets add 为它创建 Net。 每根线缆只需分配一次;分配保存在 Box 上,重启和重新插拔之后依然有效。创建 Net 仍然是可以正常重复执行的步骤。
选项: 端到端示例(Rigol DP711):
不带 --as-net 时,命令会打印出新仪器对应的完整 lager nets add 调用:
工作原理:
  • 分配时线缆必须已插上 —— 它的 USB 身份(厂商/产品 ID)是从在线设备上读取的。
  • 已分配仪器的 Net 使用持久的 serial://<vid>:<pid>/serial/<s> (或 .../port/<p>)地址,而不是 /dev/ttyUSB* 路径,因此它们在 tty 重新编号、重启和换端口之后依然有效。
  • 线缆被分配之后,它不再作为通用 UART 设备提供 —— 这条串行线属于那台仪器。
有些廉价的 USB 转串口仿制品共用同一个序列号(或者根本没有)。如果 assign 报告匹配到多根线缆,请改用 --port 把分配固定到 Box 的某个物理端口。代价是:把线缆换到别的端口之后,分配就失效了。
移除分配:
该线缆会重新作为通用 UART 设备提供。Net 与它的分配同生共死:任何绑定到该分配 serial:// 地址的已保存 Net 都会被自动删除,并在输出中报告。把线缆重新分配给另一台仪器时,以及把它的标识从 --serial 改为 --port 时,同样会发生这种级联删除。只有仅修改波特率的重新分配才会保留已有的 Net。 当前可分配的设备: Rigol DP711(单通道 RS-232 电源)。运行 lager nets assign --list 查看您的 Box 支持的目录。

delete

按名称和类型删除某个 Net。
参数:
  • NAME - 要删除的 Net 名称
  • NET_TYPE - 该 Net 的类型(supply、debug、adc、i2c、spi 等)
选项:
  • --box TEXT - Lager Box 名称或 IP
  • --yes - 跳过确认提示
示例:

delete-all

删除 Lager Box 上全部已保存的 Net。这是一个危险操作。
选项:
  • --box TEXT - Lager Box 名称或 IP
  • --yes - 跳过确认提示
示例:

rename

重命名已有的 Net。
参数:
  • NAME - 该 Net 当前的名称
  • NEW_NAME - 新名称(必须唯一)
选项:
  • --box TEXT - Lager Box 名称或 IP
示例:

tui

启动基于终端的交互式界面来管理 Net。TUI 提供查看、创建和删除 Net 的可视化界面。
选项:
  • --box TEXT - Lager Box 名称或 IP
示例:
TUI 功能:
  • 浏览全部已连接的仪器及其通道
  • 在引导式提示下创建新 Net(+ Add Nets
  • 阅读 Add 界面上的警告和提示。它们集中显示在同一个区块中,Dismiss 按钮可以隐藏该区块。
  • 为 LabJack T7 的 i2cspi Net 选择自定义引脚。该行上的铅笔按钮会打开一个同时编辑 Net 名称和引脚的编辑器。添加该 Net 时也会打开引脚对话框,除非您已经设置过引脚。对话框会显示当前引脚(默认值:I2C SDA=FIO4/SCL=FIO5;SPI CS=FIO0/SCK=FIO1/MOSI=FIO2/MISO=FIO3)。您可以为每个信号选择任意 DIO 引脚,也可以把 CS 设为 none 以使用 3 线 SPI。如果您又选回默认值,该 Net 会恢复默认通道。已被某个已保存 Net 占用的引脚会显示警告
  • 用行上的铅笔按钮重命名新建的 Net
  • Assign Device 把自定义串行设备(RS-232 仪器)分配给它们的 USB 线缆 —— 这是 assign 的交互式版本,包含可选的创建 Net 步骤(--as-net
  • 选中一个已保存的 Net,对它执行 RenameEdit DetailsDeleteEdit Details 设置 Purpose、Notes 和 Tags,它只改动这三个字段,Net 记录的其余部分保持不变。
  • Delete All Nets 删除全部已保存的 Net
  • 键盘导航(按 qCtrl+C 退出)
引脚编辑器只适用于 LabJack T7。您在 TUI 中添加的 LabJack U3 i2cspi Net 使用默认引脚(SPI FIO4-FIO7,I2C FIO6-FIO7)。若要使用 U3 的其他引脚,请用 lager nets add 配合引脚选项。

set-script

为已有的调试 Net 附加一个调试脚本 —— JLinkScript 或 OpenOCD 的 .cfg/.tcl。该文件保存在 Box 上,并在连接、烧录、擦除和复位操作中自动使用。 后端(J-Link 还是 OpenOCD)会根据两个信号自动识别:
  1. 探针的 USB VID,取自该 Net 的 address 字段(J-Link → jlink;ST-Link、FTDI、CMSIS-DAP 等 → openocd)。
  2. 文件本身 —— 先看扩展名(.JLinkScript → jlink;.cfg/.tcl/.ocd → openocd),对没有扩展名的文件或 stdin,则以内容嗅探作为判定依据。
如果这两个信号互相矛盾,set-script 会以明确的错误拒绝执行,并请您用 --backend 指定其一。 一个调试 Net 同一时刻只携带一个脚本。如果另一个字段已经设置, set-script 会清除它,并在 stderr 上打印一条黄色提示,这样就不会有内容悄悄消失。
参数:
  • NAME - 调试 Net 的名称
  • SCRIPT_PATH - 脚本文件的路径,或用 - 从 stdin 读取
选项:
  • --backend [jlink|openocd] - 强制使用指定后端而不自动识别(当探针与文件矛盾时必填)
  • --box TEXT - Lager Box 名称或 IP
示例:

remove-script

移除调试 Net 上附加的调试脚本(J-Link 或 OpenOCD)。
参数:
  • NAME - 调试 Net 的名称
选项:
  • --backend [jlink|openocd] - 只移除指定后端的脚本(默认移除已设置的那一个)
  • --box TEXT - Lager Box 名称或 IP
示例:

show-script

显示调试 Net 上附加的调试脚本内容。脚本内容写入 stdout,因此 > out.cfg 可以正常工作。形如 # OpenOCD config, 1247 bytes 的一行摘要写入 stderr,它告诉您看到的是哪个后端的脚本,并且不会污染重定向的结果。
参数:
  • NAME - 调试 Net 的名称
选项:
  • --backend [jlink|openocd] - 只显示指定后端的脚本(默认显示已设置的那一个)
  • --box TEXT - Lager Box 名称或 IP
示例:

show

显示某个已保存 Net 的全部字段,包括用 describe 设置的用户元数据(purposenotestags)。
参数:
  • NAME - Net 名称
选项:
  • --json - 以原始 JSON 输出
  • --box TEXT - Lager Box 名称或 IP
示例:

state

显示每个已保存 Net 的实时硬件状态。Box 读取每台仪器,并为每个 Net 返回一段简短摘要。输出是 lager nets 的分组表格,在 Channel 之后多出一个 State 列。
选项:
  • --box TEXT - Lager Box 名称或 IP
  • --json - 以原始 JSON 输出
示例:
输出示例:
状态值: 没有探测方式的 Net 类型(例如 uartspiscopelogic)显示 Box 如何读取这些 Net:
  • Box 按仪器把 Net 分组,最多同时读取八台仪器。
  • 所有仪器共用 8 秒的总预算。预算用尽时,每个没有响应的 Net 都报告 deadline
  • Box 逐个读取 USB 集线器。剩余预算不足 1 秒时它不再读取某个集线器,该集线器的 Net 报告 hub-skipped
  • 一次读取会获取与运行中的测试相同的仪器锁,因此该命令可能需要等待某个测试。
  • Box 读取 i2c Net 时会做一次完整的总线扫描。
  • 在 LabJack T7 上,一批操作读取全部 gpioadcdac Net,并且 gpio 读取不会改变引脚方向。
  • 在 LabJack U3 上,gpioadc 读取会把引脚设为数字或模拟模式。U3 的 dac Net 在 Box 设置过值之前显示
没有报告状态的 Net: 在表格下方,命令会解释每一个有原因的 ,并按原因把 Net 分组。没有探测方式的 Net 类型属于正常情况,因此脚注不会列出它们。 usb Net 还可能带有一个代码。当同一组中所有 Net 的代码相同时,脚注会多加一行补救建议: JSON 输出: --json 打印一个数组,每个已保存的 Net 对应一个对象。每个对象包含该 Net 的全部已存字段,外加以下字段: 没有这个端点的 Box 会打印一条提示,让您更新它。表格仍然会打印,只是每个 State 单元格都是

describe

为已保存的 Net 设置元数据,让 AI 智能体(以及人)理解该 Net 在被测设备上的作用。自 lager 0.24.0 引入;这些字段通过 MCP 服务器用于智能体辅助测试。 --purpose--notes--tag(或 --clear-tags)中至少要提供一个。 0.46.0 及以上版本的 Lager Box 会通过 HTTP 提供这些字段,因此已接入的控制平面可以同步它们。
参数:
  • NAME - Net 名称
选项:
  • -p, --purpose TEXT - 一句话:该 Net 在被测设备上做什么
  • -n, --notes TEXT - 可选备注(注意事项、跳线位置、示波器探测点)
  • -t, --tag TEXT - 用于分类/匹配的标签(可重复)
  • --clear-tags - 在添加新标签之前移除全部已有标签
  • --box TEXT - Lager Box 名称或 IP
示例:

Net 类型参考

调试脚本工作流程

J-Link 和 OpenOCD 调试探针都可以携带一份自定义脚本,用于处理复位序列、时钟初始化、板级信号引脚分配,或其他设备专有行为。 Lager 为每个调试 Net 保存一个脚本 —— 要么是 JLinkScript,要么是 OpenOCD 的 .cfg/.tcl,绝不会两个都有。它在连接、烧录、擦除和复位操作中自动应用该脚本。
您也可以在创建 Net 时就附加脚本:
您还可以在本地 .lager 配置文件中按项目配置 J-Link 脚本:
当 Net 级脚本(通过 set-script)和项目级脚本(通过 .lager 配置)同时存在时,项目级脚本优先。

示例

说明

  • Net 名称在所有类型中全局唯一
  • lager instruments --box <lager-box> 查看可用的仪器和通道
  • 第一次配置 Net 时,TUI 是最省事的方式
  • add-all 可以快速为一台新的 Lager Box 配置合理的默认值
  • LabJack T7、LabJack U3、Aardvark,以及 FTDI FT232H、FT2232H 和 FT4232H 适配器都支持 I2C 和 SPI Net
  • 调试脚本(J-Link 和 OpenOCD 两者)以 base64 编码保存,并在调试操作期间自动解码
  • 一个调试 Net 最多携带一个脚本(jlink_scriptopenocd_config);set-script 通过在另一个字段已存在时清除它来保证这一点