循环器
条件循环执行器:根据测量结果自动决定是否重复、跳转或终止实验循环。
概述
Looper(循环器)是实验浏览器(Browser)顶部 dock 的标签页
(quatm/GUI/looper/),管理实验任务组,按顺序执行组内条目,并根据测量结果决定
跳转或终止。循环定义持久化在 configuration/browser/looper/loopfile.json,与浏览器
端实验控制台(Web 远程控制)共用 同一份文件。
核心逻辑
LoopManager.run_loop():从起始组开始,无限循环直到 terminate
└─→ 按顺序执行组内条目
├─ Task:提交任务到实验队列,等待完成后推进
│ (可设最大次数 / 最大连续次数,达到即终止循环)
└─ Conditional:读取数据流字段 → 比较(> >= == != =< <)
├─ 满足 → 跳转到指定条目 / 组尾 / 结束循环
└─ 不满足 → 跳转到 else 条目
组件
| 组件 | 说明 |
|---|---|
LoopGroup | 循环组(一个标签页),内含条目列表与循环构建器 |
LoopItem | 条目基类(删除/上移/下移/运行计数/指示灯) |
TaskItem | 任务条目:指向暂存器任务,支持最大次数/最大连续/skip |
ListItem | 任务列表条目:逐个展开任务列表运行 |
ConditionalItem | 数据条件条目:字段比较后跳转(if/else) |
ConditionalReachedItem | 到达序号条件条目:当前时刻达到第 N 次周期 h5 保存时刻后跳转 |
ConditionalDateTimeItem | 时间条件条目 |
CallerItem / GroupItem | 组间跳转与组尾条目 |
DataManager | 订阅数据流、累积最新测量值 |
LoopManager | 循环执行器(run_loop() / terminate(),后台线程运行) |
AutoSaveEditor | 自动 HDF5 保存计划配置 |
使用方式
在 实验浏览器(Browser) 中通过循环器(Looper)标签页交互操作:
- 添加组:新建标签页(
New Tab #N),可重命名; - 添加条目:每个组内可添加 Task / List / Conditional / ConditionalDateTime / ConditionalReached / Caller 等条目;
- 配置条目:Task 选择暂存器任务编号并设置最大次数;Conditional 选择数据
字段、比较符与阈值,配置 if/else 跳转目标(条目序号 /
end box/end loop); - 运行:选择起始组,点击运行;
LoopManager在后台线程执行,终止按钮随时 停止。
# 核心类(GUI 内部使用)
from quatm.GUI.looper import Looper, LoopManager
looper = Looper(parent=browser)
looper.loopManager.run_loop() # 从起始组开始循环
looper.loopManager.terminate() # 终止循环
持久化与共享
- 循环定义自动保存到
configuration/browser/looper/loopfile.json({组名: [条目字典, ...]}),浏览器重启后自动恢复; - 桌面 GUI 与 Web 远程控制平台共用同一份文件,任意一端的修改另一端立即可见; 浏览器端同样支持组管理、Task/Conditional 条目编辑与循环启停。