本文件面向 Claude Code / Codex / Cursor / 豆包等 AI 编程工具。 接到任何任务前,先读 docs/KNOWLEDGE_BASE.md。 方法论框架:
ai-collab-dev-playbook-v2.md(五支柱 + 五步启动法,新项目可复用)。 接续入口:换人/换机/新会话先读docs/HANDOFF.md。
PCB轴向磁通电机自动化仿真系统 — 双系统解耦架构:
src/afmcore/:指标 / 拓扑 / 适配器 / 策略 / L0 预筛选的单一事实源当前状态:P1~P5 全部完成,P6 前端体验优化进行中(P6-M1 已完成,P6-M2/M3 待办)。
进度、阻塞点、待办的唯一权威来源:docs/HANDOFF.md 第 3 节。
最小必读集(新会话至少读这些):
docs/HANDOFF.md — 当前进度、阻塞点、待办、接续提示词(含环境恢复步骤)docs/KNOWLEDGE_BASE.md — 核心知识库(环境事实、参数语义、探测技术、SOP、已踩的坑),重点 §1 环境事实与 §3 参数语义按需查阅:
README.md — 项目说明、目录结构、快速开始(历史更新见 CHANGELOG.md)PCB轴向磁通电机自动化仿真系统设计方案介绍.md — 完整设计方案V2.0(架构、接口、算法选型)docs/P1-P5交付总结与上手指南.md — 新人上手与模块定位axial_mag_pull-master/axial_mag_pull/docs/KNOWLEDGE_BASE.mdtorqrippswap-master/torqrippswap/MOTORCAD_SCAN_KNOWLEDGE_BASE.mddocs/archive/python scripts/check_machine_paths.py # 只读核对环境,缺项会给修复建议
python scripts/check_machine_paths.py --fix # 打印精确修复命令(不自动执行)
| 功能 | 参考文件 | 说明 |
|---|---|---|
| Motor-CAD连接与前台可见 | torqrippswap-master/torqrippswap/solver.py → MotorCADSolver.connect() |
open_new_instance=True + set_visible(True) |
| 参数写入+回读校验 | torqrippswap-master/torqrippswap/solver.py → _write_and_verify() |
写入后get_variable回读,不一致抛异常 |
| 每点基线重载 | torqrippswap-master/torqrippswap/solver.py → run_single_point() |
每点 load_from_file 防止污染 |
| 结果导出与解析 | torqrippswap-master/torqrippswap/solver.py → parse_export() / extract_all_metrics() |
分号分隔CSV,中英文字段别名匹配 |
| 扫描执行+逐点落盘 | torqrippswap-master/torqrippswap/solver.py → run_scan() |
manifest+CSV+log+raw,每点flush |
| Git preflight | torqrippswap-master/torqrippswap/solver.py → git_preflight() |
运行前检查仓库干净 |
| AFM轴向力3D力图读取 | axial_mag_pull-master/axial_mag_pull/axial_force_final.py |
get_magnetic_3d_graph_point,Fr=轴向力 |
| 三判据校验 | axial_mag_pull-master/axial_mag_pull/axial_force_final.py |
作用反作用/转矩交叉/解析量级 |
所有 .py 和 .ps1 文件必须只包含 ASCII 字符。中文说明写在 Markdown 文档中,不能写进脚本注释、字符串、窗口标题。中文字段名用 \uXXXX Unicode 转义。
检查命令:
rg -n "[^\x00-\x7F]" --glob '*.py' --glob '*.ps1' .
实际启动 Motor-CAD 求解前必须满足:
GUI 内置 Git preflight,不满足时拒绝启动扫描。
open_new_instance=True 创建独立实例,不要连接已有实例(可能控制错误窗口)set_visible(True)(/SCRIPTING模式默认隐藏主窗口)load_from_file(基线模型),结束后也重载基线不能只调用 set_variable。必须:
mc.set_variable(variable, value)
applied = float(mc.get_variable(variable))
if not math.isclose(applied, value, rel_tol=1e-8, abs_tol=1e-7):
raise RuntimeError(...)
回读不一致时将该点标记为 FAILED,保存错误并继续下一点。
output/<timestamp>_<scan_name>/ 含 manifest.json + scan_results.csv + program_log.log + raw/.mot 文件不修改output/、runs/、build/、dist/、*.log、*.spec 不入库非登录 shell 可能不继承机器级环境变量:
MOTORCAD_ACTIVEX 为空 → pymotorcad 找不到 Motor-CADANSYSLMD_LICENSE_FILE 为空 → Motor-CAD 启动后 ~30s 静默退出脚本内回退:
import os
if not os.environ.get("MOTORCAD_ACTIVEX"):
from ansys.motorcad.core import set_motorcad_exe
candidate = r"D:\Program Files\ANSYS Inc\v261\motorcad\MotorCAD.exe"
if os.path.exists(candidate):
set_motorcad_exe(candidate)
open_new_instance=False 连接已有实例README.md,记录:
docs/TEST_RECORDS.md(含索引表 + 详细记录)docs/CONVERSATION_LOG.md,格式:## YYYY-MM-DD — 主题 → 用户要求 → 本次完成 → 遗留问题output/ 目录中,不入库但在记录中注明路径type(scope): description
output/、runs/、build/、dist/、*.log、*.spec、__pycache__/ 不入库| 反模式 | 对策 |
|---|---|
| 不读文档直接开工 | 先读 HANDOFF/KNOWLEDGE_BASE,先报告理解再动手 |
| 验收凭"看起来对" | 量化基准 + 独立验证(校验方式≠产出方式) |
| 踩坑不记录 | 坑立刻追加到 KNOWLEDGE_BASE / AGENTS 铁律 |
| 环境假设不检测 | 换机先跑 check_machine_paths.py |
| 上下文只留在对话里 | 写 CONVERSATION_LOG 持久化 |
| 多处定义同一概念 | 走 src/afmcore 单一事实源 |
| 编造未验证的数值/接口 | 禁臆测 + 标注"待验证" |
| 阶段完成不更新文档 | 每 P/M 完成立即更新 README |
docs/HANDOFF.md(进度/阻塞/待办/接续提示词),再跑 python scripts/check_machine_paths.py适用于所有代码、测试与交付,优先级高于"完成速度"。任何输出在交付前必须过一遍本节。
scripts/test_*.py,命名与被测模块对应;python scripts/test_*.py 可独立运行,exit 0 = PASS。