循环器

条件循环执行器:根据测量结果自动决定是否重复、跳转或终止实验循环。

概述

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)标签页交互操作:

  1. 添加组:新建标签页(New Tab #N),可重命名;
  2. 添加条目:每个组内可添加 Task / List / Conditional / ConditionalDateTime / ConditionalReached / Caller 等条目;
  3. 配置条目:Task 选择暂存器任务编号并设置最大次数;Conditional 选择数据 字段、比较符与阈值,配置 if/else 跳转目标(条目序号 / end box / end loop);
  4. 运行:选择起始组,点击运行;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 条目编辑与循环启停。