| 项目 | 内容 |
|---|---|
| 报告版本 | V1.0 |
| 状态日期 | 2026-08-10 |
| 代码基线 | master / HEAD fdbbe71aeacfe2524271aa4d53792cb5831211dc + 当前未提交工作区 |
| 目标平台 | STM32F407IG、uC/OS-II、Modbus RTU |
| 开发环境 | IAR EWARM 8.3,构建配置 Modbus |
| 通信参数 | COM5,9600 bit/s,8E1,从站地址 1 |
| 波形采集 | 16 通道逻辑分析仪;AB 关键用例 100 MS/s;CH0~CH3 对应 Q0~Q3 |
| 测试依据 | PLSR 需求、方案、地址映射、信捷对标追踪矩阵、当前源码及真机实测 |
本报告汇总截至 2026-08-10 已执行的 Host 自动测试、IAR 构建、Modbus 上位机测试、
STM32F407 真机测试及逻辑分析仪结果。状态定义如下:
内部 physicalPulses、任务计数和位置只能用于固件一致性检查,不能替代端子物理边沿。
追踪矩阵中的“已纳入/等效实现”也不等价于代码和板测全部关闭。
本报告中的最新结果对应当前未提交工作区,不能只用 HEAD fdbbe71 复现。
| 测试域 | 当前结论 |
|---|---|
| Host 自动回归 | PASS,8 组共 4881 项 |
| IAR 全量构建 | PASS,0 errors / 0 warnings |
| 四轴 PULSE/DIR、P12、P13、P15 | PASS;P14 作为最终发布门禁仍建议重采一次四通道波形 |
| 双 AB 100 kHz | PASS,independent、simultaneous、dynamic 三用例均通过自动检查和四通道波形 |
| M/WAIT 位链 | PASS;仅关闭 Modbus M 位到 PLSR WAIT 的生产链 |
| HSD/SFD 正常持久化 | PASS,含 VBAT 掉主电、运行中掉电、SFD 上电加载、运动中拒绝 Flash 保存 |
| P18 长稳 | 60 秒 Modbus 冒烟 PASS;30 分钟 USB 并发 DEFERRED |
| 真实 X/EXT/硬限位、HM 保持 | BLOCKED,缺少物理 X→GPIO 映射和 HM 保持介质约定 |
| A/B 槽坏 CRC 真机回退 | PENDING,正常固件禁用破坏性诊断;Host 已覆盖 |
因此,主体运动、Modbus 控制、双 AB、性能和正常持久化链路已有充分通过证据;
但在真实 X/HM、受控坏 CRC、30 分钟 USB 并发及最终发布回归关闭前,不得宣称
“严格功能对标和全部交付验收完成”。
| 固件/选择 | 用途 |
|---|---|
PLSR_BOARD_TEST_MODBUS_DATA(P12) |
动态频率与 Modbus 字数据源 |
PLSR_BOARD_TEST_MODBUS_CONTROL(P13) |
COMMIT/START/PAUSE/RESUME/STOP 控制窗口 |
PLSR_BOARD_TEST_HW_COUNTER(P14) |
四轴 PULSE/DIR 计数与 P16 性能 |
PLSR_BOARD_TEST_DUAL_AB(P17) |
P14/P15 共用准备、双 AB、位链及持久化板测 |
PLSR_BOARD_TEST_LONG_STRESS(P18) |
四轴长稳专用 K4;关闭软/硬限位,仅限安全台架 |
报告生成时工作区默认选择为 P18。P18 不得用于带机构的常规运动验收;切换测试固件后均需
重新编译、烧录并硬复位。DWT 最大值测试必须在硬复位后进行。
2026-08-10 在当前工作区重新执行:
powershell -ExecutionPolicy Bypass -File PLSR\Test\run_host_tests.ps1
& 'F:\IAR Systems\Embedded Workbench 8.3\common\bin\IarBuild.exe' `
'EWARM\Modbus.ewp' -build Modbus -log warnings
Host 结果:
| 套件 | 检查数 | 结果 |
|---|---|---|
| position | 33 | PASS |
| plc | 202 | PASS |
| core | 214 | PASS |
| job | 307 | PASS |
| path | 227 | PASS |
| profile | 336 | PASS |
| HAL | 3494 | PASS |
| Modbus data source | 68 | PASS |
| 合计 | 4881 | PASS |
IAR 结果:Total number of errors: 0,Total number of warnings: 0。
| 用例 | 主要验收结果 | 状态 |
|---|---|---|
| 四轴独立 PULSE/DIR | Q0~Q3 可独立运行;100 kHz 周期 10 µs、约 50% 占空比;无窄脉冲和停止后残余 | PASS |
| 双轴方向/回零 | 两轴 +200/-200 对称 |
PASS |
| 方向建立/换向延时 | 换向静默实测 9.9995 ms,符合 SFD907=10 ms | PASS |
| 同方向段衔接 | 不再无条件插入 10 ms;仅首次建立或实际换向等待 | PASS |
| CW/CCW 互锁 | Q0=300、Q1=200;非活动路全程低、无重叠 | PASS |
| CW/CCW 末脉冲 | 最后完整高/低周期结束后停止,不再截断为 2.5/5.0 µs | PASS |
| 零加速段 | 不再停在 ACCEL,正常进入运行和完成 | PASS |
| 动态频率非法输入 | 超范围钳位,负频率保持上次安全目标 | PASS |
执行命令:
python HostComputer\plsr_modbus_frequency_test.py --port COM5
波形证据:Document/PLSR_document/波形/2026-08-10_18-28-06.bin。
| 写入值 | 期望 | 真机/波形结果 |
|---|---|---|
| 1000 | 1000 Hz | 1000 Hz 平台,周期 1000.0 µs |
| 4000 | 平滑升至 4000 Hz | 4000 Hz,周期 250.0 µs |
| 500 | 平滑降至 500 Hz | 500 Hz,周期 2000.0 µs |
| 0 | 使用默认 1000 Hz | 1000 Hz 短平台明确存在 |
| 8000 | 钳位至 5000 Hz | 5000 Hz,周期 200.0 µs |
| -1 | 保持上次安全目标 | 5000 Hz 平台连续,无停止或异常频率 |
| 2000 | 恢复 2000 Hz | 2000 Hz,周期 500.0 µs |
结果:频率顺序 1000→4000→500→1000→5000→5000→2000 正确;段间连续、
无断流、无窄脉冲、无截断和额外边沿;32 位频率使用功能码 0x10 原子写入。
结论:PASS。
执行命令:
python HostComputer\plsr_modbus_control_test.py --port COM5
波形证据:Document/PLSR_document/波形/2026-08-10_18-41-17.bin。
| 验收项 | 结果 |
|---|---|
| COMMIT 完整校验 | PASS |
| COMMIT 后修改 S0,START 必须拒绝 | PASS |
| START 排队并加速至 2000 Hz | PASS |
| PAUSE 减速、重复序号幂等 | PASS |
| 暂停期间全低 | 约 682 ms 无残余边沿 |
| RESUME 重新加速 | PASS,无额外首沿 |
| STOP_DECEL | 平滑减速,完整末脉冲后停止 |
| 最终计数 | 逻辑位置 103550;任务/物理脉冲均 3550 |
PAUSE 与 STOP_DECEL 的逐脉冲减速序列对称;全波形升降沿各 3550,无悬空沿,
无小于 1 µs 毛刺,最终保持低。
结论:PASS。
执行命令:
python HostComputer\plsr_modbus_counter_stress_test.py --port COM5
physicalPulses 增量均为 200000。历史调试中曾出现 Q0/Q1 各 199999、Q2 多 9 个完整周期等问题;这些结果属于修复前失败样本,
不能作为最终验收值。
最终已记录的 PULSE/DIR 通过样本包括:
| 指标 | 实测最大值 | 预算 | 结果 |
|---|---|---|---|
| PlsrProcess 自身 | 53748 cycles / 319.929 µs | <168000 cycles | PASS |
| PlsrProcess 响应 | 85655 cycles / 509.851 µs | 观测项 | PASS |
| TIM6 控制 ISR | 231 cycles / 1.375 µs | <16800 cycles | PASS |
| 输出定时器 ISR | 893 cycles / 5.315 µs | <1680 cycles | PASS |
| TIM9/12 计数 ISR | 883 cycles / 5.256 µs | <1680 cycles | PASS |
后续 P17 回归也得到 PlsrProcess 自身 68175 cycles、输出 ISR 1105 cycles、计数 ISR
961 cycles,均在预算内。响应墙钟偶尔超过 1 ms 时,自身 CPU 时间仍达标,差值来自高优先级
定时器中断抢占。
结论:PASS(发布前回归)。 最终 AB 边界修复修改了共享 HAL;发布前应再次烧录最终工作区,
硬复位后重跑脚本并重新统计 Q0~Q3 各 200000 个端子上升沿。
执行命令:
python HostComputer\plsr_modbus_soft_limit_matrix_test.py --port COM5
| 轴/方向 | 频率 | 输出脉冲 | 最终位置 | 结果 |
|---|---|---|---|---|
| 轴0 正限位 | 500 Hz | 201 | 1000001 | PASS |
| 轴1 正限位 | 2000 Hz | 1000 | 1000000 | PASS |
| 轴2 负限位 | 500 Hz | 201 | -1000001 | PASS |
| 轴3 负限位 | 2000 Hz | 1000 | -1000000 | PASS |
四轴正负软限位均在 ±1 脉冲窗口内停止,错误码和复位正确。历史上轴1曾超停 2 脉冲,
加入当前硬件频率和 1 ms 保护采样补偿后关闭。
结论:PASS。
三组用例均使用 Q0/Q1 与 Q2/Q3 两组固定 AB 配对、TIM9/TIM12 硬件周期计数,
每组分别硬复位后执行:
python HostComputer\plsr_modbus_ab_stress_test.py --port COM5 --case independent
python HostComputer\plsr_modbus_ab_stress_test.py --port COM5 --case simultaneous
python HostComputer\plsr_modbus_ab_stress_test.py --port COM5 --case dynamic
证据:Document/PLSR_document/波形/2026-08-10_14-45-28.bin。
00→10→11→01→00 和 00→01→11→10→00。结论:PASS。
证据:Document/PLSR_document/波形/2026-08-10_15-14-08.bin。
结论:PASS。
最终证据:Document/PLSR_document/波形/2026-08-10_18-13-13.bin。
| 验收项 | 最终结果 |
|---|---|
| 四通道边沿 | CH0=CH1=CH2=CH3=600000,升降沿相等 |
| 频率序列 | 100 kHz→50 kHz→100 kHz,周期 10.000/20.000 µs |
| 降频/升频边界 | 额外沿 0、窄脉冲 0、同跳 0、非法跳变 0 |
| PAUSE | 合法单步回 00;末脉冲 5.000 µs 完整;约 864 ms 全低无沿 |
| 另一组连续性 | 暂停期间 Q2/Q3 连续运行,约 86401 沿 |
| RESUME | 从 00 重建正向相序,第一周期完整,无额外沿 |
| 首沿 | Q0/Q1=2.55 µs,Q2/Q3=2.44 µs;首跳前 00 |
| 完成 | 两组末周期完整回 00,停止后全低 |
| 自动性能检查 | PASS,含输出 ISR 与 D1468 预算 |
结论:PASS。
| 轮次/证据 | 发现的问题 | 后续状态 |
|---|---|---|
| 早期 AB 捕获 | 每相 7501 而非 7500;首沿约 0.33~0.37 µs 同升 | 已修复 |
| independent 初测 | 每通道多 1 个悬空沿、停在 11、首沿仅约 0.33 µs | 已修复 |
| simultaneous 初测 | CH2 多 1 沿并悬高约 809 µs;D1468=443 cycles | 已修复,最终 CH2=200000、D1468=392 |
15-24-38.bin |
dynamic COUNTER_FAULT、PAUSE 未生效、停止边界悬高 | 已修复 |
17-06-37.bin |
降频边界拉长/多余沿、PAUSE 起点悬高约 970 µs | 已修复 |
17-49-15.bin |
降频边界 2.4 µs 短脉冲、PAUSE 出现 11→00 同跳 | 已修复 |
18-13-13.bin |
所有自动与波形检查干净 | 最终 PASS |
禁止恢复曾经使用的“运行中重写 CNT 保相位”方案;该方案会产生额外边沿、4 µs 毛刺和
错误总计数。
执行命令:
python HostComputer\plsr_modbus_bit_input_test.py --port COM5
自动和波形结果:
第一次脚本曾把成功的 START QUEUED=1 错当作失败;修正上位机期望值后通过,固件无需为此改变。
结论:M/WAIT 生产链 PASS。 实际 X 输入、EXT 上升沿和正/负硬限位仍需板卡
“X 点号→GPIO/输入扫描”映射;HM 独立映像尚未定义掉电保持介质,因此这些项目为 BLOCKED。
测试脚本:
python HostComputer\plsr_persistence_board_test.py --port COM5 --phase <phase>
| 阶段 | 关键结果 |
|---|---|
| diagnostics | HSD valid=0x03,generation=688;SFD 尚无有效槽 |
| hsd-prepare | generation=692,CRC=0x1121309F,本次启动保存 4 次 |
| 保持 VBAT、断主电后 hsd-verify | generation 和 CRC 完全一致,flags=0x0006 |
四轴已知位置全部恢复、position_valid=1、无自动输出。
结论:PASS。
| 阶段 | 关键结果 |
|---|---|
| busy-prepare | HSD generation=694,CRC=0xC1F355DF,busy 检查点已提交 |
| 运行中直接断主电后 busy-verify | generation/CRC 保持,flags=0x000A |
重启后所有轴 IDLE、没有自动续跑、无输出、所有轴 position_valid=0。
初版脚本错误地等待运动期间 HSD dirty 清零;运行位置持续发布会合法地重新置 dirty。
脚本现改为检查 generation 和 save_count 确实前进。
结论:PASS。
0x5C57E27F、valid mask=0x01、save_count=1。last_sfd_load=OK。结论:CRC 记录保存和上电加载 PASS。 当前只形成一个有效槽;“损坏 newest 后回退旧槽”的
真机破坏性用例尚未执行,不能据此宣称 A/B 坏 CRC 回退已在板上通过。
SAVE_CONFIG,内核返回 BUSY。sfd_save_count 不增加。STOP_IMMEDIATE 清理运动。结论:PASS。
执行命令:
python HostComputer\plsr_modbus_long_stress_test.py --port COM5 --duration 60
证据:
HostComputer/long_stress_logs/plsr_long_stress_20260810_191803.csvHostComputer/long_stress_logs/plsr_long_stress_20260810_191803.json结果摘要:
| 项目 | 结果 |
|---|---|
| 一致性样本 | 60 |
| 动态频率 | 每 10 s 在 100 kHz/50 kHz 间切换 |
| Modbus 有效帧增量 | 375 |
| TX 帧增量 | 375 |
| CRC/非法功能/非法地址/非法值/丢帧/UART 错误 | 全部 0 |
| DMA 接收重启失败增量 | 0 |
| 四轴最终计数 | [4541617, 4536532, 4531732, 4526921] |
| 结束状态 | 四轴软件停止,任务计数=物理计数=逻辑位置 |
结论:60 秒 Modbus 长稳冒烟 PASS。
USB 线未接,系统只枚举到 FTDI Modbus COM5,因此以下 30 分钟 USB CDC 并发测试按用户决定暂缓:
python HostComputer\plsr_modbus_long_stress_test.py `
--port COM5 --duration 1800 --usb-port COMx --usb-rate 64000
状态:DEFERRED。60 秒测试不能替代 30 分钟及更长 USB/Modbus/四轴并发验收。
physicalPulses 当成本任务计数。PlsrProcess 超过 1 ms;HSD 检查点 CRC 热点已优化并合并。| 优先级 | 项目 | 当前状态 | 关闭条件 |
|---|---|---|---|
| 1 | 最终工作区 P14/P16 发布回归 | PENDING | P17 硬复位后脚本 PASS;Q0~Q3 各严格 200000 端子上升沿 |
| 2 | 30 分钟 USB CDC + Modbus + 四轴并发 | DEFERRED | 枚举第二 USB CDC COM,运行 1800 s;设备/主机 USB 统计和 Modbus 诊断无错误 |
| 3 | SFD/HSD newest 槽坏 CRC 回退 | PENDING | 专用验证固件启用破坏性诊断、双槽有效、只失效 newest,重启回退旧 generation |
| 4 | 真实 X、EXT、正负硬限位 | BLOCKED | 提供板卡 X 点到 GPIO/扫描表,完成真实输入板测 |
| 5 | HM 掉电保持 | BLOCKED | 明确 HM 存储介质、容量、恢复语义并完成掉电测试 |
| 6 | 更长时间长稳 | PENDING | 在 30 分钟通过后按交付要求延长,并保存 CSV/JSON 与必要波形窗口 |
| 7 | 正式发布清理 | PENDING | 关闭板测启动和调试快照,保留正式控制链;生产构建完整回归 |
截至本报告日期:
项目可以进入“剩余专项验收和正式发布清理”阶段,但尚不满足“全部真机测试关闭”或
“严格对标全部完成”的声明条件。