《pdo-fast-send.md》修订附录 2026-10-19

原报告 · 核对基线 commit eac3717 · 总评审:DCU_DesktopController_专家评审_2026-10-19.html
原报告:PDO 快发(网页按钮 → 原生入队二进制直通)
时间线:status: delivered,2026-09-23(2c6235d)
原结论概要:桌面 APP 下 ECAT 电机发送强制走 ESF1 TCP 快发,堵死 HTTP/JSON 慢发回落;失败可重探端口后再试 TCP 一次。

原文件保持不变;本附录逐条记录其结论在当前代码中的状态。

逐条结论跟踪

编号原结论 / 建议当前状态证据(文件:行号)备注
FS-1Python 桥 ESF1 仅走 TCP,无 HTTP 回落已修复(已交付)ecat_client.py:231-287
FS-2前端 sendViaFastOrJson 有桥时只调快发已修复(已交付)js/motor/transport-ecat.js:282-300
FS-3失败重探端口后再试 TCP 一次仍存在风险ecat_client.py:247-279sendall 成功后 recv 失败也会重发,同一帧可能入队两次(P-2,致命)
FS-4堵死慢发原则部分修复js/motor/transport-ecat.js:259-271低频路径(motor/send、motor/start)桥失败仍回落 HTTP(M-8)

相关新问题(详见总评审)

致命 [P-2] ESF1 快发在 sendall 成功后出错仍整包重发

模块
主机服务/安全
位置
ecat_client.py:247-279
现象
_tcp_once 持锁 sendall(body) 后读 8 字节 FSOK;recv 超时/断连抛异常时 attempt 0 会 continue,attempt 1 再发同一 body。与同文件非幂等不重发原则(_ECAT_IDEMPOTENT_TAILS)矛盾。
风险
同一帧运动指令被 native 入队两次,电机执行两次增量/相对命令。
修改建议
仅当 connect 阶段失败时重试;sendall 之后的任何异常直接返回 ok:false(可附 maybe_sent 标记)。

严重 [M-8] ECAT 桥失败回落 HTTP,非幂等命令可能执行两次

模块
电机控制/故障保护
位置
js/motor/transport-ecat.js:259-271; js/common/desktop-bridge.js:59-74
现象
低频路径(motor/send、motor/start 等)在桌面桥失败或超时后无条件回落 HTTP 再发一次;desktopEcatPost/desktopEcatSendRaw 在 JS 侧无超时。
风险
桥已把命令送达 native 但响应超时时,HTTP 再送一次,造成重复运动指令/重复 start;与 pdo-fast-send『堵死慢发』原则冲突。
修改建议
按 ecat_client.py 的幂等白名单处理:非幂等尾部仅在确认未送达(连接失败)时回落;JS 桥调用加 Promise.race 超时。

结论

共 4 条:已修复 2、部分修复 1、仍存在/存疑 1、已过时 0、无法在本仓库核实 0。