rs485-lpc/TEST_REPORT.md

106 lines
5.7 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.

# 功能测试报告 —— RS485 → Pharos LPC 灯光控制系统
日期:2026-10-09
被测系统:Pharos LPC(0140650,192.168.58.109,固件 2.16.3)+ 32 通道 DMX 灯具
测试方法:经 RS485 总线(9600 8N1)发送 ASCII 命令帧,通过 LPC HTTP API 回读
`/api/timeline`、`/api/output?universe=dmx:1`、`/api/group` 验证实际输出。
结论:**全部测试通过(55/55,含 2026-10-10 循环修复与照度端到端补测)**。
## 1. 串口通信链路
| # | 测试项 | 方法 | 预期 | 结果 |
|---|--------|------|------|------|
| 1.1 | 串口自收发 | Ubuntu `test_rs485.py` 自发收 | TX=RX | ✅ |
| 1.2 | Windows→Ubuntu 透传 | Test-Rs485.ps1 | 帧完整到达 | ✅ |
| 1.3 | 离线协议验证 S1~S4 | Verify-Rs485.ps1 | 16/16 PASS | ✅ |
| 1.4 | LPC 串口触发解析 | 发 `BRT=050` 查 `/api/group` | level=50 | ✅ |
## 2. 手动调光 BRT=NNN(触发器 #2)
| # | 命令 | 预期 level | 实测 | 结果 |
|---|------|-----------|------|------|
| 2.1 | `BRT=100` | 100 | 100 | ✅ |
| 2.2 | `BRT=000` | 0 | 0 | ✅ |
| 2.3 | `BRT=050` | 50 | 50 | ✅ |
| 2.4 | `BRT=080` | 80 | 80 | ✅ |
| 2.5 | `BRT=025` | 25 | 25 | ✅ |
(loop_test.sh 闭环回归 5/5 PASS)
## 3. 灯光效果 FX=NN(触发器 #11 → Timeline 1~4)
| # | 命令 | 预期 | 实测(/api/timeline + /api/output) | 结果 |
|---|------|------|-----------------------------------|------|
| 3.1 | `FX=01` 常亮 | T1 running,输出 255 稳定 | T1 running,ch=255 | ✅ |
| 3.2 | `FX=02` 呼吸 | T2 running,亮度周期性渐变 | T2 running;采样 255→202→…渐变 | ✅ |
| 3.3 | `FX=03` 闪烁 | T3 running,0/255 交替(1s 周期) | T3 running;连续采样 255,0,0,255,0,255 | ✅ |
| 3.4 | `FX=04` 缓变 | T4 running,30s 缓升缓降 | T4 running;采样 39→75→110 缓升 | ✅ |
| 3.5 | FX 互斥 | 启动 T(N) 时其余释放 | 每次仅目标 Timeline 为 running,其余 released | ✅ |
| 3.6 | FX 清除场景覆盖 | FX 后 SC 的 Override 被清除 | FX=01 后 SC=02 的 128 覆盖消失,恢复 255 | ✅ |
| 3.7 | FX 循环播放(2026-10-10) | 播完 30s 自动回绕不释放 | FX=01 后连续观测 2 个循环:pos 29500→1550→…→27980→20,state 恒 running、onstage 恒 true,输出不掉 0 | ✅ |
| 3.8 | FX=02 跨边界(2026-10-10) | 呼吸效果跨过 30s 仍运行 | t+34s:T2 running pos=4560,输出非零 | ✅ |
## 4. 场景 SC=NN(触发器 #12 → 组 Override)
| # | 命令 | 预期输出 | 实测(ch1~ch4) | 结果 |
|---|------|---------|----------------|------|
| 4.1 | `SC=01` 全亮 | 255 | 255,255,255,255 | ✅ |
| 4.2 | `SC=02` 半亮 | 128 | 128,128,128,128 | ✅ |
| 4.3 | `SC=03` 微亮 | 26(10%) | 26,26,26,26 | ✅ |
| 4.4 | `SC=04` 全灭 | 0 | 0,0,0,0 | ✅ |
| 4.5 | SC 停 Timeline | SC 后 4 条 Timeline 全部 released | timelines=[1:released 2:released 3:released 4:released] | ✅ |
| 4.6 | SC 释放不被 FXLoop 误重启(2026-10-10) | SC=04 后保持 released(Released ≠ Ended) | SC=04 后 35s:全部 released/none,ch=0 | ✅ |
## 5. 亮度叠加(Timeline/场景 × 总调光)
| # | 测试项 | 命令序列 | 预期 | 实测 | 结果 |
|---|--------|---------|------|------|------|
| 5.1 | 场景×BRT | `SC=01` + `BRT=050` | 255×50%≈128 | 128 | ✅ |
| 5.2 | 32 通道一致性 | 同上 | ch1~ch32 全相等 | distinct=128(唯一值) | ✅ |
| 5.3 | 恢复 | `BRT=100` + `FX=01` | 255,level=100 | 255,level=100 | ✅ |
## 6. 照度闭环(LUX/LXT/LX2,触发器 #8/#9/#10)
| # | 测试项 | 预期 | 结果 |
|---|--------|------|------|
| 6.1 | 死区(±50 Lux 不动) | 误差<死区时亮度不变 | ✅ |
| 6.2 | 超目标降光 | 实测>目标+死区 → 降亮度 | ✅ |
| 6.3 | 欠目标升光 | 实测<目标-死区 → 升亮度 | ✅ |
| 6.4 | 下限限幅 5% | 不低于 5% | ✅ |
| 6.5 | 上限限幅 100% | 不超过 100% | ✅ |
| 6.6 | LXT 目标设定 | lux_target 全局变量更新 | ✅ |
| 6.7 | LX2 对数映射 8 档 | 1Lux→6% … 200k→100% | ✅ 8/8 |
| 6.8 | 照度计在线读取(2026-10-10) | Modbus 地址 2 @4800 读 reg 0x0002×2 | 实测 26 Lux(室内遮光) | ✅ |
| 6.9 | lux_sync.py 端到端(2026-10-10) | 轮询照度→BRT 帧→LPC 总调光随动 | 26 Lux → BRT=73 → /api/group level=73,输出 148 随动 | ✅ |
(lux_test.sh 7/7 PASS;lx2_test.sh 8/8 PASS;照度计实测定位:Modbus 地址 2,4800 8N1,寄存器 0x0002×2)
## 7. 系统健壮性
| # | 测试项 | 预期 | 实测 | 结果 |
|---|--------|------|------|------|
| 7.1 | Upload 清 Override | 上传后场景覆盖失效(已知行为) | 复现,文档已注明需重发命令 | ✅ |
| 7.2 | Pass-Through=None 本地模式 | 本地输出不受外部源压制 | 全通道 255 输出 | ✅ |
| 7.3 | 连续快速切换 | FX→SC→FX 交替 | 状态机正确互斥,无残留 | ✅ |
| 7.4 | 非法编号 | FX/SC 超出 01~04 | 脚本忽略(levels 表 nil 守卫、n 范围判断) | ✅(代码审查) |
## 8. 测试结论
| 功能域 | 用例数 | 通过 |
|--------|-------|------|
| 串口通信链路 | 4 | 4 |
| 手动调光 BRT | 5 | 5 |
| 效果 FX | 8 | 8 |
| 场景 SC | 6 | 6 |
| 亮度叠加 | 3 | 3 |
| 照度闭环 | 9 | 9 |
| 健壮性 | 4 | 4 |
| 离线协议 | 16 | 16 |
| **合计** | **55 项(含离线 16 项)** | **全部通过** |
> 2026-10-10 修订:发现"FX 播完 30s 即 released 灯灭"缺陷(3.7/3.8 原结论"持续运行"不成立),
> 已通过新增触发器 #13 FXLoop(Timeline Ended → 重启时间线)修复并复测通过;
> 照度功能补测 6.8/6.9 端到端链路。
系统功能完备,可交付使用。使用方法见 `USAGE.md`,搭建步骤见 `SETUP.md`。