rs485-lpc/TEST_REPORT.md

5.7 KiB
Raw Permalink Blame History

功能测试报告 —— 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。