Virtual Instrument Emulator v2.1.0:跨平台与界面焕新
Virtual Instrument Emulator 发布了 v2.1.0。这次升级有两条主线:让程序跑在更多平台上(Windows 首次可用),以及让启停与调参的方式更接近真实仪器(常驻子进程 + 共享内存热更新)。同时,界面也彻底焕新——Azure Fluent 亮色主题、中英双语。
如果你在用 Current Monitor 但没有物理电流表,这个工具可以模拟 Modbus RTU 设备,让你在虚拟环境里完成调试。
v2.1 带来了什么
| v2.0 | v2.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 解压目录,单文件模式同样正常。
获取与参与
- 仓库:github.com/shenmeshisanpao/Virtual-Serial-Port-Emulator
- 协议:GNU GPL v3.0
Releases 提供 Linux x86-64 单文件可执行程序,兼容 Ubuntu 12.04+、Debian 8+、CentOS 7+。
本文由AI生成。