其他
调试嵌入式 CAN / CAN-FD 总线时…
适用于通过 python-can 封装脚本对 CAN / CAN-FD 总线做接口发现、报文监控、测试帧发送、日志记录、数据库解码和统计分析的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
调试嵌入式 CAN / CAN-FD 总特定
解决思路
- 使用 `skill/config.json` 做环境级配置:设置 `slcan_serial_port`(默认 `""`)和 `slcan_serial_baudrate`(默认 `115200`),仅保留 slcan 相关环境级配置。
- 在工程工作区的 `.embeddedskills/config.json` 写工程级 CAN 配置:设置 `can.interface`(CAN 后端,如 `pcan` / `vector` / `slcan`,默认 `""`)。
- 在 `.embeddedskills/config.json` 设置 `can.channel`(通道名,如 `PCAN_USBBUS1`,默认 `""`)。
- 在 `.embeddedskills/config.json` 设置 `can.bitrate`(仲裁域比特率,默认 `500000`)。
- 在 `.embeddedskills/config.json` 设置 `can.data_bitrate`(CAN-FD 数据域比特率,默认 `2000000`)。
- 在 `.embeddedskills/config.json` 设置 `can.log_dir`(日志输出目录,默认 `.embeddedskills/logs/can`)。
- 解析参数时按优先级:CLI 参数(`--interface`、`--channel`、`--bitrate` 等)最高。
- 次优先级为工程级配置(`.embeddedskills/config.json` 中的 `can` 部分)。
- 次优先级为状态文件(`.embeddedskills/state.json` 中的历史记录)。
- 最低优先级为默认值。
- 当未指定 `interface` 和 `channel` 时,先扫描系统中所有可用 CAN 接口。
- 若只找到一个 CAN 接口,自动使用并写入工程配置。
- 若找到多个 CAN 接口,返回候选列表,等待用户选择。
- 若未找到 CAN 接口,提示错误,停止执行。
- 子命令 `scan`:扫描可用 CAN 接口与 USB-CAN 设备(低风险)。
- 子命令 `monitor`:实时监控总线报文(低风险)。
- 子命令 `send`:发送标准帧、扩展帧、远程帧、CAN-FD 帧(高风险)。
- 子命令 `log`:记录总线报文到 ASC、BLF、CSV 文件(低风险)。
- 子命令 `decode`:用 DBC 等数据库文件解码报文或日志(低风险)。
- 子命令 `stats`:统计总线负载、ID 分布和帧率(低风险)。
- 执行前检查 `python-can` 是否可用,未安装时提示 `pip install python-can`。
- 按优先级解析参数:CLI > 工程级配置 > 状态文件 > 默认值。
- 无子命令时默认执行 `scan`。
- `monitor` / `send` / `log` / `stats` 使用解析后的连接参数。
- `decode` 先确认数据库文件和输入源存在。
- 若未指定 `interface` / `channel`,自动扫描系统 CAN 接口;唯一候选自动使用并写入工程配置;多候选返回列表让用户选择。
- 成功执行后,将确认的参数写回工程配置。
- `send` 只要配置可连接就直接执行,不二次确认。
- 运行对应脚本并输出结构化结果。
- 失败时优先反馈接口、驱动、比特率和过滤条件问题。
- 脚本都位于 skill 目录的 `scripts/` 下,通过 `python` 直接调用;脚本会按优先级从 CLI 参数、工程级配置、状态文件中读取参数。
- 扫描接口:`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]`。
- 单次命令返回标准 JSON,包含 `status`、`action`、`summary`、`details`。
- 持续命令(`monitor --json`、`send --listen --json`)输出 JSON Lines,结束摘要写入 `stderr`。
- 错误输出返回标准 JSON,包含 `status`、`action`、`error.code`、`error.message`。
- 不自动猜测 `interface`、`channel`、`bitrate`,多接口时不自动选择。
- 参数解析优先级为 CLI > 工程级配置 > 状态文件 > 默认值;自动扫描结果仅在未提供 CLI 参数时生效。
- 未指定 `interface` / `channel` 时自动扫描,唯一候选自动写入配置,多候选需用户选择。
- 成功执行后,确认的参数自动写回 `.embeddedskills/config.json`。
- 未明确说明用途时不主动发送任何报文。
- `--json` 输出的持续流使用 JSON Lines,摘要写 `stderr` 不污染数据流。
- DBC 解码失败不应导致监控中断。
- 找不到帧定义时返回明确错误,不静默吞掉。
- 参考 `references/common_interfaces.json` 获取常见 USB-CAN 设备信息。
适用边界 · 注意事项
- 系统没有可用 CAN 接口、USB-CAN 设备或对应驱动时,无法用于真实总线调试。
- 未安装 `python-can` 或不允许安装 Python 依赖时,脚本无法运行。
- 只需要非 CAN 协议(如 UART、I2C、SPI)调试时,不应使用本技能。