{ "generatedAt": "2026-06-23T07:39:18.278Z", "targetUrl": "http://127.0.0.1:40261/web-rtcp-5axis-sim-plan/app/index.html", "chromePath": "/usr/bin/google-chrome", "sourceEvidence": { "iniPath": "/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/working_run/test_linuxcnc_source/xyzac-trt.ini", "iniSha256": "4b7fa6cb8d3e7031e769b3e0c779b586b67cfd45d715985f40d4ec23c662dc97", "gcodePath": "/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/working_run/test_linuxcnc_source/impeller-7bl-xyzac.ngc", "gcodeSha256": "e90f0b4b6c43809da94a8170ee1029b5afc3e1bbe9bf2ae66298a8baefad013c", "gcodeLineCount": 4511, "gcodeBytes": 294411 }, "screenshots": { "01-initial-ui": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/01-initial-ui.png", "02-stage-test-ini": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/02-stage-test-ini.png", "03-toolpath-preview": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/03-toolpath-preview.png", "04-ready-before-run": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/04-ready-before-run.png", "05-run-0200ms": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-0200ms.png", "05-run-0500ms": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-0500ms.png", "05-run-1000ms": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-1000ms.png", "05-run-2000ms": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-2000ms.png", "05-run-5000ms": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-5000ms.png", "05-run-17000ms": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-17000ms.png", "06-stop-after-run": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/06-stop-after-run.png" }, "steps": [ { "name": "01-initial-ui", "title": "初始界面", "description": "确认浏览器应用、五轴预览区、G-code 区和 DRO 面板已渲染。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/01-initial-ui.png", "dataset": { "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" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 128.52, "nonBlackRatio": 0.7817 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 1868, "canonicalEventCount": 29, "motionEventCount": 2, "motionTypes": [ "STRAIGHT_TRAVERSE" ], "finalAxes": { "x": 0, "y": 0, "z": 5, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "loadedSourceBytes": 70847, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/boat-xyzac.ngc", "runState": "idle", "activeLine": 1, "activeUiLine": 1, "machine": { "powerOn": false, "estopActive": false, "taskState": "estop-reset", "mode": "manual", "interpState": "idle", "interpResumeState": "idle", "taskPaused": false, "allHomed": false, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 20, "motionIndex": 0, "line": 1, "motionProgramLine": 0, "halProgramLine": 0, "activeLineSource": "fallback", "activeLineHalSynced": false, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "currentVelocityMmPerMin": 0, "requestedVelocityMmPerMin": 0, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 20, "taskCycle": 2, "halChangedPinCount": 0 }, "currentTimingSegment": null, "currentLineExecution": { "status": "idle", "source": "linuxcnc-task-motion-hal-wasm", "line": 1, "feed": 0, "requestedFeed": 0, "feedMode": null, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "taskCycle": 2, "servoCycle": 20, "sampleIndex": 20, "motionIndex": 0, "updatedAt": "2026-06-23T07:39:20.015Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 2, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "estop_reset", "taskMode": "manual", "interpState": "idle", "activeLine": 1, "taskCycle": null, "servoCycle": 20 } } }, { "name": "02-stage-test-ini", "title": "Stage test_linuxcnc_source INI", "description": "使用 working_run/test_linuxcnc_source/xyzac-trt.ini 重新 staging machine files。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/02-stage-test-ini.png", "dataset": { "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" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 128.59, "nonBlackRatio": 0.7817 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 1868, "canonicalEventCount": 29, "motionEventCount": 2, "motionTypes": [ "STRAIGHT_TRAVERSE" ], "finalAxes": { "x": 0, "y": 0, "z": 5, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": null, "loadedSourceBytes": null, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/xyzac_switchkins.ngc", "runState": "idle", "activeLine": 1, "activeUiLine": 1, "machine": { "powerOn": false, "estopActive": false, "taskState": "estop-reset", "mode": "manual", "interpState": "idle", "interpResumeState": "idle", "taskPaused": false, "allHomed": false, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 10, "motionIndex": 0, "line": 1, "motionProgramLine": 0, "halProgramLine": 0, "activeLineSource": "fallback", "activeLineHalSynced": false, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "currentVelocityMmPerMin": 0, "requestedVelocityMmPerMin": 0, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 10, "taskCycle": 1, "halChangedPinCount": 0 }, "currentTimingSegment": null, "currentLineExecution": { "status": "idle", "source": "linuxcnc-task-motion-hal-wasm", "line": 1, "feed": 0, "requestedFeed": 0, "feedMode": null, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "taskCycle": 1, "servoCycle": 10, "sampleIndex": 10, "motionIndex": 0, "updatedAt": "2026-06-23T07:39:22.617Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 3, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "estop_reset", "taskMode": "manual", "interpState": "idle", "activeLine": 1, "taskCycle": null, "servoCycle": 10 } } }, { "name": "03-toolpath-preview", "title": "刀具路径预览", "description": "加载 test_linuxcnc_source/impeller-7bl-xyzac.ngc 对应程序,确认 canonical motion 预览路径、TCP 球和刀轴线可见。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/03-toolpath-preview.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 127.63, "nonBlackRatio": 0.7643 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "idle", "activeLine": 1, "activeUiLine": 1, "machine": { "powerOn": false, "estopActive": false, "taskState": "estop-reset", "mode": "manual", "interpState": "idle", "interpResumeState": "idle", "taskPaused": false, "allHomed": false, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 10, "motionIndex": 0, "line": 1, "motionProgramLine": 0, "halProgramLine": 0, "activeLineSource": "fallback", "activeLineHalSynced": false, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "currentVelocityMmPerMin": 0, "requestedVelocityMmPerMin": 0, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 10, "taskCycle": 1, "halChangedPinCount": 0 }, "currentTimingSegment": null, "currentLineExecution": { "status": "idle", "source": "linuxcnc-task-motion-hal-wasm", "line": 1, "feed": 0, "requestedFeed": 0, "feedMode": null, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "taskCycle": 1, "servoCycle": 10, "sampleIndex": 10, "motionIndex": 0, "updatedAt": "2026-06-23T07:39:29.596Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 4, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "estop_reset", "taskMode": "manual", "interpState": "idle", "activeLine": 1, "taskCycle": null, "servoCycle": 10 } } }, { "name": "04-ready-before-run", "title": "RUN 前准备", "description": "POWER ON、HOME、AUTO、TCP 模式就绪,RUN gate 所需条件已满足。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/04-ready-before-run.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 127.67, "nonBlackRatio": 0.7643 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "idle", "activeLine": 1, "activeUiLine": 1, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "idle", "interpResumeState": "idle", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 50, "motionIndex": 0, "line": 1, "motionProgramLine": 1, "halProgramLine": 1, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "currentVelocityMmPerMin": 3600, "requestedVelocityMmPerMin": 3600, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 50, "taskCycle": 5, "halChangedPinCount": 0 }, "currentTimingSegment": null, "currentLineExecution": { "status": "idle", "source": "linuxcnc-task-motion-hal-wasm", "line": 1, "feed": 3600, "requestedFeed": 3600, "feedMode": null, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "taskCycle": 5, "servoCycle": 50, "sampleIndex": 50, "motionIndex": 0, "updatedAt": "2026-06-23T07:39:43.258Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 5, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "idle", "activeLine": 1, "taskCycle": null, "servoCycle": 50 } } }, { "name": "05-run-0200ms", "title": "G-code 执行 200ms", "description": "采集 G-code 当前高亮行、执行轨迹、实时 DRO/axisPose 和 task/HAL feedback。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-0200ms.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.01,\"y\":-0.017,\"z\":0.03}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.558,\"y\":0.769,\"z\":0.312}", "threeTcpPose": "{\"x\":-36.362,\"y\":-81.975,\"z\":3.896,\"a\":-71.841,\"c\":-35.93}", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 130.81, "nonBlackRatio": 0.765 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "running", "activeLine": 9, "activeUiLine": 9, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "reading", "interpResumeState": "reading", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 10.4843, "y": -17.3304, "z": 30.0805, "a": -71.841, "b": 0, "c": -35.93 }, "axisPose": { "x": 10.4843, "y": -17.3304, "z": 30.0805, "a": -71.841, "b": 0, "c": -35.93 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 350, "motionIndex": 8, "line": 9, "motionProgramLine": 9, "halProgramLine": 9, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 10.4843, "y": -17.3304, "z": 30.0805, "a": -71.841, "b": 0, "c": -35.93 }, "currentVelocityMmPerMin": 2100, "requestedVelocityMmPerMin": 2100, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 350, "taskCycle": 35, "halChangedPinCount": 0 }, "currentTimingSegment": { "index": 1, "line": 9, "type": "STRAIGHT_TRAVERSE", "motionClass": "rapid", "feedMode": "inverse-time", "linearDistanceMm": 16.00103040432084, "angularDistanceDeg": 0, "feedRate": 4500000, "requestedVelocityMmPerMin": 2100, "velocityMmPerMin": 2100, "angularVelocityDegPerMin": 1800, "durationSeconds": 0.4571722972663097, "startSeconds": 0, "startAxes": { "x": 16.339, "y": -25.409, "z": 33.353, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "endAxes": { "x": 7.417, "y": -13.098, "z": 28.366, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "axes": { "x": 7.417, "y": -13.098, "z": 28.366, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "deltas": { "x": -8.921999999999999, "y": 12.310999999999998, "z": -4.987000000000002, "u": 0, "v": 0, "w": 0, "a": 0, "b": 0, "c": 0 }, "linearUnits": "mm", "elapsedSeconds": 0.4571722972663097 }, "currentLineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 9, "feed": 2100, "requestedFeed": 2100, "feedMode": null, "axisPose": { "x": 10.4843, "y": -17.3304, "z": 30.0805, "a": -71.841, "b": 0, "c": -35.93 }, "taskCycle": 35, "servoCycle": 350, "sampleIndex": 350, "motionIndex": 8, "updatedAt": "2026-06-23T07:39:58.821Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 5, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 5, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T07:39:58.821Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "reading", "activeLine": 9, "taskCycle": null, "servoCycle": 350 } } }, { "name": "05-run-0500ms", "title": "G-code 执行 500ms", "description": "采集 G-code 当前高亮行、执行轨迹、实时 DRO/axisPose 和 task/HAL feedback。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-0500ms.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.007,\"y\":-0.012,\"z\":0.028}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.558,\"y\":0.769,\"z\":0.312}", "threeTcpPose": "{\"x\":-39.978,\"y\":-76.986,\"z\":1.875,\"a\":-71.841,\"c\":-35.93}", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 130.59, "nonBlackRatio": 0.7649 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "running", "activeLine": 10, "activeUiLine": 10, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "reading", "interpResumeState": "reading", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 6.86843, "y": -12.3413, "z": 28.0595, "a": -71.841, "b": 0, "c": -35.93 }, "axisPose": { "x": 6.86843, "y": -12.3413, "z": 28.0595, "a": -71.841, "b": 0, "c": -35.93 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 600, "motionIndex": 9, "line": 10, "motionProgramLine": 10, "halProgramLine": 10, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.86843, "y": -12.3413, "z": 28.0595, "a": -71.841, "b": 0, "c": -35.93 }, "currentVelocityMmPerMin": 635.748, "requestedVelocityMmPerMin": 635.748, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 600, "taskCycle": 60, "halChangedPinCount": 0 }, "currentTimingSegment": { "index": 2, "line": 10, "type": "STRAIGHT_FEED", "motionClass": "feed", "feedMode": "inverse-time", "linearDistanceMm": 1.9991993397357861, "angularDistanceDeg": 0, "feedRate": 318, "requestedVelocityMmPerMin": 635.74539003598, "velocityMmPerMin": 635.74539003598, "angularVelocityDegPerMin": 0, "durationSeconds": 0.18867924528301888, "startSeconds": 0.4571722972663097, "startAxes": { "x": 7.417, "y": -13.098, "z": 28.366, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "endAxes": { "x": 6.302, "y": -11.56, "z": 27.743, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "axes": { "x": 6.302, "y": -11.56, "z": 27.743, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "deltas": { "x": -1.1150000000000002, "y": 1.5380000000000003, "z": -0.6230000000000011, "u": 0, "v": 0, "w": 0, "a": 0, "b": 0, "c": 0 }, "linearUnits": "mm", "elapsedSeconds": 0.6458515425493285 }, "currentLineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 10, "feed": 635.748, "requestedFeed": 635.748, "feedMode": null, "axisPose": { "x": 6.86843, "y": -12.3413, "z": 28.0595, "a": -71.841, "b": 0, "c": -35.93 }, "taskCycle": 60, "servoCycle": 600, "sampleIndex": 600, "motionIndex": 9, "updatedAt": "2026-06-23T07:40:03.250Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 10, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 10, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T07:40:03.250Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "reading", "activeLine": 10, "taskCycle": null, "servoCycle": 600 } } }, { "name": "05-run-1000ms", "title": "G-code 执行 1000ms", "description": "采集 G-code 当前高亮行、执行轨迹、实时 DRO/axisPose 和 task/HAL feedback。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-1000ms.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.006,\"y\":-0.012,\"z\":0.027}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.54,\"y\":0.78,\"z\":0.316}", "threeTcpPose": "{\"x\":-39.062,\"y\":-77.457,\"z\":0.592,\"a\":-71.606,\"c\":-34.7}", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 130.48, "nonBlackRatio": 0.7649 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "running", "activeLine": 11, "activeUiLine": 11, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "reading", "interpResumeState": "reading", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 6.32488, "y": -11.9105, "z": 27.1037, "a": -71.6061, "b": 0, "c": -34.7 }, "axisPose": { "x": 6.32488, "y": -11.9105, "z": 27.1037, "a": -71.6061, "b": 0, "c": -34.7 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 850, "motionIndex": 10, "line": 11, "motionProgramLine": 11, "halProgramLine": 11, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.32488, "y": -11.9105, "z": 27.1037, "a": -71.6061, "b": 0, "c": -34.7 }, "currentVelocityMmPerMin": 283.9176, "requestedVelocityMmPerMin": 283.9176, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 850, "taskCycle": 85, "halChangedPinCount": 0 }, "currentTimingSegment": { "index": 3, "line": 11, "type": "STRAIGHT_FEED", "motionClass": "feed", "feedMode": "inverse-time", "linearDistanceMm": 1.7856441414794806, "angularDistanceDeg": 3.0654112285303587, "feedRate": 159, "requestedVelocityMmPerMin": 283.9174184952374, "velocityMmPerMin": 283.9174184952374, "angularVelocityDegPerMin": 487.40038533632696, "durationSeconds": 0.37735849056603776, "startSeconds": 0.6458515425493285, "startAxes": { "x": 6.302, "y": -11.56, "z": 27.743, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "endAxes": { "x": 6.358, "y": -12.418, "z": 26.178, "u": 0, "v": 0, "w": 0, "a": -71.266, "b": 0, "c": -32.919 }, "axes": { "x": 6.358, "y": -12.418, "z": 26.178, "u": 0, "v": 0, "w": 0, "a": -71.266, "b": 0, "c": -32.919 }, "deltas": { "x": 0.05600000000000005, "y": -0.8579999999999988, "z": -1.5649999999999977, "u": 0, "v": 0, "w": 0, "a": 0.5749999999999886, "b": 0, "c": 3.011000000000003 }, "linearUnits": "mm", "elapsedSeconds": 1.0232100331153662 }, "currentLineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 11, "feed": 283.9176, "requestedFeed": 283.9176, "feedMode": null, "axisPose": { "x": 6.32488, "y": -11.9105, "z": 27.1037, "a": -71.6061, "b": 0, "c": -34.7 }, "taskCycle": 85, "servoCycle": 850, "sampleIndex": 850, "motionIndex": 10, "updatedAt": "2026-06-23T07:40:07.592Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 15, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 15, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T07:40:07.592Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "reading", "activeLine": 11, "taskCycle": null, "servoCycle": 850 } } }, { "name": "05-run-2000ms", "title": "G-code 执行 2000ms", "description": "采集 G-code 当前高亮行、执行轨迹、实时 DRO/axisPose 和 task/HAL feedback。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-2000ms.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.006,\"y\":-0.012,\"z\":0.026}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.514,\"y\":0.795,\"z\":0.321}", "threeTcpPose": "{\"x\":-36.831,\"y\":-79.254,\"z\":-0.84,\"a\":-71.258,\"c\":-32.875}", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 130.47, "nonBlackRatio": 0.7649 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "running", "activeLine": 12, "activeUiLine": 12, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "reading", "interpResumeState": "reading", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 6.35715, "y": -12.4314, "z": 26.1553, "a": -71.2583, "b": 0, "c": -32.8753 }, "axisPose": { "x": 6.35715, "y": -12.4314, "z": 26.1553, "a": -71.2583, "b": 0, "c": -32.8753 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 1100, "motionIndex": 11, "line": 12, "motionProgramLine": 12, "halProgramLine": 12, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.35715, "y": -12.4314, "z": 26.1553, "a": -71.2583, "b": 0, "c": -32.8753 }, "currentVelocityMmPerMin": 59.12256, "requestedVelocityMmPerMin": 59.12256, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 1100, "taskCycle": 110, "halChangedPinCount": 0 }, "currentTimingSegment": { "index": 4, "line": 12, "type": "STRAIGHT_FEED", "motionClass": "feed", "feedMode": "inverse-time", "linearDistanceMm": 0.3718400193631667, "angularDistanceDeg": 0.6244109223900512, "feedRate": 159, "requestedVelocityMmPerMin": 59.122563078743504, "velocityMmPerMin": 59.122563078743504, "angularVelocityDegPerMin": 99.28133666001814, "durationSeconds": 0.37735849056603776, "startSeconds": 1.0232100331153662, "startAxes": { "x": 6.358, "y": -12.418, "z": 26.178, "u": 0, "v": 0, "w": 0, "a": -71.266, "b": 0, "c": -32.919 }, "endAxes": { "x": 6.346, "y": -12.607, "z": 25.858, "u": 0, "v": 0, "w": 0, "a": -71.158, "b": 0, "c": -32.304 }, "axes": { "x": 6.346, "y": -12.607, "z": 25.858, "u": 0, "v": 0, "w": 0, "a": -71.158, "b": 0, "c": -32.304 }, "deltas": { "x": -0.011999999999999567, "y": -0.18900000000000006, "z": -0.3200000000000003, "u": 0, "v": 0, "w": 0, "a": 0.10800000000000409, "b": 0, "c": 0.6149999999999949 }, "linearUnits": "mm", "elapsedSeconds": 1.4005685236814038 }, "currentLineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 12, "feed": 59.12256, "requestedFeed": 59.12256, "feedMode": null, "axisPose": { "x": 6.35715, "y": -12.4314, "z": 26.1553, "a": -71.2583, "b": 0, "c": -32.8753 }, "taskCycle": 110, "servoCycle": 1100, "sampleIndex": 1100, "motionIndex": 11, "updatedAt": "2026-06-23T07:40:11.943Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 20, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 20, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T07:40:11.943Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "reading", "activeLine": 12, "taskCycle": null, "servoCycle": 1100 } } }, { "name": "05-run-5000ms", "title": "G-code 执行 5000ms", "description": "采集 G-code 当前高亮行、执行轨迹、实时 DRO/axisPose 和 task/HAL feedback。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-5000ms.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.006,\"y\":-0.013,\"z\":0.026}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.508,\"y\":0.799,\"z\":0.322}", "threeTcpPose": "{\"x\":-36.345,\"y\":-79.656,\"z\":-1.151,\"a\":-71.187,\"c\":-32.468}", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 130.45, "nonBlackRatio": 0.7648 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "running", "activeLine": 12, "activeUiLine": 12, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "reading", "interpResumeState": "reading", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 6.3492, "y": -12.5566, "z": 25.9433, "a": -71.1868, "b": 0, "c": -32.4679 }, "axisPose": { "x": 6.3492, "y": -12.5566, "z": 25.9433, "a": -71.1868, "b": 0, "c": -32.4679 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 1350, "motionIndex": 11, "line": 12, "motionProgramLine": 12, "halProgramLine": 12, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.3492, "y": -12.5566, "z": 25.9433, "a": -71.1868, "b": 0, "c": -32.4679 }, "currentVelocityMmPerMin": 59.12256, "requestedVelocityMmPerMin": 59.12256, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 1350, "taskCycle": 135, "halChangedPinCount": 0 }, "currentTimingSegment": { "index": 4, "line": 12, "type": "STRAIGHT_FEED", "motionClass": "feed", "feedMode": "inverse-time", "linearDistanceMm": 0.3718400193631667, "angularDistanceDeg": 0.6244109223900512, "feedRate": 159, "requestedVelocityMmPerMin": 59.122563078743504, "velocityMmPerMin": 59.122563078743504, "angularVelocityDegPerMin": 99.28133666001814, "durationSeconds": 0.37735849056603776, "startSeconds": 1.0232100331153662, "startAxes": { "x": 6.358, "y": -12.418, "z": 26.178, "u": 0, "v": 0, "w": 0, "a": -71.266, "b": 0, "c": -32.919 }, "endAxes": { "x": 6.346, "y": -12.607, "z": 25.858, "u": 0, "v": 0, "w": 0, "a": -71.158, "b": 0, "c": -32.304 }, "axes": { "x": 6.346, "y": -12.607, "z": 25.858, "u": 0, "v": 0, "w": 0, "a": -71.158, "b": 0, "c": -32.304 }, "deltas": { "x": -0.011999999999999567, "y": -0.18900000000000006, "z": -0.3200000000000003, "u": 0, "v": 0, "w": 0, "a": 0.10800000000000409, "b": 0, "c": 0.6149999999999949 }, "linearUnits": "mm", "elapsedSeconds": 1.4005685236814038 }, "currentLineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 12, "feed": 59.12256, "requestedFeed": 59.12256, "feedMode": null, "axisPose": { "x": 6.3492, "y": -12.5566, "z": 25.9433, "a": -71.1868, "b": 0, "c": -32.4679 }, "taskCycle": 135, "servoCycle": 1350, "sampleIndex": 1350, "motionIndex": 11, "updatedAt": "2026-06-23T07:40:16.328Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 25, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 25, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T07:40:16.328Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "reading", "activeLine": 12, "taskCycle": null, "servoCycle": 1350 } } }, { "name": "05-run-17000ms", "title": "G-code 执行 17000ms", "description": "采集 G-code 当前高亮行、执行轨迹、实时 DRO/axisPose 和 task/HAL feedback。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-17000ms.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.006,\"y\":-0.013,\"z\":0.026}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.504,\"y\":0.801,\"z\":0.323}", "threeTcpPose": "{\"x\":6.336,\"y\":-12.659,\"z\":25.777,\"a\":-71.141,\"c\":-32.149}", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 130.44, "nonBlackRatio": 0.765 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "running", "activeLine": 13, "activeUiLine": 13, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "reading", "interpResumeState": "reading", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 6.33572, "y": -12.6589, "z": 25.7774, "a": -71.1409, "b": 0, "c": -32.1488 }, "axisPose": { "x": 6.33572, "y": -12.6589, "z": 25.7774, "a": -71.1409, "b": 0, "c": -32.1488 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 1550, "motionIndex": 12, "line": 13, "motionProgramLine": 13, "halProgramLine": 13, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.33572, "y": -12.6589, "z": 25.7774, "a": -71.1409, "b": 0, "c": -32.1488 }, "currentVelocityMmPerMin": 58.19616, "requestedVelocityMmPerMin": 58.19616, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 1550, "taskCycle": 155, "halChangedPinCount": 0 }, "currentTimingSegment": { "index": 5, "line": 13, "type": "STRAIGHT_FEED", "motionClass": "feed", "feedMode": "inverse-time", "linearDistanceMm": 0.3660136609472397, "angularDistanceDeg": 0.5925757335564816, "feedRate": 159, "requestedVelocityMmPerMin": 58.19617209061111, "velocityMmPerMin": 58.19617209061111, "angularVelocityDegPerMin": 94.21954163548057, "durationSeconds": 0.37735849056603776, "startSeconds": 1.4005685236814038, "startAxes": { "x": 6.346, "y": -12.607, "z": 25.858, "u": 0, "v": 0, "w": 0, "a": -71.158, "b": 0, "c": -32.304 }, "endAxes": { "x": 6.307, "y": -12.804, "z": 25.552, "u": 0, "v": 0, "w": 0, "a": -71.093, "b": 0, "c": -31.715 }, "axes": { "x": 6.307, "y": -12.804, "z": 25.552, "u": 0, "v": 0, "w": 0, "a": -71.093, "b": 0, "c": -31.715 }, "deltas": { "x": -0.0389999999999997, "y": -0.19700000000000095, "z": -0.30600000000000094, "u": 0, "v": 0, "w": 0, "a": 0.06499999999999773, "b": 0, "c": 0.5890000000000022 }, "linearUnits": "mm", "elapsedSeconds": 1.7779270142474415 }, "currentLineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 13, "feed": 58.19616, "requestedFeed": 58.19616, "feedMode": null, "axisPose": { "x": 6.33572, "y": -12.6589, "z": 25.7774, "a": -71.1409, "b": 0, "c": -32.1488 }, "taskCycle": 155, "servoCycle": 1550, "sampleIndex": 1550, "motionIndex": 12, "updatedAt": "2026-06-23T07:40:20.100Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 29, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 29, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T07:40:20.100Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "reading", "activeLine": 13, "taskCycle": null, "servoCycle": 1550 } } }, { "name": "06-stop-after-run", "title": "STOP 后状态", "description": "停止 RUN,确认 status loop 停止且执行证据已保留。", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/06-stop-after-run.png", "dataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "4492", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.006,\"y\":-0.013,\"z\":0.026}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.502,\"y\":0.802,\"z\":0.323}", "threeTcpPose": "{\"x\":6.331,\"y\":-12.685,\"z\":25.737,\"a\":-71.132,\"c\":-32.071}", "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.001,\"y\":0,\"z\":0.019},\"size\":{\"x\":0.088,\"y\":0.089,\"z\":0.043},\"maxSpan\":0.089214}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "186", "threeFeedPathPoints": "4306", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "1", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "pixelStats": { "width": 1600, "height": 1200, "averageLuminance": 130.4, "nonBlackRatio": 0.7647 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-task-motion-hal-wasm", "programSummary": { "ready": true, "programLineCount": 4507, "canonicalEventCount": 22313, "motionEventCount": 4492, "motionTypes": [ "STRAIGHT_TRAVERSE", "STRAIGHT_FEED" ], "finalAxes": { "x": 0, "y": 0, "z": 40, "a": 0, "b": 0, "c": 0, "u": 0, "v": 0, "w": 0 }, "switchkinsEventCount": 2, "switchkinsCodes": [ "M428", "M429" ], "switchkinsRemapBoundary": "linuxcnc_switchkins_remap_mcode_preserved_web_runtime_applied", "remapRuntimeReady": false, "plannerRuntimeReady": true, "plannerSemanticBoundary": "linuxcnc_tp_queue_runtime_timing_from_canonical_motion", "machineFileExecutionReady": false, "fullLinuxCncProgramExecutionReady": false }, "machineProfile": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "loadedSourceBytes": 294411, "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "stopped", "activeLine": 13, "activeUiLine": 13, "machine": { "powerOn": true, "estopActive": false, "taskState": "on", "mode": "auto", "interpState": "idle", "interpResumeState": "idle", "taskPaused": false, "allHomed": true, "noForceHoming": false, "jogAxis": "x", "jogIncrement": 1, "mdiCommand": "G0 X0 Y0 Z0", "mdiDistanceMode": "absolute", "resetCount": 0 }, "rtcpState": "on", "kinsType": "tcp-xyzac", "dro": { "x": 6.33056, "y": -12.685, "z": 25.7368, "a": -71.1323, "b": 0, "c": -32.0708 }, "axisPose": { "x": 6.33056, "y": -12.685, "z": 25.7368, "a": -71.1323, "b": 0, "c": -32.0708 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 1610, "motionIndex": 12, "line": 13, "motionProgramLine": 13, "halProgramLine": 13, "activeLineSource": "motion-status", "activeLineHalSynced": true, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.33056, "y": -12.685, "z": 25.7368, "a": -71.1323, "b": 0, "c": -32.0708 }, "currentVelocityMmPerMin": 58.19616, "requestedVelocityMmPerMin": 58.19616, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 1610, "taskCycle": 161, "halChangedPinCount": 0 }, "currentTimingSegment": { "index": 5, "line": 13, "type": "STRAIGHT_FEED", "motionClass": "feed", "feedMode": "inverse-time", "linearDistanceMm": 0.3660136609472397, "angularDistanceDeg": 0.5925757335564816, "feedRate": 159, "requestedVelocityMmPerMin": 58.19617209061111, "velocityMmPerMin": 58.19617209061111, "angularVelocityDegPerMin": 94.21954163548057, "durationSeconds": 0.37735849056603776, "startSeconds": 1.4005685236814038, "startAxes": { "x": 6.346, "y": -12.607, "z": 25.858, "u": 0, "v": 0, "w": 0, "a": -71.158, "b": 0, "c": -32.304 }, "endAxes": { "x": 6.307, "y": -12.804, "z": 25.552, "u": 0, "v": 0, "w": 0, "a": -71.093, "b": 0, "c": -31.715 }, "axes": { "x": 6.307, "y": -12.804, "z": 25.552, "u": 0, "v": 0, "w": 0, "a": -71.093, "b": 0, "c": -31.715 }, "deltas": { "x": -0.0389999999999997, "y": -0.19700000000000095, "z": -0.30600000000000094, "u": 0, "v": 0, "w": 0, "a": 0.06499999999999773, "b": 0, "c": 0.5890000000000022 }, "linearUnits": "mm", "elapsedSeconds": 1.7779270142474415 }, "currentLineExecution": { "status": "stopped", "source": "linuxcnc-task-motion-hal-wasm", "line": 13, "feed": 58.19616, "requestedFeed": 58.19616, "feedMode": null, "axisPose": { "x": 6.33056, "y": -12.685, "z": 25.7368, "a": -71.1323, "b": 0, "c": -32.0708 }, "taskCycle": 161, "servoCycle": 1610, "sampleIndex": 1610, "motionIndex": 12, "updatedAt": "2026-06-23T07:40:24.497Z" }, "currentLineExecutionVisible": true, "feedbackHistoryLength": 31, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 30, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T07:40:22.134Z", "lastError": null, "stopReason": "stopped", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "idle", "activeLine": 13, "taskCycle": null, "servoCycle": 1610 } } } ], "checks": [ { "name": "test_linuxcnc_source INI used", "pass": true, "detail": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini" }, { "name": "test_linuxcnc_source G-code hash matches loaded source", "pass": true, "detail": "e90f0b4b6c43809da94a8170ee1029b5afc3e1bbe9bf2ae66298a8baefad013c" }, { "name": "刀具路径预览点可见", "pass": true, "detail": "pathPoints=4492" }, { "name": "刀具路径使用完整 canonical motion 点", "pass": true, "detail": "threePathPoints=4492, motionEventCount=4492" }, { "name": "TCP/刀轴线可见", "pass": true, "detail": "tcp=sphere, axis=line" }, { "name": "RUN 采样数量", "pass": true, "detail": "samples=6" }, { "name": "每行执行高亮同步", "pass": true, "detail": "9/9, 10/10, 11/11, 12/12, 12/12, 13/13" }, { "name": "程序列表显示每行执行过程", "pass": true, "detail": "9:running:true, 10:running:true, 11:running:true, 12:running:true, 12:running:true, 13:running:true" }, { "name": "执行轨迹可见", "pass": true, "detail": "1/ok, 1/ok, 1/ok, 1/ok, 1/ok, 1/ok" }, { "name": "实时轴值来自 task/HAL feedback", "pass": true, "detail": "linuxcnc-task-motion-hal-wasm/true, linuxcnc-task-motion-hal-wasm/true, linuxcnc-task-motion-hal-wasm/true, linuxcnc-task-motion-hal-wasm/true, linuxcnc-task-motion-hal-wasm/true, linuxcnc-task-motion-hal-wasm/true" }, { "name": "RUN feed 不是固定 3600 mm/min", "pass": true, "detail": "200ms=2100, 500ms=635.748, 1000ms=283.9176, 2000ms=59.12256, 5000ms=59.12256, 17000ms=58.19616" }, { "name": "RUN feed 随实际 G-code F/G93 段变化", "pass": true, "detail": "2100, 635.748, 283.918, 59.123, 58.196" }, { "name": "RUN 使用 G93 inverse-time feed", "pass": true, "detail": "200ms F4500000 inverse-time 0.4571722972663097s, 500ms F318 inverse-time 0.18867924528301888s, 1000ms F159 inverse-time 0.37735849056603776s, 2000ms F159 inverse-time 0.37735849056603776s, 5000ms F159 inverse-time 0.37735849056603776s, 17000ms F159 inverse-time 0.37735849056603776s" }, { "name": "task/HAL cycle 推进", "pass": true, "detail": "35/350, 60/600, 85/850, 110/1100, 135/1350, 155/1550" }, { "name": "STOP 后 loop 停止", "pass": true, "detail": "active=false, stopReason=stopped" } ], "samples": [ { "elapsedMs": 200, "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-0200ms.png", "activeLine": 9, "activeUiLine": 9, "activeLineMatchesUi": true, "runState": "running", "axisPose": { "x": 10.4843, "y": -17.3304, "z": 30.0805, "a": -71.841, "b": 0, "c": -35.93 }, "dro": { "x": 10.4843, "y": -17.3304, "z": 30.0805, "a": -71.841, "b": 0, "c": -35.93 }, "droMatchesAxisPose": true, "velocity": 2100, "expectedVelocity": 2100, "feedRate": 4500000, "feedMode": "inverse-time", "segmentDurationSeconds": 0.4571722972663097, "distanceToGo": 0, "feedbackSource": "linuxcnc-task-motion-hal-wasm", "taskCycle": 35, "servoCycle": 350, "historyLength": 0, "lineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 9, "feed": 2100, "requestedFeed": 2100, "feedMode": null, "axisPose": { "x": 10.4843, "y": -17.3304, "z": 30.0805, "a": -71.841, "b": 0, "c": -35.93 }, "taskCycle": 35, "servoCycle": 350, "sampleIndex": 350, "motionIndex": 8, "updatedAt": "2026-06-23T07:39:58.821Z" }, "lineExecutionVisible": true, "executedPathPoints": 1, "currentSegmentHighlight": "ok" }, { "elapsedMs": 500, "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-0500ms.png", "activeLine": 10, "activeUiLine": 10, "activeLineMatchesUi": true, "runState": "running", "axisPose": { "x": 6.86843, "y": -12.3413, "z": 28.0595, "a": -71.841, "b": 0, "c": -35.93 }, "dro": { "x": 6.86843, "y": -12.3413, "z": 28.0595, "a": -71.841, "b": 0, "c": -35.93 }, "droMatchesAxisPose": true, "velocity": 635.748, "expectedVelocity": 635.74539003598, "feedRate": 318, "feedMode": "inverse-time", "segmentDurationSeconds": 0.18867924528301888, "distanceToGo": 0, "feedbackSource": "linuxcnc-task-motion-hal-wasm", "taskCycle": 60, "servoCycle": 600, "historyLength": 0, "lineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 10, "feed": 635.748, "requestedFeed": 635.748, "feedMode": null, "axisPose": { "x": 6.86843, "y": -12.3413, "z": 28.0595, "a": -71.841, "b": 0, "c": -35.93 }, "taskCycle": 60, "servoCycle": 600, "sampleIndex": 600, "motionIndex": 9, "updatedAt": "2026-06-23T07:40:03.250Z" }, "lineExecutionVisible": true, "executedPathPoints": 1, "currentSegmentHighlight": "ok" }, { "elapsedMs": 1000, "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-1000ms.png", "activeLine": 11, "activeUiLine": 11, "activeLineMatchesUi": true, "runState": "running", "axisPose": { "x": 6.32488, "y": -11.9105, "z": 27.1037, "a": -71.6061, "b": 0, "c": -34.7 }, "dro": { "x": 6.32488, "y": -11.9105, "z": 27.1037, "a": -71.6061, "b": 0, "c": -34.7 }, "droMatchesAxisPose": true, "velocity": 283.9176, "expectedVelocity": 283.9174184952374, "feedRate": 159, "feedMode": "inverse-time", "segmentDurationSeconds": 0.37735849056603776, "distanceToGo": 0, "feedbackSource": "linuxcnc-task-motion-hal-wasm", "taskCycle": 85, "servoCycle": 850, "historyLength": 0, "lineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 11, "feed": 283.9176, "requestedFeed": 283.9176, "feedMode": null, "axisPose": { "x": 6.32488, "y": -11.9105, "z": 27.1037, "a": -71.6061, "b": 0, "c": -34.7 }, "taskCycle": 85, "servoCycle": 850, "sampleIndex": 850, "motionIndex": 10, "updatedAt": "2026-06-23T07:40:07.592Z" }, "lineExecutionVisible": true, "executedPathPoints": 1, "currentSegmentHighlight": "ok" }, { "elapsedMs": 2000, "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-2000ms.png", "activeLine": 12, "activeUiLine": 12, "activeLineMatchesUi": true, "runState": "running", "axisPose": { "x": 6.35715, "y": -12.4314, "z": 26.1553, "a": -71.2583, "b": 0, "c": -32.8753 }, "dro": { "x": 6.35715, "y": -12.4314, "z": 26.1553, "a": -71.2583, "b": 0, "c": -32.8753 }, "droMatchesAxisPose": true, "velocity": 59.12256, "expectedVelocity": 59.122563078743504, "feedRate": 159, "feedMode": "inverse-time", "segmentDurationSeconds": 0.37735849056603776, "distanceToGo": 0, "feedbackSource": "linuxcnc-task-motion-hal-wasm", "taskCycle": 110, "servoCycle": 1100, "historyLength": 0, "lineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 12, "feed": 59.12256, "requestedFeed": 59.12256, "feedMode": null, "axisPose": { "x": 6.35715, "y": -12.4314, "z": 26.1553, "a": -71.2583, "b": 0, "c": -32.8753 }, "taskCycle": 110, "servoCycle": 1100, "sampleIndex": 1100, "motionIndex": 11, "updatedAt": "2026-06-23T07:40:11.943Z" }, "lineExecutionVisible": true, "executedPathPoints": 1, "currentSegmentHighlight": "ok" }, { "elapsedMs": 5000, "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-5000ms.png", "activeLine": 12, "activeUiLine": 12, "activeLineMatchesUi": true, "runState": "running", "axisPose": { "x": 6.3492, "y": -12.5566, "z": 25.9433, "a": -71.1868, "b": 0, "c": -32.4679 }, "dro": { "x": 6.3492, "y": -12.5566, "z": 25.9433, "a": -71.1868, "b": 0, "c": -32.4679 }, "droMatchesAxisPose": true, "velocity": 59.12256, "expectedVelocity": 59.122563078743504, "feedRate": 159, "feedMode": "inverse-time", "segmentDurationSeconds": 0.37735849056603776, "distanceToGo": 0, "feedbackSource": "linuxcnc-task-motion-hal-wasm", "taskCycle": 135, "servoCycle": 1350, "historyLength": 0, "lineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 12, "feed": 59.12256, "requestedFeed": 59.12256, "feedMode": null, "axisPose": { "x": 6.3492, "y": -12.5566, "z": 25.9433, "a": -71.1868, "b": 0, "c": -32.4679 }, "taskCycle": 135, "servoCycle": 1350, "sampleIndex": 1350, "motionIndex": 11, "updatedAt": "2026-06-23T07:40:16.328Z" }, "lineExecutionVisible": true, "executedPathPoints": 1, "currentSegmentHighlight": "ok" }, { "elapsedMs": 17000, "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/test-linuxcnc-source-run/05-run-17000ms.png", "activeLine": 13, "activeUiLine": 13, "activeLineMatchesUi": true, "runState": "running", "axisPose": { "x": 6.33572, "y": -12.6589, "z": 25.7774, "a": -71.1409, "b": 0, "c": -32.1488 }, "dro": { "x": 6.33572, "y": -12.6589, "z": 25.7774, "a": -71.1409, "b": 0, "c": -32.1488 }, "droMatchesAxisPose": true, "velocity": 58.19616, "expectedVelocity": 58.19617209061111, "feedRate": 159, "feedMode": "inverse-time", "segmentDurationSeconds": 0.37735849056603776, "distanceToGo": 0, "feedbackSource": "linuxcnc-task-motion-hal-wasm", "taskCycle": 155, "servoCycle": 1550, "historyLength": 0, "lineExecution": { "status": "running", "source": "linuxcnc-task-motion-hal-wasm", "line": 13, "feed": 58.19616, "requestedFeed": 58.19616, "feedMode": null, "axisPose": { "x": 6.33572, "y": -12.6589, "z": 25.7774, "a": -71.1409, "b": 0, "c": -32.1488 }, "taskCycle": 155, "servoCycle": 1550, "sampleIndex": 1550, "motionIndex": 12, "updatedAt": "2026-06-23T07:40:20.100Z" }, "lineExecutionVisible": true, "executedPathPoints": 1, "currentSegmentHighlight": "ok" } ], "consoleErrors": [ "Failed to load resource: the server responded with a status of 404 (Not Found)", "Failed to load resource: the server responded with a status of 404 (Not Found)" ], "status": "PASS", "jsonPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/test-linuxcnc-source-run-report.json", "docxPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/test-linuxcnc-source-run-report-2026-06-23.docx" }