Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/01-项目功能内容.md
2026-07-03 08:49:13 -04:00

12 KiB
Raw Blame History

01-项目功能内容

目标

对标 LinuxCNC xyzbc-trt 当前运行配置,在 Web 中实现 XYZBC table rotary/tilting 五轴数控系统仿真界面。界面基于 HTML/JavaScript文件和会话持久化基于 OPFSCNC 核心能力通过 wasm-port 的 LinuxCNC-derived WASM/SDK 边界提供。

Native 对标基线:

  • 后续以 /home/mes123456/cnc_wams/linuxcnc 作为 LinuxCNC xyzbc-trt 源码与真实执行基线。
  • Web 数控仿真界面和逻辑必须根据该路径编译后执行 configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini 的真实运行结果设计。
  • native evidence 采集脚本应通过 /home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment 启动/连接 LinuxCNC而不是继续依赖 /home/mes123456/linuxcnc-master
  • /home/mes123456/cnc_wams/linuxcnc 已完成 run-in-place 编译,并已验证 scripts/rip-environmentscripts/linuxcncbin/axisbin/xyzbc-trt-guibin/milltaskbin/linuxcncsvrbin/haluirtlib/xyzbc-trt-kins.sortlib/tpmod.solib/python/linuxcnc.so 存在可用。后续可以基于该路径重新生成真实 native JSON。

完全对标要求:

  • working 下的设计、任务和验收必须逐项覆盖 doc/xyzbc-trt-runtime-files.md 中记录的运行进程、启动顺序、INI 配置、AXIS 界面行为、PyVCP、POSTGUI HAL、basic_sim、Vismach、switchkins/remap、G-code 子程序、tool table、parameter file、kinematics HAL pins、轴/关节限制和 JSON 执行证据。
  • Web 不只展示五轴场景,还必须具备与 LinuxCNC 配置等价的运行状态、按钮行为、文件 staging、HAL/task 反馈、刀具预览路径、刀具执行路径和 native/Web JSON 对比闭环。
  • 无法在浏览器中一比一复用的 LinuxCNC 桌面组件,例如 AXIS/Tk/PyVCP/Vismach 窗口,必须在 Web 中提供同语义等效实现,并在 evidence JSON 中说明替代边界。

对标文件

主对标文档:

web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md

LinuxCNC 目标配置:

configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var
lib/hallib/basic_sim.tcl
src/hal/user_comps/vismach/xyzbc-trt-gui.py
src/emc/usr_intf/axis/scripts/axis.py
src/emc/kinematics/xyzbc-trt-kins.c

功能清单

功能 Web 实现方式 当前状态
XYZBC 机型默认进入 app/src/state/store.js 默认 profile 为 xyzbc-trt 已落地
INI 配置解析 linuxcnc-ini-runtime.js 解析 vendored xyzbc-trt.ini 已落地
PyVCP switchkins 面板 xyzbc-trt profile 复用并改写 PyVCP schemaIDENTITYTCP:XYZBCuserkvismach-clear 已落地
M428/M429/M430 remap profile 映射 remap 文件和 switchkins typeWASM interp/remap 由 wasm-port 支撑 已完成Web evidence 覆盖 remap staging、switchkins transitions 和 Ngcgui/remap 子程序执行
motion.switchkins-type profile 描述 motion.analog-out-03 => motion.switchkins-type 已落地
XYZBC kinematics wasm-port/runtime/sdk/src/linuxcnc-kinematics.js 支持 xyzbc-trtlinuxcnc_xyzbc_trt_kinematics.wasm 已完成WASM artifact 可用并通过 Web/runtime evidence
Vismach 等效三维仿真 Web canvas/Three 风格五轴场景替代 Python Vismach GUI显示机床参考、刀路、TCP、刀轴 参考 app 已移植
OPFS 机器文件 staging web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzbc-trt/... 已落地
Tool table xyzbc-trt.tbl staged 并进入 Web tool DB 仿真 已落地
Parameter file INI 指向 xyzbc.var;已从真实运行树导入 wasm-port/vendor 并加入 manifest 已落地
默认程序 xyzbc_switchkins.ngc 作为 xyzbc-trt 默认程序 已落地
task/HAL runtime linuxcnc-task-hal-runtime.js 连接 wasm-port task/HAL SDK 已完成Web execution path 由 task/HAL WASM 反馈采集
刀具预览路径 JSON native 与 Web 在预览阶段输出统一结构的 previewPath 曲线采样 已完成native/Web 均为 50ms 采样并进入 compare
刀具执行路径 JSON native 与 Web 在真实执行阶段输出统一结构的 executionPath 曲线采样 已完成native/Web 均为 50ms 采样并进入 compare
预览/执行路径对比 compare-xyzbc-trt-evidence.jsonpreviewPathexecutionPath 逐点/误差统计比对 已完成compare 输出 preview/execution 误差统计和缺样本清单
AXIS 主界面等效 Web 首屏必须是可操作 CNC 仿真界面包含程序、坐标、状态、override、工具、MDI/switchkins 控制 已完成browser smoke 与 Web evidence axisMainUi.ready=true
POSTGUI HAL 等效 Web 需复现 pyvcp.* -> halui.mdi-command-* -> M428/M429/M430 连接关系 已完成Web evidence/compare 覆盖 PyVCP 到 HALUI POSTGUI nets
basic_sim 等效 Web task/HAL runtime 需提供模拟回零、manual toolchange、spindle、joint feedback 基础仿真语义 已完成native/Web evidence 均记录 basic_sim 等效反馈
Vismach 模型等效 Web 3D 模型需按 table-x/saddle-y/spindle-z/tilt-b/rotate-c/tool-offset/x-offset/z-offset 驱动 已完成Web 3D 模型由 Vismach 等效 pin 驱动并通过 browser smoke
Ngcgui 子程序 Web 需 stage 并可运行 xyzbc_switchkins_sub.ngccentering.ngchelix_bc.ngc 已完成Web evidence 通过 WASM machine-file wrapper 执行全集
演示程序全集 Web 需 stage xyzbc_switchkins.ngcboat-xyzbc.ngc,默认打开前者 已完成staging/profile/evidence 覆盖两个演示程序
速度/限制/坐标显示 Web 需对标 GEOMETRY/JOG_AXES/POSITION_FEEDBACK/MAX_*、TRAJ 和 AXIS/JOINT 限制 已完成Web evidence 覆盖 TRAJ/AXIS/JOINT 限制和 UI 状态
Kinematics HAL pins Web 需 expose/record x-offset/z-offset/tool-offset/rot-point/conventional-directions 已完成native/Web evidence 覆盖 kinematics pins
截图真实执行过程 页面截图必须能直接看到真实展开 G 代码执行源行、动态 step、sample index、当前语句 已完成,programUiExecution 驱动程序区实时执行条和监控区 Source 行
实时刀具执行路径 页面运行时已执行路径、当前刀位必须随 50ms 样本推进,不用手工状态或夹具路径冒充 已完成RUN/STEP/RUN_FRAME/task-HAL 状态统一从 programAxisPreviewPath.samples 派生
刀头/刀杆方向一致 Three.js 刀头 marker、刀轴线、Vismach 刀杆方向必须使用同一个当前样本刀轴 已完成,样本 toolAxis.i/j/k 提升为 state.toolAxisVector.x/y/zbrowser smoke 断言 canvas dataset 一致
每行执行过程 UI 程序区不仅显示主程序,还要显示展开后的子程序源文件、行号和执行语句 已完成,程序区新增实时执行条,监控面板同步显示 sourceFile:line

刀具预览与执行路径 JSON 要求

目标:把 LinuxCNC 真实系统和 Web 仿真系统中的刀具预览路径、刀具执行路径都写入 evidence JSON并在 compare JSON 中做同周期曲线比对。

统一采样规则:

  • 对比采样周期暂定为 samplePeriodMs = 50,即 20 Hz。
  • native 和 Web 可以保留各自原始采样,但写入 previewPath.samplesexecutionPath.samples 前必须重采样到同一个周期。
  • 两侧样本必须使用相同的 sampleIndextimeMs 序列,方便逐点比较。
  • 曲线开始点以程序开始执行或预览路径第一段有效运动为 timeMs = 0
  • 对于 G0/G1/G2/G3 等不同插补段JSON 中必须记录 motionType,用于区分快移、直线、圆弧和 remap/switchkins 前后的路径段。

native/Web evidence JSON 中都应增加:

{
  "pathSampling": {
    "samplePeriodMs": 50,
    "timeBase": "program-relative-ms",
    "resampling": "linear-position-slerp-or-axis-linear",
    "coordinateSystem": "machine-xyzbc-and-tcp"
  },
  "previewPath": {
    "source": "linuxcnc-preview-or-web-preview",
    "sampleCount": 0,
    "samples": []
  },
  "executionPath": {
    "source": "linuxcnc-stat-or-web-task-hal",
    "sampleCount": 0,
    "samples": []
  }
}

每个 sample 至少包含:

{
  "sampleIndex": 0,
  "timeMs": 0,
  "line": 0,
  "motionType": "G0|G1|G2|G3|remap|unknown",
  "activeKinematics": "identity|xyzbc-tcp|userk|unknown",
  "tool": {
    "id": 0,
    "length": 0,
    "diameter": 0
  },
  "joint": {
    "x": 0,
    "y": 0,
    "z": 0,
    "b": 0,
    "c": 0
  },
  "tcp": {
    "x": 0,
    "y": 0,
    "z": 0
  },
  "toolAxis": {
    "i": 0,
    "j": 0,
    "k": 1
  },
  "feed": 0,
  "spindle": 0
}

compare JSON 应增加 pathComparison

  • previewVsPreviewnative 预览路径与 Web 预览路径对比。
  • executionVsExecutionnative 执行路径与 Web 执行路径对比。
  • previewVsExecutionNativeLinuxCNC 预览与真实执行之间的偏差。
  • previewVsExecutionWebWeb 预览与 Web 执行之间的偏差。
  • 误差统计至少包含 maxTcpErrorMmrmsTcpErrorMmmaxJointErrorrmsJointErrormaxToolAxisAngleDegsampleCountDeltamissingSamples

WASM 是否满足

结论:wasm-port 已经具备满足 xyzbc-trt Web 仿真的主要语义边界;当前目标 app 的 dist/wasm-port/build/wasm 已包含 kinematics/core/tp/task-hal 所需 artifactWeb evidence 不再以缺 artifact 作为 blocker。

已具备的证据:

  • wasm-port/runtime/sdk/src/linuxcnc-kinematics.js 注册 xyzbc-trt,目标文件为 linuxcnc_xyzbc_trt_kinematics.wasm
  • wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_xyzbc_trt_kinematics_probe.cpp 覆盖 xyzbc-trt-kins forward/inverse/switchkins。
  • wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_5axis_remap_execute_harness.cpp 包含 xyzbc-trt.inixyzbc_switchkins.ngcboat-xyzbc.ngc 执行路径。
  • wasm-port/docs/compatibility-validation.md 记录 xyzbc-trt kinematics、remap、browser interp 覆盖。
  • 当前 app build 已把 kinematics/core/tp/task-hal .js/.wasm artifact 打入 app/dist/wasm-port/build/wasm

当前闭环状态:

  • npm run smoke:nodenpm run evidence:webnpm run evidence:comparenpm run buildnpm run smoke:browser 已通过。
  • web-xyzbc-trt-evidence.json.wasm.missing=[]compare 摘要为 checkCount=29/passCount=29/failCount=0/blockers=[]

Native/Web JSON 对比结论

证据文件:

working/evidence/native-xyzbc-trt-evidence.json
working/evidence/web-xyzbc-trt-evidence.json
working/evidence/compare-xyzbc-trt-evidence.json

当前结果:

  • native xyzbc-trt 通过 LinuxCNC Python API 真实执行并采集 previewPathexecutionPath、状态流、basic_sim 等效反馈。
  • Web 侧已完成 profile、INI、OPFS staging、PyVCP XML、remap、tool table、parameter file、默认程序、AXIS 首屏、Vismach pin 驱动模型、Ngcgui 执行和 task/HAL execution path 覆盖。
  • 对比 35 项检查全部通过,compare.summary.blockers=[]
  • native/Web 刀具预览路径和执行路径均使用 samplePeriodMs=50compare 已输出 preview/execution 路径误差统计。