# 18-04 五轴范围差异与代表应用复核 ## 定位 本文件落实 `ACC-030` 和 `INT-017`,复核 `04基于Web的LinuxCNC兼容数控仿真平台.txt` 中 `2.8 五轴联动专项` 的范围声明。 复核范围: - `8.1 A/C 轴点动` - `8.2 A 轴限位` - `8.3 C 轴无限回转` - `8.6 五轴联动插补` - `8.7 斜面钻孔` - `8.8 球面加工` - `8.9 叶轮加工` - `8.10 旋转轴进给率` 严格口径: 1. `web-rtcp-5axis-xyzbc-trt-sim-plan` 的默认代表应用是 `xyzbc-trt`,不能自动代表 LinuxCNC 本地树中的全部五轴族。 2. 04 中写到 `A/C`、`XYZAB`、`xyzab.ini`、`sphere.ngc` 或泛五轴 demo 时,必须绑定到具体 LinuxCNC 配置、程序和 profile gate。 3. LinuxCNC 本地树存在多个五轴配置族,任何一个 profile 的通过证据都不能跨 profile 继承。 ## LinuxCNC 五轴资产范围 | 五轴族 | 本地 LinuxCNC 资产 | 坐标/运动学 | 当前 Web 证据含义 | | --- | --- | --- | --- | | XYZBC TRT | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini`、`src/emc/kinematics/xyzbc-trt-kins.c`、`trtfuncs.c`、`demos/xyzbc_switchkins.ngc`、`demos/boat-xyzbc.ngc` | `COORDINATES = XYZBC`,`KINEMATICS = xyzbc-trt-kins` | 默认代表应用;Node smoke、profile、staging、semantic path、task-HAL 和 compare evidence 可作为该 profile 的代表证据 | | XYZAC TRT | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini`、`src/emc/kinematics/xyzac-trt-kins.c`、`demos/xyzac_switchkins*.ngc`、`demos/boat-xyzac.ngc`、`demos/impeller-7bl-xyzac.ngc` | `COORDINATES = XYZAC`,`KINEMATICS = xyzac-trt-kins` | Web 项目已有 profile/source boundary 和 program-case gate;不是默认 `xyzbc-trt` UI 发布结论 | | XYZAB TDR | `configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini`、`demos/xyzab-tdr-demo.ngc` | `COORDINATES = XYZAB`,`KINEMATICS = xyzab_tdr_kins` | Web 项目有 gmoccapy/trivkins XYZAB boundary gate;不能等同于 XYZAB TDR RTCP 完整执行 | | XYZACB/XYZBCA TRSRN | `configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/*` | 多旋转头/台组合,含 TWP/remap/Python 边界 | 当前不属于默认 `xyzbc-trt` 代表应用完成范围 | | max5/bridgemill 等 | `configs/sim/axis/vismach/5axis/max5`、`bridgemill` | 其他五轴仿真配置 | 需逐 profile 建 gate,不能由 `xyzbc-trt` 继承 | ## 关键源码差异 | 04 写法 | 本地源码复核 | 严格结论 | | --- | --- | --- | | `A/C 轴点动` | `xyzac-trt.ini` 为 `XYZAC`;默认代表应用 `xyzbc-trt.ini` 为 `XYZBC`,Web 默认 profile 明确 `coordinates: ["X","Y","Z","B","C"]` | 04 写 A/C 时不能由默认 XYZBC 证据直接覆盖;需使用 XYZAC profile gate 或改写为 B/C 代表应用 | | `A 轴限位 ±120°` | `xyzac-trt.ini` 中 `[AXIS_A] MIN_LIMIT=-100 MAX_LIMIT=50`;`xyzab-tdr.ini` 中 `[AXIS_A] MIN_LIMIT=-3600 MAX_LIMIT=3600`;未见 04 写的 `±120` 对应配置 | 需修订 04 限位数值或指定真实来源配置 | | `C 轴 WRAPPED_ROTARY` | LinuxCNC 支持 `WRAPPED_ROTARY`,源码读取在 `rs274ngc_pre.cc`;但 `xyzbc-trt.ini`/`xyzac-trt.ini` 的 C 轴采用 `MIN_LIMIT=-36000 MAX_LIMIT=36000`,未设置 `WRAPPED_ROTARY=1` | C 轴大范围回转代表证据成立;`WRAPPED_ROTARY` 字面结论需单独绑定 wrapped rotary 配置 | | `sphere.ngc` | 本地 `linuxcnc` 和 `wasm-port/vendor` 未发现 `nc_files/5axis/sphere.ngc`;现有代表程序为 `boat-xyzbc.ngc`、`boat-xyzac.ngc`、`xyzbc_switchkins.ngc`、`impeller-7bl-xyzac.ngc` 等 | 04 的 sphere fixture 需修订或补入具体上游资产;不能按不存在路径宣称通过 | | `叶轮加工 自定义路径` | 本地存在 `impeller-7bl-xyzac.ngc`,Web 项目有 `verify_impeller_feed_task_hal_run.mjs` 和 `verify_real_linuxcnc_5axis_program_cases.mjs` | 叶轮项可按 XYZAC/impeller 代表程序条件通过;不能自动归入默认 XYZBC profile | ## 现有 Web 证据边界 | 证据 | 覆盖内容 | 边界 | | --- | --- | --- | | `tests/node/verify_xyzbc_trt_web_app.mjs` | 默认 `xyzbc-trt` profile、`XYZBC` 坐标、B/C 轴、`xyzbc_switchkins.ngc`、`boat-xyzbc.ngc`、`helix_bc.ngc`、task-HAL 状态 | 只证明默认 XYZBC TRT 代表应用,不证明 A/C、XYZAB 或全部五轴族 | | `tests/node/verify_profile_boundary.mjs` | `xyzac-trt`、`xyzbc-trt`、`gmoccapy-xyzac-trt`、`gmoccapy-xyzab` 的 profile/source boundary | 多 profile 边界存在,但部分 profile `promotionAllowed=false`,不能直接宣称 UI 发布 | | `tests/node/verify_real_linuxcnc_5axis_program_cases.mjs` | `boat-xyzac`、`boat-xyzbc`、`impeller-7bl-xyzac`、`xyzac_switchkins_test_*`、`xyzac_switchkins`、`xyzbc_switchkins` 的 LinuxCNC vendored G-code source guard 与 canonical/TP samples | 是程序级代表 proof,不等价于所有机床 UI/RTCP/full-process 都通过 | | `tests/node/verify_impeller_feed_task_hal_run.mjs` | `impeller-7bl-xyzac.ngc` 的进给段、Task-HAL 执行和速度段 evidence | 支撑 8.9 叶轮代表程序;profile 是 XYZAC/impeller,不是默认 XYZBC | ## 04 条目结论 | 04 项 | 复核结论 | 后续 gate | | --- | --- | --- | | `8.1 A/C 轴点动` | 条件通过:默认代表应用是 B/C;A/C 需走 `xyzac-trt` profile gate | 增加 A/C profile 的 browser/evidence gate,或将 04 默认代表项改写为 B/C | | `8.2 A 轴限位` | 需修订:未见 `±120°` 来源;本地 `xyzac` 是 `-100..50`,`xyzab-tdr` 是 `-3600..3600` | 指定真实 INI 或修订验收数值 | | `8.3 A 轴回卷旋转` | 已修订:上游 `wrapped_rotary.ini` 的 `[AXIS_A] WRAPPED_ROTARY=1` 已进入 vendor 和结构化 INI gate | 保持独立 wrapped-rotary profile,不由 XYZBC/XYZAC C 轴大范围配置替代 | | `8.6 五轴联动插补` | 已有代表应用证据:`xyzbc_switchkins`、`boat-xyzbc` 和多 profile program-case gate | 保持 profile 粒度,不跨 profile 继承 | | `8.7 斜面钻孔` | 待补专项证据:已有 `centering.ngc`、`helix_bc.ngc` 和固定循环/旋转组合线索,但未形成“斜面钻孔”专名 gate | 增加固定循环 + 旋转定位的 program-case JSON | | `8.8 球面加工` | 需修订或补 fixture:本地未发现 04 写的 `sphere.ngc`;可用 `boat-xyzbc/boat-xyzac` 作为曲面代表,但名称和来源要改 | 指定存在的上游 G-code 或新增 sphere 资产来源证明 | | `8.9 叶轮加工` | 条件通过:`impeller-7bl-xyzac.ngc` 和专项 Node gate 存在;不是默认 XYZBC profile | 运行并登记 `verify_impeller_feed_task_hal_run.mjs`、program-case gate | | `8.10 旋转轴进给率` | 条件通过:XYZAC impeller 4066 个旋转进给段公式通过,6 段受 INI 限速,实际峰值 1800 deg/min | 保留 requested/actual/limit 三类字段和 timing-estimate 边界 | ## 最小验收命令建议 ```bash npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_profile_boundary.mjs node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_real_linuxcnc_5axis_program_cases.mjs node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_impeller_feed_task_hal_run.mjs ``` 通过标准: - 默认 `xyzbc-trt` 仍必须输出 `xyzbc_trt_web_app_smoke=ok`。 - profile boundary 必须明确 `xyzac-trt`、`xyzbc-trt`、`gmoccapy-xyzac-trt`、`gmoccapy-xyzab` 的坐标、promotion 状态和 source reference。 - program-case gate 必须覆盖 `boat-xyzbc` 和 `impeller-7bl-xyzac`,并保留 `linuxcnc_vendored_5axis_gcode_source_file` source guard。 - 叶轮项必须由 `impeller-7bl-xyzac.ngc` 专项 gate 支撑,不得写成默认 `xyzbc-trt` 全面完成。 ## 结论 `ACC-030/INT-017` 已完成五轴范围差异复核。当前可以继续宣称 `xyzbc-trt` 作为默认代表应用已有较完整证据,也可以登记 `xyzac/gmoccapy/impeller` 的专项 source-boundary 证据;但不能把 04 的 `10/10 五轴通过` 原文直接继承为“所有 A/C、XYZAB、sphere、impeller、TRSRN、max5 等五轴族全部 UI 发布”。后续所有五轴晋级必须按 profile、配置文件、G-code 程序和 evidence gate 四者绑定。 ## 后续状态 `ACC-046/INT-033` 已修订 04 原文:A 轴范围绑定 `xyzac-trt.ini` 的 `-100..50`,五轴联动绑定 `xyzbc_switchkins.ngc`,曲面加工绑定现有 `boat-xyzbc.ngc/boat-xyzac.ngc`。不存在的 `sphere.ngc` 和跨 profile 的 ±120° 声明已移除;各 profile 仍不得互相继承 UI 发布结论。 `ACC-047/INT-034` 已把 `wrapped_rotary.ini` 纳入 source manifest/vendor 并以结构化 parser 证明 A 轴 `WRAPPED_ROTARY=1`;同时修复 G93 timing 对角轴 INI 限速的遗漏,补齐 8.10 的 requested/actual/limit 数值证据。