# working7 全量功能实际执行验证报告 生成时间:2026-06-28T00:28:38.507Z job_id:w7full-20260628002838-518bf522 report_id:report-w7full-20260628002838-518bf522 目标页面:http://127.0.0.1:41281/web-rtcp-5axis-sim-plan/app/index.html 总体结果:PASS ## 我验证的范围 我在真实 Chromium 页面中逐项点击并验证主界面按钮、右侧全班按钮、程序执行、刀具预览、刀具实时执行路径、G-code 执行过程、机床轴值、倍率、主轴冷却、会话和诊断边界。 ## 总体验收 | 检查项 | 结果 | 证据 | | --- | --- | --- | | 所有主界面区域存在 | PASS | {"titlebar":true,"preview":true,"dro":true,"gcode":true,"status-sidebar":true,"info-tabs":true,"override":true,"spindle-coolant":true,"bottom-controls":true} | | canvas 非空且 WebGL ready | PASS | 01-loaded-inventory:0.7801, 02-initial-run-blocked:0.7801, 03-powered-homed:0.7801, 04-auto-right-panel:0.7801, 05-right-sidebar-all-states:0.7801, 06-profile-xyzbc:0.7802, 07-preview-buttons:0.7887, 08-linuxcnc-source-loaded:0.7893, 09-open-file-loaded:0.7784, 10-run-ready:0.7784, 11-run-realtime-path:0.7789, 12-pause-resume-step:0.7787, 13-stop-idle:0.7787, 14-manual-jog-axis-values:0.7787, 15-mdi-execution:0.7812, 16-overrides-hal:0.7814, 17-spindle-coolant:0.7814, 18-session-fullscreen:0.7814, 19-diagnostics-audit:0.7814 | | 按钮库存包含核心 action | PASS | missing= | | 核心按钮均执行验证 | PASS | missing= | | 未发生页面异常 | PASS | - | | 所有 action 断言通过 | PASS | - | ## 按钮执行矩阵 | action | 我执行的操作 | 结果 | 关键状态变化 | | --- | --- | --- | --- | | RUN | 未上电直接 RUN 应被门禁拦截 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":false,"estopActive":false,"taskState":"estop-reset","mode":"manual","allHomed":false,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro | | mode-auto | 未上电 AUTO 应被门禁拦截 | PASS | {"exists":true,"tagName":"BUTTON","disabled":true,"active":"false","commandReady":"false","ariaDisabled":"true","title":"mode blocked: machine must be on before AUTO","label":"AUTO","iconName":"mode_auto_inactive","iconVariant":"inactive","gmoccapyButtonId":"rbt_auto","nativePanel":"right","nativeButtonIndex":"4","halPin":"gmoccapy.v-button.button-4"} | | mode-mdi | 未上电 MDI 应被门禁拦截 | PASS | {"exists":true,"tagName":"BUTTON","disabled":true,"active":"false","commandReady":"false","ariaDisabled":"true","title":"mode blocked: machine must be on before MDI","label":"MDI","iconName":"mode_mdi_inactive","iconVariant":"inactive","gmoccapyButtonId":"rbt_mdi","nativePanel":"right","nativeButtonIndex":"3","halPin":"gmoccapy.v-button.button-3"} | | spindle-forward | 未上电主轴正转应被门禁拦截 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":false,"estopActive":false,"taskState":"estop-reset","mode":"manual","allHomed":false,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro" | | toggle-mist | 未上电冷却应被门禁拦截 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":false,"estopActive":false,"taskState":"estop-reset","mode":"manual","allHomed":false,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro" | | power | POWER 上电 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":false,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":0 | | HOME | HOME 回零 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":43,"y":-32.15,"z":-11.306,"a":0,"b":0,"c":0},"dro":{"x":43 | | mode-auto | AUTO 模式 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0 | | mode-manual | MANUAL 模式 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y" | | mode-jog | JOG 入口归入 MANUAL 点动页 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y" | | mode-mdi | MDI 模式 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"mdi","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"mdi","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0," | | mode-manual | 返回 MANUAL | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":0, | | kins-tcp | 右侧 TCP 打开 RTCP | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y" | | kins-identity | 右侧 IDENTITY 关闭 RTCP | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y" | | estop | E-STOP 急停 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"estopped","activeLine":1,"machine":{"powerOn":false,"estopActive":true,"taskState":"estop","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0 | | power | 急停后 POWER 被阻止 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"estopped","activeLine":1,"machine":{"powerOn":false,"estopActive":true,"taskState":"estop","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0 | | reset | RESET 清除急停 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":false,"estopActive":false,"taskState":"estop-reset","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y | | power | RESET 后重新上电 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":0, | | HOME | RESET 后重新回零 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":43,"y":-32.15,"z":-11.306,"a":0,"b":0,"c":0},"dro":{"x":43 | | select-profile | 切换到 xyzbc-trt 轮廓 | PASS | {"machineProfile":"xyzbc-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0, | | select-profile | 切换到 reference-only gmoccapy-xyzab | PASS | {"machineProfile":"gmoccapy-xyzab","activeProgram":"linuxcnc/nc_files/3D_Chips.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"tcpPose":{"x":0," | | kins-tcp | reference-only profile 的 TCP 禁用 | PASS | {"before":{"exists":true,"tagName":"BUTTON","disabled":true,"active":"false","commandReady":null,"ariaDisabled":null,"title":"gmoccapy-xyzab is trivkins reference only","label":"TCP","iconName":null,"iconVariant":null,"gmoccapyButtonId":null,"nativePanel":null,"nativeButtonIndex":null,"halPin":null},"after":{"exists":true,"tagName":"BUTTON","disabled":true,"active":"true","commandReady":null,"ariaDisabled":null,"title":"gmoccapy-xyzab is trivkins reference only","label":"TCP","iconName":null,"ic | | select-profile | 切回 xyzac-trt 轮廓 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0, | | view-x | 预览 X 视图 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x" | | view-y | 预览 Y 视图 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x" | | view-z | 预览 Z 视图 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x" | | reset-view | 预览 Fit/复位视图 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x" | | clear-preview | 清除刀路预览 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":0,"a":0,"b":0,"c":0},"dro":{"x" | | RELOAD | Reload 恢复预览路径 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":43,"y":-32.15,"z":-11.306,"a":0,"b":0,"c":0 | | stage-linuxcnc-sources | Stage LinuxCNC source | PASS | {"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":43,"y":-32.15,"z":-11.306,"a":0,"b":0,"c":0},"dro":{ | | select-linuxcnc-gcode-source | 选择第一个 LinuxCNC 5-axis G-code source | PASS | {"sourceRel":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","state":{"machineProfile":"xyzac-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc","programSource":"linuxcnc-vendored-5axis-gcode","programExecutionSourceMode":"linuxcnc-interpreter-wasm","runState":"idle","activeLine":9,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiComman | | OPEN | Open 上传本地 G-code fixture | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"idle","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":43,"y":-32.15,"z":-11.306,"a":0,"b":0,"c":0},"dro":{"x":43,"y":-32.15,"z":-11.306,"a":0,"b":0,"c":0},"tcpPose":{"x":43,"y": | | RUN_READY | Run Ready 一键准备 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-interpreter-wasm","runState":"idle","activeLine":3,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":5,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":5,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":5,"a":0,"b":0,"c":0},"kinsType": | | RUN | RUN 执行程序 | PASS | {"state":{"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"running","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"reading","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":3.67183,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":3.67183,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":3 | | PAUSE | PAUSE 暂停 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"paused","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"paused","taskPaused":true,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":2.34366,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":2.34366,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":2.34366,"a":0 | | RESUME | RESUME 继续 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"running","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"reading","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":2.31046,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":2.31046,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":2.31046,"a | | PAUSE | STEP 前暂停 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"paused","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"paused","taskPaused":true,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":1.97842,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.97842,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.97842,"a":0 | | STEP | STEP 单步 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"paused","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"paused","taskPaused":true,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":1.97842,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.97842,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.9 | | STOP | STOP 停止 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"auto","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a":0 | | mode-manual | 切到 MANUAL 准备点动 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a" | | JOG_X_NEG | JOG_X_NEG 点动 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1 | | JOG_X_POS | JOG_X_POS 点动 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":-1,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":-1,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":-1,"y":0,"z | | JOG_Y_NEG | JOG_Y_NEG 点动 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1 | | JOG_Y_POS | JOG_Y_POS 点动 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":-1,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":-1,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":-1,"z | | mode-mdi | 切到 MDI | PASS | {"machineProfile":"xyzac-trt","activeProgram":"test-program.ngc","programSource":"operator-file","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"mdi","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G0 X0 Y0 Z0"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a":0, | | mdi-submit | MDI 输入并执行 G90 X12.5 Y-4 Z1.25 F900 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"operator-mdi","runState":"mdi","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"mdi","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"dro":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"tcpPose":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"kinsT | | mdi-history | MDI 历史快捷按钮 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"operator-mdi","runState":"mdi","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"mdi","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"dro":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"tcpPose":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"kinsT | | MDI_RUN | 底部 MDI_RUN 执行当前 MDI | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"operator-mdi","runState":"mdi","activeLine":1,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"mdi","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"dro":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"tcpPose":{"x":12.5,"y":-4,"z":1.25,"a":0,"b":0,"c":0},"kinsT | | mode-manual | 返回 MANUAL 准备倍率 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | rapid-override-down | Rapid - | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | rapid-override-up | Rapid + | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | rapid-override-reset | Rapid 100 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | feed-override-up | Feed + | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | feed-override-down | Feed - | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | feed-override-reset | Feed 100 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | spindle-override-up | Spindle + | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | spindle-override-down | Spindle - | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | spindle-override-reset | Spindle 100 | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | ignore-limits | Limits | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | block-delete | / Block | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | optional-stop | M1 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | spindle-forward | 主轴 FWD | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | spindle-reverse | 主轴 REV | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | spindle-stop | 主轴 STOP | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | toggle-flood | Flood | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | toggle-mist | Mist | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | SAVE_SESSION | Save Session | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | select-profile | 会话恢复前临时切换 profile | PASS | {"machineProfile":"xyzbc-trt","activeProgram":"configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0," | | RESTORE_SESSION | Restore Session | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | FULL | Full 全屏状态切换 | PASS | {"before":{"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1. | | AUDIT_FULL_BOUNDARY | Audit Full Boundary | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | GMOCAPY_HAL_PIN ignore-limits | 公开 API 写入 gmoccapy HAL pin | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | | GMOCAPY_NATIVE_PAGE file | 公开 API 切换 gmoccapy native file page | PASS | {"machineProfile":"xyzac-trt","activeProgram":"MDI","programSource":"operator-mdi","programExecutionSourceMode":"linuxcnc-task-motion-hal-wasm","runState":"stopped","activeLine":4,"machine":{"powerOn":true,"estopActive":false,"taskState":"on","mode":"manual","allHomed":true,"interpState":"idle","taskPaused":false,"mdiCommand":"G90 X12.5 Y-4 Z1.25 F900"},"axisPose":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"dro":{"x":0,"y":0,"z":1.94521,"a":0,"b":0,"c":0},"tcpPose":{"x":0,"y":0,"z":1.94521,"a": | ## 图文证据 ### 01-loaded-inventory 我打开主界面并记录按钮库存 我确认主界面九大区域、所有 data-action 控件、canvas 和运行时 API 已经加载。 ![我打开主界面并记录按钮库存](working7-full-functional-evidence/01-loaded-inventory.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": false, "estopActive": false, "taskState": "estop-reset", "mode": "manual", "allHomed": false, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 0.0 | cycle 1/10 | sample 10 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "not-saved / - / storage pending / - / -", "operatorMessage": "LinuxCNC task/HAL session ready /work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/boat-xyzac.ngc" } } ``` ### 02-initial-run-blocked 我验证未上电 RUN 门禁 未上电时 RUN 不会进入执行状态,页面给出 machine must be on 门禁原因。 ![我验证未上电 RUN 门禁](working7-full-functional-evidence/02-initial-run-blocked.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": false, "estopActive": false, "taskState": "estop-reset", "mode": "manual", "allHomed": false, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 0.0 | cycle 1/10 | sample 10 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "not-saved / - / storage pending / - / -", "operatorMessage": "run blocked: machine must be on" } } ``` ### 03-powered-homed 我完成上电和回零 POWER 和 HOME 后,机床处于 on/manual/allHomed 状态,DRO 与轴值保持可读。 ![我完成上电和回零](working7-full-functional-evidence/03-powered-homed.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 3600.0 | cycle 3/30 | sample 30 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "not-saved / - / storage pending / - / -", "operatorMessage": "task/HAL machine homed" } } ``` ### 04-auto-right-panel 我验证右侧 AUTO 按钮 右侧 AUTO 变为 active,MANUAL 变为 inactive,power/home 状态未丢失。 ![我验证右侧 AUTO 按钮](working7-full-functional-evidence/04-auto-right-panel.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 3600.0 | cycle 4/40 | sample 40 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto / mdi blocked / pause / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "not-saved / - / storage pending / - / -", "operatorMessage": "task/HAL mode auto" } } ``` ### 05-right-sidebar-all-states 我验证右侧全班按钮 右侧 E-STOP/POWER/RESET/AUTO/MANUAL/JOG/MDI/IDENTITY/TCP 的状态和门禁均已实际点击验证。 ![我验证右侧全班按钮](working7-full-functional-evidence/05-right-sidebar-all-states.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 3600.0 | cycle 8/80 | sample 80 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "not-saved / - / storage pending / - / -", "operatorMessage": "kinematics identity" } } ``` ### 06-profile-xyzbc 我验证 Profile 下拉切换 切换到 xyzbc-trt 后,INI、运动学和机床文件 staging 会重新加载到对应 profile。 ![我验证 Profile 下拉切换](working7-full-functional-evidence/06-profile-xyzbc.png) ```json { "runState": "idle", "machineProfile": "xyzbc-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 3600.0 | cycle 10/100 | sample 100 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "LinuxCNC kinematics xyzbc-trt profile frame refreshed" } } ``` ### 07-preview-buttons 我验证刀具预览按钮和刀路状态 X/Y/Z/Fit/Clear/Reload 后,canvas dataset 中的 selectedView、pathPoints、RTCP 状态与 store 同步。 ![我验证刀具预览按钮和刀路状态](working7-full-functional-evidence/07-preview-buttons.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 43, "y": -32.15, "z": -11.306, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 43, "y": -32.15, "z": -11.306, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.043,\"y\":-0.032,\"z\":-0.011}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":43,\"y\":-32.15,\"z\":-11.306,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "program reloaded" } } ``` ### 08-linuxcnc-source-loaded 我验证 LinuxCNC G-code 来源选择 Stage 和 source 下拉选择后,G-code 面板、程序行、刀路预览和 interpreter canonical motion 均已刷新。 ![我验证 LinuxCNC G-code 来源选择](working7-full-functional-evidence/08-linuxcnc-source-loaded.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":-84.019,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 3600.0 | cycle 1/10 | sample 10 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "LinuxCNC task/HAL session ready /work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/boat-xyzac.ngc" } } ``` ### 09-open-file-loaded 我验证 Open 文件按钮 通过隐藏 file input 实际上传本地 fixture/test-program.ngc,页面加载为 operator-file 程序。 ![我验证 Open 文件按钮](working7-full-functional-evidence/09-open-file-loaded.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 5, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 5, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "3", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":5,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.005,\"y\":0.005,\"z\":0.002},\"size\":{\"x\":0.01,\"y\":0.01,\"z\":0.006},\"maxSpan\":0.01}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "1", "threeFeedPathPoints": "2", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 3, "activeRowLine": 3, "activeExecution": "ready | F 30.0 | cycle 0/1 | sample 0 | linuxcnc-interpreter-wasm" }, "values": { "activeProgram": "test-program.ngc", "programSource": "operator-file", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto / mdi blocked / pause / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "LinuxCNC interpreter motion events 3" } } ``` ### 10-run-ready 我验证 Run Ready Run Ready 完成 power/home/auto/source/session 前置条件,准备进入 Task/HAL 程序执行。 ![我验证 Run Ready](working7-full-functional-evidence/10-run-ready.png) ```json { "runState": "idle", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "3", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.005,\"y\":0.005,\"z\":0.002},\"size\":{\"x\":0.01,\"y\":0.01,\"z\":0.006},\"maxSpan\":0.01}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "1", "threeFeedPathPoints": "2", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 1, "activeRowLine": 1, "activeExecution": "idle | F 3600.0 | cycle 4/40 | sample 40 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "test-program.ngc", "programSource": "operator-file", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto / mdi blocked / pause / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "RUN ready: power on, homed, auto mode" } } ``` ### 11-run-realtime-path 我验证刀具实时执行路径 RUN 后 G-code 当前行、DRO、Task/HAL runtime feedback、canvas executedPathPoints 和当前段高亮同步变化。 ![我验证刀具实时执行路径](working7-full-functional-evidence/11-run-realtime-path.png) ```json { "runState": "running", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "reading", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 2.50968, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 2.50968, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "3", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.003}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":2.51,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.005,\"y\":0.005,\"z\":0.002},\"size\":{\"x\":0.01,\"y\":0.01,\"z\":0.006},\"maxSpan\":0.01}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "1", "threeFeedPathPoints": "2", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 4, "activeRowLine": 4, "activeExecution": "running | F 200.0 | cycle 79/790 | sample 790 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "test-program.ngc", "programSource": "operator-file", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto / mdi blocked / pause / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "task/HAL status tick 14" } } ``` ### 12-pause-resume-step 我验证暂停、继续和单步 PAUSE/RESUME/STEP 的状态、interpState、taskPaused 和 Task/HAL singleStepping 均已验证。 ![我验证暂停、继续和单步](working7-full-functional-evidence/12-pause-resume-step.png) ```json { "runState": "paused", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "paused", "taskPaused": true, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "3", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.002}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":1.945,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.005,\"y\":0.005,\"z\":0.002},\"size\":{\"x\":0.01,\"y\":0.01,\"z\":0.006},\"maxSpan\":0.01}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "1", "threeFeedPathPoints": "2", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 4, "activeRowLine": 4, "activeExecution": "paused | F 200.0 | cycle 98/980 | sample 980 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "test-program.ngc", "programSource": "operator-file", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto / mdi blocked / pause / resume", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "task/HAL stepped one cycle" } } ``` ### 13-stop-idle 我验证 STOP 停止 STOP 后 interpreter 返回 idle,进给速度清零,Task/HAL status loop 停止。 ![我验证 STOP 停止](working7-full-functional-evidence/13-stop-idle.png) ```json { "runState": "stopped", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "3", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.002}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":1.945,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.005,\"y\":0.005,\"z\":0.002},\"size\":{\"x\":0.01,\"y\":0.01,\"z\":0.006},\"maxSpan\":0.01}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "1", "threeFeedPathPoints": "2", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 4, "activeRowLine": 4, "activeExecution": "stopped | F 200.0 | cycle 99/990 | sample 990 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "test-program.ngc", "programSource": "operator-file", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto / mdi blocked / pause / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "task/HAL program stopped" } } ``` ### 14-manual-jog-axis-values 我验证手动点动和机床轴值 X-/X+/Y-/Y+ 均实际改变对应轴值,DRO 和 axisPose 同步。 ![我验证手动点动和机床轴值](working7-full-functional-evidence/14-manual-jog-axis-values.png) ```json { "runState": "stopped", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G0 X0 Y0 Z0" }, "axisPose": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "3", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.002}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":1.945,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.005,\"y\":0.005,\"z\":0.002},\"size\":{\"x\":0.01,\"y\":0.01,\"z\":0.006},\"maxSpan\":0.01}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "1", "threeFeedPathPoints": "2", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "gcode": { "currentLine": 4, "activeRowLine": 4, "activeExecution": "stopped | F 200.0 | cycle 104/1040 | sample 1040 | linuxcnc-task-motion-hal-wasm" }, "values": { "activeProgram": "test-program.ngc", "programSource": "operator-file", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "canonical-interpreter-boundary / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "task/HAL jog Y +1" } } ``` ### 15-mdi-execution 我验证 MDI 执行过程 MDI 输入、表单提交、历史按钮和底部 MDI_RUN 都执行到 store/runtime,并写入历史。 ![我验证 MDI 执行过程](working7-full-functional-evidence/15-mdi-execution.png) ```json { "runState": "stopped", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "mdi", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G90 X12.5 Y-4 Z1.25 F900" }, "axisPose": { "x": 12.5, "y": -4, "z": 1.25, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 12.5, "y": -4, "z": 1.25, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "1", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.013,\"y\":-0.004,\"z\":0.001}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":12.5,\"y\":-4,\"z\":1.25,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "operator-mdi", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "fixture_line_playback_not_promoted", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.013,\"y\":-0.004,\"z\":0.001},\"size\":{\"x\":0,\"y\":0,\"z\":0},\"maxSpan\":0}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "0", "threeFeedPathPoints": "1", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "gcode": { "currentLine": 4, "activeRowLine": 0, "activeExecution": "" }, "values": { "activeProgram": "MDI", "programSource": "operator-mdi", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "none", "taskGates": "jog blocked / home blocked / auto blocked / mdi / pause / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "blocked / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "task/HAL MDI G90 X12.5 Y-4 Z1.25 F900" } } ``` ### 16-overrides-hal 我验证倍率和 HAL 输入 Rapid/Feed/Spindle 倍率和 Limits/Block/M1 均通过按钮实际改变状态,并在诊断中显示 last HAL effect。 ![我验证倍率和 HAL 输入](working7-full-functional-evidence/16-overrides-hal.png) ```json { "runState": "stopped", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G90 X12.5 Y-4 Z1.25 F900" }, "axisPose": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "1", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.002}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":1.945,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "operator-mdi", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "fixture_line_playback_not_promoted", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.013,\"y\":-0.004,\"z\":0.001},\"size\":{\"x\":0,\"y\":0,\"z\":0},\"maxSpan\":0}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "0", "threeFeedPathPoints": "1", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "gcode": { "currentLine": 4, "activeRowLine": 0, "activeExecution": "" }, "values": { "activeProgram": "MDI", "programSource": "operator-mdi", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "web-control optional stop set from Web control", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "blocked / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "optional stop on" } } ``` ### 17-spindle-coolant 我验证主轴和冷却 FWD/REV/STOP、Flood、Mist 均受 power gate 控制并实际更新状态。 ![我验证主轴和冷却](working7-full-functional-evidence/17-spindle-coolant.png) ```json { "runState": "stopped", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G90 X12.5 Y-4 Z1.25 F900" }, "axisPose": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "1", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.002}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":1.945,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "operator-mdi", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "fixture_line_playback_not_promoted", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.013,\"y\":-0.004,\"z\":0.001},\"size\":{\"x\":0,\"y\":0,\"z\":0},\"maxSpan\":0}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "0", "threeFeedPathPoints": "1", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "gcode": { "currentLine": 4, "activeRowLine": 0, "activeExecution": "" }, "values": { "activeProgram": "MDI", "programSource": "operator-mdi", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "web-control optional stop set from Web control", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "blocked / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "profile-switched / - / storage pending / - / -", "operatorMessage": "mist coolant toggled" } } ``` ### 18-session-fullscreen 我验证会话和 Full 按钮 Save/Restore 通过 OPFS 或 fallback 存储恢复 profile/程序/UI 状态,Full 切换 preview.fullscreen。 ![我验证会话和 Full 按钮](working7-full-functional-evidence/18-session-fullscreen.png) ```json { "runState": "stopped", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G90 X12.5 Y-4 Z1.25 F900" }, "axisPose": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "1", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.002}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":1.945,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "operator-mdi", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "fixture_line_playback_not_promoted", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.013,\"y\":-0.004,\"z\":0.001},\"size\":{\"x\":0,\"y\":0,\"z\":0},\"maxSpan\":0}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "0", "threeFeedPathPoints": "1", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "gcode": { "currentLine": 4, "activeRowLine": 0, "activeExecution": "" }, "values": { "activeProgram": "MDI", "programSource": "operator-mdi", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "web-control optional stop set from Web control", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "blocked / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active main", "session": "restored / opfs / opfs available / opfs_available / web-rtcp-5axis-sim-plan/sessions/gmoccapy-web-session/web-rtcp-5axis-session.json", "operatorMessage": "fullscreen preview on" } } ``` ### 19-diagnostics-audit 我验证诊断和 gmoccapy 边界 Task policy、INI、Task/HAL、Full boundary、gmoccapy comm/HAL/native page 诊断均可读,HAL pin 模型可实际更新页面状态。 ![我验证诊断和 gmoccapy 边界](working7-full-functional-evidence/19-diagnostics-audit.png) ```json { "runState": "stopped", "machineProfile": "xyzac-trt", "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false, "mdiCommand": "G90 X12.5 Y-4 Z1.25 F900" }, "axisPose": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 1.94521, "a": 0, "b": 0, "c": 0 }, "canvas": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "1", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0.002}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":1.945,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "operator-mdi", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "fixture_line_playback_not_promoted", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.013,\"y\":-0.004,\"z\":0.001},\"size\":{\"x\":0,\"y\":0,\"z\":0},\"maxSpan\":0}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "0", "threeFeedPathPoints": "1", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "gcode": { "currentLine": 4, "activeRowLine": 0, "activeExecution": "" }, "values": { "activeProgram": "MDI", "programSource": "operator-mdi", "rapidOverride": "100 %", "feedOverride": "100 %", "spindleOverride": "100 %", "halLast": "web-control IconFileSelection1 / _BB_LOAD_FILE partial", "taskGates": "jog / home / auto blocked / mdi blocked / pause blocked / resume blocked", "taskHal": "task / motion / hal / sync", "fullBoundary": "blocked / remap pending / full blocked", "gmoccapyComm": "native_gmoccapy_nml_hal_reference_web_store_runtime_mapping", "gmoccapyHal": "gmoccapy_hal_pin_postgui_reference_web_diagnostic_only", "nativePageMatrix": "12 native pages / 1 implemented / 4 partial / 5 diagnostic-only / 2 native-only / hard-buttons diagnostic-only / active file-load", "session": "restored / opfs / opfs available / opfs_available / web-rtcp-5axis-sim-plan/sessions/gmoccapy-web-session/web-rtcp-5axis-session.json", "operatorMessage": "LinuxCNC machine files staged 18" } } ```