generated from hulk/gd32f4xx_template_cmake_vscode
Heater: setpoint ramping to suppress thermal-lag overshoot
This commit is contained in:
+28
-12
@@ -9,10 +9,11 @@ FilmForge 热压模具温控板(GD32F405, RS485 数据口)的桌面上位机
|
||||
- **实时温度曲线**(自绘 QPainter 控件,无第三方图表依赖):实测温度折线 +
|
||||
目标温度橙色阶梯线同图对照(闭环监视),NTC 开路/短路处曲线断开并打故障标记;
|
||||
时间窗 2/5/15/60 分钟/全部,暂停/恢复,窗口统计(最小/最大/平均)。
|
||||
- **温度数据双通道**:固件 M2 周期上报帧直接入曲线;未开启上报时可由上位机按
|
||||
500ms/1s/2s 自动轮询 M1 补点(两条路读同一全局最新温度)。
|
||||
- **温度数据**:温度监控统一走固件 M2 周期上报帧(M2S<ms> 开启后主动推送入曲线);
|
||||
M1 仅作手动单点查询(命令区按钮/预设)。
|
||||
- **控制面板**:目标温度 M4S<n>(0~200 整数℃,滑条+输入框)、加热 M3S1/M3S0
|
||||
(预留功能,开启需确认)、周期上报 M2S<ms>(100~60000,10ms 步进)、预设/自定义命令。
|
||||
(真实 PID 闭环控温,开启需确认)、周期上报 M2S<ms>(100~60000,10ms 步进)、
|
||||
预设/自定义命令。
|
||||
- **状态联动**:连接后自动查询版本(M999)/上报(M2)/加热(M3)/目标(M4)并同步到状态芯片;
|
||||
软件复位(M888)/进 OTA(M9999) 二次确认,复位后 2 秒自动重查状态。
|
||||
- **收发日志**:译码 + 原始 hex,500 行上限防卡顿。
|
||||
@@ -52,14 +53,28 @@ python publish_gitea.py release/FilmForge-GUI-v<版本>-win64.zip --replace --in
|
||||
`app_fluent.py`(PySide6-Fluent 呈现层)/ `config.py`(运行目录+设置记忆)/
|
||||
`filmforge_gui.py`(入口+CLI)。协议模块不依赖 GUI。
|
||||
- **应答派发是 FIFO 队列**(`app_fluent._pending`):半双工上固件严格按收到顺序应答,
|
||||
连接序列(150ms 间隔连发 4 条)与自动轮询并存,单 pending 槽会被乱序击穿——实测踩坑:
|
||||
连接序列(150ms 间隔连发)场景下单 pending 槽会被乱序击穿——实测踩坑:
|
||||
M2 的 OFF 被 M3 槽吃掉、M4 的目标值混进温度曲线。应答形态与队首期望匹配才消费,
|
||||
不匹配记杂散,1.2s 超时自清。温度帧二义性(M1/M4/上报同为 ASCII 温度)靠
|
||||
队首期望 + 生命周期窗口拆分(上报开启时收紧到 0.5s)。
|
||||
不匹配记杂散,1.2s 超时自清。
|
||||
- **M4 查询走"暂停上报→查询→恢复"应答驱动链**:M4 应答与周期上报帧同为 ASCII
|
||||
浮点,仅靠时间窗拆分在 100ms 上报下实测必现误占(目标 chip 显示成实测温度)——
|
||||
上报开启时查目标自动执行 M2S0(ok)→M4→M2S<ms> 恢复;连接同步序列同样走此路径。
|
||||
- **晚到 ok 补偿**:USB-RS485 适配器换向延迟实测可 >4s,设定命令的 ok 迟到超过
|
||||
1.2s 已按超时清队,8s 内的迟到 ok 按发送时记录的计划补偿应用(否则状态 chip
|
||||
与设备脱节,实测:M2S100 ok 迟到,chip 停在 OFF 而设备在报)。
|
||||
- **连接按钮按"意图"翻转**:点击立即切换文本,实际开/关由串口线程异步完成,
|
||||
已连接/已断开/丢失全部写入日志;期望连接但 2s 未建立按丢失处理回退按钮。
|
||||
连接同步序列每步发送前确认在线(线程异步打开期间早发会被"未连接串口"丢弃)。
|
||||
- **时间戳在串口线程读取点打**(`FF485.on_frame(fr, t_rx)`),不晚于 GUI 轮询消费——
|
||||
避免重蹈 SerialMate 的时间戳失真问题(见 `E:\Hulk-Coding\HW-Debug-Tools\SerialMate`)。
|
||||
- M4 目标应答的路由窗口 = 条目生命周期(1.2s):USB-RS485 适配器换向偶发延迟
|
||||
实测可超 0.5s;上报开启时周期帧密集,才收紧到 0.5s 新鲜窗口。
|
||||
- **发送入口幂等去重**:同一命令已有未决应答时忽略重复发送(状态栏提示
|
||||
"应答中, 已忽略重复发送")——真机实测连点"停止"12 次会把 8 条 pending 队列
|
||||
挤爆("丢弃积压命令"刷屏);协议全幂等,同命令一条在途足够,超时自清后
|
||||
自然允许重发。
|
||||
- **串口读取按到达量收,不攒大块**:固定 `read(256)` 在持续帧流下要攒满 256 字节
|
||||
才返回(Windows 串口"字节间隔超时"150ms 因帧间隔更短永不触发,100ms 上报时
|
||||
≈2.5s 一批),表现为曲线/命令全部 3 秒一卡、一股脑一大坨。已改为
|
||||
`read(in_waiting or 1)`,延迟回到 ≤150ms 量级(v0.2.2,真机实测确认)。
|
||||
- Fluent 控件自定义样式必须走 `setCustomStyleSheet`(覆盖 hover/pressed/disabled),
|
||||
直接 `setStyleSheet` 会在切主题时被库重刷(DLPilot 同款坑);标题字号走 QFont。
|
||||
- 图表刷新双节流:数据到达即重绘(≤10Hz)+ 0.5s 时间轴推进;“全部”窗口超 4000 点
|
||||
@@ -67,8 +82,9 @@ python publish_gitea.py release/FilmForge-GUI-v<版本>-win64.zip --replace --in
|
||||
|
||||
## 已知事项
|
||||
|
||||
- 当前 USB-RS485 适配器自动换向偶发丢响应(固件侧已立“适配器更换”TODO):
|
||||
表现为个别查询 1.2s 超时,队列自动清理后轮询自然重试,曲线无碍。
|
||||
- 加热(M3)/目标温度(M4)为固件预留:仅软件状态(ack+可回读),硬件执行体接入后
|
||||
协议不变,本工具无需改动即可联调真实控温闭环。
|
||||
- 当前 USB-RS485 适配器自动换向偶发丢响应/大延迟(固件侧已立”适配器更换”TODO):
|
||||
查询 1.2s 超时提示后重发即可;设定命令的晚到 ok 已自动补偿应用;曲线走上报帧
|
||||
(设备单向推送),不受影响。
|
||||
- 加热(M3S1)为真实 PID 闭环:开启后模具真实升温(NTC 故障/过温 150℃ 固件自动
|
||||
断电保护,上电默认关闭);当前占空比无查询命令,从温度曲线间接观察。
|
||||
- 打包暂无应用图标(`logos/filmforge.ico` 缺位,build_exe.py 自动跳过)。
|
||||
|
||||
Reference in New Issue
Block a user