{ "generatedAt": "2026-06-22T23:26:12.518Z", "targetUrl": "http://127.0.0.1:36437/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": 121.22, "nonBlackRatio": 0.7609 }, "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", "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": 0, "motionIndex": 0, "line": 1, "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": 0, "taskCycle": 0, "halChangedPinCount": 0 }, "currentTimingSegment": null, "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": null } } }, { "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": 121.41, "nonBlackRatio": 0.7609 }, "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, "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": 0, "motionIndex": 0, "line": 1, "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": 0, "taskCycle": 0, "halChangedPinCount": 0 }, "currentTimingSegment": null, "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": null } } }, { "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.016,\"y\":-0.025,\"z\":0.033}", "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": "fixture_line_playback_not_promoted", "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": 122.99, "nonBlackRatio": 0.7481 }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc", "programSource": "linuxcnc-vendored-5axis-gcode", "programExecutionSourceMode": "linuxcnc-interpreter-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", "taskHalProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/impeller-7bl-xyzac.ngc", "runState": "idle", "activeLine": 8, "activeUiLine": 8, "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-canonical-motion", "semanticBoundary": "linuxcnc_canonical_motion_feedback_without_tp_sample", "sampleIndex": 0, "motionIndex": 0, "line": 8, "type": "STRAIGHT_TRAVERSE", "linearUnits": "mm", "timeSeconds": 0, "axisPose": { "x": 16.339, "y": -25.409, "z": 33.353, "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": 0 }, "currentTimingSegment": { "index": 0, "line": 8, "type": "STRAIGHT_TRAVERSE", "motionClass": "rapid", "feedMode": "inverse-time", "linearDistanceMm": 0, "angularDistanceDeg": 0, "feedRate": 4500000, "requestedVelocityMmPerMin": 2100, "velocityMmPerMin": 2100, "angularVelocityDegPerMin": 1800, "durationSeconds": 0, "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": 16.339, "y": -25.409, "z": 33.353, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "axes": { "x": 16.339, "y": -25.409, "z": 33.353, "u": 0, "v": 0, "w": 0, "a": -71.841, "b": 0, "c": -35.93 }, "deltas": { "x": 0, "y": 0, "z": 0, "u": 0, "v": 0, "w": 0, "a": 0, "b": 0, "c": 0 }, "linearUnits": "mm", "elapsedSeconds": 0 }, "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": null } } }, { "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": 120.33, "nonBlackRatio": 0.7425 }, "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", "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": 30, "motionIndex": 0, "line": 1, "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": 30, "taskCycle": 3, "halChangedPinCount": 0 }, "currentTimingSegment": null, "feedbackHistoryLength": 7, "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": 30 } } }, { "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": 121.96, "nonBlackRatio": 0.7432 }, "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", "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": 330, "motionIndex": 8, "line": 9, "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": 330, "taskCycle": 33, "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 }, "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-22T23:26:45.667Z", "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": 330 } } }, { "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.013,\"z\":0.028}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0.558,\"y\":0.769,\"z\":0.312}", "threeTcpPose": "{\"x\":7.164,\"y\":-12.749,\"z\":28.225,\"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": 121.76, "nonBlackRatio": 0.7434 }, "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", "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": 7.16391, "y": -12.7489, "z": 28.2246, "a": -71.841, "b": 0, "c": -35.93 }, "axisPose": { "x": 7.16391, "y": -12.7489, "z": 28.2246, "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": 530, "motionIndex": 9, "line": 10, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 7.16391, "y": -12.7489, "z": 28.2246, "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": 530, "taskCycle": 53, "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 }, "feedbackHistoryLength": 9, "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": 9, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-22T23:26:49.069Z", "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": 530 } } }, { "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.546,\"y\":0.777,\"z\":0.314}", "threeTcpPose": "{\"x\":-39.545,\"y\":-77.055,\"z\":0.905,\"a\":-71.682,\"c\":-35.099}", "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": 121.61, "nonBlackRatio": 0.7432 }, "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", "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.31746, "y": -11.7968, "z": 27.3111, "a": -71.6823, "b": 0, "c": -35.099 }, "axisPose": { "x": 6.31746, "y": -11.7968, "z": 27.3111, "a": -71.6823, "b": 0, "c": -35.099 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 780, "motionIndex": 10, "line": 11, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.31746, "y": -11.7968, "z": 27.3111, "a": -71.6823, "b": 0, "c": -35.099 }, "currentVelocityMmPerMin": 283.9176, "requestedVelocityMmPerMin": 283.9176, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 780, "taskCycle": 78, "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 }, "feedbackHistoryLength": 14, "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": 14, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-22T23:26:52.810Z", "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": 780 } } }, { "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.523,\"y\":0.79,\"z\":0.319}", "threeTcpPose": "{\"x\":6.347,\"y\":-12.251,\"z\":26.482,\"a\":-71.378,\"c\":-33.503}", "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": 121.57, "nonBlackRatio": 0.7432 }, "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", "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.35456, "y": -12.3652, "z": 26.2743, "a": -71.3014, "b": 0, "c": -33.1042 }, "axisPose": { "x": 6.35456, "y": -12.3652, "z": 26.2743, "a": -71.3014, "b": 0, "c": -33.1042 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 1030, "motionIndex": 10, "line": 11, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.35456, "y": -12.3652, "z": 26.2743, "a": -71.3014, "b": 0, "c": -33.1042 }, "currentVelocityMmPerMin": 283.9176, "requestedVelocityMmPerMin": 283.9176, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 1030, "taskCycle": 103, "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 }, "feedbackHistoryLength": 19, "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": 19, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-22T23:26:56.582Z", "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": 1030 } } }, { "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.509,\"y\":0.798,\"z\":0.322}", "threeTcpPose": "{\"x\":-36.442,\"y\":-79.576,\"z\":-1.089,\"a\":-71.201,\"c\":-32.549}", "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": 121.55, "nonBlackRatio": 0.743 }, "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", "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.35079, "y": -12.5316, "z": 25.9857, "a": -71.2011, "b": 0, "c": -32.5494 }, "axisPose": { "x": 6.35079, "y": -12.5316, "z": 25.9857, "a": -71.2011, "b": 0, "c": -32.5494 }, "programRuntimeFeedback": { "apiName": "web-rtcp-5axis-program-runtime-feedback", "sourceMode": "linuxcnc-task-motion-hal-wasm", "semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime", "sampleIndex": 1280, "motionIndex": 11, "line": 12, "type": "TASK_MOTION", "timeSeconds": 0, "axisPose": { "x": 6.35079, "y": -12.5316, "z": 25.9857, "a": -71.2011, "b": 0, "c": -32.5494 }, "currentVelocityMmPerMin": 59.12256, "requestedVelocityMmPerMin": 59.12256, "distanceToGo": 0, "dtg": { "x": 0, "y": 0, "z": 0 }, "queueDepth": 0, "activeDepth": 0, "cycle": 1280, "taskCycle": 128, "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 }, "feedbackHistoryLength": 24, "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": 24, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-22T23:27:00.399Z", "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": 1280 } } }, { "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.505,\"y\":0.801,\"z\":0.323}", "threeTcpPose": "{\"x\":6.341,\"y\":-12.633,\"z\":25.818,\"a\":-71.149,\"c\":-32.227}", "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": 121.53, "nonBlackRatio": 0.7431 }, "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", "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": 1530, "motionIndex": 12, "line": 13, "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": 1530, "taskCycle": 153, "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 }, "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-22T23:27:04.211Z", "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": 1530 } } }, { "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": 121.5, "nonBlackRatio": 0.7429 }, "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", "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": 1590, "motionIndex": 12, "line": 13, "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": 1590, "taskCycle": 159, "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 }, "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": 29, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-22T23:27:08.118Z", "lastError": null, "stopReason": "idle", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "taskHalStatus": { "taskState": "on", "taskMode": "auto", "interpState": "idle", "activeLine": 13, "taskCycle": null, "servoCycle": 1590 } } } ], "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, 11/11, 12/12, 13/13" }, { "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=283.9176, 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": "33/330, 53/530, 78/780, 103/1030, 128/1280, 153/1530" }, { "name": "STOP 后 loop 停止", "pass": true, "detail": "active=false, stopReason=idle" } ], "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": 33, "servoCycle": 330, "historyLength": 0, "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": 7.16391, "y": -12.7489, "z": 28.2246, "a": -71.841, "b": 0, "c": -35.93 }, "dro": { "x": 7.16391, "y": -12.7489, "z": 28.2246, "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": 53, "servoCycle": 530, "historyLength": 0, "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.31746, "y": -11.7968, "z": 27.3111, "a": -71.6823, "b": 0, "c": -35.099 }, "dro": { "x": 6.31746, "y": -11.7968, "z": 27.3111, "a": -71.6823, "b": 0, "c": -35.099 }, "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": 78, "servoCycle": 780, "historyLength": 0, "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": 11, "activeUiLine": 11, "activeLineMatchesUi": true, "runState": "running", "axisPose": { "x": 6.35456, "y": -12.3652, "z": 26.2743, "a": -71.3014, "b": 0, "c": -33.1042 }, "dro": { "x": 6.35456, "y": -12.3652, "z": 26.2743, "a": -71.3014, "b": 0, "c": -33.1042 }, "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": 103, "servoCycle": 1030, "historyLength": 0, "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.35079, "y": -12.5316, "z": 25.9857, "a": -71.2011, "b": 0, "c": -32.5494 }, "dro": { "x": 6.35079, "y": -12.5316, "z": 25.9857, "a": -71.2011, "b": 0, "c": -32.5494 }, "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": 128, "servoCycle": 1280, "historyLength": 0, "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": 153, "servoCycle": 1530, "historyLength": 0, "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-22.docx" }