# 02-项目程序开发详细步骤 版本:0.1 日期:2026-06-28 ## 1. 开发原则 1. 以 `通用机器人编程语法规范.md` 为覆盖源,不以现有测试数量作为完成标准。 2. ABB120 URDF 使用仓库内稳定 fixture,不引入未验证机器人模型。 3. happy path 必须可执行;error path 必须可诊断;post path 必须可报告。 4. 虚拟控制器只执行 Semantic IR,不直接解释品牌文本。 5. 所有新增程序都要保留 source map,报告必须能定位到 GRL 文件行列。 ## 2. 阶段 0:规范覆盖矩阵 ### W2-SPEC-001:解析语法规范章节 步骤: 1. 从 `work/doc/通用机器人编程语法规范.md` 抽取章节、关键语法、示例和语义规则。 2. 建立 coverage item,字段包含 `spec_section`、`syntax`、`runtime_level`、`program_id`、`test_id`、`evidence`。 3. 把覆盖矩阵写入 `working2/programs/manifest.md`。 验收:章节 4 到 23 均有覆盖项;章节 25 的 P0 项全部映射到 runtime 或 static 测试。 ### W2-SPEC-002:定义执行边界 步骤: 1. 标记虚拟控制器必须执行的 Runtime 语义。 2. 标记只做 semantic diagnostic 的 Static 语义。 3. 标记只做后处理/导入报告的 Post 语义。 4. 对 trap、interrupt、task、brand metadata 等非 P0 执行项写清楚边界。 验收:覆盖矩阵中每项都有 `Runtime/Static/Post` 分类,不允许空白。 ## 3. 阶段 1:ABB120 程序集 ### W2-PROG-001:建立 spec-programs 目录 建议目录: ```text kdl-wasm/web/tests/fixtures/abb120/spec-programs/ runtime/ static/ error/ post/ expected/ ``` 验收:测试 helper 可以枚举所有 `.grl` 并读取 manifest。 ### W2-PROG-010:Runtime 程序 步骤: 1. 创建 `W2_00` 到 `W2_90` 十个 runtime 程序,并以 `W2_99_FullSpecExample` 覆盖第 24 章完整示例。 2. 所有运动目标使用 ABB120 标准关节位或 FK 固化 pose。 3. 每个程序顶部注释写明覆盖的 spec section。 4. 每个程序必须可 parse、compile、load 到虚拟控制器。 验收:runtime 程序全部生成 AST/IR/source map snapshot。 ### W2-PROG-020:Static/error 程序 步骤: 1. 创建表达式、语义、运动、控制流、runtime timeout 五类 error 程序。 2. 每个 error 程序只聚焦一类错误,避免多个错误互相遮蔽。 3. expected diagnostic 固化 `code/severity/message/sourceRange`。 验收:diagnostic snapshot 稳定,新增或消失的错误会导致测试失败。 ### W2-PROG-030:Post/import 程序 步骤: 1. 创建品牌 hint 和跨品牌 motion 程序。 2. 覆盖 ABB/FANUC/KUKA speed、zone、IO、wait、operation 输出。 3. 固化 roundtrip 输入和差异报告。 验收:三品牌输出非空,近似和不支持项进入 report。 ## 4. 阶段 2:编译和 KDL 验证 ### W2-RUN-001:统一 suite runner 步骤: 1. 扩展或新增 `runAbb120SpecSuite`。 2. 输入:program root、suite id、ABB120 fixture、output root。 3. 输出:`job_id`、程序 manifest、每个程序的 compile/run/post 结果。 4. job id 格式:`W2-JOB-YYYYMMDD-HHMMSS-`。 验收:单条命令可生成完整 suite 证据目录。 ### W2-RUN-010:编译链路 步骤: 1. `parseGrl` 生成 AST。 2. `compileSemanticProgram` 生成 IR。 3. 对 data/target/path/operation 建 source map 索引。 4. 保存 AST/IR 摘要,不保存过大的重复文本。 验收:每个 runtime/post 程序 compile 无 error;每个 error 程序 compile 输出预期 diagnostic。 ### W2-RUN-020:ABB120 KDL 检查 步骤: 1. 加载 ABB120 URDF。 2. 对所有 joint target 做 limit check。 3. 对所有 pose target 做 IK 或记录当前实现边界 diagnostic。 4. 对每条 motion/path 生成 planner request。 验收:happy path 没有关节限位错误;不可达或不支持 IK 只能出现在 error suite。 ## 5. 阶段 3:虚拟控制器执行 ### W2-RUN-030:状态机命令覆盖 步骤: 1. 对每个 runtime 程序执行 `load/start/step/hold/resume/stepMotion/stop/resetFault`。 2. 记录每次命令前后状态。 3. 非法命令转移必须产生明确 diagnostic。 验收:状态机转换符合控制器规则,trace 可回放。 ### W2-RUN-040:Motion Queue 和轨迹 步骤: 1. 将 `movej/movel/movec/run_path/run_operation` 展开到 motion queue。 2. 记录 queue item、activeIndex、duration、planner result。 3. 对轨迹采样点做 limit 和 singularity 检查。 验收:motion queue 与程序 source map 对齐;轨迹结果可进入报告。 ### W2-RUN-050:IO、wait、pulse 和报警 步骤: 1. 为 `W2_60_IOWaitPulse` 注入 DI 脚本。 2. 覆盖 wait satisfied、waiting、timeout、on_timeout alarm/call。 3. 覆盖 pulse 自动复位。 4. 覆盖 all/any/rising/falling/changed。 验收:trace 中可看到 IO 写入、DI 变化、wait 状态、pulse reset 和 alarm。 ### W2-RUN-060:流程控制和调用栈 步骤: 1. 执行 if/elseif/else、while、for、switch。 2. 记录局部变量、循环变量、call stack、return。 3. out/inout 参数回写进入变量快照。 验收:最终变量状态符合预期,source map 可定位当前执行语句。 ## 6. 阶段 4:后处理和导入回读 ### W2-POST-010:三品牌 post 步骤: 1. 对 runtime/post 程序调用 `postProcessAllBrands`。 2. 保存 ABB `.mod`、FANUC `.ls`、KUKA `.src/.dat`。 3. 保存 post report,记录近似和 unsupported。 验收:所有品牌输出包含对应 motion、IO、wait 和 proc 结构。 ### W2-POST-020:roundtrip 步骤: 1. 将三品牌输出重新导入。 2. 对比 motion 顺序、target 数量、path/operation 结构。 3. 对差异生成 `roundtrip.json`。 验收:happy path 结构等价;不可逆项全部进入 diff。 ## 7. 阶段 5:HTML 虚拟控制器验收 ### W2-UI-010:加载最新 job 步骤: 1. HTML 页面支持选择或加载 `W2-JOB-*` 证据。 2. 显示程序列表、当前程序、controller snapshot、queue、trace、diagnostics。 3. 点击 trace/source map 能定位 GRL 行。 验收:页面能展示 working2 suite 证据,不只展示静态 mock 数据。 ### W2-UI-020:截图验证 步骤: 1. 使用现有 `verify-virtual-controller.mjs` 或新增参数打开 working2 job。 2. 截桌面和移动视口。 3. 检查 command bar、object tree、viewport、pendant、editor、bottom panel 可见。 4. 检查无横向溢出和文字重叠。 验收:生成 desktop/mobile 截图和 `evidence.json`。 ## 8. 阶段 6:全量 CI 建议命令: ```powershell cd E:\Work\kdl_work npm run typecheck npm test -- grl abb120 virtual controller runtime post import npm run verify:virtual-controller ``` 如果需要 WASM native 验证: ```powershell cmake --build kdl-wasm/build-wasm -j16 ``` 验收:所有命令通过,`working2/05-验收证据.md` 记录实际命令、时间、job_id、report_id 和产物路径。 ## 9. 阶段 7:服务器演示包和 HTTPS 发布 ### W2-DEPLOY-001:生成演示包 manifest 步骤: 1. 读取 `kdl-wasm/web/tests/fixtures/abb120/spec-programs/manifest.json`。 2. 读取最新 `kdl-wasm/web/test-results/abb120-spec/W2-JOB-*`。 3. 读取 `kdl-wasm/web/test-results/virtual-controller/evidence.json`。 4. 生成 `demo-manifest.json`,字段至少包含: - `release_id` - `generated_at` - `suite_id` - `job_id` - `program_count` - `programs` - `report_json` - `virtual_controller_entry` - `screenshots` - `docs` 5. manifest 中路径必须是相对发布根目录的 URL 路径,不能写本机绝对路径。 验收:`demo-manifest.json` 可被浏览器直接打开,能定位 19 个程序、最新报告和截图。 ### W2-DEPLOY-010:收集演示包文件 建议目录: ```text kdl-wasm/web/test-results/deploy/kdl-olp-demo-/ app/ spec-programs/ test-results/ docs/ index.html demo-manifest.json README.md ``` 步骤: 1. 复制 `kdl-wasm/web/app/virtual-controller.html/css/js` 到 `app/`。 2. 复制 `spec-programs/manifest.json` 和所有 `.grl` 程序。 3. 复制最新 W2 job 目录。 4. 复制虚拟控制器截图和 `evidence.json`。 5. 复制 Word 手册和测试文档: - `work/doc/GRL功能语法逻辑与程序创建使用手册.docx` - `work/doc/通用机器人离线编程系统测试文档.docx` 6. 生成 `index.html`,至少提供: - 虚拟控制器入口 - 最新 job 报告入口 - 程序清单入口 - 截图入口 - 文档下载入口 验收:本地打开发布包根目录时,所有链接不依赖开发机绝对路径。 ### W2-DEPLOY-020:打包发布归档 步骤: 1. 将演示包目录压缩为 `kdl-olp-demo-.zip`。 2. 计算 zip 文件大小和 hash。 3. 将 zip、release_id、job_id 写入 `working2/05-验收证据.md`。 验收:zip 可解压,解压后包含 `index.html`、`demo-manifest.json`、19 个 `.grl` 和最新 job。 ### W2-DEPLOY-030:上传到服务器 目标: ```text https://82.156.24.101:8095/ /opt/kdl-olp-demo/8095/releases/ /opt/kdl-olp-demo/8095/current -> releases/ ``` 步骤: 1. 使用 `scp` 或等效方式上传 zip 到服务器临时目录。 2. 在服务器创建 release 目录并解压。 3. 更新 `current` 软链接指向新 release。 4. 确认 Web 服务根目录指向 `current`。 5. 不在仓库文档中记录服务器密码;凭据只保留在部署人员本地。 验收:服务器上存在 release 目录,`current` 指向最新 release。 ### W2-DEPLOY-040:HTTPS 服务验证 步骤: 1. 打开 `https://82.156.24.101:8095/`。 2. 验证 `index.html` 能加载。 3. 验证以下 URL 可访问: - `/demo-manifest.json` - `/app/virtual-controller.html` - `/test-results/abb120-spec//report.json` - `/test-results/abb120-spec//report.html` - `/test-results/virtual-controller/virtual-controller-desktop.png` - `/spec-programs/manifest.json` 4. 在浏览器中进入虚拟控制器页面,检查页面显示 suite/job/program/trace/queue/IO/diagnostics。 5. 如证书为自签名,记录浏览器安全提示为环境说明,不作为功能失败;如页面资源 404 或 JS 错误,则发布失败。 验收:远程页面可演示 19 个程序和最新 job 证据。 ### W2-DEPLOY-050:远程 smoke test 建议命令: ```powershell $base = "https://82.156.24.101:8095" curl.exe -k "$base/" curl.exe -k "$base/demo-manifest.json" curl.exe -k "$base/spec-programs/manifest.json" curl.exe -k "$base/app/virtual-controller.html" curl.exe -k "$base/test-results/abb120-spec//report.json" ``` 检查: 1. HTTP 状态为 200。 2. `demo-manifest.json` 中 `program_count` 为 19。 3. `report.json` 中 `fail` 为 0。 4. 页面资源无 404。 验收:命令输出摘要写入 `working2/05-验收证据.md`。 ### W2-DEPLOY-060:回滚 步骤: 1. 服务器保留至少最近 2 个 release。 2. 新版本验证失败时,将 `current` 重新指向上一个 release。 3. 再次访问 `https://82.156.24.101:8095/` 验证旧版本恢复。 4. 在 `working2/03-推进台账.md` 记录回滚原因和 release_id。 验收:回滚后远程页面恢复到上一个可用版本。 ## 10. 后续完善程序时的固定流程 每次新增或修改虚拟测试程序,都按以下顺序推进: 1. 修改 `.grl` 程序和 `spec-programs/manifest.json`。 2. 更新 `working2/programs/manifest.md` 的覆盖矩阵。 3. 执行 `npm run typecheck`。 4. 执行 `npm test`。 5. 执行 `npm run suite:abb120-spec`,生成新 `W2-JOB-*`。 6. 执行 `npm run verify:virtual-controller`,刷新截图。 7. 重新生成 Word 测试文档和 GRL 使用手册,如内容发生变化。 8. 重新生成服务器演示包并发布到 HTTPS。 9. 更新 `working2/03-推进台账.md`、`04-任务矩阵.md`、`05-验收证据.md`。 10. 提交代码并上传云仓库。