# FilmForge GUI — 热压模具温控闭环监视台 FilmForge 热压模具温控板(GD32F405, RS485 数据口)的桌面上位机:实时温度曲线、 目标温度/加热/周期上报控制、收发日志与 CSV 数据记录。协议权威定义见固件仓根目录 [`../protocols.md`](../protocols.md)(v1.0,帧 hex 由脚本生成)。 ## 功能 - **实时温度曲线**(自绘 QPainter 控件,无第三方图表依赖):实测温度折线 + 目标温度橙色阶梯线同图对照(闭环监视),NTC 开路/短路处曲线断开并打故障标记; 时间窗 2/5/15/60 分钟/全部,暂停/恢复,窗口统计(最小/最大/平均)。 - **温度数据双通道**:固件 M2 周期上报帧直接入曲线;未开启上报时可由上位机按 500ms/1s/2s 自动轮询 M1 补点(两条路读同一全局最新温度)。 - **控制面板**:目标温度 M4S(0~200 整数℃,滑条+输入框)、加热 M3S1/M3S0 (预留功能,开启需确认)、周期上报 M2S(100~60000,10ms 步进)、预设/自定义命令。 - **状态联动**:连接后自动查询版本(M999)/上报(M2)/加热(M3)/目标(M4)并同步到状态芯片; 软件复位(M888)/进 OTA(M9999) 二次确认,复位后 2 秒自动重查状态。 - **收发日志**:译码 + 原始 hex,500 行上限防卡顿。 - **CSV 记录**:逐行写入 `logs/temp_*.csv`(时间/相对秒/温度/目标/加热/传感器)。 ## 快速开始 源码运行(Python 3.12+,Windows): ```powershell py -m pip install PySide6 PySide6-Fluent-Widgets pyserial python filmforge_gui.py ``` 选择串口(板上 RS485 数据口,本机通常 COM5)→ 连接,115200-8-N-1。 命令行模式(自动化/无 GUI 联调): ```powershell python filmforge_gui.py --port COM5 --cmd M999 --cmd M1 # 逐条命令并打印译码响应 python filmforge_gui.py --port COM5 --cmd M2S500 --seconds-report 3 # 收 3s 上报帧 python filmforge_gui.py --seconds 5 # GUI 冒烟(自动关闭) ``` ## 打包 / 自检 / 发布 ```powershell python selftest_rs485.py # 协议回归(对照 protocols.md 帧向量, 无硬件) python selftest_gui.py # GUI 离屏回归(曲线渲染/帧派发/主题/CSV) python build_exe.py # → release/FilmForge.exe + 发布 zip python publish_gitea.py release/FilmForge-GUI-v<版本>-win64.zip --replace --insecure ``` ## 实现要点(改代码前必读) - 分层:`filmforge_rs485.py`(协议+串口线程,纯标准库+可选 pyserial)/ `app_fluent.py`(PySide6-Fluent 呈现层)/ `config.py`(运行目录+设置记忆)/ `filmforge_gui.py`(入口+CLI)。协议模块不依赖 GUI。 - **应答派发是 FIFO 队列**(`app_fluent._pending`):半双工上固件严格按收到顺序应答, 连接序列(150ms 间隔连发 4 条)与自动轮询并存,单 pending 槽会被乱序击穿——实测踩坑: M2 的 OFF 被 M3 槽吃掉、M4 的目标值混进温度曲线。应答形态与队首期望匹配才消费, 不匹配记杂散,1.2s 超时自清。温度帧二义性(M1/M4/上报同为 ASCII 温度)靠 队首期望 + 生命周期窗口拆分(上报开启时收紧到 0.5s)。 - **时间戳在串口线程读取点打**(`FF485.on_frame(fr, t_rx)`),不晚于 GUI 轮询消费—— 避免重蹈 SerialMate 的时间戳失真问题(见 `E:\Hulk-Coding\HW-Debug-Tools\SerialMate`)。 - M4 目标应答的路由窗口 = 条目生命周期(1.2s):USB-RS485 适配器换向偶发延迟 实测可超 0.5s;上报开启时周期帧密集,才收紧到 0.5s 新鲜窗口。 - Fluent 控件自定义样式必须走 `setCustomStyleSheet`(覆盖 hover/pressed/disabled), 直接 `setStyleSheet` 会在切主题时被库重刷(DLPilot 同款坑);标题字号走 QFont。 - 图表刷新双节流:数据到达即重绘(≤10Hz)+ 0.5s 时间轴推进;“全部”窗口超 4000 点 按步进抽稀(NaN 断口保留)。 ## 已知事项 - 当前 USB-RS485 适配器自动换向偶发丢响应(固件侧已立“适配器更换”TODO): 表现为个别查询 1.2s 超时,队列自动清理后轮询自然重试,曲线无碍。 - 加热(M3)/目标温度(M4)为固件预留:仅软件状态(ack+可回读),硬件执行体接入后 协议不变,本工具无需改动即可联调真实控温闭环。 - 打包暂无应用图标(`logos/filmforge.ico` 缺位,build_exe.py 自动跳过)。