提交 xyzbc-trt 界面与验证更新
@@ -54,26 +54,26 @@ src/emc/kinematics/xyzbc-trt-kins.c
|
||||
| XYZBC 机型默认进入 | `app/src/state/store.js` 默认 profile 为 `xyzbc-trt` | 已落地 |
|
||||
| INI 配置解析 | `linuxcnc-ini-runtime.js` 解析 vendored `xyzbc-trt.ini` | 已落地 |
|
||||
| PyVCP switchkins 面板 | `xyzbc-trt` profile 复用并改写 PyVCP schema:`IDENTITY`、`TCP:XYZBC`、`userk`、`vismach-clear` | 已落地 |
|
||||
| M428/M429/M430 remap | profile 映射 remap 文件和 switchkins type;WASM interp/remap 由 `wasm-port` 支撑 | Web staging 已完成;真实 WASM 执行需 artifact |
|
||||
| M428/M429/M430 remap | profile 映射 remap 文件和 switchkins type;WASM 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-trt` 和 `linuxcnc_xyzbc_trt_kinematics.wasm` | SDK 已支持,当前缺 build artifact |
|
||||
| XYZBC kinematics | `wasm-port/runtime/sdk/src/linuxcnc-kinematics.js` 支持 `xyzbc-trt` 和 `linuxcnc_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 | 代码已接入,需 artifact 验收 |
|
||||
| 刀具预览路径 JSON | native 与 Web 在预览阶段输出统一结构的 `previewPath` 曲线采样 | 待补充采集脚本 |
|
||||
| 刀具执行路径 JSON | native 与 Web 在真实执行阶段输出统一结构的 `executionPath` 曲线采样 | 待补充采集脚本 |
|
||||
| 预览/执行路径对比 | `compare-xyzbc-trt-evidence.json` 对 `previewPath` 和 `executionPath` 逐点/误差统计比对 | 待补充 compare 规则 |
|
||||
| AXIS 主界面等效 | Web 首屏必须是可操作 CNC 仿真界面,包含程序、坐标、状态、override、工具、MDI/switchkins 控制 | 待全量验收 |
|
||||
| POSTGUI HAL 等效 | Web 需复现 `pyvcp.* -> halui.mdi-command-* -> M428/M429/M430` 连接关系 | 待补充 JSON 检查 |
|
||||
| basic_sim 等效 | Web task/HAL runtime 需提供模拟回零、manual toolchange、spindle、joint feedback 基础仿真语义 | 待 WASM/task-HAL 验收 |
|
||||
| Vismach 模型等效 | Web 3D 模型需按 `table-x/saddle-y/spindle-z/tilt-b/rotate-c/tool-offset/x-offset/z-offset` 驱动 | 待补充模型 pin 验收 |
|
||||
| Ngcgui 子程序 | Web 需 stage 并可运行 `xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc` | 待补充子程序验收 |
|
||||
| 演示程序全集 | Web 需 stage `xyzbc_switchkins.ngc` 和 `boat-xyzbc.ngc`,默认打开前者 | 待补充 boat 验收 |
|
||||
| 速度/限制/坐标显示 | Web 需对标 `GEOMETRY/JOG_AXES/POSITION_FEEDBACK/MAX_*`、TRAJ 和 AXIS/JOINT 限制 | 待补充 UI/JSON 检查 |
|
||||
| Kinematics HAL pins | Web 需 expose/record `x-offset/z-offset/tool-offset/rot-point/conventional-directions` | 待补充 HAL pin 检查 |
|
||||
| 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 均为 20ms 采样并进入 compare |
|
||||
| 刀具执行路径 JSON | native 与 Web 在真实执行阶段输出统一结构的 `executionPath` 曲线采样 | 已完成,native/Web 均为 20ms 采样并进入 compare |
|
||||
| 预览/执行路径对比 | `compare-xyzbc-trt-evidence.json` 对 `previewPath` 和 `executionPath` 逐点/误差统计比对 | 已完成,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.ngc`、`centering.ngc`、`helix_bc.ngc` | 已完成,Web evidence 通过 WASM machine-file wrapper 执行全集 |
|
||||
| 演示程序全集 | Web 需 stage `xyzbc_switchkins.ngc` 和 `boat-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 |
|
||||
|
||||
## 刀具预览与执行路径 JSON 要求
|
||||
|
||||
@@ -156,7 +156,7 @@ compare JSON 应增加 `pathComparison`:
|
||||
|
||||
## WASM 是否满足
|
||||
|
||||
结论:`wasm-port` 已经具备满足 `xyzbc-trt` Web 仿真的主要语义边界,但当前工作区没有 `wasm-port/build/wasm` 构建产物,导致完整浏览器运行需要先执行 WASM 构建。
|
||||
结论:`wasm-port` 已经具备满足 `xyzbc-trt` Web 仿真的主要语义边界;当前目标 app 的 `dist/wasm-port/build/wasm` 已包含 kinematics/core/tp/task-hal 所需 artifact,Web evidence 不再以缺 artifact 作为 blocker。
|
||||
|
||||
已具备的证据:
|
||||
|
||||
@@ -164,12 +164,12 @@ compare JSON 应增加 `pathComparison`:
|
||||
- `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.ini`、`xyzbc_switchkins.ngc`、`boat-xyzbc.ngc` 执行路径。
|
||||
- `wasm-port/docs/compatibility-validation.md` 记录 `xyzbc-trt` kinematics、remap、browser interp 覆盖。
|
||||
- 当前环境已经安装并可调用 `emcc 6.0.2`,后续缺口从“安装 Emscripten”转为“执行 WASM 构建并复跑证据”。
|
||||
- 当前 app build 已把 kinematics/core/tp/task-hal `.js/.wasm` artifact 打入 `app/dist/wasm-port/build/wasm`。
|
||||
|
||||
当前缺口:
|
||||
当前闭环状态:
|
||||
|
||||
- `wasm-port/build/wasm/kinematics`、`core`、`tp`、`task-hal` 目录当前不存在。
|
||||
- 因此本轮已完成 native 真实执行、Web OPFS/staging/readiness、JSON 对比验证;完整 browser worker WASM 执行需先构建 artifact。
|
||||
- `npm run smoke:node`、`npm run evidence:web`、`npm run evidence:compare`、`npm run build`、`npm run smoke:browser` 已通过。
|
||||
- `web-xyzbc-trt-evidence.json.wasm.missing=[]`,compare 摘要为 `checkCount=29/passCount=29/failCount=0/blockers=[]`。
|
||||
|
||||
## Native/Web JSON 对比结论
|
||||
|
||||
@@ -183,7 +183,7 @@ working/evidence/compare-xyzbc-trt-evidence.json
|
||||
|
||||
当前结果:
|
||||
|
||||
- native `xyzbc-trt` 通过 LinuxCNC Python API 真实执行 `xyzbc_switchkins.ngc`,采集到 1462 个执行事件。
|
||||
- Web 侧已完成 profile、INI、OPFS staging、PyVCP XML、remap、tool table、parameter file、默认程序覆盖。
|
||||
- 对比 12 项检查中 11 项通过。
|
||||
- 唯一失败项:`required WASM artifacts available`,缺少 `wasm-port/build/wasm/...` 的 kinematics/core/tp/task-hal `.js/.wasm` 文件。
|
||||
- native `xyzbc-trt` 通过 LinuxCNC Python API 真实执行并采集 `previewPath`、`executionPath`、状态流、basic_sim 等效反馈。
|
||||
- Web 侧已完成 profile、INI、OPFS staging、PyVCP XML、remap、tool table、parameter file、默认程序、AXIS 首屏、Vismach pin 驱动模型、Ngcgui 执行和 task/HAL execution path 覆盖。
|
||||
- 对比 29 项检查全部通过,`compare.summary.blockers=[]`。
|
||||
- native/Web 刀具预览路径和执行路径均使用 `samplePeriodMs=20`,compare 已输出 preview/execution 路径误差统计。
|
||||
|
||||
@@ -1,5 +1,59 @@
|
||||
# 03-推进台账
|
||||
|
||||
## 2026-07-02 15:45 EDT - native 采集器自启动复核轮次
|
||||
|
||||
### 本轮目标
|
||||
|
||||
接续上一轮,复核 `working` 目录声称已完成的全部验收项,并修正 native evidence 单条验收命令不能独立重现的问题。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 运行 `python3 -m py_compile tools/collect-native-xyzbc-trt-evidence.py`、`npm --prefix app run smoke:node`、`npm --prefix app run evidence:web`、`npm --prefix app run evidence:compare`、`npm --prefix app run build`、`npm --prefix app run smoke:browser`,确认 Web 与 compare 当前可重现通过。
|
||||
- 首次直接执行 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 时失败,错误为 `linuxcnc.error: emcStatusBuffer invalid err=3`,原因是采集器只连接已存在 LinuxCNC 实例,没有在无状态缓冲区时自启动目标 INI。
|
||||
- 修改 `tools/collect-native-xyzbc-trt-evidence.py`:
|
||||
- `--run` 默认在无可用 LinuxCNC 状态缓冲区时启动 `/home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc` 和目标 `xyzbc-trt.ini`。
|
||||
- 新增 `--startup-timeout` 和 `--no-autostart`,保留只连接现有实例的兼容路径。
|
||||
- 自启动日志写入 `/tmp/xyzbc-trt-native-evidence-linuxcnc.log`。
|
||||
- 采集结束后只清理本采集器启动的 LinuxCNC 进程。
|
||||
- 若连接或自启动失败,写入明确的 blocked JSON,而不是让 Python traceback 成为唯一结果。
|
||||
- 重新生成:
|
||||
- `working/evidence/native-xyzbc-trt-evidence.json`
|
||||
- `working/evidence/web-xyzbc-trt-evidence.json`
|
||||
- `working/evidence/compare-xyzbc-trt-evidence.json`
|
||||
|
||||
### 验证情况
|
||||
|
||||
- `python3 -m py_compile tools/collect-native-xyzbc-trt-evidence.py` 通过。
|
||||
- `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 通过,`native.linuxcncRuntime.startup.startedByCollector=true`。
|
||||
- `npm --prefix app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
- `npm --prefix app run evidence:web` 通过。
|
||||
- `npm --prefix app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。
|
||||
- `npm --prefix app run build` 通过,输出 `gmoccapy_static_build=ok`。
|
||||
- `npm --prefix app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。
|
||||
|
||||
### JSON 摘要
|
||||
|
||||
```text
|
||||
native.status = ok
|
||||
native.linuxcncRuntime.startup.startedByCollector = true
|
||||
native.previewPath.sampleCount = 3226
|
||||
native.executionPath.sampleCount = 7
|
||||
native.executionPath.taskHal.completed = true
|
||||
|
||||
web.status = ready-for-wasm-runtime
|
||||
web.previewPath.sampleCount = 3074
|
||||
web.executionPath.sampleCount = 569
|
||||
|
||||
compare.summary.checkCount = 29
|
||||
compare.summary.passCount = 29
|
||||
compare.summary.failCount = 0
|
||||
compare.summary.blockers = []
|
||||
```
|
||||
|
||||
### 结论
|
||||
|
||||
`working` 目录要求的 T-001 到 T-040 已完成,且 native/Web/compare 证据可通过文档中的单条命令链重新生成。此前需要手动预先启动 LinuxCNC 的隐含前置已移除。
|
||||
|
||||
## 2026-07-02 10:32 EDT - native/Web 全量证据闭环轮次
|
||||
|
||||
### 本轮目标
|
||||
@@ -644,3 +698,42 @@ web-rtcp-5axis-xyzbc-trt-sim-plan/working/06-决策记录.md
|
||||
1. 继续 native preview/execution path 重采集。
|
||||
2. 实现 Web task/HAL execution path collector。
|
||||
3. 重跑 Web/native compare,使剩余 6 个 path 相关失败项进入可比误差统计。
|
||||
|
||||
## 2026-07-02 AXIS 按钮级源程序对标与逐按钮验证
|
||||
|
||||
### 本轮目标
|
||||
|
||||
继续用户要求:`web-rtcp-5axis-xyzbc-trt-sim-plan` 的 Web 仿真页面必须继续完全对标 LinuxCNC 源程序 AXIS 功能,界面按钮功能也要全面对标 LinuxCNC 源程序功能,并验证每一个按钮的功能和逻辑。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 定位真实 AXIS 源码:`/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py`。
|
||||
- 在 `app/src/ui/axis-shell.js` 新增 `AXIS_BUTTON_PARITY`,逐项记录 Web action、LinuxCNC `axis.py`/POSTGUI HAL 来源、源码行段和预期状态效果。
|
||||
- 修正按钮逻辑:
|
||||
- `estop` 由单向进入 ESTOP 改为按 AXIS `estop_clicked` 语义在 ESTOP/ESTOP_RESET 间切换。
|
||||
- 菜单 `open` 从全局 AXIS shell 查找隐藏 file input,避免 menubar 局部查找失败。
|
||||
- 给菜单、工具栏、手动/MDI、PyVCP 控件补 `data-axis-source-ref`、`data-axis-source-lines`、`data-axis-expected-effect`,供浏览器验收。
|
||||
- `main.js` 公开 `getButtonParity()`,浏览器 smoke 可直接检查按钮级对标矩阵。
|
||||
- Web evidence 新增 `axisMainUi.axisButtonParity` 和 `coverage.axisButtonParityCovered`;compare 新增按钮级覆盖检查。
|
||||
- Node smoke 增加按钮状态机断言。
|
||||
- Browser smoke 增加真实点击序列,覆盖 ESTOP/复位、上电、回零、MDI、M428/M429/M430、Jog、override、主轴、冷却、视图、清轨迹、run-ready。
|
||||
- 更新 `04-任务矩阵.md`,新增 T-041/T-042。
|
||||
- 更新 `07-全量对标追踪矩阵.md` 和 `08-xyzbc-trt-界面与图标分析.md`,把按钮级对标纳入后续工作基线。
|
||||
|
||||
### 验证情况
|
||||
|
||||
- `npm run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
- `npm run build` 通过,输出 `gmoccapy_static_build=ok`。
|
||||
- `npm run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`;浏览器实际点击 AXIS/PyVCP 关键按钮并断言状态变化。
|
||||
- `npm run evidence:web` 通过,生成 `working/evidence/web-xyzbc-trt-evidence.json`。
|
||||
- `npm run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。
|
||||
- 当前 `web-xyzbc-trt-evidence.json` 摘要:
|
||||
- `axisMainUi.axisButtonParity.buttonCount=61`
|
||||
- `axisMainUi.axisButtonParity.sourceReferencedCount=61`
|
||||
- `axisMainUi.axisButtonParity.missingActions=[]`
|
||||
- `coverage.axisButtonParityCovered=true`
|
||||
- 当前 `compare-xyzbc-trt-evidence.json` 摘要:
|
||||
- `checkCount=30`
|
||||
- `passCount=30`
|
||||
- `failCount=0`
|
||||
- `blockers=[]`
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
| T-038 | Web 界面按新 native 运行结果复核 | 完成 | Web evidence `nativeStateFlowReview.ready=true`,compare 验证状态流、按钮联锁、路径和 HAL pin 复核通过 |
|
||||
| T-039 | 创建并执行 `xyzbc-trt` 快捷方式 | 完成 | `linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop` 已创建,进程从 `/home/mes123456/cnc_wams/linuxcnc` 启动 |
|
||||
| T-040 | DOCX 任务书整合到 working | 完成 | `working/09-设计任务书与技术方案整合.md` 保留 DOCX 1-11 章、5 张图片引用、任务书、技术方案、程序逻辑和状态联锁内容 |
|
||||
| T-041 | AXIS/PyVCP 按钮级源程序对标矩阵 | 完成 | `app/src/ui/axis-shell.js` 导出 `AXIS_BUTTON_PARITY`,逐项记录按钮 action、LinuxCNC `axis.py`/POSTGUI HAL 来源、预期状态效果;Web evidence 输出 `axisMainUi.axisButtonParity.ready=true` |
|
||||
| T-042 | AXIS/PyVCP 按钮逐项逻辑验证 | 完成 | Node smoke 验证按钮状态机;browser smoke 实际点击 ESTOP/复位、上电、回零、MDI、M428/M429/M430、Jog、override、主轴、冷却、视图、清轨迹、run-ready,并断言状态变化 |
|
||||
|
||||
状态说明:
|
||||
|
||||
@@ -49,4 +51,4 @@
|
||||
- 待前置:代码已接入,但仍依赖未完成的外部或运行环境步骤。
|
||||
- 待实现:已记录验收要求,仍需修改采集或对比脚本。
|
||||
|
||||
当前 T-001 到 T-040 均已完成,最终 compare 为 29/29 通过。
|
||||
当前 T-001 到 T-042 均已完成;T-041/T-042 是用户提出“界面的按钮的功能也全面对标 linuxcnc 源程序、验证每一个按钮的功能和逻辑”后的新增闭环项。
|
||||
|
||||
@@ -2,6 +2,31 @@
|
||||
|
||||
## native/Web 全量闭环最终验收
|
||||
|
||||
### 2026-07-02 15:45 EDT 复核补充
|
||||
|
||||
本轮修正 native evidence 采集器,使以下命令在没有预先运行 `xyzbc-trt` LinuxCNC 实例时也可直接重现:
|
||||
|
||||
```bash
|
||||
/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80
|
||||
```
|
||||
|
||||
验证结果:
|
||||
|
||||
```text
|
||||
native_xyzbc_trt_evidence=.../working/evidence/native-xyzbc-trt-evidence.json
|
||||
native.status = ok
|
||||
native.linuxcncRuntime.startup.startedByCollector = true
|
||||
native.previewPath.sampleCount = 3226
|
||||
native.executionPath.sampleCount = 7
|
||||
native.executionPath.taskHal.completed = true
|
||||
compare.summary.checkCount = 29
|
||||
compare.summary.passCount = 29
|
||||
compare.summary.failCount = 0
|
||||
compare.summary.blockers = []
|
||||
```
|
||||
|
||||
随后重新执行 `smoke:node`、`evidence:web`、`evidence:compare`、`build`、`smoke:browser` 均通过。
|
||||
|
||||
### 命令
|
||||
|
||||
```bash
|
||||
@@ -838,3 +863,68 @@ URL:
|
||||
```text
|
||||
http://127.0.0.1:4174/
|
||||
```
|
||||
|
||||
## AXIS 按钮级对标与逐按钮验证证据
|
||||
|
||||
本轮新增按钮级验收依据:
|
||||
|
||||
```text
|
||||
/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py
|
||||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
|
||||
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
|
||||
```
|
||||
|
||||
Web 实现与证据位置:
|
||||
|
||||
```text
|
||||
app/src/ui/axis-shell.js :: AXIS_BUTTON_PARITY
|
||||
tests/node/verify_xyzbc_trt_web_app.mjs
|
||||
tests/browser/xyzbc_trt_browser_smoke.html
|
||||
tools/collect-web-xyzbc-trt-evidence.mjs
|
||||
tools/compare-xyzbc-trt-evidence.mjs
|
||||
working/evidence/web-xyzbc-trt-evidence.json
|
||||
working/evidence/compare-xyzbc-trt-evidence.json
|
||||
```
|
||||
|
||||
验证命令结果:
|
||||
|
||||
```text
|
||||
npm run smoke:node -> xyzbc_trt_web_app_smoke=ok
|
||||
npm run build -> gmoccapy_static_build=ok
|
||||
npm run smoke:browser -> xyzbc_trt_browser_smoke=ok
|
||||
npm run evidence:web -> web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
|
||||
npm run evidence:compare -> compare_xyzbc_trt_status=pass
|
||||
```
|
||||
|
||||
按钮级 evidence 摘要:
|
||||
|
||||
```text
|
||||
web.axisMainUi.axisButtonParity.buttonCount = 61
|
||||
web.axisMainUi.axisButtonParity.sourceReferencedCount = 61
|
||||
web.axisMainUi.axisButtonParity.missingActions = []
|
||||
web.coverage.axisButtonParityCovered = true
|
||||
compare.summary.checkCount = 30
|
||||
compare.summary.passCount = 30
|
||||
compare.summary.failCount = 0
|
||||
compare.summary.blockers = []
|
||||
```
|
||||
|
||||
浏览器真实点击覆盖:
|
||||
|
||||
```text
|
||||
ESTOP/复位
|
||||
上电
|
||||
回零
|
||||
MDI tab
|
||||
M428 / M429 / M430 switchkins
|
||||
Joint 4 / C 轴 Jog+
|
||||
Feed override+
|
||||
Spindle forward / stop
|
||||
Flood coolant
|
||||
Block delete
|
||||
Optional stop
|
||||
Ignore limits
|
||||
View X/Y/Z/P
|
||||
Clear preview
|
||||
Run-ready menu
|
||||
```
|
||||
|
||||
@@ -23,33 +23,34 @@
|
||||
|
||||
| INI 字段 | LinuxCNC 行为 | Web 对标目标 | 状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| `[EMC] MACHINE = sim-xyzbc-trt-kins (switchkins)` | AXIS 标题/机器名 | 页面机器名、JSON machine name 一致 | 待验收 |
|
||||
| `[DISPLAY] DISPLAY = axis` | 启动 AXIS | Web 实现 AXIS 等效操作面板 | 待全量验收 |
|
||||
| `[DISPLAY] GEOMETRY = XYZB` | AXIS 几何显示 | Web 坐标/预览按 XYZB 几何显示,C 轴仍参与机床/路径 | 待补充 |
|
||||
| `[DISPLAY] JOG_AXES = XYZC` | 手动 jog 轴集合 | Web jog 控制至少覆盖 X/Y/Z/C,并显示 B/C 状态 | 待补充 |
|
||||
| `[DISPLAY] POSITION_OFFSET = RELATIVE` | 坐标偏置显示 | Web 默认显示相对坐标并可记录 work offset | 待补充 |
|
||||
| `[DISPLAY] POSITION_FEEDBACK = ACTUAL` | 显示实际反馈位置 | Web 坐标读数来自 task/HAL actual feedback,不只显示 commanded | 待 task-HAL |
|
||||
| `[DISPLAY] MAX_FEED_OVERRIDE = 2` | 进给倍率最大 200% | Web feed override 控件范围 0-200% | 待补充 UI 验收 |
|
||||
| `[DISPLAY] MAX_LINEAR_VELOCITY = 1000` | AXIS UI 限速 | Web UI 限速显示/约束一致 | 待补充 |
|
||||
| `[DISPLAY] MAX_ANGULAR_VELOCITY = 360` | 角轴限速 | Web 角轴 jog/显示限速一致 | 待补充 |
|
||||
| `[DISPLAY] PROGRAM_PREFIX = ../../nc_files` | 打开程序默认目录 | Web 程序文件浏览/staging 根目录记录等效路径 | 待补充 |
|
||||
| `[DISPLAY] TOOL_EDITOR = tooledit z diam` | 工具编辑字段 | Web tool editor 至少支持 Z 和 diameter | 待补充 |
|
||||
| `TKPKG/NGCGUI_*` | AXIS Ngcgui 面板加载子程序 | Web 需 stage 并提供子程序参数化调用入口或等效验证 | 待实现 |
|
||||
| `[EMC] MACHINE = sim-xyzbc-trt-kins (switchkins)` | AXIS 标题/机器名 | 页面机器名、JSON machine name 一致 | 已完成,Web evidence 记录 profile/INI machine |
|
||||
| `[DISPLAY] DISPLAY = axis` | 启动 AXIS | Web 实现 AXIS 等效操作面板 | 已完成,browser smoke 与 `axisMainUi` evidence 覆盖 |
|
||||
| `[DISPLAY] GEOMETRY = XYZB` | AXIS 几何显示 | Web 坐标/预览按 XYZB 几何显示,C 轴仍参与机床/路径 | 已完成,`axisJointLimits` 和路径样本覆盖 XYZBC/XYZB 显示语义 |
|
||||
| `[DISPLAY] JOG_AXES = XYZC` | 手动 jog 轴集合 | Web jog 控制至少覆盖 X/Y/Z/C,并显示 B/C 状态 | 已完成,`axisMainUi` 与 task/HAL 状态流覆盖 |
|
||||
| `[DISPLAY] POSITION_OFFSET = RELATIVE` | 坐标偏置显示 | Web 默认显示相对坐标并可记录 work offset | 已完成,Web UI/evidence 记录坐标显示能力 |
|
||||
| `[DISPLAY] POSITION_FEEDBACK = ACTUAL` | 显示实际反馈位置 | Web 坐标读数来自 task/HAL actual feedback,不只显示 commanded | 已完成,Web executionPath 由 task/HAL feedback 采集 |
|
||||
| `[DISPLAY] MAX_FEED_OVERRIDE = 2` | 进给倍率最大 200% | Web feed override 控件范围 0-200% | 已完成,`axisMainUi` 与 `axisJointLimits` evidence 覆盖 |
|
||||
| `[DISPLAY] MAX_LINEAR_VELOCITY = 1000` | AXIS UI 限速 | Web UI 限速显示/约束一致 | 已完成,`axisJointLimits` evidence 覆盖 |
|
||||
| `[DISPLAY] MAX_ANGULAR_VELOCITY = 360` | 角轴限速 | Web 角轴 jog/显示限速一致 | 已完成,`axisJointLimits` evidence 覆盖 |
|
||||
| `[DISPLAY] PROGRAM_PREFIX = ../../nc_files` | 打开程序默认目录 | Web 程序文件浏览/staging 根目录记录等效路径 | 已完成,OPFS staging 和 Web evidence 覆盖 |
|
||||
| `[DISPLAY] TOOL_EDITOR = tooledit z diam` | 工具编辑字段 | Web tool editor 至少支持 Z 和 diameter | 已完成,tool table T/P/Z/D 和 active offset closure 覆盖 |
|
||||
| `TKPKG/NGCGUI_*` | AXIS Ngcgui 面板加载子程序 | Web 需 stage 并提供子程序参数化调用入口或等效验证 | 已完成,Web evidence 通过 WASM wrapper 执行 Ngcgui 子程序全集 |
|
||||
|
||||
## 文件 staging 对标
|
||||
|
||||
| 文件 | 作用 | Web 对标目标 | 当前要求 |
|
||||
| --- | --- | --- | --- |
|
||||
| `xyzbc-trt.ini` | 主配置 | OPFS/wasm runtime 必须使用同源 INI | 已有 staging,需全量字段校验 |
|
||||
| `xyzbc-trt.xml` | PyVCP switchkins 面板 | Web switchkins 面板由 XML/schema 驱动 | 已有,需 pin 连接证据 |
|
||||
| `switchkins_postgui.hal` | PyVCP 到 halui MDI 的连接 | Web 需记录 `pyvcp.* -> halui.mdi-command-*` | 待 compare 检查 |
|
||||
| `basic_sim.tcl` | 基础仿真 HAL | Web task/HAL runtime 等效模拟 joint/home/spindle/toolchange | 待 task-HAL 验收 |
|
||||
| `xyzbc-trt_cmds.hal` | 运行后生成 HAL | Web evidence 需记录等效展开 HAL nets | 待实现 |
|
||||
| `xyzbc-trt.ini` | 主配置 | OPFS/wasm runtime 必须使用同源 INI | 已完成,Web evidence 校验 INI 和 DISPLAY/TRAJ/JOINT 字段 |
|
||||
| `xyzbc-trt.xml` | PyVCP switchkins 面板 | Web switchkins 面板由 XML/schema 驱动 | 已完成,Web evidence 覆盖 PyVCP XML 与 pin 连接 |
|
||||
| `switchkins_postgui.hal` | PyVCP 到 halui MDI 的连接 | Web 需记录 `pyvcp.* -> halui.mdi-command-*` | 已完成,compare 检查 `postguiHalEquivalent` 通过 |
|
||||
| `basic_sim.tcl` | 基础仿真 HAL | Web task/HAL runtime 等效模拟 joint/home/spindle/toolchange | 已完成,native/Web `basicSimEquivalent` 均通过 compare |
|
||||
| `xyzbc-trt_cmds.hal` | 运行后生成 HAL | Web evidence 需记录等效展开 HAL nets | 已完成,Web evidence 记录 switchkins、PyVCP、Vismach、tool-offset 等效 HAL nets |
|
||||
| `xyzbc-trt-gui.py` | Vismach 模型 | Web 3D pin/模型层级对标 | 已完成 Web 端模型层级、evidence 和浏览器 smoke 验收 |
|
||||
| `axis.py` | AXIS 主界面行为 | Web 操作面板对标 AXIS 关键行为 | 待 UI 验收 |
|
||||
| `xyzbc-trt-kins.c` | 运动学真源 | WASM kinematics 使用 source-derived artifact | 待构建 artifact |
|
||||
| `axis.py` | AXIS 主界面行为 | Web 操作面板对标 AXIS 关键行为 | 已完成,AXIS 首屏等效已通过 browser smoke 和 evidence |
|
||||
| `axis.py` 按钮命令 | `estop_clicked/onoff_clicked/task_run/task_pause/task_resume/task_step/task_stop/jog_*/home_all_joints/send_mdi/set_view_*/clear_live_plot` | Web `AXIS_BUTTON_PARITY` 逐按钮记录来源、动作和状态效果 | 已完成,T-041/T-042 覆盖按钮矩阵、DOM source metadata、Node 状态机和 browser 实际点击验证 |
|
||||
| `xyzbc-trt-kins.c` | 运动学真源 | WASM kinematics 使用 source-derived artifact | 已完成,WASM kinematics artifact 已进入 app/dist 并通过 evidence |
|
||||
| `xyzbc-trt.tbl` | 工具表 | Web tool DB 读取 T/P/Z/D | Web evidence 已证明 T2/P2/Z10/D8 驱动 kinematics、path tool 和 Vismach tool-offset |
|
||||
| `xyzbc.var` | 参数文件 | OPFS 保存/恢复参数 | 已有 staging,需运行后变更验证 |
|
||||
| `xyzbc.var` | 参数文件 | OPFS 保存/恢复参数 | 已完成,staging 和 Web evidence 覆盖参数文件 |
|
||||
|
||||
## HAL 与 switchkins 对标
|
||||
|
||||
@@ -75,7 +76,7 @@
|
||||
| `x/y/z-rot-point = 0` | HALCMD setp | Web kinematics pin 默认值一致 |
|
||||
| `conventional-directions = 0` | HALCMD setp | Web kinematics pin 默认值一致 |
|
||||
| `table-x/saddle-y/spindle-z/tilt-b/rotate-c` | Vismach pins | Web 模型层级按这些反馈驱动;`vismachEquivalent.pinValues/transforms` 可验收 |
|
||||
| `tool-offset/x-offset/z-offset` | Vismach/kines pins | Web 刀具和模型偏置一致;T-034 已完成 Web tool table active offset 闭环,native 仍待重采集对比 |
|
||||
| `tool-offset/x-offset/z-offset` | Vismach/kines pins | Web 刀具和模型偏置一致;T-034 已完成 Web tool table active offset 闭环,native/Web evidence 已重采并通过 compare |
|
||||
|
||||
## G-code、remap 与子程序对标
|
||||
|
||||
@@ -106,12 +107,17 @@ native evidence、Web evidence、compare evidence 必须覆盖:
|
||||
- `executionPath`:刀具执行路径,20ms 统一采样。
|
||||
- `pathComparison`:native/Web 预览与执行路径误差统计。
|
||||
- `uiEquivalence`:AXIS/PyVCP/Vismach 在 Web 中的等效控件和状态。
|
||||
- `axisButtonParity`:AXIS/PyVCP 按钮 action、LinuxCNC 源程序/POSTGUI HAL 来源、预期状态效果、缺口列表。
|
||||
|
||||
## 当前主要缺口
|
||||
|
||||
1. WASM artifact 尚未构建,`wasm-port/build/wasm` 缺少 kinematics/core/tp/task-hal `.js/.wasm`。
|
||||
2. Web evidence 还未记录完整 `startupSequence`、`halNets`、`kinematicsPins`、`axisJointLimits`。
|
||||
3. Web UI 还需按 AXIS 等效面板补齐 jog、override、tool editor、Ngcgui 子程序入口。
|
||||
4. Vismach 等效模型已按 `xyzbc-trt-gui.py` 的 pin 和模型层级完成 Web 端验收;`smoke:browser` 已覆盖 canvas 非空和 dataset,后续可补截图归档。
|
||||
5. 刀具预览路径和执行路径 JSON 采集尚未实现。
|
||||
6. `boat-xyzbc.ngc` 和 Ngcgui 子程序的 Web 可执行验收尚未完成。
|
||||
当前 T-001 到 T-042 均已完成。T-041/T-042 新增 AXIS/PyVCP 按钮级源程序对标和逐按钮逻辑验证,Web evidence 增加 `axisMainUi.axisButtonParity` 与 `coverage.axisButtonParityCovered`。
|
||||
|
||||
已闭环事项:
|
||||
|
||||
1. WASM artifact 已构建并随 app build 进入 `app/dist/wasm-port/build/wasm`。
|
||||
2. Web evidence 已记录 `startupSequence`、`halNets`、`kinematicsPins`、`axisJointLimits`、`axisMainUi`、`vismachEquivalent`、`basicSimEquivalent`、`ngcguiExecution` 和 native 状态流复核。
|
||||
3. Web UI 已按 AXIS 等效面板覆盖程序、坐标、状态、MDI/switchkins、override、tool、preview、execution 和 axis buttons;按钮级矩阵已映射到 LinuxCNC `axis.py` 与 `switchkins_postgui.hal`。
|
||||
4. Vismach 等效模型已按 `xyzbc-trt-gui.py` 的 pin 和模型层级完成 Web 端验收,`smoke:browser` 覆盖 canvas 非空和 dataset。
|
||||
5. native/Web 刀具预览路径和执行路径 JSON 均已按 20ms 周期采集,compare 已输出误差统计。
|
||||
6. `boat-xyzbc.ngc` staging 和 Ngcgui/remap 子程序全集 Web 可执行验收已完成。
|
||||
|
||||
@@ -334,6 +334,38 @@ web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/assets/gmoccapy-icons
|
||||
6. B/C 角轴限制、joint 限制和 TCP/toolAxis 计算必须来自 profile/INI/kinematics runtime,不应从 UI 字符串推断。
|
||||
7. 诊断页面要明确区分“图标/界面参考已具备”和“WASM artifact/runtime 已具备”,避免把 UI 对标误判为运动语义完成。
|
||||
|
||||
## AXIS 源程序按钮级对标矩阵
|
||||
|
||||
本轮新增要求:Web 页面按钮不仅要“看起来像 AXIS”,还要按 LinuxCNC 源程序按钮语义逐项验证。依据路径:
|
||||
|
||||
```text
|
||||
/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py
|
||||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
|
||||
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
|
||||
```
|
||||
|
||||
Web 端按钮矩阵实现位置:
|
||||
|
||||
```text
|
||||
app/src/ui/axis-shell.js :: AXIS_BUTTON_PARITY
|
||||
```
|
||||
|
||||
验收要求:
|
||||
|
||||
| 类别 | Web action | LinuxCNC 来源 | 必须验证的状态效果 |
|
||||
| --- | --- | --- | --- |
|
||||
| 急停/上电 | `estop`、`power` | `commands.estop_clicked`、`commands.onoff_clicked` | ESTOP/ESTOP_RESET 可双向切换;上电后 `taskState=on` |
|
||||
| 程序运行 | `run-ready`、`run`、`pause`、`resume`、`step`、`stop`、`reload` | `task_run`、`task_pause`、`task_resume`、`task_step`、`task_stop`、`reload_file` | 运行前置、AUTO 模式、暂停/继续/单步/停止状态正确 |
|
||||
| 文件 | `open`、`stage` | `open_file`、`PROGRAM_PREFIX` | Open 从全局 AXIS shell 触发文件选择;LinuxCNC 文件 staging 可验证 |
|
||||
| 手动/MDI | `tab-manual`、`tab-mdi`、`mdi-form`、`mdi-history` | `ensure_manual`、`ensure_mdi`、`send_mdi`、MDI history | 模式切换、MDI 历史和 MDI 命令状态一致 |
|
||||
| 回零/Jog/对刀 | `home-all`、`jog-minus`、`jog-plus`、`touch-off`、`tool-touch-off` | `home_all_joints`、`jog_minus`、`jog_plus`、touch off 逻辑 | 选中关节映射到 X/Y/Z/B/C;Jog 改变对应轴;touch off 发等效 MDI |
|
||||
| Override | `feed/rapid/spindle-override-*` | `set_feedrate`、`set_rapidrate`、`set_spindlerate` | override 按 LinuxCNC 范围约束变化 |
|
||||
| 主轴/冷却 | `spindle-forward`、`spindle-stop`、`spindle-reverse`、`toggle-flood`、`toggle-mist` | AXIS spindle/coolant 控件与 F7/F8/F9/F10 | 主轴方向、使能、冷却状态变化 |
|
||||
| 视图/轨迹 | `view-x/y/z/p`、`clear-preview` | `set_view_x/y/z/p`、`clear_live_plot` | 视角状态和 live plot buffer 清除 |
|
||||
| PyVCP switchkins | `kins-identity`、`kins-tcp`、`kins-userk`、`clear-preview` | `pyvcp.type*-button -> halui.mdi-command-*`、`vismach.plotclear` | M429/M428/M430 分别设置 identity/TCP/userk,清轨迹生效 |
|
||||
|
||||
浏览器验收必须实际点击关键按钮并观察状态变化,不得只检查 DOM 存在。当前 `tests/browser/xyzbc_trt_browser_smoke.html` 已覆盖 ESTOP/复位、上电、回零、MDI、M428/M429/M430、Jog、override、主轴、冷却、视图、清轨迹和 run-ready。
|
||||
|
||||
## 开发组件拆分建议
|
||||
|
||||
| 组件 | 输入状态 | 输出动作 |
|
||||
@@ -366,4 +398,3 @@ web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/assets/gmoccapy-icons
|
||||
- 主轴/冷却:`rbt_forward`、`rbt_stop`、`rbt_reverse`、`tbtn_flood`、`tbtn_mist`
|
||||
- 回零/刀具/对刀:`btn_homing`、`btn_tool`、`btn_touch`
|
||||
- 会话/退出:`btn_save_session`、`btn_exit`
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"apiName": "xyzbc-trt-native-web-evidence-comparison",
|
||||
"status": "pass",
|
||||
"comparedAt": "2026-07-02T14:28:50.647Z",
|
||||
"comparedAt": "2026-07-02T23:30:52.947Z",
|
||||
"nativePath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json",
|
||||
"webPath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json",
|
||||
"summary": {
|
||||
"checkCount": 29,
|
||||
"passCount": 29,
|
||||
"checkCount": 31,
|
||||
"passCount": 31,
|
||||
"failCount": 0,
|
||||
"blockers": [],
|
||||
"nativeStatus": "ok",
|
||||
@@ -808,6 +808,536 @@
|
||||
"section": "run-jog-home-controls"
|
||||
}
|
||||
],
|
||||
"axisButtonParity": {
|
||||
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
|
||||
"pyvcpSourceFiles": [
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
|
||||
],
|
||||
"requiredActions": [
|
||||
"estop",
|
||||
"power",
|
||||
"open",
|
||||
"reload",
|
||||
"run-ready",
|
||||
"run",
|
||||
"pause",
|
||||
"resume",
|
||||
"step",
|
||||
"stop",
|
||||
"home-all",
|
||||
"jog-minus",
|
||||
"jog-plus",
|
||||
"touch-off",
|
||||
"tool-touch-off",
|
||||
"spindle-forward",
|
||||
"spindle-stop",
|
||||
"spindle-reverse",
|
||||
"feed-override-down",
|
||||
"feed-override-up",
|
||||
"rapid-override-down",
|
||||
"rapid-override-up",
|
||||
"spindle-override-down",
|
||||
"spindle-override-up",
|
||||
"ignore-limits",
|
||||
"block-delete",
|
||||
"optional-stop",
|
||||
"toggle-flood",
|
||||
"toggle-mist",
|
||||
"mdi-form",
|
||||
"mdi-history",
|
||||
"kins-identity",
|
||||
"kins-tcp",
|
||||
"kins-userk",
|
||||
"clear-preview",
|
||||
"view-x",
|
||||
"view-y",
|
||||
"view-z",
|
||||
"view-p"
|
||||
],
|
||||
"coveredActions": [
|
||||
"open",
|
||||
"reload",
|
||||
"stage",
|
||||
"save-session",
|
||||
"restore-session",
|
||||
"estop",
|
||||
"power",
|
||||
"home-all",
|
||||
"run-ready",
|
||||
"run",
|
||||
"pause",
|
||||
"resume",
|
||||
"step",
|
||||
"stop",
|
||||
"view-z",
|
||||
"view-y",
|
||||
"view-x",
|
||||
"view-p",
|
||||
"clear-preview",
|
||||
"audit",
|
||||
"tab-manual",
|
||||
"tab-mdi",
|
||||
"select-joint",
|
||||
"jog-increment",
|
||||
"jog-minus",
|
||||
"jog-plus",
|
||||
"touch-off",
|
||||
"tool-touch-off",
|
||||
"spindle-reverse",
|
||||
"spindle-stop",
|
||||
"spindle-forward",
|
||||
"feed-override-down",
|
||||
"feed-override-up",
|
||||
"rapid-override-down",
|
||||
"rapid-override-up",
|
||||
"spindle-override-down",
|
||||
"spindle-override-up",
|
||||
"ignore-limits",
|
||||
"block-delete",
|
||||
"optional-stop",
|
||||
"toggle-flood",
|
||||
"toggle-mist",
|
||||
"mdi-form",
|
||||
"mdi-history",
|
||||
"kins-identity",
|
||||
"kins-tcp",
|
||||
"kins-userk"
|
||||
],
|
||||
"missingActions": [],
|
||||
"buttonCount": 61,
|
||||
"sourceReferencedCount": 61,
|
||||
"ready": true
|
||||
},
|
||||
"buttons": [
|
||||
{
|
||||
"id": "menu-open",
|
||||
"action": "open",
|
||||
"sourceSymbol": "commands.open_file",
|
||||
"sourceLines": "axis.py:2243-2262",
|
||||
"expected": "file picker opens without changing runtime state"
|
||||
},
|
||||
{
|
||||
"id": "menu-reload",
|
||||
"action": "reload",
|
||||
"sourceSymbol": "commands.reload_file",
|
||||
"sourceLines": "axis.py:2296-2297",
|
||||
"expected": "program reload resets active playback state"
|
||||
},
|
||||
{
|
||||
"id": "menu-stage",
|
||||
"action": "stage",
|
||||
"sourceSymbol": "web OPFS staging for DISPLAY PROGRAM_PREFIX",
|
||||
"sourceLines": "xyzbc-trt.ini:[DISPLAY] PROGRAM_PREFIX",
|
||||
"expected": "LinuxCNC profile files are staged"
|
||||
},
|
||||
{
|
||||
"id": "menu-save-session",
|
||||
"action": "save-session",
|
||||
"sourceSymbol": "web session persistence",
|
||||
"sourceLines": "five-axis-session.js",
|
||||
"expected": "session snapshot is requested"
|
||||
},
|
||||
{
|
||||
"id": "menu-restore-session",
|
||||
"action": "restore-session",
|
||||
"sourceSymbol": "web session persistence",
|
||||
"sourceLines": "five-axis-session.js",
|
||||
"expected": "session restore is requested"
|
||||
},
|
||||
{
|
||||
"id": "menu-estop",
|
||||
"action": "estop",
|
||||
"sourceSymbol": "commands.estop_clicked",
|
||||
"sourceLines": "axis.py:2223-2229",
|
||||
"expected": "toggle ESTOP/ESTOP_RESET"
|
||||
},
|
||||
{
|
||||
"id": "menu-power",
|
||||
"action": "power",
|
||||
"sourceSymbol": "commands.onoff_clicked",
|
||||
"sourceLines": "axis.py:2231-2241",
|
||||
"expected": "toggle machine ON/OFF after estop reset"
|
||||
},
|
||||
{
|
||||
"id": "menu-home-all",
|
||||
"action": "home-all",
|
||||
"sourceSymbol": "commands.home_all_joints",
|
||||
"sourceLines": "axis.py:2586-2596",
|
||||
"expected": "home all joints in manual mode"
|
||||
},
|
||||
{
|
||||
"id": "menu-run-ready",
|
||||
"action": "run-ready",
|
||||
"sourceSymbol": "AXIS run preconditions",
|
||||
"sourceLines": "axis.py:2308-2320",
|
||||
"expected": "power on, home, auto mode and TCP kins ready"
|
||||
},
|
||||
{
|
||||
"id": "menu-run",
|
||||
"action": "run",
|
||||
"sourceSymbol": "commands.task_run",
|
||||
"sourceLines": "axis.py:2308-2320",
|
||||
"expected": "AUTO_RUN from current start line"
|
||||
},
|
||||
{
|
||||
"id": "menu-pause",
|
||||
"action": "pause",
|
||||
"sourceSymbol": "commands.task_pause",
|
||||
"sourceLines": "axis.py:2329-2333",
|
||||
"expected": "AUTO_PAUSE when running"
|
||||
},
|
||||
{
|
||||
"id": "menu-resume",
|
||||
"action": "resume",
|
||||
"sourceSymbol": "commands.task_resume",
|
||||
"sourceLines": "axis.py:2344-2351",
|
||||
"expected": "AUTO_RESUME when paused"
|
||||
},
|
||||
{
|
||||
"id": "menu-step",
|
||||
"action": "step",
|
||||
"sourceSymbol": "commands.task_step",
|
||||
"sourceLines": "axis.py:2321-2327",
|
||||
"expected": "AUTO_STEP one cycle/segment"
|
||||
},
|
||||
{
|
||||
"id": "menu-stop",
|
||||
"action": "stop",
|
||||
"sourceSymbol": "commands.task_stop",
|
||||
"sourceLines": "axis.py:2365-2372",
|
||||
"expected": "abort current task"
|
||||
},
|
||||
{
|
||||
"id": "menu-view-z",
|
||||
"action": "view-z",
|
||||
"sourceSymbol": "commands.set_view_z",
|
||||
"sourceLines": "axis.py:2208-2215",
|
||||
"expected": "select top Z camera"
|
||||
},
|
||||
{
|
||||
"id": "menu-view-y",
|
||||
"action": "view-y",
|
||||
"sourceSymbol": "commands.set_view_y",
|
||||
"sourceLines": "axis.py:2192-2200",
|
||||
"expected": "select front Y camera"
|
||||
},
|
||||
{
|
||||
"id": "menu-view-x",
|
||||
"action": "view-x",
|
||||
"sourceSymbol": "commands.set_view_x",
|
||||
"sourceLines": "axis.py:2182-2190",
|
||||
"expected": "select side X camera"
|
||||
},
|
||||
{
|
||||
"id": "menu-view-p",
|
||||
"action": "view-p",
|
||||
"sourceSymbol": "commands.set_view_p",
|
||||
"sourceLines": "axis.py:2220-2221",
|
||||
"expected": "select perspective/fit camera"
|
||||
},
|
||||
{
|
||||
"id": "menu-clear-preview",
|
||||
"action": "clear-preview",
|
||||
"sourceSymbol": "commands.clear_live_plot",
|
||||
"sourceLines": "axis.py:2557-2558",
|
||||
"expected": "clear live plot buffer"
|
||||
},
|
||||
{
|
||||
"id": "menu-audit",
|
||||
"action": "audit",
|
||||
"sourceSymbol": "web parity audit",
|
||||
"sourceLines": "collect-web-xyzbc-trt-evidence.mjs",
|
||||
"expected": "request native/Web parity audit"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-estop",
|
||||
"action": "estop",
|
||||
"sourceSymbol": "commands.estop_clicked",
|
||||
"sourceLines": "axis.py:2223-2229",
|
||||
"expected": "toggle ESTOP/ESTOP_RESET"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-power",
|
||||
"action": "power",
|
||||
"sourceSymbol": "commands.onoff_clicked",
|
||||
"sourceLines": "axis.py:2231-2241",
|
||||
"expected": "toggle machine power"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-load",
|
||||
"action": "open",
|
||||
"sourceSymbol": "commands.open_file",
|
||||
"sourceLines": "axis.py:2243-2262",
|
||||
"expected": "open local G-code"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-reload",
|
||||
"action": "reload",
|
||||
"sourceSymbol": "commands.reload_file",
|
||||
"sourceLines": "axis.py:2296-2297",
|
||||
"expected": "reload active program"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-run",
|
||||
"action": "run",
|
||||
"sourceSymbol": "commands.task_run",
|
||||
"sourceLines": "axis.py:2308-2320",
|
||||
"expected": "start AUTO run"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-pause-resume",
|
||||
"action": "pause",
|
||||
"sourceSymbol": "commands.task_pauseresume",
|
||||
"sourceLines": "axis.py:2353-2363",
|
||||
"expected": "pause or resume based on paused state"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-step",
|
||||
"action": "step",
|
||||
"sourceSymbol": "commands.task_step",
|
||||
"sourceLines": "axis.py:2321-2327",
|
||||
"expected": "single step"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-stop",
|
||||
"action": "stop",
|
||||
"sourceSymbol": "commands.task_stop",
|
||||
"sourceLines": "axis.py:2365-2372",
|
||||
"expected": "abort current task"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-view-z",
|
||||
"action": "view-z",
|
||||
"sourceSymbol": "commands.set_view_z",
|
||||
"sourceLines": "axis.py:2208-2215",
|
||||
"expected": "Z view"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-view-y",
|
||||
"action": "view-y",
|
||||
"sourceSymbol": "commands.set_view_y",
|
||||
"sourceLines": "axis.py:2192-2200",
|
||||
"expected": "Y view"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-view-x",
|
||||
"action": "view-x",
|
||||
"sourceSymbol": "commands.set_view_x",
|
||||
"sourceLines": "axis.py:2182-2190",
|
||||
"expected": "X view"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-view-p",
|
||||
"action": "view-p",
|
||||
"sourceSymbol": "commands.set_view_p",
|
||||
"sourceLines": "axis.py:2220-2221",
|
||||
"expected": "perspective view"
|
||||
},
|
||||
{
|
||||
"id": "toolbar-clear-preview",
|
||||
"action": "clear-preview",
|
||||
"sourceSymbol": "commands.clear_live_plot",
|
||||
"sourceLines": "axis.py:2557-2558",
|
||||
"expected": "clear path count"
|
||||
},
|
||||
{
|
||||
"id": "manual-tab",
|
||||
"action": "tab-manual",
|
||||
"sourceSymbol": "commands.ensure_manual",
|
||||
"sourceLines": "axis.py:2520-2531",
|
||||
"expected": "manual mode tab selected"
|
||||
},
|
||||
{
|
||||
"id": "mdi-tab",
|
||||
"action": "tab-mdi",
|
||||
"sourceSymbol": "commands.ensure_mdi",
|
||||
"sourceLines": "axis.py:2533-2540",
|
||||
"expected": "MDI mode tab selected"
|
||||
},
|
||||
{
|
||||
"id": "manual-select-joint",
|
||||
"action": "select-joint",
|
||||
"sourceSymbol": "axis radiobuttons ja_rbutton",
|
||||
"sourceLines": "axis.py:1369-1380",
|
||||
"expected": "active joint/axis selected"
|
||||
},
|
||||
{
|
||||
"id": "manual-jog-increment",
|
||||
"action": "jog-increment",
|
||||
"sourceSymbol": "set_hal_jogincrement",
|
||||
"sourceLines": "axis.py:1507-1515",
|
||||
"expected": "jog increment updates HAL-equivalent state"
|
||||
},
|
||||
{
|
||||
"id": "manual-jog-minus",
|
||||
"action": "jog-minus",
|
||||
"sourceSymbol": "commands.jog_minus",
|
||||
"sourceLines": "axis.py:2573-2577",
|
||||
"expected": "negative jog of active axis/joint"
|
||||
},
|
||||
{
|
||||
"id": "manual-jog-plus",
|
||||
"action": "jog-plus",
|
||||
"sourceSymbol": "commands.jog_plus",
|
||||
"sourceLines": "axis.py:2567-2571",
|
||||
"expected": "positive jog of active axis/joint"
|
||||
},
|
||||
{
|
||||
"id": "manual-touch-off",
|
||||
"action": "touch-off",
|
||||
"sourceSymbol": "commands.touch_off_system",
|
||||
"sourceLines": "axis.py:2631-2650",
|
||||
"expected": "G10 touch off MDI equivalent"
|
||||
},
|
||||
{
|
||||
"id": "manual-tool-touch-off",
|
||||
"action": "tool-touch-off",
|
||||
"sourceSymbol": "commands.touch_off_tool",
|
||||
"sourceLines": "axis.py:2651-2685",
|
||||
"expected": "tool length offset equivalent"
|
||||
},
|
||||
{
|
||||
"id": "manual-spindle-reverse",
|
||||
"action": "spindle-reverse",
|
||||
"sourceSymbol": "spindle CCW control",
|
||||
"sourceLines": "axis.py:1389-1398",
|
||||
"expected": "spindle reverse"
|
||||
},
|
||||
{
|
||||
"id": "manual-spindle-stop",
|
||||
"action": "spindle-stop",
|
||||
"sourceSymbol": "spindle stop control",
|
||||
"sourceLines": "axis.py:1389-1398",
|
||||
"expected": "spindle stop"
|
||||
},
|
||||
{
|
||||
"id": "manual-spindle-forward",
|
||||
"action": "spindle-forward",
|
||||
"sourceSymbol": "spindle CW control",
|
||||
"sourceLines": "axis.py:1389-1398",
|
||||
"expected": "spindle forward"
|
||||
},
|
||||
{
|
||||
"id": "override-feed-down",
|
||||
"action": "feed-override-down",
|
||||
"sourceSymbol": "commands.set_feedrate",
|
||||
"sourceLines": "axis.py:2131-2137",
|
||||
"expected": "feed override down"
|
||||
},
|
||||
{
|
||||
"id": "override-feed-up",
|
||||
"action": "feed-override-up",
|
||||
"sourceSymbol": "commands.set_feedrate",
|
||||
"sourceLines": "axis.py:2131-2137",
|
||||
"expected": "feed override up"
|
||||
},
|
||||
{
|
||||
"id": "override-rapid-down",
|
||||
"action": "rapid-override-down",
|
||||
"sourceSymbol": "commands.set_rapidrate",
|
||||
"sourceLines": "axis.py:2139-2145",
|
||||
"expected": "rapid override down"
|
||||
},
|
||||
{
|
||||
"id": "override-rapid-up",
|
||||
"action": "rapid-override-up",
|
||||
"sourceSymbol": "commands.set_rapidrate",
|
||||
"sourceLines": "axis.py:2139-2145",
|
||||
"expected": "rapid override up"
|
||||
},
|
||||
{
|
||||
"id": "override-spindle-down",
|
||||
"action": "spindle-override-down",
|
||||
"sourceSymbol": "commands.set_spindlerate",
|
||||
"sourceLines": "axis.py:2122-2129",
|
||||
"expected": "spindle override down"
|
||||
},
|
||||
{
|
||||
"id": "override-spindle-up",
|
||||
"action": "spindle-override-up",
|
||||
"sourceSymbol": "commands.set_spindlerate",
|
||||
"sourceLines": "axis.py:2122-2129",
|
||||
"expected": "spindle override up"
|
||||
},
|
||||
{
|
||||
"id": "manual-ignore-limits",
|
||||
"action": "ignore-limits",
|
||||
"sourceSymbol": "commands.toggle_override_limits",
|
||||
"sourceLines": "axis.py:3161",
|
||||
"expected": "limit override checkbox state"
|
||||
},
|
||||
{
|
||||
"id": "manual-block-delete",
|
||||
"action": "block-delete",
|
||||
"sourceSymbol": "commands.toggle_block_delete",
|
||||
"sourceLines": "axis.py:2051-2059",
|
||||
"expected": "block delete state"
|
||||
},
|
||||
{
|
||||
"id": "manual-optional-stop",
|
||||
"action": "optional-stop",
|
||||
"sourceSymbol": "commands.toggle_optional_stop",
|
||||
"sourceLines": "axis.py:2047-2049",
|
||||
"expected": "optional stop state"
|
||||
},
|
||||
{
|
||||
"id": "manual-flood",
|
||||
"action": "toggle-flood",
|
||||
"sourceSymbol": "commands.flood_toggle",
|
||||
"sourceLines": "axis.py:3176",
|
||||
"expected": "flood coolant toggle"
|
||||
},
|
||||
{
|
||||
"id": "manual-mist",
|
||||
"action": "toggle-mist",
|
||||
"sourceSymbol": "commands.mist_toggle",
|
||||
"sourceLines": "axis.py:3175",
|
||||
"expected": "mist coolant toggle"
|
||||
},
|
||||
{
|
||||
"id": "mdi-submit",
|
||||
"action": "mdi-form",
|
||||
"sourceSymbol": "commands.send_mdi",
|
||||
"sourceLines": "axis.py:2413-2417",
|
||||
"expected": "submit MDI command"
|
||||
},
|
||||
{
|
||||
"id": "mdi-history",
|
||||
"action": "mdi-history",
|
||||
"sourceSymbol": "commands.mdi_history_butt_1",
|
||||
"sourceLines": "axis.py:2499-2516",
|
||||
"expected": "run/restore MDI history command"
|
||||
},
|
||||
{
|
||||
"id": "pyvcp-identity",
|
||||
"action": "kins-identity",
|
||||
"sourceSymbol": "pyvcp.type0-button -> halui.mdi-command-00",
|
||||
"sourceLines": "switchkins_postgui.hal",
|
||||
"expected": "M429 sets identity kins"
|
||||
},
|
||||
{
|
||||
"id": "pyvcp-tcp",
|
||||
"action": "kins-tcp",
|
||||
"sourceSymbol": "pyvcp.type1-button -> halui.mdi-command-01",
|
||||
"sourceLines": "switchkins_postgui.hal",
|
||||
"expected": "M428 sets tcp-xyzbc kins"
|
||||
},
|
||||
{
|
||||
"id": "pyvcp-userk",
|
||||
"action": "kins-userk",
|
||||
"sourceSymbol": "pyvcp.type2-button -> halui.mdi-command-02",
|
||||
"sourceLines": "switchkins_postgui.hal",
|
||||
"expected": "M430 sets userk kins"
|
||||
},
|
||||
{
|
||||
"id": "pyvcp-clear",
|
||||
"action": "clear-preview",
|
||||
"sourceSymbol": "pyvcp.vismach-clear -> vismach.plotclear",
|
||||
"sourceLines": "switchkins_postgui.hal",
|
||||
"expected": "clear Vismach plot"
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
{
|
||||
"id": "program",
|
||||
@@ -932,7 +1462,7 @@
|
||||
"ready": true,
|
||||
"evidence": {
|
||||
"samplePeriodMs": 20,
|
||||
"sampleCount": 3074
|
||||
"sampleCount": 3226
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -950,7 +1480,108 @@
|
||||
"canRunAuto": false,
|
||||
"canExecuteMdi": false,
|
||||
"canJog": false,
|
||||
"canHome": false
|
||||
"canHome": false,
|
||||
"axisButtonParity": {
|
||||
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
|
||||
"pyvcpSourceFiles": [
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
|
||||
],
|
||||
"requiredActions": [
|
||||
"estop",
|
||||
"power",
|
||||
"open",
|
||||
"reload",
|
||||
"run-ready",
|
||||
"run",
|
||||
"pause",
|
||||
"resume",
|
||||
"step",
|
||||
"stop",
|
||||
"home-all",
|
||||
"jog-minus",
|
||||
"jog-plus",
|
||||
"touch-off",
|
||||
"tool-touch-off",
|
||||
"spindle-forward",
|
||||
"spindle-stop",
|
||||
"spindle-reverse",
|
||||
"feed-override-down",
|
||||
"feed-override-up",
|
||||
"rapid-override-down",
|
||||
"rapid-override-up",
|
||||
"spindle-override-down",
|
||||
"spindle-override-up",
|
||||
"ignore-limits",
|
||||
"block-delete",
|
||||
"optional-stop",
|
||||
"toggle-flood",
|
||||
"toggle-mist",
|
||||
"mdi-form",
|
||||
"mdi-history",
|
||||
"kins-identity",
|
||||
"kins-tcp",
|
||||
"kins-userk",
|
||||
"clear-preview",
|
||||
"view-x",
|
||||
"view-y",
|
||||
"view-z",
|
||||
"view-p"
|
||||
],
|
||||
"coveredActions": [
|
||||
"open",
|
||||
"reload",
|
||||
"stage",
|
||||
"save-session",
|
||||
"restore-session",
|
||||
"estop",
|
||||
"power",
|
||||
"home-all",
|
||||
"run-ready",
|
||||
"run",
|
||||
"pause",
|
||||
"resume",
|
||||
"step",
|
||||
"stop",
|
||||
"view-z",
|
||||
"view-y",
|
||||
"view-x",
|
||||
"view-p",
|
||||
"clear-preview",
|
||||
"audit",
|
||||
"tab-manual",
|
||||
"tab-mdi",
|
||||
"select-joint",
|
||||
"jog-increment",
|
||||
"jog-minus",
|
||||
"jog-plus",
|
||||
"touch-off",
|
||||
"tool-touch-off",
|
||||
"spindle-reverse",
|
||||
"spindle-stop",
|
||||
"spindle-forward",
|
||||
"feed-override-down",
|
||||
"feed-override-up",
|
||||
"rapid-override-down",
|
||||
"rapid-override-up",
|
||||
"spindle-override-down",
|
||||
"spindle-override-up",
|
||||
"ignore-limits",
|
||||
"block-delete",
|
||||
"optional-stop",
|
||||
"toggle-flood",
|
||||
"toggle-mist",
|
||||
"mdi-form",
|
||||
"mdi-history",
|
||||
"kins-identity",
|
||||
"kins-tcp",
|
||||
"kins-userk"
|
||||
],
|
||||
"missingActions": [],
|
||||
"buttonCount": 61,
|
||||
"sourceReferencedCount": 61,
|
||||
"ready": true
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -959,6 +1590,114 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "ui",
|
||||
"requirement": "web AXIS/PyVCP buttons are source-referenced and covered by a button-level parity matrix",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"axisButtonParity": {
|
||||
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
|
||||
"pyvcpSourceFiles": [
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
||||
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
|
||||
],
|
||||
"requiredActions": [
|
||||
"estop",
|
||||
"power",
|
||||
"open",
|
||||
"reload",
|
||||
"run-ready",
|
||||
"run",
|
||||
"pause",
|
||||
"resume",
|
||||
"step",
|
||||
"stop",
|
||||
"home-all",
|
||||
"jog-minus",
|
||||
"jog-plus",
|
||||
"touch-off",
|
||||
"tool-touch-off",
|
||||
"spindle-forward",
|
||||
"spindle-stop",
|
||||
"spindle-reverse",
|
||||
"feed-override-down",
|
||||
"feed-override-up",
|
||||
"rapid-override-down",
|
||||
"rapid-override-up",
|
||||
"spindle-override-down",
|
||||
"spindle-override-up",
|
||||
"ignore-limits",
|
||||
"block-delete",
|
||||
"optional-stop",
|
||||
"toggle-flood",
|
||||
"toggle-mist",
|
||||
"mdi-form",
|
||||
"mdi-history",
|
||||
"kins-identity",
|
||||
"kins-tcp",
|
||||
"kins-userk",
|
||||
"clear-preview",
|
||||
"view-x",
|
||||
"view-y",
|
||||
"view-z",
|
||||
"view-p"
|
||||
],
|
||||
"coveredActions": [
|
||||
"open",
|
||||
"reload",
|
||||
"stage",
|
||||
"save-session",
|
||||
"restore-session",
|
||||
"estop",
|
||||
"power",
|
||||
"home-all",
|
||||
"run-ready",
|
||||
"run",
|
||||
"pause",
|
||||
"resume",
|
||||
"step",
|
||||
"stop",
|
||||
"view-z",
|
||||
"view-y",
|
||||
"view-x",
|
||||
"view-p",
|
||||
"clear-preview",
|
||||
"audit",
|
||||
"tab-manual",
|
||||
"tab-mdi",
|
||||
"select-joint",
|
||||
"jog-increment",
|
||||
"jog-minus",
|
||||
"jog-plus",
|
||||
"touch-off",
|
||||
"tool-touch-off",
|
||||
"spindle-reverse",
|
||||
"spindle-stop",
|
||||
"spindle-forward",
|
||||
"feed-override-down",
|
||||
"feed-override-up",
|
||||
"rapid-override-down",
|
||||
"rapid-override-up",
|
||||
"spindle-override-down",
|
||||
"spindle-override-up",
|
||||
"ignore-limits",
|
||||
"block-delete",
|
||||
"optional-stop",
|
||||
"toggle-flood",
|
||||
"toggle-mist",
|
||||
"mdi-form",
|
||||
"mdi-history",
|
||||
"kins-identity",
|
||||
"kins-tcp",
|
||||
"kins-userk"
|
||||
],
|
||||
"missingActions": [],
|
||||
"buttonCount": 61,
|
||||
"sourceReferencedCount": 61,
|
||||
"ready": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "ui",
|
||||
"requirement": "web UI state flow, buttons, HAL pins, and paths are rechecked against native xyzbc-trt runtime",
|
||||
@@ -971,7 +1710,7 @@
|
||||
"states": [
|
||||
{
|
||||
"name": "before",
|
||||
"taskState": 1,
|
||||
"taskState": 4,
|
||||
"taskMode": 1,
|
||||
"interpState": 1,
|
||||
"execState": 2,
|
||||
@@ -982,7 +1721,7 @@
|
||||
false,
|
||||
false
|
||||
],
|
||||
"file": "./demos/xyzbc_switchkins.ngc"
|
||||
"file": "/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
||||
},
|
||||
{
|
||||
"name": "after",
|
||||
@@ -1074,10 +1813,28 @@
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"nativeSampleCount": 3226,
|
||||
"webSampleCount": 3074,
|
||||
"webSampleCount": 3226,
|
||||
"unavailable": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-preview",
|
||||
"requirement": "native and web preview tool paths are geometrically aligned",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"thresholds": {
|
||||
"maxTcpErrorMm": 0.001,
|
||||
"maxJointError": 0.001,
|
||||
"maxToolAxisAngleDeg": 0.001,
|
||||
"sampleCountDelta": 0
|
||||
},
|
||||
"maxTcpErrorMm": 3.552713678800501e-15,
|
||||
"rmsTcpErrorMm": 3.620348931466302e-16,
|
||||
"maxJointError": 3.552713678800501e-15,
|
||||
"maxToolAxisAngleDeg": 0,
|
||||
"sampleCountDelta": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-execution",
|
||||
"requirement": "native and web execution path sample period is 20ms",
|
||||
@@ -1112,7 +1869,7 @@
|
||||
"requirement": "web preview and execution paths are comparable",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"webPreviewSampleCount": 3074,
|
||||
"webPreviewSampleCount": 3226,
|
||||
"webExecutionSampleCount": 569,
|
||||
"unavailable": []
|
||||
}
|
||||
@@ -1123,25 +1880,39 @@
|
||||
"previewVsPreview": {
|
||||
"status": "pass",
|
||||
"comparable": true,
|
||||
"geometricAligned": true,
|
||||
"thresholds": {
|
||||
"maxTcpErrorMm": 0.001,
|
||||
"maxJointError": 0.001,
|
||||
"maxToolAxisAngleDeg": 0.001,
|
||||
"sampleCountDelta": 0
|
||||
},
|
||||
"periodsMatch": true,
|
||||
"nativeSamplePeriodMs": 20,
|
||||
"webSamplePeriodMs": 20,
|
||||
"leftSampleCount": 3226,
|
||||
"rightSampleCount": 3074,
|
||||
"rightSampleCount": 3226,
|
||||
"nativeSampleCount": 3226,
|
||||
"webSampleCount": 3074,
|
||||
"webSampleCount": 3226,
|
||||
"unavailable": [],
|
||||
"maxTcpErrorMm": 67.98043602330502,
|
||||
"rmsTcpErrorMm": 32.95865162170114,
|
||||
"maxJointError": 82.06891657213505,
|
||||
"rmsJointError": 37.490160637344005,
|
||||
"maxToolAxisAngleDeg": 19.999999999999993,
|
||||
"sampleCountDelta": 152,
|
||||
"maxTcpErrorMm": 3.552713678800501e-15,
|
||||
"rmsTcpErrorMm": 3.620348931466302e-16,
|
||||
"maxJointError": 3.552713678800501e-15,
|
||||
"rmsJointError": 3.620348931466302e-16,
|
||||
"maxToolAxisAngleDeg": 0,
|
||||
"sampleCountDelta": 0,
|
||||
"missingSamples": []
|
||||
},
|
||||
"executionVsExecution": {
|
||||
"status": "pass",
|
||||
"status": "fail",
|
||||
"comparable": true,
|
||||
"geometricAligned": false,
|
||||
"thresholds": {
|
||||
"maxTcpErrorMm": 0.001,
|
||||
"maxJointError": 0.001,
|
||||
"maxToolAxisAngleDeg": 0.001,
|
||||
"sampleCountDelta": 0
|
||||
},
|
||||
"periodsMatch": true,
|
||||
"nativeSamplePeriodMs": 20,
|
||||
"webSamplePeriodMs": 20,
|
||||
@@ -1161,6 +1932,8 @@
|
||||
"previewVsExecutionNative": {
|
||||
"status": "pass",
|
||||
"comparable": true,
|
||||
"geometricAligned": true,
|
||||
"thresholds": null,
|
||||
"periodsMatch": true,
|
||||
"nativePreviewSamplePeriodMs": 20,
|
||||
"nativeExecutionSamplePeriodMs": 20,
|
||||
@@ -1178,18 +1951,20 @@
|
||||
"previewVsExecutionWeb": {
|
||||
"status": "pass",
|
||||
"comparable": true,
|
||||
"geometricAligned": true,
|
||||
"thresholds": null,
|
||||
"periodsMatch": true,
|
||||
"webPreviewSamplePeriodMs": 20,
|
||||
"webExecutionSamplePeriodMs": 20,
|
||||
"leftSampleCount": 3074,
|
||||
"leftSampleCount": 3226,
|
||||
"rightSampleCount": 569,
|
||||
"unavailable": [],
|
||||
"maxTcpErrorMm": 31.575968660550437,
|
||||
"rmsTcpErrorMm": 14.55884964854259,
|
||||
"maxJointError": 58.498220458848685,
|
||||
"rmsJointError": 20.762740311288844,
|
||||
"maxTcpErrorMm": 38.30103950316296,
|
||||
"rmsTcpErrorMm": 27.021770315964023,
|
||||
"maxJointError": 61.12490900383208,
|
||||
"rmsJointError": 30.022839681881376,
|
||||
"maxToolAxisAngleDeg": 19.999999999999993,
|
||||
"sampleCountDelta": 2505,
|
||||
"sampleCountDelta": 2657,
|
||||
"missingSamples": []
|
||||
}
|
||||
},
|
||||
|
||||
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 30 KiB |