cbb f09decc127 feat(server): CANFD 批量收发区 + 电机控制台后端 API
PDO 布局扩展(与 GD32 1.5.56 对齐):
  段2 [48..383]  CANFD 批量发送区 —— 多帧共用一个 seq 沿, 从站在同一次
                 processOutput 里先发单帧再发批量, 9 帧 DLC32 由原来 9 个
                 周期压缩到 1 个周期。
  段4 [360..639] CANFD 批量接收区 —— 一周期回收多帧, 支持 DLC64 满长 CANFD,
                 带 lost/pending 计数。
  单帧区 [0..47] 布局不动, 批量区 count=0 时逐字节兼容 1.5.55, 老主站与
  CAN 调试页行为不变。

新增 API: /api/can/{send,state} 与 /api/motor/{start,stop,state,send,rx};
电机 PDO 后台循环靠滚动窗口扫 27 个槽, 命令走队列按 seq 沿下发。
ecat.html 加「电机控制台」入口与「CAN 转发」标签页。

test_motor_backend.py 8 项全通过(不接硬件, 假从站模拟 GD32 buildInput/
processOutput): DLC32 不截断、滚动窗口扫全槽、STATUS 32B 完整回传、
队列不互相覆盖、循环可干净停止、批量同步下发、DLC64 回收、1.5.55 兼容。
2026-09-03 21:42:07 +08:00

dcu-ecat-master

DCU LAN9252 EtherCAT 主站工具集(工作目录 DCU/tools/ecat)

在 Windows 上用 Python + pysoem(SOEM)直接从网卡驱动 DCU 的 LAN9252 EtherCAT 从站: 扫描总线、读写 SII EEPROM、CoE SDO 读写、PDO 循环收发,以及一个本地网页/桌面控制台。

环境准备

  • Python 3.12(venv 不入库)
  • Npcap:pysoem 收发裸 EtherCAT 帧的前提
  • 一块直连从站的物理网卡(示例中为 Intel I226)
py -3.12 -m venv venv
venv\Scripts\python.exe -m pip install -r requirements.txt

目录内容

文件 说明
ecat_tool.py 一体化命令行主站:adapters / status / flash / eeprom / sdo / send 等子命令
ecat_server.py 网页控制台后端(REST API + 静态文件),默认端口 8090(8080 已被 ESP32 tools 占用)
ecat.html / ecat.css 网页控制台前端
ecat_scan.py 最小化 bring-up 扫描:从站身份 + SII dump,--op 追加 PDO 测试
ecat_esc_regs.py 从网络侧直读 LAN9252 ESC 寄存器,绕开 GD32/PDI,用于判断 EEPROM 加载是否真的失败;支持 --reload
ecat_flash_eeprom.py 通过网线烧写 gen_eeprom.py 生成的 SII 镜像,逐字回读校验(烧完需断电重启让 ESC 重新加载)
ecat_sniff.py 旁路抓包,hexdump SOEM 自己发出的帧,用于对照裸帧格式
_probe_wedge.py 邮箱楔死现场逐环节定位:A 写 SM0 的 WKC → B 0x220 bit0 是否置位 → C SSC 是否清事件并置 SM1 就绪 → D SM1 是否滞留旧响应,用于区分 ESC 硬件楔死与 SSC 软件死循环
_probe_wedge2.py 按真实邮箱协议探测:查写邮箱空 → 写满 256B → 验事件/响应
_probe_stuck.py 验证「SM1 响应滞留 → 邮箱死锁」假说:复现失败 → 手动读走 SM1 清 bit3 → 再读是否恢复
_probe_scan.py 扫描定位响应帧头在 SM1 RAM 中的确切偏移,同步 dump SM0 请求侧

启动方式

入口 效果
ecat_app.vbs pywebview 桌面窗口,无控制台无浏览器标签(已针对部分 GPU 驱动白屏加 --disable-gpu-compositing)
ecat_web.vbs 后台起服务并打开浏览器标签,无控制台窗口
ecat_web.bat 控制台模式,可见日志,调试用
ecat.bat 命令行工具入口,如 ecat.bat status、ecat.bat flash
run_scan.bat 直接跑 bring-up 扫描,无参数则列出 Npcap 适配器

注意

  • ESC 的 SyncManager 寄存器是 0x0800 + 8n:邮箱是 SM0=0x0800、SM1=0x0808, 0x0810/0x0818 是 SM2/SM3(过程数据)。写诊断代码时别混用,否则抓到的现场会误导判断。
  • 前端 CSS/JS 改动后记得 bump ?v= 缓存版本,否则浏览器会加载旧代码。
  • EEPROM 烧写后必须断电冷启动,ESC 才会重新加载配置。
S
Description
No description provided
Readme
651 KiB
Languages
C 83.2%
Python 5.1%
HTML 4.2%
JavaScript 3.9%
CSS 3.4%
Other 0.2%