hero-image

Virtual Instrument Emulator v2.1.1:修复返回后的波形残留问题


Virtual Instrument Emulator 发布了 v2.1.1。这是一个 bug 修复版本,解决 v2.1.0 中”返回启动页后再次进入模拟模式,输出波形与当前设置不符”的问题。推荐所有 v2.1.0 用户升级。

问题现象

在 v2.1.0 中,按以下步骤操作会触发波形错乱:

  1. 进入任意模式(虚拟串口 / 网络 TCP),将通道信号类型切换为三角波并 Start
  2. Stop → 点 Back 返回启动页
  3. 再次进入模拟模式——界面显示的是默认的 DC 参数
  4. 点 Start

此时实际输出的不是当前 DC 参数对应的直流,而是上一次会话的三角波。虚拟串口与网络 TCP 两种模式均受影响;程序首次进入的会话不受影响。

根因:GUI 与内部配置的会话残留

返回启动页时,setup_start_screen() 会销毁所有控件、清空引用并重建界面——但它遗漏了对通道配置对象的重置

def setup_start_screen(self):
    for widget in self.root.winfo_children():
        widget.destroy()
    self._clear_widget_refs()   # 控件引用被清空重建
    self.running = False
    self.mode = None
    # v2.1.0 缺失:ch1_config / ch2_config 仍保留上次的 signal_type

于是再次进入模式后,界面是崭新的一页(Combobox 显示默认 DC、参数框为默认值),但内部 ch1_config.signal_type 仍停留在上次的 "trig"——GUI 与内部状态失步

点 Start 时,_read_params_from_gui() 是按 signal_type 决定读取哪一组参数框的:

stype = (self.ch1_config if ch_num == 1 else self.ch2_config).signal_type
# stype == "trig"(残留)→ 读的是 Trig 参数框,而不是你正在编辑的 DC 参数框

结果写入共享内存的是”残留类型 + 旧类型参数框的默认值”,子进程下一次应答自然就是上一次的波形类型。

修复

setup_start_screen() 在重建界面时同步重置两个通道的配置对象:

self.ch1_config = ChannelConfig()
self.ch2_config = ChannelConfig()

ChannelConfig() 默认 signal_type="dc",与重建后 GUI 的初始状态(Combobox 显示 DC)完全一致。此后用户每次切换下拉框,_on_type_change() 都会同步更新配置——GUI 与内部状态从一致的起点出发,全程保持同步。

影响范围

  • 只影响 Back → 再进入 这条路径,首次进入的会话行为不变
  • 运行中锁参、共享内存热更新、Stop 后 0 电流应答等 v2.1 核心机制均不受影响
  • 波形引擎、Modbus RTU 协议、串口 / TCP 传输层零改动
  • 仍为零外部依赖

升级

  • 源码运行:拉取最新 main.py 即可,无新增依赖
  • Linux x86-64 二进制:Releases 提供 Instrument_Simulator_2.1.1_Linux 单文件可执行程序,运行方式不变(chmod +x 后直接执行),兼容 Ubuntu 12.04+、Debian 8+、CentOS 7+

获取与参与

本文由AI生成。