1571 lines
45 KiB
JSON
1571 lines
45 KiB
JSON
{
|
||
"summary": {
|
||
"generatedAt": "2026-07-03T13:21:51.610Z",
|
||
"project": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan",
|
||
"url": "http://127.0.0.1:44397/web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/index.html",
|
||
"inventoryCount": 83,
|
||
"buttonCount": 71,
|
||
"functionalControlCount": 74,
|
||
"passed": 74,
|
||
"failed": 5,
|
||
"runtimeErrors": [],
|
||
"resourceErrorCount": 43,
|
||
"finalRunState": "idle",
|
||
"finalMode": "auto",
|
||
"finalKinsType": "identity",
|
||
"finalBoundaryPhase": "blocked"
|
||
},
|
||
"inventory": [
|
||
{
|
||
"i": 0,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "File",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 1,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "open",
|
||
"text": "Open...",
|
||
"sourceRef": "commands.open_file",
|
||
"expectedEffect": "file picker opens without changing runtime state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 2,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "reload",
|
||
"text": "Reload",
|
||
"sourceRef": "commands.reload_file",
|
||
"expectedEffect": "program reload resets active playback state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 3,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "stage",
|
||
"text": "Stage LinuxCNC files",
|
||
"sourceRef": "web OPFS staging for DISPLAY PROGRAM_PREFIX",
|
||
"expectedEffect": "LinuxCNC profile files are staged",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 4,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "save-session",
|
||
"text": "Save session",
|
||
"sourceRef": "web session persistence",
|
||
"expectedEffect": "session snapshot is requested",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 5,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "restore-session",
|
||
"text": "Restore session",
|
||
"sourceRef": "web session persistence",
|
||
"expectedEffect": "session restore is requested",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 6,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "Machine",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 7,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "estop",
|
||
"text": "Toggle Emergency Stop",
|
||
"sourceRef": "commands.estop_clicked",
|
||
"expectedEffect": "toggle ESTOP/ESTOP_RESET",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 8,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "power",
|
||
"text": "Toggle Machine Power",
|
||
"sourceRef": "commands.onoff_clicked",
|
||
"expectedEffect": "toggle machine ON/OFF after estop reset",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 9,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "home-all",
|
||
"text": "Home All",
|
||
"sourceRef": "commands.home_all_joints",
|
||
"expectedEffect": "home all joints in manual mode",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 10,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "run-ready",
|
||
"text": "Run Ready",
|
||
"sourceRef": "AXIS run preconditions",
|
||
"expectedEffect": "power on, home, auto mode and TCP kins ready",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 11,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "run",
|
||
"text": "Run",
|
||
"sourceRef": "commands.task_run",
|
||
"expectedEffect": "AUTO_RUN from current start line",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 12,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "pause",
|
||
"text": "Pause",
|
||
"sourceRef": "commands.task_pause",
|
||
"expectedEffect": "AUTO_PAUSE when running",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 13,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "step",
|
||
"text": "Step",
|
||
"sourceRef": "commands.task_step",
|
||
"expectedEffect": "AUTO_STEP one cycle/segment",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 14,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "stop",
|
||
"text": "Stop",
|
||
"sourceRef": "commands.task_stop",
|
||
"expectedEffect": "abort current task",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 15,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "View",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 16,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "view-z",
|
||
"text": "Top Z",
|
||
"sourceRef": "commands.set_view_z",
|
||
"expectedEffect": "select top Z camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 17,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "view-y",
|
||
"text": "Front Y",
|
||
"sourceRef": "commands.set_view_y",
|
||
"expectedEffect": "select front Y camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 18,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "view-x",
|
||
"text": "Side X",
|
||
"sourceRef": "commands.set_view_x",
|
||
"expectedEffect": "select side X camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 19,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "view-p",
|
||
"text": "Perspective",
|
||
"sourceRef": "commands.set_view_p",
|
||
"expectedEffect": "select perspective/fit camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 20,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "clear-preview",
|
||
"text": "Clear Live Plot",
|
||
"sourceRef": "commands.clear_live_plot",
|
||
"expectedEffect": "clear live plot buffer",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 21,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "Help",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 22,
|
||
"region": "menubar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "audit",
|
||
"text": "Run parity audit",
|
||
"sourceRef": "web parity audit",
|
||
"expectedEffect": "request native/Web parity audit",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 23,
|
||
"region": "toolbar",
|
||
"tag": "input",
|
||
"type": "file",
|
||
"action": "OPEN_FILE",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 24,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "estop",
|
||
"menuCommand": "",
|
||
"text": "Emergency stop",
|
||
"sourceRef": "commands.estop_clicked",
|
||
"expectedEffect": "toggle ESTOP/ESTOP_RESET",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 25,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "power",
|
||
"menuCommand": "",
|
||
"text": "Machine power",
|
||
"sourceRef": "commands.onoff_clicked",
|
||
"expectedEffect": "toggle machine ON/OFF after estop reset",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 26,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "open",
|
||
"menuCommand": "",
|
||
"text": "Open program",
|
||
"sourceRef": "commands.open_file",
|
||
"expectedEffect": "file picker opens without changing runtime state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 27,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "reload",
|
||
"menuCommand": "",
|
||
"text": "Reload program",
|
||
"sourceRef": "commands.reload_file",
|
||
"expectedEffect": "program reload resets active playback state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 28,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "run",
|
||
"menuCommand": "",
|
||
"text": "Run program",
|
||
"sourceRef": "commands.task_run",
|
||
"expectedEffect": "AUTO_RUN from current start line",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 29,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "pause",
|
||
"menuCommand": "",
|
||
"text": "Pause",
|
||
"sourceRef": "commands.task_pause",
|
||
"expectedEffect": "AUTO_PAUSE when running",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 30,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "step",
|
||
"menuCommand": "",
|
||
"text": "Step",
|
||
"sourceRef": "commands.task_step",
|
||
"expectedEffect": "AUTO_STEP one cycle/segment",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 31,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "stop",
|
||
"menuCommand": "",
|
||
"text": "Stop",
|
||
"sourceRef": "commands.task_stop",
|
||
"expectedEffect": "abort current task",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 32,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "view-z",
|
||
"menuCommand": "",
|
||
"text": "Z",
|
||
"sourceRef": "commands.set_view_z",
|
||
"expectedEffect": "select top Z camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 33,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "view-y",
|
||
"menuCommand": "",
|
||
"text": "Y",
|
||
"sourceRef": "commands.set_view_y",
|
||
"expectedEffect": "select front Y camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 34,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "view-x",
|
||
"menuCommand": "",
|
||
"text": "X",
|
||
"sourceRef": "commands.set_view_x",
|
||
"expectedEffect": "select side X camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 35,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "view-p",
|
||
"menuCommand": "",
|
||
"text": "P",
|
||
"sourceRef": "commands.set_view_p",
|
||
"expectedEffect": "select perspective/fit camera",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 36,
|
||
"region": "toolbar",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "clear-preview",
|
||
"menuCommand": "",
|
||
"text": "Clear plot",
|
||
"sourceRef": "commands.clear_live_plot",
|
||
"expectedEffect": "clear live plot buffer",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 37,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "tab-manual",
|
||
"menuCommand": "",
|
||
"text": "Manual Control [F3]",
|
||
"sourceRef": "commands.ensure_manual",
|
||
"expectedEffect": "manual mode tab selected",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 38,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "tab-mdi",
|
||
"menuCommand": "",
|
||
"text": "MDI [F5]",
|
||
"sourceRef": "commands.ensure_mdi",
|
||
"expectedEffect": "MDI mode tab selected",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 39,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "radio",
|
||
"action": "select-joint",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "axis radiobuttons ja_rbutton",
|
||
"expectedEffect": "active joint/axis selected",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 40,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "radio",
|
||
"action": "select-joint",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "axis radiobuttons ja_rbutton",
|
||
"expectedEffect": "active joint/axis selected",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 41,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "radio",
|
||
"action": "select-joint",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "axis radiobuttons ja_rbutton",
|
||
"expectedEffect": "active joint/axis selected",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 42,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "radio",
|
||
"action": "select-joint",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "axis radiobuttons ja_rbutton",
|
||
"expectedEffect": "active joint/axis selected",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 43,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "radio",
|
||
"action": "select-joint",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "axis radiobuttons ja_rbutton",
|
||
"expectedEffect": "active joint/axis selected",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 44,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "jog-minus",
|
||
"menuCommand": "",
|
||
"text": "-",
|
||
"sourceRef": "commands.jog_minus",
|
||
"expectedEffect": "negative jog of active axis/joint",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 45,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "jog-plus",
|
||
"menuCommand": "",
|
||
"text": "+",
|
||
"sourceRef": "commands.jog_plus",
|
||
"expectedEffect": "positive jog of active axis/joint",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 46,
|
||
"region": "manual",
|
||
"tag": "select",
|
||
"type": "",
|
||
"action": "jog-increment",
|
||
"menuCommand": "",
|
||
"text": "Continuous 0.0010 0.0100 0.1000 1.0000 10.0000",
|
||
"sourceRef": "set_hal_jogincrement",
|
||
"expectedEffect": "jog increment updates HAL-equivalent state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 47,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "home-all",
|
||
"menuCommand": "",
|
||
"text": "Home All",
|
||
"sourceRef": "commands.home_all_joints",
|
||
"expectedEffect": "home all joints in manual mode",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 48,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "touch-off",
|
||
"menuCommand": "",
|
||
"text": "Touch Off",
|
||
"sourceRef": "commands.touch_off_system",
|
||
"expectedEffect": "G10 touch off MDI equivalent",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 49,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "tool-touch-off",
|
||
"menuCommand": "",
|
||
"text": "Tool Touch Off",
|
||
"sourceRef": "commands.touch_off_tool",
|
||
"expectedEffect": "tool length offset equivalent",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 50,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "spindle-reverse",
|
||
"menuCommand": "",
|
||
"text": "Rev",
|
||
"sourceRef": "spindle CCW control",
|
||
"expectedEffect": "spindle reverse",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 51,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "spindle-stop",
|
||
"menuCommand": "",
|
||
"text": "Stop",
|
||
"sourceRef": "spindle stop control",
|
||
"expectedEffect": "spindle stop",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 52,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "spindle-forward",
|
||
"menuCommand": "",
|
||
"text": "Fwd",
|
||
"sourceRef": "spindle CW control",
|
||
"expectedEffect": "spindle forward",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 53,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "spindle-override-down",
|
||
"menuCommand": "",
|
||
"text": "-",
|
||
"sourceRef": "commands.set_spindlerate",
|
||
"expectedEffect": "spindle override down",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 54,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "spindle-override-up",
|
||
"menuCommand": "",
|
||
"text": "+",
|
||
"sourceRef": "commands.set_spindlerate",
|
||
"expectedEffect": "spindle override up",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 55,
|
||
"region": "manual",
|
||
"tag": "form",
|
||
"type": "",
|
||
"action": "mdi-form",
|
||
"menuCommand": "",
|
||
"text": "MDI Command: Go",
|
||
"sourceRef": "commands.send_mdi",
|
||
"expectedEffect": "submit MDI command",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 56,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "text",
|
||
"action": "mdi-input",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 57,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "submit",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "Go",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 58,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "mdi-history",
|
||
"menuCommand": "",
|
||
"text": "G0 X0 Y0 Z0",
|
||
"sourceRef": "commands.mdi_history_butt_1",
|
||
"expectedEffect": "run/restore MDI history command",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 59,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "mdi-history",
|
||
"menuCommand": "",
|
||
"text": "G91 X1",
|
||
"sourceRef": "commands.mdi_history_butt_1",
|
||
"expectedEffect": "run/restore MDI history command",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 60,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "mdi-history",
|
||
"menuCommand": "",
|
||
"text": "G90",
|
||
"sourceRef": "commands.mdi_history_butt_1",
|
||
"expectedEffect": "run/restore MDI history command",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 61,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "mdi-history",
|
||
"menuCommand": "",
|
||
"text": "M429",
|
||
"sourceRef": "commands.mdi_history_butt_1",
|
||
"expectedEffect": "run/restore MDI history command",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 62,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "mdi-history",
|
||
"menuCommand": "",
|
||
"text": "M428",
|
||
"sourceRef": "commands.mdi_history_butt_1",
|
||
"expectedEffect": "run/restore MDI history command",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 63,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "mdi-history",
|
||
"menuCommand": "",
|
||
"text": "M430",
|
||
"sourceRef": "commands.mdi_history_butt_1",
|
||
"expectedEffect": "run/restore MDI history command",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 64,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "feed-override-down",
|
||
"menuCommand": "",
|
||
"text": "-",
|
||
"sourceRef": "commands.set_feedrate",
|
||
"expectedEffect": "feed override down",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 65,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "feed-override-up",
|
||
"menuCommand": "",
|
||
"text": "+",
|
||
"sourceRef": "commands.set_feedrate",
|
||
"expectedEffect": "feed override up",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 66,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "rapid-override-down",
|
||
"menuCommand": "",
|
||
"text": "-",
|
||
"sourceRef": "commands.set_rapidrate",
|
||
"expectedEffect": "rapid override down",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 67,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "rapid-override-up",
|
||
"menuCommand": "",
|
||
"text": "+",
|
||
"sourceRef": "commands.set_rapidrate",
|
||
"expectedEffect": "rapid override up",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 68,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "spindle-override-down",
|
||
"menuCommand": "",
|
||
"text": "-",
|
||
"sourceRef": "commands.set_spindlerate",
|
||
"expectedEffect": "spindle override down",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 69,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "spindle-override-up",
|
||
"menuCommand": "",
|
||
"text": "+",
|
||
"sourceRef": "commands.set_spindlerate",
|
||
"expectedEffect": "spindle override up",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 70,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "checkbox",
|
||
"action": "ignore-limits",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "commands.toggle_override_limits",
|
||
"expectedEffect": "limit override checkbox state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 71,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "checkbox",
|
||
"action": "block-delete",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "commands.toggle_block_delete",
|
||
"expectedEffect": "block delete state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 72,
|
||
"region": "manual",
|
||
"tag": "input",
|
||
"type": "checkbox",
|
||
"action": "optional-stop",
|
||
"menuCommand": "",
|
||
"text": "",
|
||
"sourceRef": "commands.toggle_optional_stop",
|
||
"expectedEffect": "optional stop state",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 73,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "toggle-flood",
|
||
"menuCommand": "",
|
||
"text": "Flood",
|
||
"sourceRef": "commands.flood_toggle",
|
||
"expectedEffect": "flood coolant toggle",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 74,
|
||
"region": "manual",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "toggle-mist",
|
||
"menuCommand": "",
|
||
"text": "Mist",
|
||
"sourceRef": "commands.mist_toggle",
|
||
"expectedEffect": "mist coolant toggle",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 75,
|
||
"region": "main-tabs",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "Preview",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 76,
|
||
"region": "main-tabs",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "DRO",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 77,
|
||
"region": "main-tabs",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "xyzbc_switchkins_sub",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 78,
|
||
"region": "main-tabs",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "",
|
||
"menuCommand": "",
|
||
"text": "centering",
|
||
"sourceRef": "",
|
||
"expectedEffect": "",
|
||
"business": false
|
||
},
|
||
{
|
||
"i": 79,
|
||
"region": "pyvcp",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "kins-identity",
|
||
"menuCommand": "",
|
||
"text": "IDENTITY",
|
||
"sourceRef": "pyvcp.type0-button -> halui.mdi-command-00",
|
||
"expectedEffect": "M429 sets identity kins",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 80,
|
||
"region": "pyvcp",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "kins-tcp",
|
||
"menuCommand": "",
|
||
"text": "TCP:XYZBC",
|
||
"sourceRef": "pyvcp.type1-button -> halui.mdi-command-01",
|
||
"expectedEffect": "M428 sets tcp-xyzbc kins",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 81,
|
||
"region": "pyvcp",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "kins-userk",
|
||
"menuCommand": "",
|
||
"text": "userk",
|
||
"sourceRef": "pyvcp.type2-button -> halui.mdi-command-02",
|
||
"expectedEffect": "M430 sets userk kins",
|
||
"business": true
|
||
},
|
||
{
|
||
"i": 82,
|
||
"region": "pyvcp",
|
||
"tag": "button",
|
||
"type": "button",
|
||
"action": "clear-preview",
|
||
"menuCommand": "",
|
||
"text": "vismach-clear",
|
||
"sourceRef": "pyvcp.vismach-clear -> vismach.plotclear",
|
||
"expectedEffect": "clear Vismach plot",
|
||
"business": true
|
||
}
|
||
],
|
||
"results": [
|
||
{
|
||
"task": "启动与清单",
|
||
"selector": "document",
|
||
"result": "通过",
|
||
"expected": "默认 xyzbc-trt,runtime ready,生成 DOM 控件清单",
|
||
"actual": "profile=xyzbc-trt, controls=83"
|
||
},
|
||
{
|
||
"task": "按钮来源矩阵",
|
||
"selector": "getButtonParity()",
|
||
"result": "通过",
|
||
"expected": "业务按钮有 AXIS/PyVCP 来源引用",
|
||
"actual": "parity=61, business=74, missing=0"
|
||
},
|
||
{
|
||
"task": "按钮矩阵前置",
|
||
"selector": "TASK_HAL_RUNTIME_FAILED",
|
||
"result": "通过",
|
||
"expected": "逐按钮矩阵使用稳定 UI dispatch fallback;真实 Task/HAL 由 smoke:browser 覆盖",
|
||
"actual": "已设置"
|
||
},
|
||
{
|
||
"task": "菜单 Stage LinuxCNC files",
|
||
"selector": "[data-menu-command=\"stage\"]",
|
||
"result": "通过",
|
||
"expected": "staged fileCount>=10",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"LinuxCNC machine files staged 20\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "菜单 Save session",
|
||
"selector": "[data-menu-command=\"save-session\"]",
|
||
"result": "通过",
|
||
"expected": "session status=saved",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"5-axis session saved web-rtcp-5axis-xyzbc-trt-sim-plan/sessions/xyzbc-trt-web-session/web-rtcp-5axis-session.json (opfs)\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "工具栏 View X",
|
||
"selector": "[data-action=\"view-x\"]",
|
||
"result": "通过",
|
||
"expected": "selectedView=x",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"preview view x\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "菜单 Restore session",
|
||
"selector": "[data-menu-command=\"restore-session\"]",
|
||
"result": "通过",
|
||
"expected": "session restoredAt 非空",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"5-axis session restored web-rtcp-5axis-xyzbc-trt-sim-plan/sessions/xyzbc-trt-web-session/web-rtcp-5axis-session.json\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "急停按钮",
|
||
"selector": "[data-action=\"estop\"]",
|
||
"result": "通过",
|
||
"expected": "estopActive=true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"estopped\",\"msg\":\"emergency stop active\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "急停复位按钮",
|
||
"selector": "[data-action=\"estop\"]",
|
||
"result": "通过",
|
||
"expected": "estopActive=false",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"estop reset; machine off\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "上电按钮",
|
||
"selector": "[data-action=\"power\"]",
|
||
"result": "通过",
|
||
"expected": "powerOn=true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"machine power on\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Manual 页签",
|
||
"selector": "[data-action=\"tab-manual\"]",
|
||
"result": "通过",
|
||
"expected": "mode=manual",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"mode manual\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Home All 按钮",
|
||
"selector": "[data-action=\"home-all\"]",
|
||
"result": "通过",
|
||
"expected": "allHomed=true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"machine homed to fixture origin\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "MDI 页签",
|
||
"selector": "[data-action=\"tab-mdi\"]",
|
||
"result": "通过",
|
||
"expected": "mode=mdi",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"idle\",\"msg\":\"mode mdi\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Manual 页签返回",
|
||
"selector": "[data-action=\"tab-manual\"]",
|
||
"result": "通过",
|
||
"expected": "mode=manual",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"idle\",\"msg\":\"mode manual\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "选择 Joint 0",
|
||
"selector": "[data-action=\"select-joint\"][value=\"0\"]",
|
||
"result": "通过",
|
||
"expected": "selectedJoint=0",
|
||
"actual": "{\"value\":0,\"selectedJoint\":0,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "选择 Joint 1",
|
||
"selector": "[data-action=\"select-joint\"][value=\"1\"]",
|
||
"result": "通过",
|
||
"expected": "selectedJoint=1",
|
||
"actual": "{\"value\":1,\"selectedJoint\":1,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "选择 Joint 2",
|
||
"selector": "[data-action=\"select-joint\"][value=\"2\"]",
|
||
"result": "通过",
|
||
"expected": "selectedJoint=2",
|
||
"actual": "{\"value\":2,\"selectedJoint\":2,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "选择 Joint 3",
|
||
"selector": "[data-action=\"select-joint\"][value=\"3\"]",
|
||
"result": "通过",
|
||
"expected": "selectedJoint=3",
|
||
"actual": "{\"value\":3,\"selectedJoint\":3,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "选择 Joint 4",
|
||
"selector": "[data-action=\"select-joint\"][value=\"4\"]",
|
||
"result": "通过",
|
||
"expected": "selectedJoint=4",
|
||
"actual": "{\"value\":4,\"selectedJoint\":4,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "Jog 增量 0",
|
||
"selector": "[data-action=\"jog-increment\"]",
|
||
"result": "通过",
|
||
"expected": "jogIncrement=0",
|
||
"actual": "{\"value\":0,\"selectedJoint\":4,\"jogIncrement\":0}"
|
||
},
|
||
{
|
||
"task": "Jog 增量 0.001",
|
||
"selector": "[data-action=\"jog-increment\"]",
|
||
"result": "通过",
|
||
"expected": "jogIncrement=0.001",
|
||
"actual": "{\"value\":0.001,\"selectedJoint\":4,\"jogIncrement\":0.001}"
|
||
},
|
||
{
|
||
"task": "Jog 增量 0.01",
|
||
"selector": "[data-action=\"jog-increment\"]",
|
||
"result": "通过",
|
||
"expected": "jogIncrement=0.01",
|
||
"actual": "{\"value\":0.01,\"selectedJoint\":4,\"jogIncrement\":0.01}"
|
||
},
|
||
{
|
||
"task": "Jog 增量 0.1",
|
||
"selector": "[data-action=\"jog-increment\"]",
|
||
"result": "通过",
|
||
"expected": "jogIncrement=0.1",
|
||
"actual": "{\"value\":0.1,\"selectedJoint\":4,\"jogIncrement\":0.1}"
|
||
},
|
||
{
|
||
"task": "Jog 增量 1",
|
||
"selector": "[data-action=\"jog-increment\"]",
|
||
"result": "通过",
|
||
"expected": "jogIncrement=1",
|
||
"actual": "{\"value\":1,\"selectedJoint\":4,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "Jog 增量 10",
|
||
"selector": "[data-action=\"jog-increment\"]",
|
||
"result": "通过",
|
||
"expected": "jogIncrement=10",
|
||
"actual": "{\"value\":10,\"selectedJoint\":4,\"jogIncrement\":10}"
|
||
},
|
||
{
|
||
"task": "Jog 增量恢复",
|
||
"selector": "[data-action=\"jog-increment\"]",
|
||
"result": "通过",
|
||
"expected": "jogIncrement=1",
|
||
"actual": "{\"value\":1,\"selectedJoint\":4,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "选择 X 轴",
|
||
"selector": "[data-action=\"select-joint\"][value=\"0\"]",
|
||
"result": "通过",
|
||
"expected": "selectedJoint=0",
|
||
"actual": "{\"value\":0,\"selectedJoint\":0,\"jogIncrement\":1}"
|
||
},
|
||
{
|
||
"task": "Jog +",
|
||
"selector": "[data-action=\"jog-plus\"]",
|
||
"result": "通过",
|
||
"expected": "X 增加",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"jog X +1\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Jog -",
|
||
"selector": "[data-action=\"jog-minus\"]",
|
||
"result": "通过",
|
||
"expected": "X 恢复",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"jog X -1\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Touch Off",
|
||
"selector": "[data-action=\"touch-off\"]",
|
||
"result": "失败",
|
||
"expected": "应执行 G10 L20 P0 X0",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"MDI blocked: switch to MDI mode first\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Tool Touch Off",
|
||
"selector": "[data-action=\"tool-touch-off\"]",
|
||
"result": "失败",
|
||
"expected": "应执行 G43",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"MDI blocked: switch to MDI mode first\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Spindle Fwd",
|
||
"selector": "[data-action=\"spindle-forward\"]",
|
||
"result": "通过",
|
||
"expected": "direction=forward enabled",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"spindle forward\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Spindle Rev",
|
||
"selector": "[data-action=\"spindle-reverse\"]",
|
||
"result": "通过",
|
||
"expected": "direction=reverse enabled",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"spindle reverse\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Spindle Stop",
|
||
"selector": "[data-action=\"spindle-stop\"]",
|
||
"result": "通过",
|
||
"expected": "direction=stop disabled",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"spindle stopped\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Spindle Override +",
|
||
"selector": "[data-action=\"spindle-override-up\"]",
|
||
"result": "通过",
|
||
"expected": "+10",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"spindle override adjusted\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Spindle Override -",
|
||
"selector": "[data-action=\"spindle-override-down\"]",
|
||
"result": "通过",
|
||
"expected": "恢复",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"spindle override adjusted\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Feed Override +",
|
||
"selector": "[data-action=\"feed-override-up\"]",
|
||
"result": "通过",
|
||
"expected": "+10",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"feed override adjusted\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Feed Override -",
|
||
"selector": "[data-action=\"feed-override-down\"]",
|
||
"result": "通过",
|
||
"expected": "恢复",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"feed override adjusted\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Rapid Override +",
|
||
"selector": "[data-action=\"rapid-override-up\"]",
|
||
"result": "失败",
|
||
"expected": "+10",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"rapid override adjusted\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Rapid Override -",
|
||
"selector": "[data-action=\"rapid-override-down\"]",
|
||
"result": "通过",
|
||
"expected": "恢复",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"rapid override adjusted\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Flood 开",
|
||
"selector": "[data-action=\"toggle-flood\"]",
|
||
"result": "通过",
|
||
"expected": "flood=true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"flood coolant toggled\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Flood 关",
|
||
"selector": "[data-action=\"toggle-flood\"]",
|
||
"result": "通过",
|
||
"expected": "flood=false",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"flood coolant toggled\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Mist 开",
|
||
"selector": "[data-action=\"toggle-mist\"]",
|
||
"result": "通过",
|
||
"expected": "mist=true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"mist coolant toggled\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Mist 关",
|
||
"selector": "[data-action=\"toggle-mist\"]",
|
||
"result": "通过",
|
||
"expected": "mist=false",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"mist coolant toggled\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Ignore limits 开",
|
||
"selector": "[data-action=\"ignore-limits\"]",
|
||
"result": "通过",
|
||
"expected": "true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"limit override requested\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Ignore limits 关",
|
||
"selector": "[data-action=\"ignore-limits\"]",
|
||
"result": "通过",
|
||
"expected": "false",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"limit override clear\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Optional block 开",
|
||
"selector": "[data-action=\"block-delete\"]",
|
||
"result": "通过",
|
||
"expected": "true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"block delete on\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Optional block 关",
|
||
"selector": "[data-action=\"block-delete\"]",
|
||
"result": "通过",
|
||
"expected": "false",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"block delete off\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Optional stop 开",
|
||
"selector": "[data-action=\"optional-stop\"]",
|
||
"result": "通过",
|
||
"expected": "true",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"optional stop on\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Optional stop 关",
|
||
"selector": "[data-action=\"optional-stop\"]",
|
||
"result": "通过",
|
||
"expected": "false",
|
||
"actual": "{\"mode\":\"manual\",\"runState\":\"jogging\",\"msg\":\"optional stop off\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "MDI 表单 Go",
|
||
"selector": "[data-action=\"mdi-form\"]",
|
||
"result": "通过",
|
||
"expected": "历史首项=G91 X1",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "MDI 历史按钮",
|
||
"selector": "[data-action=\"mdi-history\"]",
|
||
"result": "通过",
|
||
"expected": "历史按钮可执行",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"MDI G91 X1\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "PyVCP TCP:XYZBC",
|
||
"selector": "[data-action=\"kins-tcp\"]",
|
||
"result": "通过",
|
||
"expected": "tcp-xyzbc + RTCP on",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"MDI M428\",\"kins\":\"tcp-xyzbc\"}"
|
||
},
|
||
{
|
||
"task": "PyVCP IDENTITY",
|
||
"selector": "[data-action=\"kins-identity\"]",
|
||
"result": "通过",
|
||
"expected": "identity + RTCP off",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"MDI M429\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "PyVCP userk",
|
||
"selector": "[data-action=\"kins-userk\"]",
|
||
"result": "通过",
|
||
"expected": "kins=userk",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"MDI M430\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "View X",
|
||
"selector": "[data-action=\"view-x\"]",
|
||
"result": "通过",
|
||
"expected": "selectedView=x",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"preview view x\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "View Y",
|
||
"selector": "[data-action=\"view-y\"]",
|
||
"result": "通过",
|
||
"expected": "selectedView=y",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"preview view y\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "View Z",
|
||
"selector": "[data-action=\"view-z\"]",
|
||
"result": "通过",
|
||
"expected": "selectedView=z",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"preview view z\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "View P",
|
||
"selector": "[data-action=\"view-p\"]",
|
||
"result": "通过",
|
||
"expected": "selectedView=iso",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"preview fit to program\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "Toolbar Clear plot",
|
||
"selector": "[data-region=\"toolbar\"] [data-action=\"clear-preview\"]",
|
||
"result": "通过",
|
||
"expected": "pathPoints=0",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"mdi\",\"msg\":\"preview path cleared\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "Toolbar Reload",
|
||
"selector": "[data-action=\"reload\"]",
|
||
"result": "通过",
|
||
"expected": "pathPoints>0",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"idle\",\"msg\":\"program reloaded\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "PyVCP vismach-clear",
|
||
"selector": "[data-region=\"pyvcp\"] [data-action=\"clear-preview\"]",
|
||
"result": "通过",
|
||
"expected": "pathPoints=0",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"idle\",\"msg\":\"preview path cleared\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "Reload after PyVCP clear",
|
||
"selector": "[data-action=\"reload\"]",
|
||
"result": "通过",
|
||
"expected": "pathPoints>0",
|
||
"actual": "{\"mode\":\"mdi\",\"runState\":\"idle\",\"msg\":\"program reloaded\",\"kins\":\"userk\"}"
|
||
},
|
||
{
|
||
"task": "Run Ready 菜单",
|
||
"selector": "[data-menu-command=\"run-ready\"]",
|
||
"result": "通过",
|
||
"expected": "power/home/auto/tcp ready",
|
||
"actual": "{\"mode\":\"auto\",\"runState\":\"idle\",\"msg\":\"LinuxCNC interpreter blocked: Failed to execute 'decode' on 'TextDecoder': The provided ArrayBuffer value must not be resizable\",\"kins\":\"tcp-xyzbc\"}"
|
||
},
|
||
{
|
||
"task": "Step 按钮",
|
||
"selector": "[data-action=\"step\"]",
|
||
"result": "通过",
|
||
"expected": "进入 stepping/running/complete",
|
||
"actual": "{\"mode\":\"auto\",\"runState\":\"stepping\",\"msg\":\"stepped to line 18\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Run 按钮",
|
||
"selector": "[data-action=\"run\"]",
|
||
"result": "失败",
|
||
"expected": "运行默认 LinuxCNC 程序并产生 runtime feedback",
|
||
"actual": "{\"mode\":\"auto\",\"runState\":\"stepping\",\"msg\":\"run blocked: resume paused program first\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Pause 按钮",
|
||
"selector": "[data-action=\"pause\"]",
|
||
"result": "通过",
|
||
"expected": "进入 paused 或发出 pause",
|
||
"actual": "{\"mode\":\"auto\",\"runState\":\"paused\",\"msg\":\"program paused\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Resume 按钮",
|
||
"selector": "[data-action=\"resume\"], [data-menu-command=\"resume\"]",
|
||
"result": "通过",
|
||
"expected": "恢复运行或发出 resume",
|
||
"actual": "{\"mode\":\"auto\",\"runState\":\"running\",\"msg\":\"program resumed\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Stop 按钮",
|
||
"selector": "[data-action=\"stop\"]",
|
||
"result": "通过",
|
||
"expected": "runState=stopped 或 stop 完成",
|
||
"actual": "{\"mode\":\"auto\",\"runState\":\"stopped\",\"msg\":\"program stopped\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "Run parity audit 菜单",
|
||
"selector": "[data-menu-command=\"audit\"]",
|
||
"result": "失败",
|
||
"expected": "machine-file execution 或 boundary ready",
|
||
"actual": "{\"mode\":\"auto\",\"runState\":\"stopped\",\"msg\":\"LinuxCNC interpreter blocked: Failed to execute 'decode' on 'TextDecoder': The provided ArrayBuffer value must not be resizable\",\"kins\":\"identity\"}"
|
||
},
|
||
{
|
||
"task": "顶层菜单按钮 #1",
|
||
"selector": ".axis-menu > button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "顶层菜单按钮 #2",
|
||
"selector": ".axis-menu > button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "顶层菜单按钮 #3",
|
||
"selector": ".axis-menu > button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "顶层菜单按钮 #4",
|
||
"selector": ".axis-menu > button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "主区域静态页签按钮 #1",
|
||
"selector": "[data-region=\"main-tabs\"] .axis-main-tabs button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "主区域静态页签按钮 #2",
|
||
"selector": "[data-region=\"main-tabs\"] .axis-main-tabs button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "主区域静态页签按钮 #3",
|
||
"selector": "[data-region=\"main-tabs\"] .axis-main-tabs button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "主区域静态页签按钮 #4",
|
||
"selector": "[data-region=\"main-tabs\"] .axis-main-tabs button",
|
||
"result": "通过",
|
||
"expected": "无业务动作按钮点击后无运行时异常",
|
||
"actual": "通过"
|
||
},
|
||
{
|
||
"task": "Open 文件控件",
|
||
"selector": "[data-action=\"OPEN_FILE\"]",
|
||
"result": "通过",
|
||
"expected": "本地 ngc 文件加载成功",
|
||
"actual": "activeProgram=button-validation-sample-20260703T132018Z.ngc"
|
||
}
|
||
]
|
||
} |