{"skill":{"slug":"uds-diagnostic-test","displayName":"Uds Diagnostic Test","summary":"UDS 诊断测试技能。Use when: 收到诊断调查表、UDS diagnostic survey table、生成 UDS 测试脚本、基于诊断资料生成测试、执行 UDS 诊断测试、CAN 测试、DID 测试、DTC 测试、IOControl 测试、RoutineControl 测试、诊断服务测试、diagno...","description":"---\nname: uds-diagnostic-test\nversion: \"2.9.0\"\ndescription: \"UDS 诊断测试技能。Use when: 收到诊断调查表、UDS diagnostic survey table、生成 UDS 测试脚本、基于诊断资料生成测试、执行 UDS 诊断测试、CAN 测试、DID 测试、DTC 测试、IOControl 测试、RoutineControl 测试、诊断服务测试、diagnostic test script generation and execution via SocketCAN\"\nargument-hint: \"提供诊断调查表文件路径，或描述需要测试的诊断服务\"\n---\n\n# UDS 诊断测试技能\n\n## 目标\n\n这个 skill 只解决三件事：\n\n1. 用固定 Python 环境解析调查表\n2. 生成并验证 UDS 测试脚本\n3. 在 SocketCAN 环境下执行测试\n\n详细驱动安装、WSL2 USB 透传、SecurityAccess 替代方案、NRC 说明、调查表默认值参考，统一放在 `README.md`，不要在当前技能主流程里重复展开。\n\n## 唯一规则\n\n- 唯一环境入口：先进入 skill 根目录，再执行 `bash ./scripts/setup_env.sh`\n- 唯一环境来源：`~/.uds_env`\n- 唯一 CAN 后端：SocketCAN（`can0` / `can1`），不要使用 `PCAN_*`\n- 唯一正确包名：`python-can`，不要执行 `pip install can`\n- 环境修复默认只允许重跑 `setup_env.sh`；除非用户明确要求，否则不要手工执行 `pip uninstall/install`\n- 默认工作目录：`$HOME/.uds_workspace`\n\n## 高频错误快查\n\n| 现象 | 处理 |\n|------|------|\n| `Invalid CAN Bus Type - None` | 先修 Python 环境，不要先查硬件；先进入 skill 根目录，再执行 `bash ./scripts/setup_env.sh` |\n| `No module named 'can'` / `can.interfaces.socketcan` | 先进入 skill 根目录，再执行 `bash ./scripts/setup_env.sh` |\n| pip 只能装出 `can-0.0.0` 或 `python-can 1.5.x` | 不要循环重装；这是包源/镜像问题。停止重试，把当前 pip 源异常报告给用户 |\n| 装成 `can-0.0.0` | 先重跑 `bash ./scripts/setup_env.sh`；如果脚本仍然报告 `can-0.0.0` 或 `python-can 1.5.x`，停止重试并报告包源异常 |\n| `No such interface: can0` / `Network is down` | 执行 `\"$PYTHON\" \"$UDS_SKILL_DIR/scripts/can_init.py\"` |\n| `SyntaxError: closing parenthesis` 执行 `.sh` 脚本 | `.sh` 文件不能用 `python3` 执行。改用 `\"$PYTHON\" \"$UDS_SKILL_DIR/scripts/can_init.py\"` |\n| `Permission denied` | 用 `sudo` 执行 `can_init.py` |\n| `zipfile.BadZipFile` | 调查表文件损坏或加密，要求用户提供无密码文件 |\n| 生成器拒绝生成（关键CAN参数使用默认值） | 调查表缺少 TX/RX CAN ID 或波特率。向用户展示缺失参数表格，获取确认后使用 `--confirmed` 重新生成 |\n| `./scripts/setup_env.sh` 不存在 / `SKILL.md` 缺失 | 技能目录不完整。不要手工补目录或补文件，重新获取完整的 `uds-diagnostic-test` 目录 |\n\n## 会话初始化\n\n每次开始任务前，只做这一段：\n\n```bash\nsource ~/.uds_env 2>/dev/null || { echo \"[ERROR] ~/.uds_env 不存在，请先进入 skill 根目录，再执行 bash ./scripts/setup_env.sh\"; exit 1; }\nPYTHON=\"$UDS_PYTHON\"\nSKILL_DIR=\"$UDS_SKILL_DIR\"\nUDS_WORK=\"${UDS_WORK:-$HOME/.uds_workspace}\"\ntest -x \"$PYTHON\" || { echo \"[ERROR] UDS_PYTHON 无效: $UDS_PYTHON\"; exit 1; }\n[ -f \"$SKILL_DIR/SKILL.md\" ] || { echo \"[ERROR] UDS_SKILL_DIR 无效: $SKILL_DIR\"; exit 1; }\nmkdir -p \"$UDS_WORK\"\n```\n\n## 标准流程\n\n### 1. 环境准备\n\n前提：当前目录必须是包含 `SKILL.md` 和 `scripts/` 的 `uds-diagnostic-test` 目录。\n\n执行命令：\n\n```bash\nbash ./scripts/setup_env.sh\n```\n\n### 2. 解析调查表\n\n```bash\nsource ~/.uds_env\nPYTHON=\"$UDS_PYTHON\"\nSKILL_DIR=\"$UDS_SKILL_DIR\"\nUDS_WORK=\"${UDS_WORK:-$HOME/.uds_workspace}\"\nmkdir -p \"$UDS_WORK\"\n\n\"$PYTHON\" \"$SKILL_DIR/scripts/uds_survey_parser.py\" \\\n  --input \"<调查表文件路径>\" \\\n  --output \"$UDS_WORK/uds_parsed.json\"\n```\n\n然后读取 `$UDS_WORK/uds_parsed.json`，检查以下三项并展示给用户：\n\n- `can_config`: 调查表中的 CAN 配置（TX/RX ID、波特率、CAN FD 等）\n- `defaults_used`: 使用了默认值的 DID/IO/Routine 字段\n- `missing_attributes`: 调查表中完全缺失的属性\n\n### 2.5 强制确认（阻断点）\n\n**在生成脚本之前，必须执行以下检查，缺一不可：**\n\n1. 如果 `can_config` 缺少 `tx_id`、`rx_id` 或 `bitrate`，**必须**询问用户提供真实值\n2. 如果 `defaults_used` 非空，**必须**以表格展示给用户确认\n3. 如果 `missing_attributes` 非空，**必须**告知用户哪些属性缺失\n\n**确认表格必须包含：**\n\n| 参数 | 调查表值 | 将使用的值 | 来源 |\n|------|---------|-----------|------|\n| TX CAN ID | 0x671 / 缺失 | 0x7E0 | 调查表 / 硬编码默认 |\n| RX CAN ID | 0x679 / 缺失 | 0x7E8 | 调查表 / 硬编码默认 |\n| CAN FD | Y/N / 未指定 | Classic CAN | 调查表 / 默认 |\n| 仲裁域波特率 | 500000 / 未指定 | 500000 | 调查表 / 硬编码默认 |\n| 采样点 | 0.8 / 未指定 | 0.8 | 调查表 / 硬编码默认 |\n| 是否需要 $27 | Y/N | Y/N | 调查表 |\n| 安全日志输出 | 路径 / 无 | 路径 / 无 | 调查表 |\n\n**用户明确确认后**，生成命令必须带上 `--confirmed` 标志。未确认**禁止**跳过此步骤直接生成。\n\n### 3. 生成脚本\n\n```bash\nsource ~/.uds_env\nPYTHON=\"$UDS_PYTHON\"\nSKILL_DIR=\"$UDS_SKILL_DIR\"\nUDS_WORK=\"${UDS_WORK:-$HOME/.uds_workspace}\"\n\n\"$PYTHON\" \"$SKILL_DIR/scripts/uds_test_generator.py\" \\\n  --input \"$UDS_WORK/uds_parsed.json\" \\\n  --output \"$UDS_WORK/uds_test.py\" \\\n  --confirmed\n\n\"$PYTHON\" -m py_compile \"$UDS_WORK/uds_test.py\"\n```\n\n### 4. 初始化 CAN\n\n默认 CAN FD 模式（向下兼容 Classic CAN，无需区分）：\n\n```bash\nsource ~/.uds_env\n\"$PYTHON\" \"$UDS_SKILL_DIR/scripts/can_init.py\"\n```\n\n如 ECU 明确只支持 Classic CAN，加 `--classic` 参数。\n\n### 5. 验证连接\n\n```bash\nsource ~/.uds_env\nPYTHON=\"$UDS_PYTHON\"\nUDS_WORK=\"${UDS_WORK:-$HOME/.uds_workspace}\"\n\n\"$PYTHON\" -c \"import can, importlib.metadata as md; print('python-can', md.version('python-can'), '@', can.__file__)\"\n\"$PYTHON\" \"$UDS_WORK/uds_test.py\" --test-connection\n```\n\n### 6. 执行测试\n\n```bash\nsource ~/.uds_env\nPYTHON=\"$UDS_PYTHON\"\nUDS_WORK=\"${UDS_WORK:-$HOME/.uds_workspace}\"\n\n\"$PYTHON\" \"$UDS_WORK/uds_test.py\" \\\n  --report \"$UDS_WORK/uds_report.md\" \\\n  --can-log \"$UDS_WORK/can_trace_$(date +%Y%m%d_%H%M%S).asc\"\n```\n\n## 何时使用 pipeline\n\n只有在用户明确要求“直接生成并执行，不需要中间确认”时，才使用：\n\n```bash\nsource ~/.uds_env\nPYTHON=\"$UDS_PYTHON\"\nSKILL_DIR=\"$UDS_SKILL_DIR\"\nUDS_WORK=\"${UDS_WORK:-$HOME/.uds_workspace}\"\n\n\"$PYTHON\" \"$SKILL_DIR/scripts/uds_pcan_runner.py\" pipeline \\\n  --input \"<调查表文件路径>\" \\\n  --output-dir \"$UDS_WORK/pipeline_output\"\n```\n\n默认不要直接走 pipeline。默认流程始终是：解析 → 用户确认（阻断点） → 生成（带 --confirmed） → 验证 → 执行。**跳过确认直接生成是不可接受的。**\n\n## 详细资料\n\n以下内容不要继续堆在当前技能主流程里，统一去 `README.md`：\n\n- WSL2 USB 透传\n- 原生 Linux 驱动安装\n- SecurityAccess Linux 替代方案\n- NRC 0x78 / P2 / P2* 说明\n- 调查表属性默认值表\n- 深度 CAN 故障排查\n- Agent 在确认阶段如发现 DLL 路径以 `.dll` 结尾且运行在 Linux，**必须主动告知用户此限制**\n","tags":{"latest":"2.9.1","CAN":"2.8.0","Ecu":"2.8.0","Fd":"2.8.0","ODX":"2.8.0","diagnostic":"2.8.0"},"stats":{"comments":0,"downloads":414,"installsAllTime":1,"installsCurrent":1,"stars":1,"versions":3},"createdAt":1778075377198,"updatedAt":1778492859420},"latestVersion":{"version":"2.9.1","createdAt":1778297875837,"changelog":"- Removed the sample test report file uds_test_report.md from the repository.\n- No changes to code or documentation logic; core functionality and usage remain the same.","license":"MIT-0"},"metadata":null,"owner":{"handle":"tongli0406","userId":"s1700tsbj6etdppwdvbxdb99zn867ntc","displayName":"li-tong_aptiv","image":"https://avatars.githubusercontent.com/u/96003425?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780090770444}}