Files
FilmForge/GUI/README.md
T

75 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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<n>(0~200 整数℃,滑条+输入框)、加热 M3S1/M3S0
(预留功能,开启需确认)、周期上报 M2S<ms>(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 自动跳过)。