Files
cnc_wams/qa/web-rtcp-5axis-site-test/output/working7-full-functional-evidence-report.md

105 KiB
Raw Blame History

working7 全量功能实际执行验证报告

生成时间2026-06-28T00:28:38.507Z job_idw7full-20260628002838-518bf522 report_idreport-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 已经加载。

我打开主界面并记录按钮库存

{
  "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 门禁

{
  "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 与轴值保持可读。

我完成上电和回零

{
  "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 变为 activeMANUAL 变为 inactivepower/home 状态未丢失。

我验证右侧 AUTO 按钮

{
  "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 的状态和门禁均已实际点击验证。

我验证右侧全班按钮

{
  "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 下拉切换

{
  "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 同步。

我验证刀具预览按钮和刀路状态

{
  "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 来源选择

{
  "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 文件按钮

{
  "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

{
  "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 和当前段高亮同步变化。

我验证刀具实时执行路径

{
  "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 均已验证。

我验证暂停、继续和单步

{
  "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 停止

{
  "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 同步。

我验证手动点动和机床轴值

{
  "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 执行过程

{
  "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 输入

{
  "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 控制并实际更新状态。

我验证主轴和冷却

{
  "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 按钮

{
  "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 边界

{
  "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"
  }
}