3241 lines
107 KiB
JSON
3241 lines
107 KiB
JSON
{
|
||
"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"
|
||
}
|