generated from hulk/gd32f4xx_template_cmake_vscode
Heater: setpoint ramping to suppress thermal-lag overshoot
This commit is contained in:
+10
-6
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user