CAN 是一个嵌入式 CAN / CAN-FD 调试工具,以技能(skill)形式提供,统一封装了接口发现、实时监控、报文发送、日志记录、数据库文件解码和统计分析能力,基于 python-can 实现。
【主要能力与子命令】
- scan:扫描可用 CAN 接口与 USB-CAN 设备(低风险)。
- monitor:实时监控总线报文(低风险)。
- send:发送标准帧 / 扩展帧 / 远程帧 / CAN-FD 帧(高风险)。
- log:记录总线报文到 ASC / BLF / CSV 文件(低风险)。
- decode:用 DBC 等数据库文件解码报文或日志(低风险)。
- stats:统计总线负载、ID 分布和帧率(低风险)。
【使用方式】 脚本位于 skill 目录的 scripts/ 下,通过 python 直接调用,典型命令包括:
- python scripts/can_scan.py [--json]
- python scripts/can_monitor.py [--interface <接口>] [--channel <通道>] [--bitrate <速率>] [--fd] [--filter-id <ID列表>] [--exclude-id <ID列表>] [--dbc <DBC文件>] [--timeout <秒>] [--json]
- python scripts/can_send.py [--interface <接口>] [--channel <通道>] [--bitrate <速率>] <id> <data> [--extended] [--remote] [--fd] [--repeat <次>] [--interval <秒>] [--periodic <毫秒>] [--listen] [--json]
- python scripts/can_log.py [--interface <接口>] [--channel <通道>] [--bitrate <速率>] [--output <文件>] [--duration <秒>] [--max-count <数量>] [--filter-id <ID列表>] [--console] [--json]
- python scripts/can_decode.py <db_file> [--db-format <auto|dbc|arxml|kcd|sym|cdd>] [--id <CAN_ID>] [--data <HEX数据>] [--log <日志文件>] [--signal <信号名>] [--list] [--json]
- python scripts/can_stats.py [--interface <接口>] [--channel <通道>] [--bitrate <速率>] [--duration <秒>] [--top <数量>] [--watch <ID列表>] [--json]
【配置与参数优先级】 环境级配置(skill/config.json)仅保留 slcan 相关字段:slcan_serial_port(默认空)与 slcan_serial_baudrate(默认 115200)。 工程级配置(工作区下 .embeddedskills/config.json)中的 can 部分包含 interface(如 pcan / vector / slcan)、channel(如 PCAN_USBBUS1)、bitrate(默认 500000)、data_bitrate(默认 2000000)、log_dir(默认 .embeddedskills/logs/can)。 参数解析优先级为:CLI 参数 > 工程级配置 > 状态文件(.embeddedskills/state.json 历史记录)> 默认值。
【自动扫描行为】 未指定 interface 和 channel 时自动扫描系统 CAN 接口:仅一个接口则自动使用并写入工程配置;多个接口则返回候选列表等待用户选择;未找到接口则提示错误并停止执行。成功执行后,确认的参数会写回工程配置。
【执行流程要点】 先检查 python-can 是否可用(未安装时提示 pip install python-can);无子命令时默认执行 scan;decode 会先确认数据库文件和输入源存在;send 在配置可连接时直接执行,不二次确认;未明确说明用途时不主动发送任何报文;DBC 解码失败不应导致监控中断;找不到帧定义时返回明确错误。
【输出格式】 单次命令返回标准 JSON(含 status、action、summary、details);持续命令(monitor --json、send --listen --json)输出 JSON Lines,结束摘要写入 stderr;错误输出包含 error 的 code 与 message。
【适用场景】 嵌入式 CAN / CAN-FD 调试、USB-CAN 联调、总线抓包与监控、报文发送测试、DBC 解码、总线负载与 ID 分布统计、ASC / BLF / CSV 日志分析等。
【限制与注意事项】 不自动猜测 interface、channel、bitrate,多接口时不自动选择;send 为高风险操作;自动扫描结果仅在未提供 CLI 参数时生效;--json 持续流使用 JSON Lines,摘要写 stderr 不污染数据流。参考资料 references/common_interfaces.json 提供常见 USB-CAN 设备信息。文中未提及具体收费方式、价格与平台支持范围,暂未提供。