generated from hulk/gd32f4xx_template_cmake_vscode
Heater: setpoint ramping to suppress thermal-lag overshoot
This commit is contained in:
@@ -150,6 +150,60 @@ check('杂散不消费队首', len(window._pending), 1)
|
||||
window._handle_frame(mk_frame('v41.0.0.1'), time.time())
|
||||
check('杂散后正常消费', len(window._pending), 0)
|
||||
|
||||
# 3d) 晚到 ok 补偿: 设定命令超时清队后, 迟到的 ok 仍按发送时计划应用
|
||||
window._pending.clear()
|
||||
window._last_set = {'cmd': 'M2S500', 't': time.time(), 'apply': ('report', ('ON', 500))}
|
||||
window._handle_frame(mk_frame('ok'), time.time())
|
||||
check('晚到 ok 补偿上报', window.report_state, ('ON', 500))
|
||||
check('晚到 ok 已清记录', window._last_set, None)
|
||||
|
||||
# 3e) M4 暂停-恢复链: 上报开启时查目标 → M2S0(ok)→M4→应答落地→自动恢复上报
|
||||
window._pending.clear()
|
||||
window.link.is_connected = lambda: True # 仅测试: 跳过串口在线检查
|
||||
window._set_report_state('ON', 500)
|
||||
window._query_target()
|
||||
check('查目标先停上报', window._pending[0]['cmd'], 'M2S0')
|
||||
check('挂起恢复标记', window._resume_report_ms, 500)
|
||||
window._handle_frame(mk_frame('ok'), time.time()) # M2S0 ok → then 定时发 M4
|
||||
window._pending.clear()
|
||||
window._pending.append({'cmd': 'M4', 'kind': 'target', 't': time.time(), 'apply': None})
|
||||
window._handle_frame(mk_frame('57.0'), time.time()) # M4 应答(替换定时器路径)
|
||||
check('M4 应答落目标', window.target_hist[-1][1], 57.0)
|
||||
check('恢复标记已清', window._resume_report_ms, None)
|
||||
check('恢复上报已入队', window._pending[0]['cmd'], 'M2S500')
|
||||
window.link.is_connected = lambda: False # 还原
|
||||
window._pending.clear()
|
||||
|
||||
# 3f) 上报开启时, 上报帧不得被当成 M4 目标应答误占(队首非 target 时入曲线)
|
||||
window._set_report_state('ON', 100)
|
||||
n2 = len(window.samples_t)
|
||||
window._handle_frame(mk_frame('60.0'), time.time())
|
||||
check('无 pending 上报帧入曲线', len(window.samples_t), n2 + 1)
|
||||
window._set_report_state('OFF', None)
|
||||
|
||||
# 3g) 幂等去重: 同命令未决时重复发送被忽略, 队列不再堆积(真机连点 M2S0 回归)
|
||||
window._pending.clear()
|
||||
window.link.is_connected = lambda: True
|
||||
window._send_set('M2S0', 'report', ('OFF', None))
|
||||
window._send_set('M2S0', 'report', ('OFF', None))
|
||||
window._send_set('M2S0', 'report', ('OFF', None))
|
||||
check('重复命令去重', len(window._pending), 1)
|
||||
check('不同命令不去重', 'M4' if window._send_cmd('M4', 'target') else '', 'M4')
|
||||
check('去重后队列 2 条', len(window._pending), 2)
|
||||
window.link.is_connected = lambda: False
|
||||
window._pending.clear()
|
||||
|
||||
# 3h) 目标阶梯线: 目标变更须在变更时刻垂直落变, 不得从旧值斜拉到右缘
|
||||
t_a, t_b, t_now = time.time() - 120, time.time() - 60, time.time()
|
||||
window.chart._target_hist = [(t_a, 57.0), (t_b, 41.0)]
|
||||
pts = window.chart._target_points(t_a, t_now)
|
||||
check('目标线终点延到右缘', abs(pts[-1][0] - t_now) < 1e-6 and pts[-1][1], 41.0)
|
||||
diag = [1 for (xa, ya), (xb, yb) in zip(pts, pts[1:])
|
||||
if abs(xb - xa) > 1e-9 and abs(yb - ya) > 1e-9]
|
||||
check('目标线无斜段(纯阶梯)', diag, [])
|
||||
check('变更时刻有垂直落变', (t_b, 57.0) in pts and (t_b, 41.0) in pts, True)
|
||||
window.chart._target_hist = [] # 还原
|
||||
|
||||
# 4) 主题往返后曲线配色随动 + 渲染不崩
|
||||
window._set_theme('Light')
|
||||
check('Light 曲线配色', window.chart._colors['measured'].lower(),
|
||||
|
||||
Reference in New Issue
Block a user