# PLSR Python 测试工具 该工具直接通过 Modbus RTU 测试当前 XDM-60T4-E/STM32 PLSR 固件。串口参数默认是 `115200、8E1、站号 1`。 默认 `spec` 映射严格对应 `document/参数表-2026.xlsx`:配置区 `0x1000`、10 段路径区 `0x1100..0x1197`、监控区 `0x2000`、控制寄存器 `0x3000`。双字按高字/低字组合,脉冲个数按有符号 32 位处理,频率范围按 `1..100000 Hz` 校验。`legacy` 映射保留当前旧版单段固件的零基地址 `0..107`。 ## 最简单的打开方式 直接双击本目录中的 `start_plsr_test.bat`。启动程序会自动检查 Python 和 pyserial,然后打开中文图形上位机;检测到 COM9 时会优先选中它。确认参数为 `115200 / 8-E-1 / 站号 1` 后,点击“连接设备”。 图形界面提供以下与当前固件一致的功能: - 设置需求版脉冲端子 Y0..Y3、方向端子 Y12..Y15; - 设置有符号脉冲个数、`1–100000 Hz` 频率和正反方向; - 读取配置区、10 段路径区、监控区和控制寄存器; - 启动/继续、受控停止、重新运行、复位和累计脉冲清零; - 完成/后续发送模式,以及相对/绝对运行模式; - 低速正反转测试灯验证; - 实时状态、累计脉冲、停止原因、错误码和原始寄存器诊断; - 有上限的 TX/RX 通信日志,可清空或导出,避免日志无限增长。 命令行工具 `plsr_test.py` 和文字菜单 `plsr_console.py` 仍保留,可用于自动化和协议排查。 ## 逻辑分析仪波形查看器 双击 `start_logic_csv_parser.bat` 可以直接打开逻辑分析仪波形查看器,不需要进入 IAR 编译。 查看器支持正点原子导出的两种文件: - `CSV`:自动读取采样率、数字时间轴和所有通道; - `BIN`:按原始采样点读取,需要填写采集时使用的采样率和通道数。 读取后会根据相邻同方向脉冲边沿的周期计算瞬时频率,并显示“横轴时间、纵轴频率 Hz”的运动轨迹。鼠标滚轮用于缩放时间轴,按住鼠标左键水平拖动可以平移,`适应窗口`用于恢复完整曲线。`显示通道`支持填写 `自动`、`4`、`0,1,4` 或 `0-7`。 `测量边沿`默认选择自动,也可以指定上升沿或下降沿。`关键时间(ms)`可以填写 `100` 或 `100,200,500`,图中会在对应时间绘制标记线,并显示该节点之后最近一个完整周期测得的频率。横轴的 `0 ms` 从第一个有效脉冲边沿开始计算。 注意:正点原子导出的原始 `BIN` 文件没有保存采样率。界面中的 BIN 采样率必须与采集时的设备采样率一致,否则横轴时间和计算频率会不正确。 原来的 CSV 转换命令行脚本 `parse_logic_csv.py` 仍然保留,图形波形查看器脚本为 `parse_logic_gui.py`。 通信采用严格的“一次请求、一次响应”:上一帧结束或超时后才发送下一帧,并对站号、功能码、帧长度和 CRC 进行校验。接收器可以跳过残留字节重新寻找合法帧,避免 Qt 工具出现的 `0x40` 被误判成功能码的问题。 ## 环境准备 在本目录执行: ```powershell python -m pip install -r requirements.txt python plsr_test.py self-test python plsr_test.py ports ``` 如果 Windows 的 `python` 是无效商店别名,请在 PyCharm 解释器或已安装的 Python 环境中执行相同命令。 ## 推荐测试顺序 先断开伺服或机械负载,只接测试灯或示波器。以下示例使用 `COM9`,实际端口以 `ports` 输出为准。 1. 只读检查通信和当前保存的输出点: ```powershell python plsr_test.py --port COM9 status ``` 2. 需求版配置 Y0 输出脉冲、Y12 控制方向(`spec` 映射): ```powershell python plsr_test.py --port COM9 --map spec configure --pulse-output 0 --direction-output 0 ``` 输出点、系统参数、10 段参数和累计脉冲由固件自动保存到 Flash,不需要上位机额外发送保存命令。 3. 执行低速正反转自动测试: ```powershell python plsr_test.py --port COM9 --map spec auto-test --pulses 6 --frequency 2 --confirm-safe ``` 预期:正向和反向均完成 6 个脉冲,监控区 `0x2000/0x2001` 的有符号累计值可读;反向时脉冲点仍持续输出,方向点电平改变。 4. 持续监视状态: ```powershell python plsr_test.py --port COM9 --map spec monitor --interval 0.5 ``` 按 `Ctrl+C` 停止监视。 ## 单项命令 ```powershell python plsr_test.py --port COM9 --map spec run --pulses 10 --frequency 1 --direction forward --confirm-safe python plsr_test.py --port COM9 --map spec run --pulses -10 --frequency 1 --direction reverse --confirm-safe python plsr_test.py --port COM9 --map spec stop python plsr_test.py --port COM9 --map spec immediate-stop python plsr_test.py --port COM9 --map spec reset python plsr_test.py --port COM9 --map spec clear ``` 增加 `-v` 可以显示原始 TX/RX 帧: ```powershell python plsr_test.py --port COM9 -v status ``` ## 停止、继续和重新运行 - “受控停止”会完成已经开始的当前脉冲后暂停,避免产生半个脉冲; - 再点“启动/继续脉冲”,参数未改变时只发送剩余脉冲,例如 100 个脉冲在 50 停止后继续发送 50 个; - “重新运行脉冲”强制从本次任务的 0 进度重新发送完整预设数量,但不会清空全局累计脉冲; - “清零累计脉冲”只清累计值,“复位状态”只复位运行状态和错误状态; - 立即停止仍保留在命令行 `immediate-stop` 中用于故障处置,它会立即关闭输出,当前脉冲可能被截断。 ## 发送模式和运行模式 - 完成模式:本段结束时保持本段速度,下一段开始后再向下一段速度加减速; - 后续模式:本段后半段提前向下一段速度加减速,本段结束时已经到达下一段速度; - 两种模式运行中再次发送启动命令都返回忙,不用于表示调用方是否等待; - 相对模式:脉冲数表示本次要发送的数量,例如设置 `100` 就发送 100 个; - 绝对模式:脉冲数表示目标位置。目标位置等于当前累计位置时不输出;不等时只发送两者的差值。 ## 速度和加减速 - 起始速度:开始输出时使用的速度; - 默认速度:加速完成后的匀速速度; - 终止速度:停止前减速阶段最后使用的速度; - 加速时间和减速时间:分别表示加速、减速阶段的时间; - 加减速模式 `0` 为直线,`1` 为 S 曲线,`2` 为正弦曲线。 当前固件在每个完整脉冲结束时更新下一脉冲的频率,参数简单,便于使用示波器观察速度变化。 ## 掉电保存验证 固件在脉冲完成、受控/立即停止、累计清零或参数修改后,将系统参数、10 段参数、输出映射和累计脉冲写入带 CRC 的 Flash 记录。重新上电并连接后,“立即读取状态”应显示断电前最后一次稳定保存的累计值。 没有掉电检测、备份电池或 FRAM 时,运行中直接切断电源无法保证最后一个正在输出的脉冲零丢失。现场掉电保持验收应在运动完成或受控停止后断电;上电不会自动恢复断电前未完成的运动。 ## 离线回归 离线测试不需要串口,也不需要安装 pyserial: ```powershell python -m unittest -v test_plsr_test.py ```