Files
cnc_wams/qa/web-rtcp-5axis-site-test/output/test-linuxcnc-source-run-report.json

3241 lines
107 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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"
}