New Version: Current Monitor v1.0.0
Current Monitor 发布了 v1.0.0。这次更新有两条主线:让程序真正融入实验现场——与 DAQ 获取系统自动联动,启停、命名、保存全程免手动;以及一次不留死角的代码体检——从 Modbus 帧校验到电荷积分,把几个潜伏已久的正确性问题连根拔掉。
Current Monitor 是配合”創鴻 DM4D-An-Rs”高精度盘面表的双通道电流实时监控软件:Modbus RTU 读取、电荷积分、双轴绘图、CSV 记录。如果你在做束流实验、辐照测试,它是数据质量的最后防线。
v1.0 带来了什么
| 20260205(上一版) | v1.0.0 | |
|---|---|---|
| DAQ 联动 | 单一 “Connect to DAQ (beta)” 入口 | DAQ_Master + GDDAQ 互斥子菜单 |
| GDDAQ 支持 | 无 | run.log 状态机 + pgrep 崩溃检测 + 失败自动重试 |
| 联动的启停边界 | DAQ 信号可停任何运行 | 联动只能停自己启动的运行,手动运行不被打断 |
| Modbus 响应 | 盲信(无任何校验) | 地址 / 功能码 / 字节数 / CRC 全校验 |
| TCP 接收 | 单次 recv,可能错位 | 循环凑满整帧 + 请求前排空残留 |
| 电荷积分 | 断线期间虚增 | 断线 / 过滤期间零贡献 |
| 电流过滤 | 单向、双通道耦合、0 = 全滤 | 双向独立、拒绝 NaN/Inf、0 = 禁用 |
| 监控阈值 | 随显示单位漂移 | 内部统一 mA,切单位语义不变 |
| ZERO 恢复 | 指示灯可能卡红 | 自动转回 RUN |
| 状态监控 | 仅直流突变检测 | 新增 Pulse Mode、ZERO 报警音 |
| 事件日志 | 无 | 底栏 + 100 条彩色日志窗口 |
| 代码规模 | 2,424 行 | 3,738 行 |
DAQ 联动体系:从 beta 入口到双子菜单
原来的 “Connect to DAQ (beta)” 只对接自家的 DAQ_Master。v1.1 把它升级为互斥子菜单:DAQ_Master 与 GDDAQ 二选一,启用一方自动关闭另一方,也可以都不启用纯手动跑。
一个容易被忽视但很关键的语义:联动只能停止它自己启动的运行。手动点 Start 跑起来的监控,不会被 DAQ 的停止信号误杀;启停日志也会标注来源((manual) / (daq_master) / (gddaq)),事后追溯一目了然。
DAQ_Master 的对接契约完全不变:程序照旧监视 /tmp/daq_status.txt,START 时按轮次名和编号自动命名,把电流数据存到 ROOT 文件旁边的 current_data/ 里——已有采集流程零改动。
GDDAQ:一个读 run.log 的状态机
GDDAQ 联动是全新实现的。它每秒轮询目标轮次目录下的 run.log,解析 Start: / Stop 行驱动状态机:检测到 Start 且进程存活 → 自动开始监控;检测到 Stop → 自动停止;进程消失且无 Stop 行 → 判定 CRASHED,立即停止采集并在状态栏标红。
几个为”无人值守”准备的细节:
- 进程存活用
pgrep -x检测(带 2 秒超时,绝不卡 UI) - 自动启动失败(比如串口被占用)不放弃:状态回退,下一秒自动重试,状态栏橙色提示
run.log只在 mtime 变化时重新解析,长 run 不产生无谓 IO- 目标轮次留空则自动跟随最大编号的轮次文件夹
- 所有电流数据统一写进
<数据根目录>/CurrentData/,不污染各轮次目录
配置通过独立的 Settings 对话框完成:数据根目录(带浏览与路径补全)、进程名、轮次号,必填项实时校验,不合法时 Apply 按钮禁用并红字给出原因。
状态监控:认识脉冲信号
直流模式下,PEAK/DROP 突变检测工作得很好;但面对脉冲束流,脉冲 low 期的零电流本身就是正常信号。新增的 Pulse Mode 跳过突变检测,只盯信号丢失:电流持续低于零阈值超过 Zero Timeout(默认 3 秒)才报 ZERO,脉冲间隙不再误报。
配套的 ZERO 报警音:任一通道进入 ZERO 立即响一声,之后每 3 秒重复,恢复或停止监控自动静音。是否开启由设置对话框顶部的全局开关决定。
事件日志:现场发生了什么,有据可查
主窗口底部新增一行日志栏,显示最近一条事件,点击展开完整的日志窗口:保留最近 100 条、按 INFO/WARNING/ERROR 三级着色、非模态不挡主界面。
日志会回答那些事后最难还原的问题:这次运行是谁启动的?串口什么时候开始没数据?是断流还是坏帧?通道断流约 5 秒、持续收到 CRC/格式错误帧,都会产生去抖后的 WARNING——坏帧日志还会提示”检查波特率和接线”,与普通断流相区分。不刷屏,也不缺席。
一次不留死角的代码体检
v1.1 的另一半工作量藏在地下:对整个采集核心做了一遍系统性审查,修复了几个潜伏很久的问题。三个最有代表性的:
1. 曾经”盲信”每一个响应帧。 旧代码收到串口数据直接解析——没有 CRC 校验,没有长度检查。一次噪声、一个错位字节,就可能被重解释成一个”看起来很合理”的假电流值,混进积分和 CSV。现在每一帧都要过五关:从站地址、功能码、异常位、字节数、CRC,不过关就丢弃并重新同步字节流。
2. 幽灵电荷。 梯形积分依赖上一帧的值。通信断开 60 秒后恢复,旧代码会用”断线前 × 恢复后”的均值乘以整个 60 秒——凭空造出 60 秒从未流过的电荷。现在任何丢帧(超时或被过滤)都会重置积分基线,缺口贡献严格为零。对以 mC 计量的实验数据来说,这是最要紧的一处修复。
3. 一条命令注入通道。 “Open Data Folder” 用 os.system 拼接路径,而路径可能源自外部可写的 /tmp/daq_status.txt——构造的目录名可以执行任意命令。已改为不经 shell 的 subprocess 调用。
同批修复还有一批”一行式”问题:TCP 分片半包、请求-响应错位配对、单向过滤放过负值和 NaN、阈值随显示单位漂移、ZERO 恢复误报 PEAK、文件名 9999 回绕覆盖旧文件、双通道误配同一端口、启动失败资源泄漏、快照同秒互相覆盖……完整清单见仓库的 Release Notes。
细节打磨
- 路径输入框(保存文件名 / GDDAQ 目录)支持自动补全
- About / Tutorial 改为非模态单实例,可开着教程操作主程序
- 脉冲提醒改为非模态——弹窗期间采集照常进行,且关闭即销毁不累积
- 监控运行时锁定端口、文件名等全部配置控件,停止后恢复
- 绘图改用
draw_idle合并重绘,悬停查值向量化,长跑更流畅 - 启动中途失败自动回滚已打开的串口与 socket;快照同秒去重;单实例锁按用户隔离
- GDDAQ 轮询回调不再弹出任何模态框——错误走状态栏与日志,绝不卡住采集循环
打包与兼容性
运行依赖不变(numpy / matplotlib / PyQt5 / pyserial),Windows 7 兼容版本钉不变;manylinux2014 + Miniconda 的 Docker 打包流程经实测照常可用;/tmp/daq_status.txt 对接契约不变,DAQ_Master 侧零改动。平台支持仍是 Linux(≥ glibc 2.17)与 Windows(≥ 7),GDDAQ 联动仅限 Linux。
获取与参与
- 仓库:github.com/shenmeshisanpao/Current-Monitor
- 协议:GNU GPL v3.0
Releases 页提供 Linux x86-64 单文件可执行程序,兼容 CentOS 7、Ubuntu 18+ 等主流发行版。
本文由AI生成。