Heater: setpoint ramping to suppress thermal-lag overshoot

This commit is contained in:
2026-10-10 13:59:43 +08:00
parent 5b24b956d2
commit 12ba9de05f
11 changed files with 353 additions and 214 deletions
+10 -6
View File
@@ -12,8 +12,9 @@ FilmForge 热压模具 RS485 温控链路
命令语义速记(全表见 protocols.md):
M1 查温度(OPEN=NTC 开路/SHRT=短路) M2 查上报状态 M2S<ms> 设间隔并开启(100~60000,
10ms 步进) M2S0 停止 M3/M3S1/M3S0 加热(预留, 当前仅软件状态) M4/M4S<n> 目标温度
(0~200 整数) M888 软复位 M999 查版本 M9999 进 OTA(均会复位, GUI 需二次确认)
10ms 步进) M2S0 停止 M3/M3S1/M3S0 加热使能(实装: PB12 慢 PWM + PID 按目标温度
闭环, 开启后真实加热) M4/M4S<n> 目标温度(0~200 整数) M888 软复位 M999 查版本
M9999 进 OTA(均会复位, GUI 需二次确认)
通信要点: 全部命令幂等(ack 丢了直接重发); 命令间隔 >=50ms; 响应超时 300ms 重发 x3。
仅标准库 + 可选 pyserial(缺失只影响串口功能, 其余照常)。
@@ -62,9 +63,9 @@ PRESETS = (
('查上报状态', 'M2', 'ON <ms> / OFF'),
('开上报500ms', 'M2S500', '设上报间隔并开启(100~60000, 10ms 步进)'),
('停上报', 'M2S0', '停止周期上报'),
('查加热状态', 'M3', 'ON/OFF(预留, 当前仅软件状态)'),
('开加热', 'M3S1', '预留: 硬件执行体待接入, 仅维护软件状态'),
('关加热', 'M3S0', '预留'),
('查加热状态', 'M3', 'ON/OFF(加热使能状态)'),
('开加热', 'M3S1', '开启 PID 闭环控温, 模具将真实加热(需确认)'),
('关加热', 'M3S0', '关闭加热输出'),
('查目标温度', 'M4', 'ASCII 摄氏度(如 120.0)'),
('设目标120C', 'M4S120', '0~200 整数摄氏度, 越界回 FD'),
('查固件版本', 'M999', '如 v41.0.0.1'),
@@ -348,7 +349,10 @@ class FF485:
cmd, frame = item
self.ser.write(frame)
self.on_event(f'→ {cmd} [{frame.hex(" ").upper()}]')
data = self.ser.read(256)
# 按到达量读取, 不攒大块: 固定 read(256) 在持续帧流下要攒满
# 256 字节才返回(win32 字节间隔超时 150ms 因帧间隔更短永不
# 触发, 100ms 上报 ≈ 2.5s 一批), 表现为曲线/命令全按 3s 一卡
data = self.ser.read(self.ser.in_waiting or 1)
if data:
t_rx = time.time() # 在读取点打时间戳(曲线/CSV 用)
for fr in self.parser.feed(data):