完善五轴 RTCP 仿真与验证资料

This commit is contained in:
2026-07-01 21:49:58 -04:00
parent ac4e855b2b
commit d0d58998ac
159 changed files with 6771594 additions and 339 deletions

View File

@@ -333,14 +333,14 @@ promotionAllowed=false
## 9. 当前状态
```text
status=M22_host_native_boundary_visibility_complete
status=M24_xyzbc_trt_kinematics_parity_complete
active_style=gmoccapy_5_axis
frontend_framework=none
ui_stack=html_css_typescript_es_modules
preview_stack=threejs
semantic_boundary=linuxcnc_owned
latest_batch=M22-host-native-boundary-visibility
latest_gate=host_native_boundary_ui=ok,hardware_drive_false_visible=1,host_realtime_false_visible=1,external_user_m_false_visible=1,tool_db_false_visible=1,threejs_program_preview_mode=program-preview-and-tool-execution,threejs_preview_source=linuxcnc-interpreter-wasm_or_linuxcnc-machine-file-remap-wasm,threejs_toolpath_preview_source=linuxcnc_interpreter_canonical_motion,threejs_tool_execution_trace_source=linuxcnc_tp_samples_or_task_motion_hal_feedback,threejs_path_fit_bounds=ok,threejs_current_segment_highlight=ok,threejs_rapid_feed_visual_distinction=ok,threejs_no_gcode_semantics_generation=ok,threejs_canvas_nonblank_desktop=ok,threejs_canvas_nonblank_mobile=ok,opfs_unavailable_detected=1,opfs_fallback_current_page_lifecycle_only=1,non_opfs_workflows_still_pass=1,public_http_smoke_no_uncaught_exception=1,real_linuxcnc_5axis_program_cases_smoke=ok,native_task_hal_source_artifact_audit=ok,task_hal_web_simulation_boundary_consistent=1,full_execution_boundary_smoke=ok,linuxcnc_kinematics_runtime_smoke=ok,linuxcnc_interpreter_runtime_smoke=ok,linuxcnc_ini_runtime_smoke=ok,full_linuxcnc_5axis_source_node_smoke=ok,machine_file_staging_smoke=ok,five_axis_session_smoke=ok,profile_boundary_smoke=ok,rtcp_store_smoke=ok,gmoccapy_shell_smoke=ok,gmoccapy_dist_smoke=ok
latest_batch=M24-xyzbc-trt-kinematics-parity
latest_gate=xyzac_trt_kinematics_runtime=ok,xyzbc_trt_kinematics_runtime=ok,xyzbc_b_axis_tcp_pose_preserved=1,tool_db_web_simulation_smoke=ok,staged_tool_tbl_loaded=1,tool_db_query_edit_save=1,tool_db_t_m6_g43_state=1,tool_db_memory_fallback_save=1,host_tool_db_process=0,tool_db_user_m_simulation_smoke=ok,tool_db_process_ready_web_simulation_only=1,external_user_m_process_ready_web_simulation_only=1,arbitrary_user_m_blocked=1,host_process_execution=0,host_native_boundary_ui=ok,hardware_drive_false_visible=1,host_realtime_false_visible=1,host_external_user_m_false_visible=1,host_tool_db_false_visible=1,threejs_program_preview_mode=program-preview-and-tool-execution,threejs_preview_source=linuxcnc-interpreter-wasm_or_linuxcnc-machine-file-remap-wasm,threejs_toolpath_preview_source=linuxcnc_interpreter_canonical_motion,threejs_tool_execution_trace_source=linuxcnc_tp_samples_or_task_motion_hal_feedback,threejs_path_fit_bounds=ok,threejs_current_segment_highlight=ok,threejs_rapid_feed_visual_distinction=ok,threejs_no_gcode_semantics_generation=ok,threejs_canvas_nonblank_desktop=ok,threejs_canvas_nonblank_mobile=ok,opfs_unavailable_detected=1,opfs_fallback_current_page_lifecycle_only=1,non_opfs_workflows_still_pass=1,public_http_smoke_no_uncaught_exception=1,real_linuxcnc_5axis_program_cases_smoke=ok,native_task_hal_source_artifact_audit=ok,task_hal_web_simulation_boundary_consistent=1,full_execution_boundary_smoke=ok,linuxcnc_kinematics_runtime_smoke=ok,linuxcnc_interpreter_runtime_smoke=ok,linuxcnc_ini_runtime_smoke=ok,full_linuxcnc_5axis_source_node_smoke=ok,machine_file_staging_smoke=ok,five_axis_session_smoke=ok,profile_boundary_smoke=ok,rtcp_store_smoke=ok,gmoccapy_shell_smoke=ok,gmoccapy_dist_smoke=ok
rtcp_ui_state=implemented_browser_worker_and_node_kinematics_wasm_frame_with_fixture_fallback
control_wiring=power_estop_reset_auto_manual_jog_mdi_run_stop_pause_step_overrides_coolant_spindle_preview_home_reload_full
gcode_loading=implemented_browser_file_text_staging_with_linuxcnc_interpreter_execution
@@ -355,7 +355,7 @@ pyvcp_hal_schema=implemented_xyzac_trt_switchkins
linuxcnc_boundary_adapter=kinematics_and_interpreter_runtime_connected_remap_planner_missing
full_execution_boundary=implemented_machine_file_remap_ready_with_planner_task_hal_blockers
host_native_boundary_visibility=implemented_ui_and_browser_smoke_guard_for_hardware_realtime_external_user_m_tool_db_false
linuxcnc_kinematics_wasm=browser_and_node_proof_ready_xyzac_trt
linuxcnc_kinematics_wasm=browser_and_node_proof_ready_xyzac_trt_and_node_direct_xyzbc_trt_b_axis_tcp_pose
browser_kinematics_wasm=worker_connected_source_and_dist_xyzac_trt
linuxcnc_interpreter_wasm=browser_worker_and_node_direct_canonical_program_execution_ready_with_switchkins_mcode_preservation
browser_interpreter_wasm=worker_connected_source_and_dist
@@ -368,6 +368,7 @@ planner_task_hal_gap=closed_for_web_simulation_boundary_with_task_motion_hal_was
native_task_hal_sync_plan=docs_native_task_hal_sync_implementation_steps_ready
native_task_hal_phase0_8=source_manifest_native_probe_hal_runtime_motion_hal_sync_task_shim_sdk_machine_file_store_ui_full_boundary_smokes_ready_and_m18_readiness_artifact_audited
native_task_hal_readiness_artifact=web-rtcp-5axis-sim-plan/build/readiness/native-task-hal-readiness.json
tool_db_user_m_web_simulation=ready_for_staged_tool_tbl_and_whitelisted_user_m
next_batch=none_from_development_continuation
```
@@ -379,7 +380,7 @@ next_batch=none_from_development_continuation
- Phase 3 minimal motion/HAL C ABI 已覆盖 servo cycle、program-line、switchkins、jog/status HAL 同步;
- Phase 4 minimal task/HAL C ABI 已覆盖 `lctask_*` session/stage/open/command/cycle/status/eventsRUN/MDI/JOG/PAUSE/RESUME/ABORT 能从 task shim 驱动 motion/HAL runtime并已补 SDK wrapper
- Phase 5-8 已把 machine-file session、task/HAL runtime adapter、Worker/client 文件、store action mapping、gmoccapy diagnostics 和 full boundary gate 接上;
- `nativeTaskReady=true``nativeHalSyncReady=true` 当前只表示 Web simulation boundary 内的 task/motion/HAL WASM runtime proof仍保持 `hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false`
- `nativeTaskReady=true``nativeHalSyncReady=true` 当前只表示 Web simulation boundary 内的 task/motion/HAL WASM runtime proof`toolDbProcessReady=true``externalUserMProcessReady=true` 也只表示 Web simulation boundary 内的 staged `tool.tbl` 与白名单 user-M 仿真;仍保持 `hardwareDrive=false``hostRealtimeKernel=false``hostExternalUserMProcessReady=false``hostToolDbProcessReady=false``arbitraryUserMExecution=false`
补充实施文档:
@@ -447,10 +448,13 @@ linuxcnc_source_program_case_coverage=ready_node_and_browser_guarded
nativeTaskReady=web_simulation_boundary_only
nativeHalSyncReady=web_simulation_boundary_only
opfs_degradation=ready_memory_fallback_current_page_lifecycle_only
toolDbProcessReady=true for web_simulation_only
externalUserMProcessReady=true for web_simulation_only
hardwareDrive=false
hostRealtimeKernel=false
externalUserMProcessReady=false
toolDbProcessReady=false
hostExternalUserMProcessReady=false
hostToolDbProcessReady=false
arbitraryUserMExecution=false
```
已通过的当前 gate
@@ -524,7 +528,7 @@ threejs_generated_toolpath_semantics=forbidden
1. 不用 Web 侧自定义状态机替代 LinuxCNC task/HAL/motion 语义。
2. 不把 browser simulation boundary 扩大描述为真实硬件 runtime。
3. `nativeTaskReady=true``nativeHalSyncReady=true` 只允许在 Web simulation boundary 内成立,除非另有 host-native 对照和 WASM 比对 artifact。
4. `hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false` 必须继续明确展示
4. `hardwareDrive=false``hostRealtimeKernel=false``hostExternalUserMProcessReady=false``hostToolDbProcessReady=false``arbitraryUserMExecution=false` 必须继续明确展示;`externalUserMProcessReady=true``toolDbProcessReady=true` 只能附带 `web_simulation_only`
5. 不修改用户个人备忘文件;本项目接续只写 `docs/development-continuation.md` 和必要工程文档。
### 16.4 下一批直接执行任务
@@ -569,8 +573,10 @@ task_hal_web_simulation_boundary_consistent=1
native_task_hal_host_probe_status=passed_or_ready_disabled_by_default_or_skipped_missing_host_runtime
hardware_drive=0
host_realtime_kernel=0
external_user_m_process_ready=0
tool_db_process_ready=0
external_user_m_process_ready=1
tool_db_process_ready=1
host_external_user_m_process_ready=0
host_tool_db_process_ready=0
promotion_scope=web_simulation_only
```
@@ -580,7 +586,7 @@ promotion_scope=web_simulation_only
- 新增 `tests/node/verify_native_task_hal_audit.mjs`,默认运行 `wasm-port/tests/native/verify_task_hal_phase0.sh` 刷新 source/probe 证据;
- 生成机器可读 artifact `build/readiness/native-task-hal-readiness.json`
- `npm run smoke:node` 已接入该 gate
- 明确区分 `webSimulation.promoted=true``nativeHostAndHardware.hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false`
- 明确区分 `webSimulation.promoted=true``toolUserWebSimulation.externalUserMProcessReady=true``toolUserWebSimulation.toolDbProcessReady=true``nativeHostAndHardware.hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false`
当前 M18 gate
@@ -590,8 +596,10 @@ task_hal_web_simulation_boundary_consistent=1
native_task_hal_host_probe_status=ready_disabled_by_default
hardware_drive=0
host_realtime_kernel=0
external_user_m_process_ready=0
tool_db_process_ready=0
external_user_m_process_ready=1
tool_db_process_ready=1
host_external_user_m_process_ready=0
host_tool_db_process_ready=0
promotion_scope=web_simulation_only
```
@@ -793,14 +801,14 @@ completed_with_host_native_boundary_ui_smoke
目标:
- 在 Web simulation boundary 已 promoted 时,继续明确展示非浏览器仿真范围;
- UI diagnostics 必须显示 `hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false`
- UI diagnostics 必须显示 `hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=true for web_simulation_only``toolDbProcessReady=true for web_simulation_only``hostExternalUserMProcessReady=false``hostToolDbProcessReady=false``arbitraryUserMExecution=false`
- browser smoke 同时验证 state 字段和 DOM 文本,避免把 Web simulation promoted 误读为真实硬件、host realtime、外部 user-M 或 tool DB runtime ready。
已完成:
- gmoccapy info tabs 新增 `Host/native` 诊断行;
- `Host/native` 显示 hardware drive、host realtime、external user-M、tool DB 四项 false 状态;
- browser smoke 在 task/HAL full simulation boundary promoted 后验证四项 state 和 DOM 可见性。
- `Host/native` 显示 hardware drive、host realtime、Web tool/user 仿真 only、host external user-M、host tool DB、arbitrary user-M 状态;
- browser smoke 在 task/HAL full simulation boundary promoted 后验证 Web tool/user ready 与 host/native false 的 state 和 DOM 可见性。
当前 M22 gate
@@ -808,11 +816,120 @@ completed_with_host_native_boundary_ui_smoke
host_native_boundary_ui=ok
hardware_drive_false_visible=1
host_realtime_false_visible=1
external_user_m_false_visible=1
tool_db_false_visible=1
external_user_m_web_simulation_only_visible=1
tool_db_web_simulation_only_visible=1
host_external_user_m_false_visible=1
host_tool_db_false_visible=1
arbitrary_user_m_false_visible=1
```
### 16.9 每轮必须执行的回归
### 16.9 M23受控 tool DB / user-M Web 仿真
```text
M23-controlled-tool-db-user-m-web-simulation
```
状态:
```text
completed_with_linuxcnc_tooldb_index_spindle_semantics
```
目标:
- 对标 LinuxCNC `taskclass.cc``tooldata/*`、TRT remap subroutines 和受控 user-M 用法;
- 读取 staged `tool.tbl`,在 Web storage 中支持 OPFS/memory fallback 保存;
- 支持刀具号、刀长、刀径、刀袋的查询/编辑/保存;
- 接入 `Tn/M6/G43/M61` 仿真状态;
- 只允许白名单 `M128/M129/M428/M429/M430`,不执行任意系统脚本;
- UI 显示 `toolDbProcessReady=true for web_simulation_only``externalUserMProcessReady=true for web_simulation_only`
已完成:
- 新增 `app/src/runtime/tool-db-simulation.js`
- 新增 `app/src/runtime/controlled-user-m-simulation.js`
- `tool-db-simulation.js` 按 LinuxCNC `CANON_TOOL_TABLE` 字段建模,保留非随机刀库的真实 `pocketno`,同时用内部 `idx=1..n` 表示 tool table 行,`idx=0` 固定为 spindle pocket
- `Tn/M6/G43/M61``tooldata_find_index_for_tool()``Task::load_tool()``Task::read_tool_inputs()``convert_tool_length_offset()` 语义更新 `tool_prep_*``toolInSpindle``toolFromPocket``activeToolOffset`#5400/#5401-#5413 参数;
- store 和浏览器入口暴露 `queryToolDb()``editToolDb()``saveToolDb()`,支持 staged `tool.tbl` 查询、编辑和 OPFS/memory fallback 保存;
- store 在 machine-file staging 后自动解析 profile 的 staged `tool.tbl`
- store 在加载 LinuxCNC source program 时扫描 tool commands 和受控 user-M 事件;
- full boundary 把 tool DB/user-M 纳入 Web promotion gate同时保留 host/native false
- gmoccapy info tabs 新增 `Tool/User process` 诊断;
- 新增 `tests/node/verify_tool_db_web_simulation.mjs``tests/node/verify_tool_db_user_m_simulation.mjs` 并接入 `smoke:node`
当前 M23 gate
```text
tool_db_web_simulation_smoke=ok
staged_tool_tbl_loaded=1
tool_db_query_edit_save=1
tool_db_t_m6_g43_state=1
tool_db_memory_fallback_save=1
host_tool_db_process=0
tool_db_user_m_simulation_smoke=ok
tool_db_process_ready_web_simulation_only=1
external_user_m_process_ready_web_simulation_only=1
arbitrary_user_m_blocked=1
host_process_execution=0
```
边界:
```text
toolDbProcessReady=true for web_simulation_only
externalUserMProcessReady=true for web_simulation_only
hostToolDbProcessReady=false
hostExternalUserMProcessReady=false
arbitraryUserMExecution=false
```
### 16.10 M24XYZBC TRT kinematics parity proof
```text
M24-xyzbc-trt-kinematics-parity
```
状态:
```text
completed_with_b_axis_tcp_pose_preserved
```
目标:
- 对标 LinuxCNC `xyzac-trt-kins.c``xyzbc-trt-kins.c``trtfuncs.c``switchkins.c`
- Node direct runtime 同时证明 `linuxcnc_xyzac_trt_kinematics.wasm``linuxcnc_xyzbc_trt_kinematics.wasm`
- 使用 `switchkinsType=1` 验证 TCP 模式正解/逆解闭环;
- `rtcpFrame.tcpPose` 同时保留 `a/b/c`,避免 XYZBC 的 B 轴姿态在 UI 诊断链路中丢失;
- Three.js `data-three-tcp-pose` 输出 B 轴,方便浏览器 smoke 和人工检查。
已完成:
- `app/src/runtime/rtcp-frame.js` 的 fixture frame 和 LinuxCNC kinematics frame 均输出 `tcpPose.b`
- `app/src/visualization/five-axis-scene.js` 的 rounded TCP pose dataset 输出 `b`
- `tests/node/verify_linuxcnc_kinematics_runtime.mjs` 扩展为 XYZAC/XYZBC 双模块 runtime proof校验 wasm 文件、switchkins type、forward/inverse rc、关节闭环、A/B/C TCP 姿态与刀轴方向;
- `tests/node/verify_rtcp_store.mjs` 增加 XYZBC store 状态对 `tcpPose.b` 的保持校验。
当前 M24 gate
```text
xyzac_trt_kinematics_runtime=ok
xyzbc_trt_kinematics_runtime=ok
linuxcnc_kinematics_runtime_smoke=ok
xyzbc_b_axis_tcp_pose_preserved=1
rtcp_store_smoke=ok
```
边界:
```text
semanticBoundary=linuxcnc_kinematics_wasm_c_abi
scope=node_direct_web_runtime_proof
hardwareDrive=false
hostRealtimeKernel=false
```
### 16.11 每轮必须执行的回归
常规回归:
@@ -979,7 +1096,7 @@ completed_with_real_linuxcnc_5axis_source_program_smoke
已完成:
- machine-file staging 从 LinuxCNC source manifest 中追加 TRT `demos/*.ngc`,包括 `boat-xyzac.ngc``boat-xyzbc.ngc``impeller-7bl-xyzac.ngc``xyzac_switchkins*.ngc``xyzbc_switchkins.ngc`
- `selectMachineFileProgram()` 强制 5 轴 G-code 必须来自 LinuxCNC 源程序目录 `configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc`
- `selectMachineFileProgram()` 强制 5 轴 G-code 必须来自当前 profile 对应的 LinuxCNC 源程序目录axis/vismach 使用 `configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc`gmoccapy TRT 使用 `configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples/*.ngc`
- 新增 `listLinuxCncGcodeSources()``selectMachineFileProgram()`
- store 新增 `LOAD_LINUXCNC_GCODE_SOURCE`,可把 staged LinuxCNC 真实 5 轴 `.ngc` 源文件加载到 G-code 面板;
- gmoccapy G-code 面板新增 LinuxCNC 5-axis source 下拉框和 staging 按钮;
@@ -992,7 +1109,7 @@ completed_with_real_linuxcnc_5axis_source_program_smoke
gcodeSourceBoundary=linuxcnc_vendored_5axis_gcode_source_file
sourceMode=linuxcnc-vendored-5axis-gcode
machineFileBackedRunProgram=selected_staged_linuxcnc_ngc_source
sourceDirectoryGuard=configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc only
sourceDirectoryGuard=profile_specific_linuxcnc_demos_or_gmoccapy_examples_only
remapRuntimeReady=true for staged fiveAxisRemap C ABI run
plannerRuntimeReady=false
nativeTaskReady=false

View File

@@ -0,0 +1,39 @@
flowchart TD
A[docs 目录] --> B[方案层]
A --> C[实施层]
A --> D[追溯与对标层]
A --> E[参考层]
A --> F[操作手册层]
A --> G[截图资产层]
B --> B1[implementation-plan.md]
B1 --> B2[technical-roadmap.md]
C --> C1[program-implementation-guide.md]
C --> C2[native-task-hal-sync-implementation-steps.md]
B2 --> C1
C2 --> C1
D --> D1[development-continuation.md]
D --> D2[traceability-matrix.md]
D --> D3[linuxcnc-parity-matrix.md]
C1 --> D1
D1 --> D2
D3 --> D2
E --> E1[linuxcnc-python-gui-reference.md]
E --> E2[linuxcnc-gui-reference-gallery.md]
E --> E3[gmoccapy-xyzab-reference.md]
E1 --> B1
E2 --> B2
E3 --> D2
E3 --> D3
F --> F1[操作手册旧版 docx]
F --> F2[操作手册新版 docx]
G --> G1[manual-assets/*.png]
G1 --> F1
G1 --> F2
D2 --> F2
D3 --> F2

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

View File

@@ -0,0 +1,27 @@
flowchart LR
L1[LinuxCNC INI/HAL/TBL/remap] --> P[profiles 与 machine-file staging]
L2[LinuxCNC 5轴 G-code demos] --> P
L3[LinuxCNC kinematics C 源码] --> K[kinematics WASM]
L4[LinuxCNC interpreter/TP 源码] --> I[interpreter WASM + TP queue timing]
L5[LinuxCNC task/motion/HAL 源码] --> T[task/motion/HAL WASM simulation runtime]
L7[LinuxCNC tooldata/task 与 remap user-M 来源] --> E[tool DB + controlled user-M Web simulation]
L6[AXIS/vismach/PyVCP/gmoccapy/QtVCP GUI] --> U[Web UI + panel schema + Three.js scene]
P --> R[Web runtime/session]
K --> R
I --> R
T --> R
E --> R
R --> S[store/state snapshot]
S --> U
U --> O[DRO/G-code/Three.js/diagnostics]
O --> M[操作手册截图与 manual-assets]
R --> V[Node/browser/WASM smoke 与 readiness artifact]
V --> X[traceability-matrix.md]
X --> D[development-continuation.md]
T -. 明确不包含 .-> H[真实硬件驱动]
T -. 明确不包含 .-> N[host realtime kernel]
E -. 不执行 .-> X1[任意 host user-M 脚本]
E -. 不提升 .-> X2[host tool DB process]

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

View File

@@ -0,0 +1,31 @@
flowchart TD
S0[打开 Web 仿真界面] --> S1{E-STOP 是否激活}
S1 -- 是 --> S2[RESET]
S1 -- 否 --> S3[POWER]
S2 --> S3
S3 --> S4[HOME]
S4 --> S5[选择模式]
S5 --> M1[MANUAL]
M1 --> M2[JOG X/Y 或其他轴]
M2 --> M3[DRO 与 runtime feedback 更新]
S5 --> A1[AUTO]
A1 --> A2[选择 LinuxCNC 5-axis source]
A2 --> A3[TCP 按钮或程序内 M428]
A3 --> A4[RUN / STEP / PAUSE / RESUME / STOP]
A4 --> A5[G-code 当前行、DRO、Three.js 执行轨迹同步]
S5 --> D1[MDI]
D1 --> D2[输入 MDI 命令]
D2 --> D3[执行命令]
D3 --> M3
A5 --> Q[Info Tabs 诊断]
M3 --> Q
Q --> Q1[Task policy]
Q --> Q2[INI/project]
Q --> Q3[Task/HAL]
Q --> Q4[Full boundary]
Q --> Q5[Host/native false 状态]
Q --> Q6[Tool DB/User-M Web simulation]

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

View File

@@ -0,0 +1,22 @@
flowchart TD
N0[阶段0 源码和构建清单补齐] --> N1[阶段1 Native 对照探针]
N1 --> N2[阶段2 HAL 内存模型和线程调度器]
N2 --> N3[阶段3 Motion realtime 同步最小闭环]
N3 --> N4[阶段4 Task runtime 移植]
N4 --> N5[阶段5 TRT machine-file session 接入]
N5 --> N6[阶段6 SWITCHKINS/M428/M429/M430 同步]
N6 --> N7[阶段7 Browser Worker 和 store 接线]
N7 --> N8[阶段8 Full boundary 提升]
N8 --> W[Web simulation boundary promoted]
W --> C1[nativeTaskReady=true 仅限 Web simulation]
W --> C2[nativeHalSyncReady=true 仅限 Web simulation]
W --> C3[fullLinuxCncProgramExecutionReady=true 仅限仿真边界]
W --> C4[toolDbProcessReady=true web_simulation_only]
W --> C5[externalUserMProcessReady=true web_simulation_only]
W -. 仍为 false .-> B1[hardwareDrive=false]
W -. 仍为 false .-> B2[hostRealtimeKernel=false]
W -. host 仍为 false .-> B3[hostExternalUserMProcessReady=false]
W -. host 仍为 false .-> B4[hostToolDbProcessReady=false]
W -. 仍为 false .-> B5[arbitraryUserMExecution=false]

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

View File

@@ -0,0 +1,578 @@
# docs 目录文件作用详解与关联流程图
生成日期2026-07-01
适用目录:`/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/docs`
## 1. 文档集定位
`docs` 目录不是单一说明书,而是 Web-RTCP 五轴数控仿真项目的“方案、实施、追溯、参考、操作手册、截图证据”集合。它承担五类职责:
1. 定义项目要做什么、不能做什么。
2. 把 LinuxCNC 的源码、配置、GUI、HAL、G-code 示例映射到 Web 项目。
3. 指导开发人员按阶段实现 Web UI、WASM runtime、Three.js 可视化、Task/HAL 仿真边界。
4. 记录每一批功能的来源、边界、测试和剩余风险。
5. 给操作人员提供界面使用流程、截图和验证方法。
推荐阅读顺序:
```text
implementation-plan.md
-> technical-roadmap.md
-> program-implementation-guide.md
-> native-task-hal-sync-implementation-steps.md
-> development-continuation.md
-> traceability-matrix.md
-> linuxcnc-parity-matrix.md
-> Web-RTCP五轴数控系统仿真界面操作手册新版.docx
```
参考类文档可按需阅读:
```text
linuxcnc-python-gui-reference.md
linuxcnc-gui-reference-gallery.md
gmoccapy-xyzab-reference.md
manual-assets/*
```
## 2. 文件总览
| 文件 | 类型 | 主要作用 | 当前使用方式 |
| --- | --- | --- | --- |
| [implementation-plan.md](implementation-plan.md) | 总体方案 | 定义项目定位、当前基线、LinuxCNC 参考案例、总体架构、RTCP 功能边界和阶段计划。 | 作为“为什么这样做”和“范围边界”的最高层说明。 |
| [technical-roadmap.md](technical-roadmap.md) | 技术路线 | 规定技术栈、目录建议、gmoccapy 风格 Web 方案、模块拆分、LinuxCNC 源码接入路线、数据流和里程碑。 | 作为架构拆分和里程碑路线图。 |
| [program-implementation-guide.md](program-implementation-guide.md) | 实施指南 | 给出具体编程步骤、目录结构、Step 1-11、当前实现状态、禁止事项和开工建议。 | 开发时按步骤查阅,避免把 UI fixture 当成 LinuxCNC 语义证明。 |
| [native-task-hal-sync-implementation-steps.md](native-task-hal-sync-implementation-steps.md) | Task/HAL 专项方案 | 详细规划 LinuxCNC task、motion、HAL 同步 runtime 的阶段、源码清单、C ABI、Worker 接线和验收矩阵。 | 推进 `nativeTaskReady``nativeHalSyncReady` Web 仿真边界时使用。 |
| [development-continuation.md](development-continuation.md) | 接续/交接文档 | 记录 M1 到 M23 的阶段状态、最新基线、后续任务、回归命令和禁止事项。 | 每轮开发前确认“当前最新状态”和必须跑的回归。 |
| [traceability-matrix.md](traceability-matrix.md) | 追溯矩阵 | 把功能、Web 实现位置、LinuxCNC 来源、边界分类、验证方式和每批开发记录串起来。 | 做合规追溯、验收和回归审计。 |
| [external-user-m-tool-db-simulation-plan.md](external-user-m-tool-db-simulation-plan.md) | 专项方案 | 说明红框 `external user-M/tool DB process` 如何以 Web 仿真纳入项目,以及 host/native 边界。 | 修改 tool DB 或 user-M 白名单前先看。 |
| [linuxcnc-python-gui-reference.md](linuxcnc-python-gui-reference.md) | GUI 参考说明 | 说明 AXIS、vismach、PyVCP、gmoccapy、QtVCP/QtDragon 各自提供哪些界面参考,以及哪些 native GUI 不能直接移植。 | Web UI 和 Three.js 机床模型设计参考。 |
| [linuxcnc-gui-reference-gallery.md](linuxcnc-gui-reference-gallery.md) | 界面图册 | 汇总 LinuxCNC 原始界面截图,说明 gmoccapy、QtVismach、AXIS、PyVCP、QtDragon 的参考优先级。 | 视觉和布局选型依据。 |
| [linuxcnc-parity-matrix.md](linuxcnc-parity-matrix.md) | 对标矩阵 | 记录当前 Web 项目对标的 LinuxCNC 配置、程序、功能和当前边界。 | UI diagnostics 和 Node smoke 的对标说明。 |
| [gmoccapy-xyzab-reference.md](gmoccapy-xyzab-reference.md) | gmoccapy XYZAB 参考 | 分析 LinuxCNC `gmoccapy_XYZAB.ini` 的启动、NML/HAL 通信、HAL 拓扑、G-code gate 和按钮图标边界。 | 作为 gmoccapy/trivkins reference profile不作为 RTCP 证明。 |
| [Web-RTCP五轴数控系统仿真界面操作手册.docx](<Web-RTCP五轴数控系统仿真界面操作手册.docx>) | Word 操作手册旧版 | 面向操作人员,说明系统定位、界面区域、上电/回零、AUTO、MANUAL、MDI、倍率、会话和常见问题。 | 旧版用户手册,适合了解基础操作流程。 |
| [Web-RTCP五轴数控系统仿真界面操作手册新版.docx](<Web-RTCP五轴数控系统仿真界面操作手册新版.docx>) | Word 操作手册新版 | 在旧版基础上强化 LinuxCNC 对标、右侧九入口互锁、真实五轴程序来源、项目目录、INI/HAL/tool table/remap 校验和验证记录。 | 当前推荐对外使用的操作手册。 |
| `.~lock.Web-RTCP五轴数控系统仿真界面操作手册.docx#` | LibreOffice 锁文件 | 记录某次 LibreOffice 打开 Word 手册时的用户、主机、时间和配置路径。 | 临时文件,不属于项目设计文档,也不应作为功能依据。 |
| [manual-assets/](manual-assets/) | 截图资产目录 | 保存操作手册用的界面截图和局部截图。 | 用于重建/更新 Word 手册、PDF 手册或网页说明。 |
## 3. Markdown 文件详细说明
### 3.1 `implementation-plan.md`
角色:总体实现方案。
它回答四个问题:
- 项目是什么:独立 Web 五轴 RTCP 数控仿真界面,不是真实硬实时机床控制器。
- 现有基础是什么:已有 interpreter WASM、OPFS/session、virtual HAL、AXIS 风格页面、5 轴源码覆盖和案例资产。
- 参考哪些 LinuxCNC 内容:`xyzac-trt``xyzbc-trt`、bridgemill、table-dual-rotary、`trtfuncs.c``5axiskins.c``switchkins.c`、Python GUI 和 PyVCP/HAL 配置。
- 阶段怎么走从方案文档、Web shell、5 轴 profile、kinematics WASM、RTCP 预览、操作级仿真到发布验证。
关键内容:
- 明确浏览器不直接驱动真实伺服、IO 或 Linux kernel realtime ABI。
- 要求 G-code 解释、canonical event、五轴运动学、remap 语义尽量保持 LinuxCNC-owned。
- 规定四层架构Web UI、Web Runtime/Session、LinuxCNC WASM/Source Boundary、Visualization/Playback。
- 定义 `FiveAxisMotionFrame``FiveAxisMachineProfile`
读者:
- 项目负责人用它判断范围。
- 开发者用它理解架构边界。
- 测试人员用它判断哪些能力不能被误宣称为完成。
### 3.2 `technical-roadmap.md`
角色:技术路线与模块设计。
它把总体方案落到工程结构,主要说明:
- 技术栈:原生 HTML/CSS + TypeScript/JavaScript ES modules、Vite/esbuild、Three.js、Emscripten、OPFS、Node smoke、Playwright/Chromium browser smoke。
- 不使用 React/Vue/Angular/Svelte 的原因:核心复杂度在 LinuxCNC/WASM、五轴运动学、RTCP 数据流和 Three.js。
- 推荐目录:`app/``core/linuxcnc_kinematics_wasm/``tests/`
- gmoccapy 5 轴 Web 化方案:页面布局、组件拆分、状态模型、样式原则。
- 模块拆分:`profiles``runtime``linuxcnc_kinematics_wasm``visualization``ui``panel-schema`
- LinuxCNC 源码接入步骤引用清单、C ABI shim、WASM 编译、Node 验证、Browser 验证、Python GUI 参考验收。
它和 `implementation-plan.md` 的关系:
- `implementation-plan.md` 偏“产品与边界”。
- `technical-roadmap.md` 偏“工程结构与技术路径”。
### 3.3 `program-implementation-guide.md`
角色:逐步编码指南。
它面向实际开发,按 Step 拆分:
- Step 1Web shell。
- Step 2状态模型。
- Step 3gmoccapy UI 组件。
- Step 4Three.js 五轴预览。
- Step 5profile 和 panel schema。
- Step 6LinuxCNC adapter。
- Step 7RTCP/kinematics frame。
- Step 8测试和验收。
- Step 9LinuxCNC TP queue timing runtime。
- Step 10Native task/HAL readiness artifact。
- Step 11LinuxCNC source program case coverage。
这个文件的特点是它同时保存“原计划”和“当前实现状态”。例如它会写明某些路径已经实现、某些 runtime 已经 ready、哪些 fallback 只能作为 UI 安全路径,不能作为 LinuxCNC proof。
维护规则:
- 新增 runtime 或 UI gate 时,应同步更新此文件的对应 Step。
- 如果只是记录某批开发结果,也要同时在 `traceability-matrix.md` 中登记。
### 3.4 `native-task-hal-sync-implementation-steps.md`
角色LinuxCNC Task/Motion/HAL 同步 runtime 的专项实施书。
它围绕两个 blocker 展开:
```text
nativeTaskReady=false
nativeHalSyncReady=false
```
文档目标不是把浏览器变成真实机床控制器,而是建立一个 LinuxCNC 源码拥有语义的 task/HAL 同步仿真 runtime使 Web UI 能按 LinuxCNC task、motion、HAL 的顺序运行程序、执行 MDI/JOG、同步 HAL pin。
主要内容:
- LinuxCNC 源程序参考清单:`task.hh``emctask.cc``motion.c``control.c``hal_lib.c` 等。
- 推荐架构Web UI -> Worker -> `linuxcnc_task_hal.wasm` -> task loop -> canonical queue -> motion command queue -> deterministic HAL scheduler -> status snapshot。
- textbak 和已有 virtual HAL 成果的可复用点。
- 阶段 0 到阶段 8source manifest、native probe、HAL runtime、motion sync、task runtime、machine-file session、SWITCHKINS、Worker/store 接线、Full boundary 提升。
- C/C++ API 和 WASM C ABI 设计。
- Node、Browser、WASM、Native optional proof 的验收矩阵。
边界重点:
- `nativeTaskReady=true``nativeHalSyncReady=true` 只允许在 Web simulation boundary 内成立。
- `hardwareDrive=false``hostRealtimeKernel=false``hostExternalUserMProcessReady=false``hostToolDbProcessReady=false``arbitraryUserMExecution=false` 必须继续显式显示;`externalUserMProcessReady=true``toolDbProcessReady=true` 只表示 `web_simulation_only`
### 3.5 `development-continuation.md`
角色:开发接续和最新状态基线。
这个文件是“下一轮继续干活时先看这里”的文档。它保留了 M1-M17 的历史记录,并在后半部分以“最新接续基线”重写当前状态。
重点章节:
- 当前完成情况UI shell、profile、kinematics WASM、interpreter WASM、TP queue timing、machine-file staging、task/motion/HAL Web simulation boundary、Three.js、source program coverage、OPFS 降级等。
- Three.js 当前状态:明确 Three.js 只消费 LinuxCNC runtime 输出,不解析 G-code不生成 CNC 运动语义。
- M18-M23native task/HAL audit、真实 LinuxCNC 源程序案例覆盖、Three.js 显示质量、OPFS 降级、Host/native 边界可见性、受控 tool DB/user-M Web 仿真。
- 每轮必须执行的回归命令。
- 禁止事项。
注意事项:
- 由于它是长期接续文档,章节编号有历史遗留和不连续现象。判断当前工作时应优先看“最新接续基线”。
- 它不等同于追溯证据,追溯证据应看 `traceability-matrix.md`
### 3.6 `traceability-matrix.md`
角色:实现追溯和验收账本。
它把每个功能回答成五列:
```text
功能 -> Web 实现位置 -> LinuxCNC 参考 -> 边界分类 -> 验证方式
```
它覆盖:
- gmoccapy shell、DRO、右侧按钮、底部控制、G-code 当前行。
- 上电、急停、复位、模式、JOG、MDI、RUN/PAUSE/RESUME/STOP。
- LinuxCNC 5 轴源程序 staging 和真实程序案例覆盖。
- interpreter WASM、TP WASM、Three.js 预览和执行轨迹。
- `xyzac-trt``xyzbc-trt``gmoccapy-xyzab` profile。
- PyVCP/HAL panel schema。
- Full execution boundary audit。
- Native task/HAL readiness artifact。
- OPFS/session fallback。
- tool DB Web 仿真和受控 user-M Web 仿真。
后半部分按批次记录 M0 到 M23 的开发追溯,包括:
- Files changed。
- Feature。
- LinuxCNC references。
- Boundary。
- Tests。
- Result。
- Remaining risk。
- Next。
使用场景:
- 验收时查“某个 UI 功能来自哪个 LinuxCNC 文件”。
- 修改代码后查“应该补哪条追溯记录”。
- 发现文档声称过高时,用边界分类纠偏。
### 3.7 `external-user-m-tool-db-simulation-plan.md`
角色:红框 `external user-M/tool DB process` 的专项设计与实施边界文档。
它说明:
- 为什么该能力不能作为任意 host 进程执行;
- tool DB Web/WASM 仿真如何读取 staged `tool.tbl`、保存到 OPFS/memory fallback并接入 `Tn/M6/G43/M61`
- 受控 user-M 仿真如何只允许白名单 `M128/M129/M428/M429/M430`
- UI 和 full boundary 如何显示 `toolDbProcessReady=true for web_simulation_only``externalUserMProcessReady=true for web_simulation_only`
- host tool DB process、host external user-M process、任意系统脚本执行仍为 false。
### 3.8 `linuxcnc-python-gui-reference.md`
角色LinuxCNC Python GUI 到 Web 的转换指南。
它逐项说明:
- AXIS菜单、工具栏、Manual/MDI、Preview、DRO、G-code 当前行、高亮和状态栏。
- vismach机床几何树、`Translate``Rotate``HalTranslate``HalRotate`、工作台/转台/主轴/刀具层级。
- PyVCP`SWITCHKINS``IDENTITY``TCP:XYZAC``TCP:XYZBC``USERK`、joint 数值和 HAL pin 绑定。
- gmoccapy大按钮、jog increment、override、右侧嵌入面板、多轴状态。
- QtVCP/QtDragon现代 CNC 操作屏、状态区、工具区、探测区、大屏布局。
关键边界:
```text
Python GUI 是界面和结构参考,不是浏览器 runtime 依赖。
```
不直接移植:
- Tkinter 主循环。
- `rs274.OpenGLTk`
- PyQt/QTVCP native widget。
- GTK/Glade native UI。
- native `hal.component()` 进程。
- LinuxCNC GUI 与 task/motion 的 native IPC。
- Python remap runtime。
### 3.9 `linuxcnc-gui-reference-gallery.md`
角色:界面截图参考图册。
它把 LinuxCNC 源码树自带界面截图整理成设计依据:
- `qtvismach_5axis_gantry.png`:五轴机床模型和 3D 视图优先参考。
- `gmoccapy_5_axis.png`:本项目首选操作员界面风格。
- `axis.png`:经典 LinuxCNC 操作布局参考。
- `axis-pyvcp.png`:右侧 PyVCP 面板和 SWITCHKINS 控件参考。
- `qtdragon.png``qtdragon_hd.png`:现代大屏/触控界面参考。
- `vismach.png``qtvismach.png`Python/QtVismach 机床仿真参考。
当前推荐组合:
```text
gmoccapy 5 Axis + QtVismach 5 Axis Gantry + PyVCP SWITCHKINS
```
### 3.10 `linuxcnc-parity-matrix.md`
角色:当前对标功能矩阵。
它记录 Web-RTCP 五轴仿真界面当前对标的 LinuxCNC 程序、配置文件和功能边界。运行时状态对象为 `linuxCncParityMatrix`gmoccapy diagnostics 会显示摘要Node smoke 通过 `tests/node/verify_linuxcnc_parity_matrix.mjs` 校验。
主要内容:
- 对标的 LinuxCNC 配置:`xyzac-trt.ini``xyzbc-trt.ini`
- 对标的 PyVCP/POSTGUI/HAL`xyzac-trt.xml``xyzbc-trt.xml``switchkins_postgui.hal`
- 对标的 remap`428remap.ngc``429remap.ngc``430remap.ngc`
- 对标的真实五轴 G-code`boat-xyzac.ngc``boat-xyzbc.ngc``impeller-7bl-xyzac.ngc``xyzac_switchkins*.ngc``xyzbc_switchkins.ngc`
- 已承接功能右侧纵向入口、模式互锁、颜色规则、项目目录、INI 对标、程序验证、实时轴值、预览路径、gmoccapy HAL 语义、task/HAL 边界。
边界结论:
```text
semanticBoundary=linuxcnc_source_function_parity_matrix_for_browser_simulation_not_hardware_control
```
### 3.11 `gmoccapy-xyzab-reference.md`
角色gmoccapy XYZAB native 示例到 Web 的参考边界。
它分析 LinuxCNC `gmoccapy_XYZAB.ini`
- native 配置:`DISPLAY=gmoccapy``TASK=milltask``EMCMOT=motmod``COORDINATES=X Y Z A B``KINEMATICS=trivkins coordinates=xyzab`
- native 启动顺序:解析 INI、启动 `linuxcncsvr`、启动 HAL/RTAPI、加载 `milltask`、加载 `halui`、执行 HALFILE、启动 gmoccapy、执行 POSTGUI_HALFILE。
- native 通信模型gmoccapy -> `linuxcnc.command()` -> NML -> milltaskstatus/error channelHAL shared memoryHALUIREMAP。
- HAL 拓扑joint command/feedback loop、spindle speed feedback、simulated home、gmoccapy postgui pin。
- G-code gateRESET、POWER、HOME、mode、interpreter idle。
- 按钮图标边界:图标资产只证明 UI 来源,按钮正确性仍依赖 Web store、task policy、runtime state 和 browser evidence。
重要说明:
```text
gmoccapy_XYZAB 是 trivkins simulation不是 TCP/RTCP proof。
```
## 4. Word 操作手册说明
### 4.1 `Web-RTCP五轴数控系统仿真界面操作手册.docx`
角色:基础操作手册旧版。
正文内容包括:
- 系统定位与安全边界。
- 界面区域说明。
- 标准开机、回零和模式切换流程。
- AUTO 自动运行流程。
- MANUAL 手动点动流程。
- MDI 命令流程。
- RTCP、IDENTITY 与 TCP 切换。
- 倍率、主轴、冷却和 HAL 输入。
- 程序来源、会话保存与恢复。
- 诊断信息和验收检查表。
- 常见问题处理。
- 关键按钮速查。
适用场景:
- 给第一次使用界面的人看。
- 排查 AUTO/MANUAL 颜色、POWER、Home、Run、MDI、Save Session 等基础问题。
### 4.2 `Web-RTCP五轴数控系统仿真界面操作手册新版.docx`
角色:当前推荐操作手册。
新版更强调“对标 LinuxCNC”
- 对标范围gmoccapy_5_axis、`xyzac-trt``xyzbc-trt`、INI/HAL/tool table/remap 文件结构。
- 右侧纵向按钮区E-STOP、POWER、RESET、AUTO、MANUAL、JOG、MDI、IDENTITY、TCP 的 active/allowed/status/operatorMessage/colorRule。
- 标准流程RESET -> POWER -> MANUAL -> HOME -> AUTO -> 选择 LinuxCNC 5-axis source -> TCP 或 M428 -> RUN。
- 刀具预览路径:由 LinuxCNC interpreter canonical motion、TP planner 或 task/HAL runtime 生成Three.js 只显示结果。
- G-code 实时执行与轴值RUN、STEP、PAUSE/RESUME、JOG、MDI 的数据来源。
- LinuxCNC 真实五轴程序来源:`xyzac_switchkins.ngc``xyzbc_switchkins.ngc``impeller-7bl-xyzac.ngc``boat-xyzac.ngc``boat-xyzbc.ngc``xyzac_switchkins_test_1/2/3.ngc`
- 项目目录:`machines/<profile>`,保存 INI、HAL/XML/TBL、remap_subs、demos。
- 诊断、倍率、主轴与冷却。
- 验证记录gmoccapy sidebar、machine-file staging、real LinuxCNC 5axis program cases、XYZAB gates、run feedback loop、build。
适用场景:
- 交付、验收、演示时优先使用。
- 需要证明程序来源、INI 对标、项目目录、真实五轴程序边界时使用。
## 5. `manual-assets` 截图资产说明
| 文件 | 图片尺寸 | 作用 |
| --- | --- | --- |
| [manual-assets/01-main-overview.png](manual-assets/01-main-overview.png) | 1440 x 1000 | 主界面总览展示预览区、DRO、G-code、右侧状态入口、底部控制栏。 |
| [manual-assets/02-power-home-manual.png](manual-assets/02-power-home-manual.png) | 1440 x 1000 | POWER 和 HOME 后的手动状态用于说明上电、回零、MANUAL/AUTO 可用性。 |
| [manual-assets/03-right-sidebar-manual.png](manual-assets/03-right-sidebar-manual.png) | 108 x 958 | 手动状态下右侧纵向按钮局部图,用于说明 MANUAL/JOG/MDI/AUTO/TCP 入口状态。 |
| [manual-assets/04-auto-active.png](manual-assets/04-auto-active.png) | 1440 x 1000 | AUTO 激活后的整屏状态用于说明自动模式、G-code 区和运行准备。 |
| [manual-assets/05-right-sidebar-auto.png](manual-assets/05-right-sidebar-auto.png) | 108 x 958 | AUTO 激活后的右侧按钮局部图,用于说明 AUTO 绿色、MANUAL 灰色等颜色规则。 |
| [manual-assets/06-run-program.png](manual-assets/06-run-program.png) | 1440 x 1000 | 程序运行状态截图,用于说明 G-code 当前行、DRO、runtime feedback、刀具路径预览。 |
| [manual-assets/07-manual-jog.png](manual-assets/07-manual-jog.png) | 1440 x 1000 | MANUAL/JOG 点动后的状态,用于说明 DRO 和轴值同步。 |
| [manual-assets/08-mdi-command.png](manual-assets/08-mdi-command.png) | 1440 x 1000 | MDI 命令输入状态,用于说明 MDI 输入框和执行入口。 |
| [manual-assets/09-mdi-executed.png](manual-assets/09-mdi-executed.png) | 1440 x 1000 | MDI 执行后的状态,用于说明坐标、程序来源和 MDI 历史同步。 |
| [manual-assets/10-overrides-and-hal.png](manual-assets/10-overrides-and-hal.png) | 1440 x 1000 | 倍率、HAL 输入、主轴、冷却截图,用于说明 Rapid/Feed/Spindle/Coolant 控件。 |
| [manual-assets/11-session-diagnostics.png](manual-assets/11-session-diagnostics.png) | 1440 x 1000 | 会话和诊断信息截图,用于说明 Save/Restore、OPFS/memory fallback、Task/HAL、Full boundary 等诊断。 |
维护建议:
- 更新 Word 手册时,先用同名截图替换 `manual-assets`,再重新嵌入手册。
- 如果 UI 布局或按钮状态改变,需要同步更新对应截图和手册说明。
- 截图文件本身是视觉证据,不是 runtime proofruntime proof 仍来自 Node/browser smoke、readiness artifact 和 traceability matrix。
## 6. 临时锁文件说明
文件:
```text
.~lock.Web-RTCP五轴数控系统仿真界面操作手册.docx#
```
作用:
- 这是 LibreOffice 打开 Word 文档时生成的锁文件。
- 内容包含用户、主机、打开时间和 LibreOffice 配置路径。
- 它不描述项目功能、不参与构建、不参与测试、不应作为文档依据。
处理建议:
- 如果确认没有 LibreOffice 正在编辑对应文档,可以删除。
- 如果文档仍在打开,保留锁文件,避免并发编辑冲突。
- 提交代码或整理文档资产时,建议不要把该文件纳入正式版本。
## 7. 文档分层关系图
高清 PNG![文档分层关系图](diagram-assets/01-docs-layer-relationship.png)
```mermaid
flowchart TD
A[docs 目录] --> B[方案层]
A --> C[实施层]
A --> D[追溯与对标层]
A --> E[参考层]
A --> F[操作手册层]
A --> G[截图资产层]
B --> B1[implementation-plan.md]
B1 --> B2[technical-roadmap.md]
C --> C1[program-implementation-guide.md]
C --> C2[native-task-hal-sync-implementation-steps.md]
B2 --> C1
C2 --> C1
D --> D1[development-continuation.md]
D --> D2[traceability-matrix.md]
D --> D3[linuxcnc-parity-matrix.md]
C1 --> D1
D1 --> D2
D3 --> D2
E --> E1[linuxcnc-python-gui-reference.md]
E --> E2[linuxcnc-gui-reference-gallery.md]
E --> E3[gmoccapy-xyzab-reference.md]
E1 --> B1
E2 --> B2
E3 --> D2
E3 --> D3
F --> F1[操作手册旧版 docx]
F --> F2[操作手册新版 docx]
G --> G1[manual-assets/*.png]
G1 --> F1
G1 --> F2
D2 --> F2
D3 --> F2
```
## 8. LinuxCNC 来源到 Web 仿真的关联流程图
高清 PNG![LinuxCNC 来源到 Web 仿真的关联流程图](diagram-assets/02-linuxcnc-to-web-simulation-flow.png)
```mermaid
flowchart LR
L1[LinuxCNC INI/HAL/TBL/remap] --> P[profiles 与 machine-file staging]
L2[LinuxCNC 5轴 G-code demos] --> P
L3[LinuxCNC kinematics C 源码] --> K[kinematics WASM]
L4[LinuxCNC interpreter/TP 源码] --> I[interpreter WASM + TP queue timing]
L5[LinuxCNC task/motion/HAL 源码] --> T[task/motion/HAL WASM simulation runtime]
L6[AXIS/vismach/PyVCP/gmoccapy/QtVCP GUI] --> U[Web UI + panel schema + Three.js scene]
P --> R[Web runtime/session]
K --> R
I --> R
T --> R
R --> S[store/state snapshot]
S --> U
U --> O[DRO/G-code/Three.js/diagnostics]
O --> M[操作手册截图与 manual-assets]
R --> V[Node/browser/WASM smoke 与 readiness artifact]
V --> X[traceability-matrix.md]
X --> D[development-continuation.md]
T -. 明确不包含 .-> H[真实硬件驱动]
T -. 明确不包含 .-> N[host realtime kernel]
T -. 明确不包含 .-> E[external user-M/tool DB process]
```
## 9. 操作流程关联图
高清 PNG![操作流程关联图](diagram-assets/03-operator-workflow.png)
```mermaid
flowchart TD
S0[打开 Web 仿真界面] --> S1{E-STOP 是否激活}
S1 -- 是 --> S2[RESET]
S1 -- 否 --> S3[POWER]
S2 --> S3
S3 --> S4[HOME]
S4 --> S5[选择模式]
S5 --> M1[MANUAL]
M1 --> M2[JOG X/Y 或其他轴]
M2 --> M3[DRO 与 runtime feedback 更新]
S5 --> A1[AUTO]
A1 --> A2[选择 LinuxCNC 5-axis source]
A2 --> A3[TCP 按钮或程序内 M428]
A3 --> A4[RUN / STEP / PAUSE / RESUME / STOP]
A4 --> A5[G-code 当前行、DRO、Three.js 执行轨迹同步]
S5 --> D1[MDI]
D1 --> D2[输入 MDI 命令]
D2 --> D3[执行命令]
D3 --> M3
A5 --> Q[Info Tabs 诊断]
M3 --> Q
Q --> Q1[Task policy]
Q --> Q2[INI/project]
Q --> Q3[Task/HAL]
Q --> Q4[Full boundary]
Q --> Q5[Host/native false 状态]
Q --> Q6[Tool DB/User-M Web simulation]
```
## 10. Native Task/HAL 专项流程图
高清 PNG![Native Task/HAL 专项流程图](diagram-assets/04-native-task-hal-flow.png)
```mermaid
flowchart TD
N0[阶段0 源码和构建清单补齐] --> N1[阶段1 Native 对照探针]
N1 --> N2[阶段2 HAL 内存模型和线程调度器]
N2 --> N3[阶段3 Motion realtime 同步最小闭环]
N3 --> N4[阶段4 Task runtime 移植]
N4 --> N5[阶段5 TRT machine-file session 接入]
N5 --> N6[阶段6 SWITCHKINS/M428/M429/M430 同步]
N6 --> N7[阶段7 Browser Worker 和 store 接线]
N7 --> N8[阶段8 Full boundary 提升]
N8 --> W[Web simulation boundary promoted]
W --> C1[nativeTaskReady=true 仅限 Web simulation]
W --> C2[nativeHalSyncReady=true 仅限 Web simulation]
W --> C3[fullLinuxCncProgramExecutionReady=true 仅限仿真边界]
W -. 仍为 false .-> B1[hardwareDrive=false]
W -. 仍为 false .-> B2[hostRealtimeKernel=false]
W --> B3[externalUserMProcessReady=true web_simulation_only]
W --> B4[toolDbProcessReady=true web_simulation_only]
W -. host 仍为 false .-> B5[hostExternalUserMProcessReady=false]
W -. host 仍为 false .-> B6[hostToolDbProcessReady=false]
```
## 11. 文档维护建议
更新规则:
1. 改项目范围或边界:先改 `implementation-plan.md`,再改 `technical-roadmap.md`
2. 改工程步骤或新增 runtime更新 `program-implementation-guide.md`
3. 改 Task/HAL、motion、native probe、Worker 接线:更新 `native-task-hal-sync-implementation-steps.md`
4. 完成一批开发:更新 `development-continuation.md``traceability-matrix.md`
5. 增加 LinuxCNC 对标来源:更新 `linuxcnc-parity-matrix.md` 或对应参考文档。
6. 改 UI 操作或截图:更新 `manual-assets` 和新版 Word 操作手册。
7. 任何 fixture、fallback、UI-only 结果都不能写成 LinuxCNC runtime proof。
最容易混淆的边界:
| 名称 | 可以说明 | 不能说明 |
| --- | --- | --- |
| Three.js 预览 | 显示 LinuxCNC runtime 输出的路径、TCP、刀轴、当前段。 | Three.js 自己解释 G-code 或生成 CNC 运动语义。 |
| Python GUI 参考 | 参考界面布局、机床模型层级、HAL 控件结构。 | 在浏览器中运行 Tk/PyQt/GTK/gmoccapy native runtime。 |
| Web simulation task/HAL | 在浏览器 WASM/Worker 中按仿真边界同步 task/motion/HAL 状态。 | 驱动真实硬件、接入 host realtime kernel、替代 LinuxCNC native realtime。 |
| `gmoccapy-xyzab` | 参考 gmoccapy native 启动、HAL、按钮和 gate。 | 证明 TRT/RTCP 五轴运动学。 |
| OPFS memory fallback | 当前页面生命周期内继续 staging/save/restore。 | 跨刷新持久化。 |
## 12. 快速查找
| 想查的问题 | 推荐文件 |
| --- | --- |
| 项目为什么不直接控制真实机床? | `implementation-plan.md``native-task-hal-sync-implementation-steps.md` |
| 第一版 Web UI 应该长什么样? | `technical-roadmap.md``linuxcnc-gui-reference-gallery.md` |
| 具体从哪个文件开始写代码? | `program-implementation-guide.md` |
| 下一轮工作基线是什么? | `development-continuation.md` 的“最新接续基线” |
| 某功能对应哪个 LinuxCNC 源文件? | `traceability-matrix.md` |
| 真实五轴程序有哪些? | `linuxcnc-parity-matrix.md`、新版操作手册 |
| Task/HAL runtime 怎么实现? | `native-task-hal-sync-implementation-steps.md` |
| gmoccapy XYZAB 与 Web 的关系是什么? | `gmoccapy-xyzab-reference.md` |
| 操作员怎么上电、回零、运行、MDI | `Web-RTCP五轴数控系统仿真界面操作手册新版.docx` |
| 手册截图从哪里来? | `manual-assets/` |

View File

@@ -0,0 +1,224 @@
# External user-M / Tool DB Web 仿真实施方案
生成日期2026-07-01
## 1. 目标
本文件把图中红框 `external user-M/tool DB process` 从“明确不包含”推进为
Web/WASM 仿真边界内的可验证能力:
```text
toolDbProcessReady=true for web_simulation_only
externalUserMProcessReady=true for web_simulation_only
hardwareDrive=false
hostRealtimeKernel=false
arbitraryHostProcessExecution=false
```
该能力只表示浏览器仿真可以读取、编辑、保存 tool table并能执行受控白名单
user-M/remap 事件。它不启动 host native LinuxCNC 外部进程,不执行任意 shell 脚本,
不接入真实 HAL shared memory不驱动真实机床 IO。
## 2. LinuxCNC 对标源程序
### 2.1 Tool DB / tool table
主要参考:
```text
linuxcnc/src/emc/task/taskclass.cc
linuxcnc/src/emc/task/taskclass.hh
linuxcnc/src/emc/tooldata/tooldata.hh
linuxcnc/src/emc/tooldata/tooldata_common.cc
linuxcnc/src/emc/tooldata/tooldata_mmap.cc
linuxcnc/src/emc/tooldata/tooldata_db.cc
linuxcnc/src/emc/tooldata/tooldata_nml.cc
linuxcnc/src/emc/nml_intf/emc.hh
linuxcnc/src/emc/usr_intf/axis/extensions/emcmodule.cc
```
关键 LinuxCNC 语义:
- `[EMCIO] TOOL_TABLE` 指向 tool table 文件。
- `[EMCIO] DB_PROGRAM` 存在时native LinuxCNC 会启用工具数据库进程模式,并可能忽略普通 tool table 文件。
- `Task::emcToolPrepare()` 设置 `iocontrol.0.tool-prepare``tool-prep-number``tool-prep-pocket``tool-prep-index`
- `Task::emcToolLoad()` 设置 `iocontrol.0.tool-change`,等待 `iocontrol.0.tool-changed`
- `Task::read_tool_inputs()``tool-prepared``tool-changed` 输入到达后更新 `toolInSpindle``toolFromPocket``pocketPrepped` 并复位 HAL pin。
- `Task::emcToolSetOffset()` 更新 tool offset、diameter、front/back angle、orientation并保存 tool table。
- `Task::emcToolSetNumber()` 对应 `M61` 设置当前刀具号。
本项目第一阶段只实现上述语义的 Web 仿真子集,不实现 LinuxCNC native DB_PROGRAM
外部进程协议。
### 2.2 user-M / remap
主要参考:
```text
linuxcnc/src/emc/rs274ngc/interp_* # user M / remap 解释入口
linuxcnc/src/emc/task/emctask.cc
linuxcnc/src/emc/task/emccanon.cc
linuxcnc/src/emc/nml_intf/emc.hh
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
linuxcnc/configs/sim/qtaxis/non-trivial/scara/remap_subs/428remap.ngc
linuxcnc/configs/sim/qtaxis/non-trivial/scara/remap_subs/429remap.ngc
linuxcnc/configs/sim/qtaxis/non-trivial/scara/remap_subs/430remap.ngc
```
关键 LinuxCNC 语义:
- native user-M 可以调用外部可执行文件或 remap 子程序。
- `M428/M429/M430` 在 TRT/switchkins 配置中通过 remap 子程序、`M68``M66`
和 HAL pin 同步 `motion.switchkins-type`
- 任意 user-M 外部程序可能访问文件、HAL、IO 或系统命令,不能在浏览器中直接执行。
本项目只允许白名单 user-M/remap 行为。白名单事件必须能追溯到 vendored
LinuxCNC 配置或 remap 文件,并在 Worker/WASM/Web runtime 中输出结构化 event 和
HAL/state patch。
## 3. Web 仿真功能范围
### 3.1 Tool DB Web/WASM simulation
必须支持:
- 读取 staged `tool.tbl`
- 解析 `T``P``X/Y/Z/A/B/C/U/V/W``D``I``J``Q``; comment`
- 查询工具号、刀袋、直径、长度/坐标偏置。
- 编辑并保存工具号、刀袋、刀长、刀径。
- OPFS 可用时持久保存OPFS 不可用时使用 memory fallback范围限定为当前页面生命周期。
- 按 LinuxCNC `CANON_TOOL_TABLE` 字段建模:`toolno``pocketno``offset``diameter``frontangle``backangle``orientation``comment`
- 按 LinuxCNC 非随机换刀器语义区分内部 `idx` 与真实 `pocketno`
- staged `tool.tbl` 中的 `P` 保留为 `pocketno`
- Web tool table 内部从 `idx=1` 顺序装载;
- `idx=0` 固定为 spindle pocket。
- 接入 `Tn/M6/G43/M61` 的仿真状态:
- `Tn`:按 `tooldata_find_index_for_tool()` 语义找到内部 `idx`,设置 `tool_prep_*` HAL pins。
- HAL loopback`read_tool_inputs()` 语义把 `tool_prepared` 转换为 `pocketPrepped`
- `M6`:按 `Task::emcToolLoad()``read_tool_inputs()` 把已准备刀具复制到 spindle pocket `idx=0`,设置 `toolInSpindle``toolFromPocket``tool_number`
- `G43 Hn`:按 `convert_tool_length_offset()` 使用 tool table offset设置 `activeToolOffset`#5400/#5401-#5413 参数快照。
- `M61 Qn`:直接设置当前刀具号。
- 保存时按 LinuxCNC `tooldata_format_toolline()` 风格输出,例如 `T4 P44 D+12.500000 Z+42.250000`
- UI diagnostics 显示 `toolDbProcessReady=true for web_simulation_only`
第一阶段不支持:
- LinuxCNC native `DB_PROGRAM` 外部工具数据库进程。
- 随机刀库完整换刀策略。
- 任意 host 文件系统写入。
- 真实 IO 或真实换刀机构。
### 3.2 受控 user-M simulation
必须支持:
- 不执行任意系统脚本。
- 只允许白名单内的 vendored M-code/remap 行为。
- 在 Worker/WASM/Web runtime 边界输出结构化 event
```text
code
allowed
sourceRel
semanticBoundary
halPatch
statePatch
promotionScope=web_simulation_only
hostExecution=false
```
第一批白名单:
| code | 来源 | Web 仿真效果 |
| --- | --- | --- |
| `M428` | TRT `428remap.ngc` / switchkins config | `motion.switchkins-type=1`RTCP/TCP on |
| `M429` | TRT `429remap.ngc` / switchkins config | `motion.switchkins-type=0`identity |
| `M430` | TRT `430remap.ngc` / switchkins config | `motion.switchkins-type=2`userk |
| `M128` | millturn/user-M reference | 受控事件switchkins/tool state 可追溯,不执行 host script |
| `M129` | millturn/user-M reference | 受控事件switchkins/tool state 可追溯,不执行 host script |
不在白名单内的 `M100-M199` 或任意外部程序必须 blocked并输出 blocked evidence。
## 4. 代码落点
建议新增:
```text
app/src/runtime/tool-db-simulation.js
app/src/runtime/controlled-user-m-simulation.js
tests/node/verify_tool_db_user_m_simulation.mjs
```
建议更新:
```text
app/src/runtime/full-execution-boundary.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
app/package.json
docs/implementation-plan.md
docs/program-implementation-guide.md
docs/native-task-hal-sync-implementation-steps.md
docs/development-continuation.md
docs/traceability-matrix.md
docs/linuxcnc-parity-matrix.md
docs/docs-directory-file-guide.md
docs/diagram-assets/02-linuxcnc-to-web-simulation-flow.mmd/png
docs/diagram-assets/04-native-task-hal-flow.mmd/png
```
## 5. 验收 gate
Node smoke
```text
node web-rtcp-5axis-sim-plan/tests/node/verify_tool_db_web_simulation.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_tool_db_user_m_simulation.mjs
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
```
必须输出:
```text
tool_db_web_simulation_smoke=ok
staged_tool_tbl_loaded=1
tool_db_query_edit_save=1
tool_db_t_m6_g43_state=1
tool_db_memory_fallback_save=1
host_tool_db_process=0
tool_db_user_m_simulation_smoke=ok
tool_db_process_ready_web_simulation_only=1
external_user_m_process_ready_web_simulation_only=1
arbitrary_user_m_blocked=1
host_process_execution=0
```
UI 必须显示:
```text
Tool DB/User-M: tool DB web simulation ready / controlled user-M ready
Host/native: hardware drive false / host realtime false / external user-M web simulation only / tool DB web simulation only
```
## 6. 边界声明
完成后允许:
```text
toolDbProcessReady=true
externalUserMProcessReady=true
toolDbProcessScope=web_simulation_only
externalUserMProcessScope=web_simulation_only
```
仍必须保持:
```text
hardwareDrive=false
hostRealtimeKernel=false
hostToolDbProcess=false
hostExternalUserMProcess=false
arbitraryUserMExecution=false
```

View File

@@ -0,0 +1,80 @@
# gmoccapy XYZAC TRT RTCP 五轴对标验证评价
日期2026-07-01
## 1. 评价结论
`gmoccapy-xyzac-trt` 页面功能已在 Web 仿真边界内对标 LinuxCNC `gmoccapy` 非平凡五轴 TRT 示例。结论为:通过。
通过范围是浏览器/Web/WASM 仿真边界:页面 profile、INI/HAL/TBL/NGC 项目文件 staging、gmoccapy POSTGUI 工具与主轴 HAL 语义、固定 TRT 默认 TCP 运动学、LinuxCNC interpreter canonical motion、TP planner sample、RTCP frame、DRO/Three.js 页面状态和 source guard 均已验证。该结论不声明原生 GTK `gmoccapy.py` 已移植不声明真实硬件、host realtime kernel、host HAL shared memory、native LinuxCNC task 进程或 host tool DB process 已就绪。
## 2. LinuxCNC 基线
本轮对标的 LinuxCNC 来源位于 `/home/meswork/cnc_wams/linuxcnc`
| 类别 | 基线文件 | 对标要点 |
| --- | --- | --- |
| gmoccapy TRT INI | `configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt.ini` | `DISPLAY=gmoccapy``OPEN_FILE=./examples/impeller-7bl-xyzac.ngc``JOG_AXES=XYZC``TRAJ=XYZAC``KINEMATICS=xyzac-trt-kins` |
| gmoccapy POSTGUI HAL | `configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/postgui.hal` | `gmoccapy.spindle_feedback_bar``gmoccapy.spindle_at_speed_led``gmoccapy.toolchange-*``gmoccapy.tooloffset-z` |
| generated HAL / tool table / vars | `xyzac-trt_cmds.hal``xyzac-trt.tbl``xyzac.var` | gmoccapy 机床项目文件、刀具表和 task/HAL session 来源 |
| remap macros | `configs/sim/gmoccapy/macros/change_g43.ngc``settool_g43.ngc` | `M6``M61` gmoccapy 工具更换/设刀 remap |
| 实际五轴程序 | `examples/impeller-7bl-xyzac.ngc``boat-xyzac.ngc``boat-xyzbc.ngc``test-xyzac.ngc``test-xyzbc.ngc` | gmoccapy TRT 示例程序 staging、选择、解释、预览 |
| 运动学源码 | `src/emc/kinematics/xyzac-trt-kins.c``trtfuncs.c``switchkins.c` | TRT 正逆解、TCP/identity/userk 类型语义 |
关键差异已经显式建模axis/vismach TRT profile 使用 `sparm=identityfirst``switchkinsType=1` 为 TCPgmoccapy TRT INI 不带 `sparm=identityfirst`,因此默认 type 0 即固定 TRT/TCP。Web profile 将这一点映射为 `kinsType=tcp-xyzac``rtcpState=on` 的默认状态。
## 3. Web 对标实现
| 实现项 | 文件 | 评价 |
| --- | --- | --- |
| 新增 profile | `app/src/profiles/gmoccapy-xyzac-trt.js``app/src/profiles/index.js` | 已对齐 gmoccapy INI 路径、display、open file、jog axes、M6/M61 remap、POSTGUI HAL、tool table、fixed TRT 默认 TCP |
| source reference | `app/src/profiles/source-reference-map.js` | 已把 gmoccapy TRT INI、HAL、TBL、examples、macros、kinematics source 纳入可追溯来源 |
| vendored LinuxCNC 文件 | `../wasm-port/vendor/linuxcnc/configs/sim/gmoccapy/...``../wasm-port/tools/source-manifest.txt` | 已复制 LinuxCNC gmoccapy TRT 配置、examples 和 macrosmanifest 已纳入这些文件 |
| machine-file staging | `app/src/runtime/linuxcnc-machine-file-staging.js` | 已支持 profile-specific `machineRel``demoDirectory=examples`、gmoccapy examples source guard、OPFS/memory fallback |
| INI parser | `app/src/runtime/linuxcnc-ini-runtime.js` | 已区分 switchkins TRT 与 gmoccapy fixed TRTgmoccapy 不强制 HALUI M428/M429/M430 和 `HAL_PIN_VARS=1`,改为要求 M6/M61 与 gmoccapy HALCMD 关键项 |
| store/main | `app/src/state/store.js``app/src/main.js` | 已让 fixed TRT 默认进入 `tcp-xyzac`/RTCP on并按 profile 默认加载 `impeller-7bl-xyzac.ngc` |
| build/static | `app/scripts/build-static.mjs` | 已把 gmoccapy config assets 复制到 source/dist 两套浏览器路径 |
| 页面 smoke | `tests/browser/gmoccapy_shell_smoke.html` | 已通过真实页面 profile selector 切换到 `gmoccapy-xyzac-trt`,验证 gmoccapy display、examples staging、INI、kinematics runtime、RTCP frame |
## 4. 测试与验证
| 测试项 | 验证内容 | 结果 |
| --- | --- | --- |
| profile/source map | profile 字段、fixed TRT 默认 type、gmoccapy HAL pins、source reference kinds | 通过 |
| INI 解析 | `xyzac-trt.ini` 的 DISPLAY、TRAJ、KINS、M6/M61、POSTGUI、HALCMD、servo/task period | 通过 |
| 文件 staging | gmoccapy INI、TBL、macros、examples 进入 staged projectsource guard 接受 `/examples/` | 通过 |
| 实际程序解释 | `impeller-7bl-xyzac.ngc``boat-xyzac.ngc``boat-xyzbc.ngc` 由 LinuxCNC interpreter runtime 输出 canonical motion 与 planner samples | 通过 |
| 运动学/RTCP | `xyzac-trt` WASM 以 fixed TRT type 0 构造 source-derived RTCP frame页面默认 RTCP on | 通过 |
| store/run preconditions | 切换 profile、加载 INI/runtime、加载 gmoccapy example、programValidation source guard、tool DB readiness、run preconditions | 通过 |
| 浏览器页面 | source 与 dist 页面均完成 gmoccapy shell smoke并显式覆盖 `gmoccapy-xyzac-trt` profile 切换 | 通过 |
| 静态构建 | gmoccapy config assets 被复制到 dist 并通过浏览器 dist smoke | 通过 |
已执行命令及关键输出:
```text
node tests/node/verify_gmoccapy_xyzac_trt_parity.mjs
gmoccapy_xyzac_trt_parity_smoke=ok
npm --prefix app run smoke:node
xyzac_trt_kinematics_runtime=ok
xyzbc_trt_kinematics_runtime=ok
real_linuxcnc_5axis_program_cases_smoke=ok
machine_file_staging_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_xyzac_trt_parity_smoke=ok
gmoccapy_trt_project_sidebar_smoke=ok
linuxcnc_parity_matrix_smoke=ok
npm --prefix app run smoke
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
```
此前也已执行 `npm --prefix app run build`,输出 `gmoccapy_static_build=ok`
## 5. 评价
`gmoccapy-xyzac-trt` 已达到本项目页面功能对标要求页面选择、项目文件、默认程序、INI/HAL/TBL/macros、真实 gmoccapy TRT examples、fixed TCP 运动学和 RTCP 页面状态均来自 LinuxCNC 源文件或 source-derived runtime 证据,不再把 axis/vismach switchkins 配置误当作 gmoccapy fixed TRT 配置。
剩余边界不是本轮缺陷,而是明确的能力边界:浏览器不运行 native GTK gmoccapy不连接 host HAL shared memory不控制真实电机/IO不启动 host realtime kernel不执行任意 host user-M 或 native tool DB process。后续若要声明这些能力需要新增 host/native 级验证,而不能沿用当前 Web simulation 结论。

View File

@@ -33,7 +33,7 @@
- RTCP/TCP 五轴联动还没有作为独立 Web 产品能力完整闭环。
- 当前浏览器页面主要是通用 AXIS 风格仿真,还不是专门的五轴/RTCP 操作界面。
- TRT/bridge 五轴运动学虽然有 source coverage 和 probe 基础,但需要形成面向 UI 的统一五轴 pose/joint/TCP 数据模型。
- Python remap、tool DB、external user-M process 等 hard block 仍不能伪装成浏览器 PASS。
- 任意 Python remap、任意 external user-M host process、host tool DB process 等 hard block 仍不能伪装成浏览器 PASS`tool.tbl` 和白名单 user-M 只允许在 `web_simulation_only` 边界内仿真
- Python GUI 的 native 控件、HAL component 进程、Tk/PyQt/GTK 主循环和 OpenGLTk 不能直接作为 Web 运行时使用,需要转换成 Web 组件、Three.js 场景和 virtual HAL 数据绑定。
## 3. LinuxCNC 参考案例选择
@@ -218,7 +218,8 @@ JavaScript 不直接复写 trtfuncs.c / 5axiskins.c 的公式作为最终语义
- 真实伺服周期硬实时;
- 完整 LinuxCNC task/motion 进程;
- 任意 Python remap runtime
- 任意 external user-M process
- 任意 external user-M host process
- 任意未在白名单内的 user-M 行为;
- 完整工业级碰撞检测;
- CAM 后处理器。

View File

@@ -11,7 +11,9 @@
| 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 更新 |
| Kinematics C 源码 | `src/emc/kinematics/xyzac-trt-kins.c``xyzbc-trt-kins.c``trtfuncs.c``switchkins.c` | XYZAC/XYZBC 正逆解、TCP/identity/userk 切换、DRO/TCP frame 更新Node direct proof 覆盖 `switchkinsType=1`、A/B/C TCP 姿态和 XYZBC B 轴保留 |
| Tool DB / task tool state | `src/emc/task/taskclass.cc``src/emc/tooldata/tooldata_common.cc``src/emc/nml_intf/emctool.h``src/emc/rs274ngc/interp_convert.cc``xyzac-trt.tbl``xyzbc-trt.tbl` | staged `tool.tbl` 解析、`CANON_TOOL_TABLE` 字段、非随机刀库 `idx/pocketno` 分离、spindle pocket `idx=0`、tool prepare/load/read_tool_inputs/offset、OPFS/memory fallback 保存 |
| controlled user-M/remap | `remap_subs/428remap.ngc``429remap.ngc``430remap.ngc`、LinuxCNC millturn M128/M129 用法 | 白名单 `M128/M129/M428/M429/M430` 转换为可追溯 HAL/state 事件,不执行 host 脚本 |
| 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 的互锁 |
@@ -31,6 +33,10 @@
| `demos/xyzac_switchkins_test_1.ngc` | M428/M429 多次切换验证 |
| `demos/xyzac_switchkins_test_2.ngc` | TCP/identity 过渡验证 |
| `demos/xyzac_switchkins_test_3.ngc` | switchkins 程序验证覆盖 |
| `gmoccapy/.../examples/impeller-7bl-xyzac.ngc` | gmoccapy fixed TRT 默认打开程序 |
| `gmoccapy/.../examples/boat-xyzac.ngc` | gmoccapy XYZAC TCP 船体程序 |
| `gmoccapy/.../examples/boat-xyzbc.ngc` | gmoccapy 示例目录中的 XYZBC TCP 程序,用于 interpreter/planner source guard 覆盖 |
| `gmoccapy/.../examples/test-xyzac.ngc``test-xyzbc.ngc` | gmoccapy TRT 示例 staging 完整性验证 |
## 3. 已承接的功能
@@ -46,10 +52,12 @@
| 预览路径 | Three.js/WebGL 预览程序路径、当前刀具位置、TCP 点和刀轴方向 |
| gmoccapy HAL 语义 | 硬按钮、jog、override、spindle、coolant、tool change、message/tool/user inputs 建模 |
| task/HAL 边界 | 保留 native task/HAL 与硬件实时边界,不把 Web 仿真误标为真实机床控制 |
| tool DB Web 仿真 | 读取 staged `tool.tbl`,支持刀具号/刀长/刀径/刀袋查询、编辑、保存;按 LinuxCNC 非随机刀库语义保留真实 `pocketno`,使用内部 `idx=1..n` 和 spindle pocket `idx=0`;接入 `Tn/M6/G43/M61`、HAL loopback `read_tool_inputs()`#5400/#5401-#5413 工具参数快照 |
| 受控 user-M Web 仿真 | 只允许白名单 user-M/remap 行为输出 HAL/state patch任意未白名单 user-M 被标记为 blocked |
## 4. 当前边界
- Web 端运行的是浏览器仿真状态机和 WASM/JS runtime不运行原生 GTK `gmoccapy.py`
- `gmoccapy.py`、Glade、Vismach Python 是界面/机床模型/HAL 语义参考,不是浏览器运行时。
- 硬件驱动、实时内核、真实 HAL shared memory、外部 user M 进程和真实 tool DB 不在浏览器内提升为 ready。
- 硬件驱动、实时内核、真实 HAL shared memory、host external user-M 进程、host tool DB process 不在浏览器内提升为 ready`externalUserMProcessReady=true``toolDbProcessReady=true` 只代表 `web_simulation_only`
- `linuxCncParityMatrix``semanticBoundary` 固定为 `linuxcnc_source_function_parity_matrix_for_browser_simulation_not_hardware_control`

View File

@@ -28,10 +28,16 @@ promotionAllowed=true for Web simulation boundary only
- 真实硬件 IO、Mesa/并口/伺服驱动;
- Linux 内核实时线程等同物;
- 任意外部 user-M 进程
- 任意外部 user-M host 进程或系统脚本执行
- Python GUI、GTK、Tk、QtVCP runtime
- 未经过 LinuxCNC 源码边界验证的 JavaScript CNC 语义。
已单独实现但只限 Web simulation boundary
- staged `tool.tbl` 的 tool DB Web/WASM 仿真;
- 白名单 `M128/M129/M428/M429/M430` 的受控 user-M 仿真;
- `Tn/M6/G43/M61` 与 HAL/state 事件的可追溯状态输出。
## 2. LinuxCNC 源程序参考清单
后续实现必须以这些源文件为主参考,不能用 Web 侧自定义状态机替代 CNC 语义:
@@ -182,7 +188,7 @@ ini.x.min_limit / ini.x.max_limit
ini.z.min_limit / ini.z.max_limit
```
这对 TRT `M428/M429/M430` 的 task/HAL 同步很有价值可复用状态目标、guard pin、source-boundary report 的写法。但仍然不执行 arbitrary external user-M process不解除 native promotion。
这对 TRT `M428/M429/M430` 的 task/HAL 同步很有价值可复用状态目标、guard pin、source-boundary report 的写法。当前实现已把这些模式收敛为白名单 user-M Web 仿真事件,但仍然不执行 arbitrary external user-M host process不解除 native promotion。
### 4.5 kinematics 和 HAL shim 已有注意事项
@@ -798,6 +804,9 @@ Traceability document records every source file and boundary
```text
hardwareDrive=false
hostRealtimeKernel=false
externalUserMProcessReady=false unless separately implemented
toolDbProcessReady=false unless separately implemented
externalUserMProcessReady=true for web_simulation_only
toolDbProcessReady=true for web_simulation_only
hostExternalUserMProcessReady=false
hostToolDbProcessReady=false
arbitraryUserMExecution=false
```

View File

@@ -186,7 +186,7 @@ plannerRuntimeReady=false
fullLinuxCncProgramExecutionReady=false
```
这只提升普通 G-code canonical execution source不代表 Python remap、tool DBexternal user-M process 或完整 planner 已 promoted。
这只提升普通 G-code canonical execution source不代表任意 Python remap、host tool DB process、host external user-M process 或完整 planner 已 promoted。`tool.tbl` 读取/编辑/保存使用 Web/WASM tool DB 仿真边界:按 LinuxCNC `CANON_TOOL_TABLE` 字段、非随机刀库内部 `idx` 与真实 `pocketno`、spindle pocket `idx=0``Tn/M6/G43/M61``read_tool_inputs()` 语义运行;白名单 user-M 行为同样只能在 `web_simulation_only` 边界内声明 ready。
### Step 3gmoccapy UI 组件
@@ -493,7 +493,8 @@ readiness
HAL runtime、HAL sync 和 task/HAL comparison artifact 都通过时,才允许在 Web
simulation boundary 内标记 `nativeTaskReady=true``nativeHalSyncReady=true`
`fullLinuxCncProgramExecutionReady=true`。该提升仍不代表 hardware drive、host realtime
kernel、external user-M process 或 tool DB process ready
kernel、host external user-M process 或 host tool DB process ready;受控 user-M 和
tool DB 只能以 `web_simulation_only` 进入 full boundary。
当前边界:
@@ -507,7 +508,11 @@ nativeHalSyncReady=true for Web simulation boundary
fullLinuxCncProgramExecutionReady=true when machine-file remap and task/HAL gates also pass
hardwareDrive=false
hostRealtimeKernel=false
externalUserMProcessReady=false
externalUserMProcessReady=true for web_simulation_only
toolDbProcessReady=true for web_simulation_only
hostExternalUserMProcessReady=false
hostToolDbProcessReady=false
arbitraryUserMExecution=false
```
### Step 10Native task/HAL readiness artifact
@@ -539,6 +544,8 @@ nativeHostAndHardware.hardwareDrive=false
nativeHostAndHardware.hostRealtimeKernel=false
nativeHostAndHardware.externalUserMProcessReady=false
nativeHostAndHardware.toolDbProcessReady=false
toolUserWebSimulation.externalUserMProcessReady=true
toolUserWebSimulation.toolDbProcessReady=true
gates.promotion_scope=web_simulation_only
```
@@ -550,8 +557,10 @@ task_hal_web_simulation_boundary_consistent=1
native_task_hal_host_probe_status=passed_or_ready_disabled_by_default_or_skipped_missing_host_runtime
hardware_drive=0
host_realtime_kernel=0
external_user_m_process_ready=0
tool_db_process_ready=0
external_user_m_process_ready=1
tool_db_process_ready=1
host_external_user_m_process_ready=0
host_tool_db_process_ready=0
promotion_scope=web_simulation_only
```
@@ -612,20 +621,23 @@ real_linuxcnc_5axis_program_cases_smoke=ok
- 不在 JavaScript 中实现 G-code 解释器。
- 不在 JavaScript 中实现 LinuxCNC 五轴运动学公式作为最终语义源。
- 不把 gmoccapy Python/GTK runtime 移植进浏览器。
- 不把 Python remap/tool DB/external user-M process 伪装成已支持。
- 不把任意 Python remap、host tool DB process、host external user-M process 伪装成已支持;只允许 staged `tool.tbl` 和白名单 user-M 在 Web/WASM 仿真边界内声明 ready
- 不用 UI fixture 结果冒充 LinuxCNC runtime proof。
- 用于 5 轴 machine-file backed run 的 G-code 必须来自 LinuxCNC 源程序目录
`configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc`
- 用于 5 轴 machine-file backed run 的 G-code 必须来自当前 profile 对应的 LinuxCNC 源程序目录
`configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc`
`configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples/*.ngc`
用户上传或手写的 G-code 只能作为 operator file/普通 interpreter 输入,不得标记为
`linuxcnc-vendored-5axis-gcode` 或用于 5 轴源程序边界证明。
## 6. 开工建议
当前已完成 Step 1 到 Step 9 的 Node/browser LinuxCNC kinematics proof、浏览器 Worker kinematics 隔离、浏览器 Worker interpreter canonical execution source、`xyzac-trt`/`xyzbc-trt` profile 切换、OPFS 五轴会话保存/恢复、OPFS machine-file staging、machine-file backed `fiveAxisRemap` C ABI run、程序级 `M428/M429` switchkins RTCP 自动切换、LinuxCNC TP queue timing runtime、full execution boundary audit以及真实 LinuxCNC TRT 5 轴 `.ngc` 源程序 staging/选择/运行路径。native task/HAL 执行文档的 Phase 0-8 已建立 Web simulation boundarysource manifest、默认禁用的 native TRT probe、HAL registry/thread scheduler、minimal motion/HAL servo-cycle C ABI、`lctask_*` task shim、SDK wrapper、machine-file session、store/UI diagnostics 和 full boundary gate。`M428/M429/M430` 当前既可作为 Web runtime switchkins 事件驱动 `lckins_switch()`,也可在 staged machine-file run 中交给 vendored LinuxCNC five-axis remap C ABI 验证,还可通过 task/HAL runtime 的 MDI path 写入 `motion.switchkins-type` HAL snapshot只有 LinuxCNC source manifest 中的 `configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc` 可作为 `linuxcnc-vendored-5axis-gcode` 进入 UI 和 machine-file run。`web-rtcp-5axis-full-linuxcnc-execution-boundary` 可以在 kinematics/interpreter/machine-file-remap/TP/task-HAL gates 同时通过时报告 `promotionAllowed=true`,但该提升仅限 Web simulation boundary仍必须显示 `hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false`
当前已完成 Step 1 到 Step 10 的 Node/browser LinuxCNC kinematics proof、浏览器 Worker kinematics 隔离、浏览器 Worker interpreter canonical execution source、`xyzac-trt`/`xyzbc-trt`/`gmoccapy-xyzac-trt` profile 切换、OPFS 五轴会话保存/恢复、OPFS machine-file staging、machine-file backed `fiveAxisRemap` C ABI run、程序级 `M428/M429` switchkins RTCP 自动切换、LinuxCNC TP queue timing runtime、full execution boundary audit、受控 tool DB/user-M Web 仿真,以及真实 LinuxCNC TRT 5 轴 `.ngc` 源程序 staging/选择/运行路径。native task/HAL 执行文档的 Phase 0-8 已建立 Web simulation boundarysource manifest、默认禁用的 native TRT probe、HAL registry/thread scheduler、minimal motion/HAL servo-cycle C ABI、`lctask_*` task shim、SDK wrapper、machine-file session、store/UI diagnostics 和 full boundary gate。`M428/M429/M430` 当前既可作为 Web runtime switchkins 事件驱动 `lckins_switch()`,也可在 staged machine-file run 中交给 vendored LinuxCNC five-axis remap C ABI 验证,还可通过受控 user-M Web 仿真输出可追溯 HAL/state patch。staged `tool.tbl` 当前可被 Web tool DB 读取、编辑、保存到 OPFS/memory fallback并按 LinuxCNC `CANON_TOOL_TABLE`、非随机刀库 `idx/pocketno`、spindle pocket `idx=0``Tn/M6/G43/M61``read_tool_inputs()`#5400/#5401-#5413 语义更新仿真状态store/browser API 暴露 `queryToolDb()``editToolDb()``saveToolDb()` 供查询、编辑和保存。只有 LinuxCNC source manifest 中当前 profile 对应`configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc``configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples/*.ngc` 可作为 `linuxcnc-vendored-5axis-gcode` 进入 UI 和 machine-file run。`web-rtcp-5axis-full-linuxcnc-execution-boundary` 可以在 kinematics/interpreter/machine-file-remap/TP/task-HAL/tool-DB/user-M gates 同时通过时报告 `promotionAllowed=true`,但该提升仅限 Web simulation boundary仍必须显示 `hardwareDrive=false``hostRealtimeKernel=false``hostExternalUserMProcessReady=false``hostToolDbProcessReady=false``arbitraryUserMExecution=false`
M24 已把 LinuxCNC kinematics runtime Node direct proof 从 `xyzac-trt` 扩展到 `xyzbc-trt`,并以 `switchkinsType=1` 验证两个 TRT WASM 模块的正解/逆解闭环。`rtcpFrame.tcpPose` 和 Three.js `data-three-tcp-pose` 现在同时输出 `a/b/c`,其中 XYZBC 的 B 轴姿态可被 store smoke 和浏览器诊断链路追溯,不再只依赖 C 轴或默认 A 轴字段。
OPFS session 和 machine-file staging 当前具备 capability 检测。安全上下文且 `navigator.storage.getDirectory()` 可用时使用 OPFS公网 HTTP/IP 或浏览器禁用 OPFS 时切换到 memory fallback。memory fallback 只保证当前页面生命周期内的保存、恢复、staging 和 full boundary audit 可继续运行不声明跨刷新持久化。UI diagnostics 必须显示 storage mode、OPFS unavailable 状态和原因,公共 HTTP smoke 必须验证无 uncaught exception且不依赖 OPFS 的预览、DRO、G-code 加载、运行和 Three.js 显示继续通过。
gmoccapy info tabs 当前还必须显示 Host/native boundary`hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false`。browser smoke 需要同时检查 DOM 和 `fullExecutionBoundary` state避免把 Web simulation promoted 误读为 host-native 或硬件能力 ready。
gmoccapy info tabs 当前还必须显示 Host/native boundary`hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=true for web_simulation_only``toolDbProcessReady=true for web_simulation_only``hostExternalUserMProcessReady=false``hostToolDbProcessReady=false``arbitraryUserMExecution=false`。browser smoke 需要同时检查 DOM 和 `fullExecutionBoundary` state避免把 Web simulation promoted 误读为 host-native 或硬件能力 ready。
注意:`wasm-port/tests/wasm/node/verify_hal_runtime.sh``wasm-port/tests/wasm/node/verify_motion_hal_sync.sh``wasm-port/tests/wasm/node/verify_task_hal_wasm.sh``wasm-port/tests/wasm/node/verify_task_hal_sdk.sh` 会写同一个 `build/wasm/task-hal/linuxcnc_task_hal.*` 输出,验证时应串行运行,避免并发构建竞争造成无效 WASM 产物。

View File

@@ -140,12 +140,12 @@ src/emc/kinematics/kins_util.c
| RTCP frame UI plumbing | implemented_fixture_and_kinematics_wasm | fixture fallback 仍为 `linuxCncKinematicsReady=false`browser/node kinematics proof 为 `source-derived-kinematics-wasm` / `linuxcnc_kinematics_wasm_c_abi` |
| Operator workflow | implemented_linuxcnc_task_policy_with_canonical_motion | 上电/急停/复位/模式/JOG/MDI/RUN/PAUSE/RESUME/STOP/HOME 通过 `linuxcnc_task_state_mode_command_gate`;普通程序执行来自 LinuxCNC canonical motion |
| LinuxCNC boundary adapter | kinematics_and_interpreter_connected | `web-rtcp-5axis-linuxcnc-boundary-adapter` 可区分 kinematics-only ready 与 interpreter/remap missing |
| Full execution boundary audit | implemented_task_motion_hal_simulation_runtime | `web-rtcp-5axis-full-linuxcnc-execution-boundary` 汇总 kinematics/interpreter/machine-file-remap/TP/task-HAL evidenceWeb simulation boundary 可提升,仍明确 `hardwareDrive=false``hostRealtimeKernel=false``externalUserMProcessReady=false``toolDbProcessReady=false` |
| Full execution boundary audit | implemented_task_motion_hal_simulation_runtime | `web-rtcp-5axis-full-linuxcnc-execution-boundary` 汇总 kinematics/interpreter/machine-file-remap/TP/task-HAL/tool-DB/user-M evidenceWeb simulation boundary 可提升,仍明确 `hardwareDrive=false``hostRealtimeKernel=false``hostExternalUserMProcessReady=false``hostToolDbProcessReady=false``arbitraryUserMExecution=false` |
| PyVCP/HAL panel schema | implemented_reference_only | `xyzac-trt-switchkins-pyvcp` 已整理 SWITCHKINS 控件与 HAL nets不执行 native HAL |
| Python GUI runtime | not_ported | 只参考,不运行 |
| Python remap runtime | blocked | 不在第一版实现 |
| tool DB runtime | blocked | 不在第一版实现 |
| external user-M process | blocked | 不在第一版实现 |
| tool DB runtime | web_simulation_only | 读取 staged `tool.tbl`,支持查询/编辑/保存刀具号、刀长、刀径、刀袋,并接入 `Tn/M6/G43/M61` 仿真状态host tool DB process 仍为 false |
| external user-M process | controlled_web_simulation_only | 只允许白名单 `M128/M129/M428/M429/M430` 输出 HAL/state 事件;任意 host user-M 脚本和系统进程执行仍为 false |
| native hard realtime | out_of_scope | Web 仿真不实现 |
## 5. 每批开发追溯记录模板
@@ -1456,5 +1456,216 @@ Remaining risk:
realtime kernel, hardware IO, external user-M process, or native tool DB
process support.
Next:
none_from_development_continuation
M23 adds controlled tool DB and user-M Web simulation while keeping host
external process readiness false.
```
## 26. M23 受控 tool DB / user-M Web 仿真追溯记录
```text
Batch: M23-controlled-tool-db-user-m-web-simulation
Date: 2026-07-01 CST
Files changed:
app/src/runtime/tool-db-simulation.js
app/src/runtime/controlled-user-m-simulation.js
app/src/runtime/full-execution-boundary.js
app/src/runtime/native-task-hal-audit.js
app/src/state/store.js
app/src/main.js
app/src/ui/gmoccapy-shell.js
app/package.json
tests/node/verify_tool_db_web_simulation.mjs
tests/node/verify_tool_db_user_m_simulation.mjs
tests/node/verify_full_execution_boundary.mjs
tests/node/verify_machine_file_staging.mjs
tests/node/verify_native_task_hal_audit.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
Implements the previously excluded red-box external user-M/tool DB capability
as a controlled Web/WASM simulation boundary. The runtime reads staged
LinuxCNC tool tables, models CANON_TOOL_TABLE fields, preserves LinuxCNC
non-random changer idx versus pocketno semantics, keeps idx=0 as the spindle
pocket, simulates tool prepare/load/read_tool_inputs/offset state, saves edits
through OPFS or memory fallback, and converts whitelisted user-M/remap actions
into traceable HAL/state events without executing arbitrary host scripts.
LinuxCNC references:
linuxcnc/src/emc/task/taskclass.cc:281
linuxcnc/src/emc/task/taskclass.cc:425
linuxcnc/src/emc/task/taskclass.cc:482
linuxcnc/src/emc/task/taskclass.cc:527
linuxcnc/src/emc/task/taskclass.cc:572
linuxcnc/src/emc/task/taskclass.cc:614
linuxcnc/src/emc/task/taskclass.hh
linuxcnc/src/emc/tooldata/tooldata_common.cc:70
linuxcnc/src/emc/tooldata/tooldata_common.cc:365
linuxcnc/src/emc/nml_intf/emctool.h:29
linuxcnc/src/emc/nml_intf/emc.hh
linuxcnc/src/emc/rs274ngc/interp_convert.cc:6236
linuxcnc/src/emc/rs274ngc/interp_find.cc:716
linuxcnc/src/emc/task/emctask.cc
linuxcnc/src/emc/task/emccanon.cc
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.tbl
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
Boundary:
toolDbProcessReady=true for web_simulation_only
externalUserMProcessReady=true for web_simulation_only
toolDbProcessScope=web_simulation_only
externalUserMProcessScope=web_simulation_only
hostToolDbProcessReady=false
hostExternalUserMProcessReady=false
arbitraryUserMExecution=false
hostProcessExecution=false
Tests:
node web-rtcp-5axis-sim-plan/tests/node/verify_tool_db_web_simulation.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_tool_db_user_m_simulation.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_full_execution_boundary.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_machine_file_staging.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_native_task_hal_audit.mjs
Result:
tool_db_web_simulation_smoke=ok
staged_tool_tbl_loaded=1
tool_db_query_edit_save=1
tool_db_t_m6_g43_state=1
tool_db_memory_fallback_save=1
host_tool_db_process=0
tool_db_user_m_simulation_smoke=ok
tool_db_process_ready_web_simulation_only=1
external_user_m_process_ready_web_simulation_only=1
arbitrary_user_m_blocked=1
host_process_execution=0
Remaining risk:
This does not implement LinuxCNC DB_PROGRAM, random changer semantics, native
host tool DB services, arbitrary user-M script execution, or hardware IO.
Next:
Keep whitelist entries and tool-table fields traceable to staged LinuxCNC
source assets when new machine profiles are added.
```
## 27. M24 XYZBC TRT kinematics parity proof 追溯记录
```text
Batch: M24-xyzbc-trt-kinematics-parity
Date: 2026-07-01 CST
Files changed:
app/src/runtime/rtcp-frame.js
app/src/visualization/five-axis-scene.js
tests/node/verify_linuxcnc_kinematics_runtime.mjs
tests/node/verify_rtcp_store.mjs
docs/development-continuation.md
docs/linuxcnc-parity-matrix.md
docs/program-implementation-guide.md
Feature:
Completes the next five-axis parity step for the XYZBC table rotary tilting
profile. The Web RTCP frame now preserves B in tcpPose for both fixture and
LinuxCNC kinematics frames, the Three.js diagnostic dataset exposes the same
B-axis TCP pose, and the runtime smoke proves both XYZAC and XYZBC TRT WASM
modules in switchkins TCP mode.
LinuxCNC references:
linuxcnc/src/emc/kinematics/xyzac-trt-kins.c
linuxcnc/src/emc/kinematics/xyzbc-trt-kins.c
linuxcnc/src/emc/kinematics/trtfuncs.c
linuxcnc/src/emc/kinematics/switchkins.c
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
Boundary:
semanticBoundary=linuxcnc_kinematics_wasm_c_abi
scope=node_direct_web_runtime_proof
hardwareDrive=false
hostRealtimeKernel=false
Tests:
node --check app/src/runtime/rtcp-frame.js
node --check app/src/visualization/five-axis-scene.js
node tests/node/verify_linuxcnc_kinematics_runtime.mjs
node tests/node/verify_rtcp_store.mjs
Result:
xyzac_trt_kinematics_runtime=ok
xyzbc_trt_kinematics_runtime=ok
linuxcnc_kinematics_runtime_smoke=ok
xyzbc_b_axis_tcp_pose_preserved=1
rtcp_store_smoke=ok
Remaining risk:
This is still browser/Web runtime parity. It does not promote hardware IO,
host realtime kernel execution, or native LinuxCNC task/HAL processes.
Next:
Keep XYZBC browser smoke evidence aligned with B-axis tcpPose when expanding
UI diagnostics or adding additional TRT machine profiles.
```
## 28. M25 gmoccapy XYZAC TRT RTCP 页面对标追溯记录
```text
Batch: M25-gmoccapy-xyzac-trt-rtcp-parity
Date: 2026-07-01 CST
Files changed:
app/src/profiles/gmoccapy-xyzac-trt.js
app/src/profiles/index.js
app/src/profiles/source-reference-map.js
app/src/profiles/xyzac-trt.js
app/src/runtime/linuxcnc-machine-file-staging.js
app/src/runtime/linuxcnc-ini-runtime.js
app/src/state/store.js
app/src/main.js
app/scripts/build-static.mjs
app/package.json
tests/node/verify_gmoccapy_xyzac_trt_parity.mjs
tests/browser/gmoccapy_shell_smoke.html
docs/gmoccapy-xyzac-trt-rtcp-verification-evaluation.md
docs/linuxcnc-parity-matrix.md
docs/program-implementation-guide.md
docs/development-continuation.md
wasm-port/tools/source-manifest.txt
wasm-port/vendor/linuxcnc/configs/sim/gmoccapy/...
Feature:
Adds a gmoccapy-specific XYZAC table-rotary-tilting profile that maps the
LinuxCNC gmoccapy non-trivial kinematics sample into the Web page. The profile
preserves DISPLAY=gmoccapy, OPEN_FILE examples/impeller-7bl-xyzac.ngc,
JOG_AXES=XYZC, M6/M61 gmoccapy remaps, POSTGUI tool/spindle HAL pins, gmoccapy
macros, tool table, and fixed TRT default TCP semantics.
LinuxCNC references:
linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt.ini
linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/postgui.hal
linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt.tbl
linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt_cmds.hal
linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples/*.ngc
linuxcnc/configs/sim/gmoccapy/macros/change_g43.ngc
linuxcnc/configs/sim/gmoccapy/macros/settool_g43.ngc
linuxcnc/src/emc/kinematics/xyzac-trt-kins.c
linuxcnc/src/emc/kinematics/trtfuncs.c
linuxcnc/src/emc/kinematics/switchkins.c
Boundary:
profileId=gmoccapy-xyzac-trt
semanticBoundary=linuxcnc_gmoccapy_nontrivial_xyzac_trt_profile_source_map
fixedTrtDefault=true
defaultKinsType=tcp-xyzac
rtcpState=on
sourceGuard=profile_specific_linuxcnc_gmoccapy_examples_only
hardwareDrive=false
hostRealtimeKernel=false
nativeGtkGmoccapy=false
Tests:
node tests/node/verify_gmoccapy_xyzac_trt_parity.mjs
node tests/node/verify_machine_file_staging.mjs
node tests/node/verify_linuxcnc_ini_runtime.mjs
node tests/node/verify_linuxcnc_parity_matrix.mjs
npm --prefix app run smoke:node
npm --prefix app run smoke
npm --prefix app run build
Result:
gmoccapy_xyzac_trt_parity_smoke=ok
machine_file_staging_smoke=ok
linuxcnc_ini_runtime_smoke=ok
linuxcnc_parity_matrix_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
gmoccapy_static_build=ok
Remaining risk:
This proves the Web page and Web/WASM simulation boundary. It does not port
native GTK gmoccapy, host HAL shared memory, hardware IO, host realtime kernel,
arbitrary host user-M scripts, or native host tool DB processes.
Next:
If native gmoccapy or host realtime capability is required, add a separate
host/native validation layer rather than promoting this Web simulation proof.
```