# LinuxCNC 对标程序与功能矩阵

本文记录 Web-RTCP 五轴数控仿真界面当前对标的 LinuxCNC 程序、配置文件和功能边界。运行时状态对象为 `linuxCncParityMatrix`，界面在 gmoccapy diagnostics 中显示摘要，Node smoke 通过 `tests/node/verify_linuxcnc_parity_matrix.mjs` 持续校验。

## 1. 对标的 LinuxCNC 程序和配置

| 类别 | LinuxCNC 来源 | Web 对标内容 |
| --- | --- | --- |
| XYZAC TRT 配置 | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini` | `xyzac-trt` profile、TRAJ `XYZAC`、INI 解析、项目目录 staging |
| XYZBC TRT 配置 | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` | `xyzbc-trt` profile、TRAJ `XYZBC`、INI 解析、项目目录 staging |
| PyVCP/POSTGUI/HAL | `xyzac-trt.xml`、`xyzbc-trt.xml`、`switchkins_postgui.hal`、`xyzac-trt_cmds.hal` | SWITCHKINS 按钮语义、HALUI MDI 命令、`motion.switchkins-type` 映射 |
| remap 子程序 | `remap_subs/428remap.ngc`、`429remap.ngc`、`430remap.ngc` | `M428` TCP、`M429` identity、`M430` userk 的 kinstype 切换语义 |
| Vismach Python | `src/hal/user_comps/vismach/xyzac-trt-gui.py`、`xyzbc-trt-gui.py` | 机床预览层级、关节反馈 pin、刀补/偏置显示语义 |
| Kinematics C 源码 | `src/emc/kinematics/xyzac-trt-kins.c`、`xyzbc-trt-kins.c`、`trtfuncs.c`、`switchkins.c` | 正逆解、TCP/identity/userk 切换、DRO/TCP frame 更新 |
| gmoccapy TRT 示例 | `configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt.ini`、`postgui.hal` | gmoccapy 入口、POSTGUI 工具/主轴 HAL、TRT 示例程序来源 |
| gmoccapy 原生界面 | `src/emc/usr_intf/gmoccapy/gmoccapy.py`、`share/gmoccapy/gmoccapy.glade`、gmoccapy 图标清单 | 操作台布局、右侧状态入口、按钮颜色/禁用/激活规则、HAL pin 语义 |
| LinuxCNC task/NML | `src/emc/nml_intf/emc.hh`、`src/emc/task/emctaskmain.cc`、`src/emc/task/emctask.cc` | E-STOP/POWER/RESET、AUTO/MANUAL/JOG/MDI、RUN/PAUSE/RESUME/STEP/STOP 的互锁 |
| task/HAL/motion 状态 | `src/emc/motion/control.c`、`src/hal/hal_lib.c` | task cycle、servo cycle、HAL pin 变化、实时轴值反馈边界 |

## 2. 对标的真实五轴 G-code 程序

当前验证程序来源限定为 LinuxCNC 源目录中的五轴程序，不把普通用户文件误标为 LinuxCNC 对标程序：

| 程序 | 用途 |
| --- | --- |
| `demos/xyzac_switchkins.ngc` | XYZAC switchkins 基准程序 |
| `demos/xyzbc_switchkins.ngc` | XYZBC switchkins 基准程序 |
| `demos/boat-xyzac.ngc` | XYZAC TCP 船体程序 |
| `demos/boat-xyzbc.ngc` | XYZBC TCP 船体程序 |
| `demos/impeller-7bl-xyzac.ngc` | XYZAC 叶轮长路径程序 |
| `demos/xyzac_switchkins_test_1.ngc` | M428/M429 多次切换验证 |
| `demos/xyzac_switchkins_test_2.ngc` | TCP/identity 过渡验证 |
| `demos/xyzac_switchkins_test_3.ngc` | switchkins 程序验证覆盖 |

## 3. 已承接的功能

| 功能 | 当前 Web 实现 |
| --- | --- |
| 右侧纵向入口 | `E-STOP`、`POWER`、`RESET`、`AUTO`、`MANUAL`、`JOG`、`MDI`、`IDENTITY`、`TCP` 全部建模 |
| 模式互锁 | 未复位急停不能上电；未回零不能 AUTO/MDI；AUTO 运行时阻止离开 AUTO、JOG、TCP/IDENTITY 切换 |
| 颜色规则 | emergency/power/reset/mode/identity/tcp 各自有 active、ready、blocked、active-blocked 状态 |
| 项目目录 | 按 profile 生成 `web-rtcp-5axis-sim-plan/machines/<profile>`，保存当前机床 INI、HAL、TBL、NGC/remap 文件 |
| INI 对标 | staged INI 与当前 profile INI 路径和文本比对，暴露 `sourceMatchesProfile`、`textMatchesLoadedIni` |
| 程序验证 | LinuxCNC interpreter runtime 产出 canonical motion、switchkins 事件、planner sample |
| 实时轴值 | G-code 执行反馈驱动 `axisPose`、`tcpPose`、DRO、当前行、feed/DTG |
| 预览路径 | Three.js/WebGL 预览程序路径、当前刀具位置、TCP 点和刀轴方向 |
| gmoccapy HAL 语义 | 硬按钮、jog、override、spindle、coolant、tool change、message/tool/user inputs 建模 |
| task/HAL 边界 | 保留 native task/HAL 与硬件实时边界，不把 Web 仿真误标为真实机床控制 |

## 4. 当前边界

- Web 端运行的是浏览器仿真状态机和 WASM/JS runtime，不运行原生 GTK `gmoccapy.py`。
- `gmoccapy.py`、Glade、Vismach Python 是界面/机床模型/HAL 语义参考，不是浏览器运行时。
- 硬件驱动、实时内核、真实 HAL shared memory、外部 user M 进程和真实 tool DB 不在浏览器内提升为 ready。
- `linuxCncParityMatrix` 的 `semanticBoundary` 固定为 `linuxcnc_source_function_parity_matrix_for_browser_simulation_not_hardware_control`。
