hero-image

Virtual Instrument Emulator v2.1.0:跨平台与界面焕新


Virtual Instrument Emulator 发布了 v2.1.0。这次升级有两条主线:让程序跑在更多平台上(Windows 首次可用),以及让启停与调参的方式更接近真实仪器(常驻子进程 + 共享内存热更新)。同时,界面也彻底焕新——Azure Fluent 亮色主题、中英双语。

如果你在用 Current Monitor 但没有物理电流表,这个工具可以模拟 Modbus RTU 设备,让你在虚拟环境里完成调试。

v2.1 带来了什么

v2.0v2.1
Windows 支持❌ 程序无法启动✅ Network TCP 模式完整可用
子进程生命周期Start/Stop 均重启进程常驻,进模式即启动
参数更新方式重启子进程加载新参数共享内存热更新,下次 Modbus 轮询即生效
停止后的设备状态进程已死,设备不响应持续在线,应答 0 电流
主题经典 Tk 控件Azure-ttk-theme(Fluent Design 亮色)
语言仅英文中英双语,左上角一键切换
字体硬编码 Arial跟随系统默认字体族
连接信息可编辑输入框只读展示
版本信息可点击链接直达 Releases 页
波形 / 协议DC / Pulse / Trig, Modbus RTU不变
外部依赖仍为零

Windows 支持

v2.0 在模块顶层直接 import pty,Windows 标准库没有这个模块——程序在启动瞬间就崩溃。v2.1 把 pty / tty / select 改为条件导入,并用 SERIAL_SUPPORTED 标志驱动界面:

  • 在 Windows 上,Virtual Serial Mode 按钮自动禁用,旁边显示平台提示,选择会弹窗引导改用 TCP 模式
  • Network TCP Mode 完整可用——模拟器第一次能在 Windows 上运行
  • Linux / macOS 行为不变,虚拟串口模式照常

架构重设计:常驻子进程 + 共享内存

这是 v2.1 最核心的变化,改动的是 Start/Stop 的语义。

v2.0 的方式:点 Start → 终止旧子进程 → 用当前参数重新拉起进程;点 Stop → 杀掉进程。参数要生效必须重启进程;停止后设备直接”消失”,上游连接中断。

v2.1 的方式:进入某个模式时子进程立即启动并常驻。通道参数通过 multiprocessing 的共享内存(加锁浮点数组 + 类型索引)传给子进程,子进程在每一次收到 Modbus 请求时实时读取配置:

进入模式 → 子进程启动(待机,应答 0 电流)
   ↓ Start:参数写入共享内存 → 置位 signal_active 事件
运行中 → 每次收到读请求,实时读取共享配置 → 应答波形值
   ↓ Stop:清除事件(进程不退出)
待机 → 继续在线,应答 0 电流

对上游 Current Monitor 来说,这个语义更真实:

  • 设备永远在线——Stop 不再等于拔线,而是”仪器上电但没有输出”,连接始终保持着
  • 调参即时生效——虽然运行中参数面板会锁定(防止误改),但热更新机制保证了参数从 GUI 到子进程只有一次内存写入的延迟,下次轮询即为新值
  • 启停零开销——没有进程创建/销毁,Start/Stop 在毫秒级完成

全新 GUI:Azure Fluent 亮色主题

界面整体采用 Azure-ttk-theme(MIT 协议)的 Fluent Design 亮色风格,主题文件(azure.tcl + theme/)内置在仓库里,加载零配置:

  • 全面 ttk 化:经典 tk 控件全部替换,信号类型选择从 OptionMenu 升级为只读 Combobox
  • 字体不再硬编码 Arial,而是读取 TkDefaultFont 的实际字体族——Linux 上自动落到系统字体,中文渲染正常
  • 字号分级排版:正文放大一档(Title 26 / Subheading 17 / Body 15 pt),按钮字号独立成档不受影响
  • 连接信息框升级为 LabelFrame 分组 + 只读输入框,防止误触
  • 窗口屏幕居中 + 最小尺寸约束
  • 若主题文件缺失(打包时漏带),自动回退 Tk 内置 clam 主题,自定义样式照常生效

启动页还新增了底部信息区:模式提示语、可点击的版本链接(直达 Releases 页)和版权声明,右上角增加退出按钮。

中英双语,左上角一键切换

全部界面文案收进 STRINGS 双语字典。启动页左上角的语言按钮(显示另一种语言的名字)点一下立即切换,无需重启:

  • 窗口标题、模式按钮、连接信息标签、参数名、参数校验的错误弹窗全部跟随语言
  • 中文缺词时自动回退英文,再回退键名,永不显示空白

细节打磨

  • 实时读数不再滞后:轮询时清空队列只保留最新值(v2.0 每次只取一个旧值,积压时显示越来越落后)
  • Start 时自动排空待机期间积压的 0 电流值,切换瞬间显示立即跟上
  • Back 按钮、状态灯、控件销毁生命周期增加了多处防护,界面重建不再报错

打包注意

主题资源需要随 PyInstaller 一起打包,两条 --add-data 不能漏:

pyinstaller --clean --noconfirm --windowed --onefile \
    --add-data "azure.tcl:." \
    --add-data "theme:theme" \
    --name "Instrument_Simulator" \
    main.py

(Windows 下分隔符用 ; 而不是 :。)运行时通过 resource_path() 兼容 PyInstaller 的 sys._MEIPASS 解压目录,单文件模式同样正常。

获取与参与

Releases 提供 Linux x86-64 单文件可执行程序,兼容 Ubuntu 12.04+、Debian 8+、CentOS 7+。

本文由AI生成。