4315 lines
126 KiB
JSON
4315 lines
126 KiB
JSON
{
|
|
"apiName": "xyzbc-trt-native-web-evidence-comparison",
|
|
"status": "pass",
|
|
"comparedAt": "2026-07-08T21:25:02.164Z",
|
|
"nativePath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json",
|
|
"webPath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json",
|
|
"summary": {
|
|
"checkCount": 60,
|
|
"passCount": 60,
|
|
"failCount": 0,
|
|
"legacyComparePassCount": 60,
|
|
"legacyCompareFailCount": 0,
|
|
"blockers": [],
|
|
"nativeStatus": "ok",
|
|
"webStatus": "ready-for-wasm-runtime"
|
|
},
|
|
"surfaceSummary": {
|
|
"checkCount": 60,
|
|
"passCount": 60,
|
|
"failCount": 0,
|
|
"legacyComparePassCount": 60,
|
|
"legacyCompareFailCount": 0,
|
|
"blockers": [],
|
|
"nativeStatus": "ok",
|
|
"webStatus": "ready-for-wasm-runtime"
|
|
},
|
|
"functionalSummary": {
|
|
"status": "pass",
|
|
"checkCount": 8,
|
|
"passCount": 8,
|
|
"failCount": 0,
|
|
"requiredImprovements": []
|
|
},
|
|
"checks": [
|
|
{
|
|
"category": "profile",
|
|
"requirement": "native axis mask is XYZBC",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeAxisMask": 55
|
|
}
|
|
},
|
|
{
|
|
"category": "profile",
|
|
"requirement": "web default profile is xyzbc-trt",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"webProfile": "xyzbc-trt"
|
|
}
|
|
},
|
|
{
|
|
"category": "ini",
|
|
"requirement": "native loaded xyzbc switchkins program",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeFile": "/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
|
}
|
|
},
|
|
{
|
|
"category": "ini",
|
|
"requirement": "web INI parse is ready",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"webIniReady": true
|
|
}
|
|
},
|
|
{
|
|
"category": "switchkins",
|
|
"requirement": "native switchkins pin readable",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativePin": {
|
|
"owner": "31",
|
|
"type": "float",
|
|
"direction": "IN",
|
|
"value": 0,
|
|
"linked": true,
|
|
"raw": " 31 float IN 0 motion.switchkins-type <== :kinstype-select"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "switchkins",
|
|
"requirement": "web remap files staged",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"remaps": [
|
|
{
|
|
"raw": "M428 modalgroup=10 ngc=428remap",
|
|
"code": "M428",
|
|
"modalGroup": 10,
|
|
"ngc": "428remap"
|
|
},
|
|
{
|
|
"raw": "M429 modalgroup=10 ngc=429remap",
|
|
"code": "M429",
|
|
"modalGroup": 10,
|
|
"ngc": "429remap"
|
|
},
|
|
{
|
|
"raw": "M430 modalgroup=10 ngc=430remap",
|
|
"code": "M430",
|
|
"modalGroup": 10,
|
|
"ngc": "430remap"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"category": "program",
|
|
"requirement": "web default xyzbc_switchkins program staged",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"selected": {
|
|
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
|
"filename": "xyzbc_switchkins.ngc",
|
|
"wasmProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "tool-table",
|
|
"requirement": "web tool table staged",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"toolTable": "xyzbc-trt.tbl"
|
|
}
|
|
},
|
|
{
|
|
"category": "tool-table",
|
|
"requirement": "web tool table active offset drives kinematics, path, and Vismach",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"toolRuntime": {
|
|
"activeToolNumber": 2,
|
|
"activePocket": 2,
|
|
"kinematicsToolOffsetZ": 10,
|
|
"pathTool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"vismachToolOffset": 10,
|
|
"defaultActivationUsed": true
|
|
},
|
|
"toolOffsetClosure": {
|
|
"sourceToolTable": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl",
|
|
"selectedProgramSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
|
|
"programToolCommands": [],
|
|
"activeToolOffset": {
|
|
"idx": 2,
|
|
"toolNumber": 2,
|
|
"pocket": 2,
|
|
"offset": {
|
|
"x": 0,
|
|
"y": 0,
|
|
"z": 10,
|
|
"a": 0,
|
|
"b": 0,
|
|
"c": 0,
|
|
"u": 0,
|
|
"v": 0,
|
|
"w": 0
|
|
},
|
|
"diameter": 8,
|
|
"frontAngle": 0,
|
|
"backAngle": 0,
|
|
"orientation": 0
|
|
},
|
|
"kinematicsToolOffsetZ": 10,
|
|
"pathTool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"vismachToolOffset": 10,
|
|
"closed": true,
|
|
"semanticBoundary": "tool_table_current_t_p_z_d_drives_kinematics_path_and_vismach"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "pyvcp",
|
|
"requirement": "web PyVCP XML staged",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"pyvcpXmlPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml"
|
|
}
|
|
},
|
|
{
|
|
"category": "positions",
|
|
"requirement": "native joint feedback readable",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"joints": {
|
|
"0": 0,
|
|
"1": 0,
|
|
"2": 0,
|
|
"3": 0,
|
|
"4": 0
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "wasm",
|
|
"requirement": "required WASM artifacts available",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"missing": []
|
|
}
|
|
},
|
|
{
|
|
"category": "parameters",
|
|
"requirement": "parameter file staged",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"parameterFile": "xyzbc.var"
|
|
}
|
|
},
|
|
{
|
|
"category": "program",
|
|
"requirement": "web boat-xyzbc demo program staged",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"demoPrograms": [
|
|
{
|
|
"filename": "xyzbc_switchkins.ngc",
|
|
"default": true,
|
|
"staged": true,
|
|
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
|
},
|
|
{
|
|
"filename": "boat-xyzbc.ngc",
|
|
"default": false,
|
|
"staged": true,
|
|
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"category": "ngcgui",
|
|
"requirement": "web Ngcgui/remap subroutines staged",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"ngcguiSubroutines": [
|
|
{
|
|
"filename": "xyzbc_switchkins_sub.ngc",
|
|
"staged": true,
|
|
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc",
|
|
"executable": true,
|
|
"motionEventCount": 29
|
|
},
|
|
{
|
|
"filename": "centering.ngc",
|
|
"staged": true,
|
|
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc",
|
|
"executable": true,
|
|
"motionEventCount": 80
|
|
},
|
|
{
|
|
"filename": "helix_bc.ngc",
|
|
"staged": true,
|
|
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc",
|
|
"executable": true,
|
|
"motionEventCount": 5
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"category": "ngcgui",
|
|
"requirement": "web Ngcgui/remap subroutines execute through WASM interpreter wrappers",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"ngcguiExecution": {
|
|
"ready": true,
|
|
"unavailableReason": null,
|
|
"subroutines": [
|
|
{
|
|
"filename": "xyzbc_switchkins_sub.ngc",
|
|
"staged": true,
|
|
"wrapperFilename": "ngcgui-wrapper-xyzbc_switchkins_sub.ngc",
|
|
"executable": true,
|
|
"motionEventCount": 29,
|
|
"switchkinsCodes": [],
|
|
"remapRuntimeReady": true,
|
|
"machineFileExecutionReady": true,
|
|
"finalAxes": {
|
|
"x": -10,
|
|
"y": 20,
|
|
"z": 10,
|
|
"a": 0,
|
|
"b": 0,
|
|
"c": 0,
|
|
"u": 0,
|
|
"v": 0,
|
|
"w": 0,
|
|
"arc": {
|
|
"plane": 170,
|
|
"firstAxis": "x",
|
|
"secondAxis": "y",
|
|
"thirdAxis": "z",
|
|
"firstEnd": 0,
|
|
"secondEnd": 0,
|
|
"centerFirst": 10,
|
|
"centerSecond": 0,
|
|
"rotation": -3,
|
|
"axisEndPoint": 5
|
|
}
|
|
},
|
|
"semanticBoundary": "ngcgui_subroutine_executed_by_web_linuxcnc_interpreter_wasm"
|
|
},
|
|
{
|
|
"filename": "centering.ngc",
|
|
"staged": true,
|
|
"wrapperFilename": "ngcgui-wrapper-centering.ngc",
|
|
"executable": true,
|
|
"motionEventCount": 80,
|
|
"switchkinsCodes": [],
|
|
"remapRuntimeReady": true,
|
|
"machineFileExecutionReady": true,
|
|
"finalAxes": {
|
|
"x": 0,
|
|
"y": 0,
|
|
"z": 60,
|
|
"a": 0,
|
|
"b": 0,
|
|
"c": 0,
|
|
"u": 0,
|
|
"v": 0,
|
|
"w": 0
|
|
},
|
|
"semanticBoundary": "ngcgui_subroutine_executed_by_web_linuxcnc_interpreter_wasm"
|
|
},
|
|
{
|
|
"filename": "helix_bc.ngc",
|
|
"staged": true,
|
|
"wrapperFilename": "ngcgui-wrapper-helix_bc.ngc",
|
|
"executable": true,
|
|
"motionEventCount": 5,
|
|
"switchkinsCodes": [],
|
|
"remapRuntimeReady": true,
|
|
"machineFileExecutionReady": true,
|
|
"finalAxes": {
|
|
"x": 10,
|
|
"y": 0,
|
|
"z": 10,
|
|
"a": 0,
|
|
"b": 0,
|
|
"c": 0,
|
|
"u": 0,
|
|
"v": 0,
|
|
"w": 0,
|
|
"arc": {
|
|
"plane": 170,
|
|
"firstAxis": "x",
|
|
"secondAxis": "y",
|
|
"thirdAxis": "z",
|
|
"firstEnd": 0,
|
|
"secondEnd": 0,
|
|
"centerFirst": 10,
|
|
"centerSecond": 0,
|
|
"rotation": -3,
|
|
"axisEndPoint": 5
|
|
}
|
|
},
|
|
"semanticBoundary": "ngcgui_subroutine_executed_by_web_linuxcnc_interpreter_wasm"
|
|
}
|
|
],
|
|
"semanticBoundary": "web_ngcgui_remap_subroutines_staged_and_executable"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "postgui-hal",
|
|
"requirement": "web PyVCP to HALUI POSTGUI nets represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"halNets": [
|
|
{
|
|
"signal": "kinstype-select",
|
|
"source": "motion.analog-out-03",
|
|
"target": "motion.switchkins-type",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "table-x",
|
|
"source": "joint.0.pos-fb",
|
|
"target": "xyzbc-trt-gui.table-x",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "saddle-y",
|
|
"source": "joint.1.pos-fb",
|
|
"target": "xyzbc-trt-gui.saddle-y",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "spindle-z",
|
|
"source": "joint.2.pos-fb",
|
|
"target": "xyzbc-trt-gui.spindle-z",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "tilt-b",
|
|
"source": "joint.3.pos-fb",
|
|
"target": "xyzbc-trt-gui.tilt-b",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "rotate-c",
|
|
"source": "joint.4.pos-fb",
|
|
"target": "xyzbc-trt-gui.rotate-c",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "tool-offset",
|
|
"source": "motion.tooloffset.z",
|
|
"target": "xyzbc-trt-kins.tool-offset",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "tool-offset",
|
|
"source": "xyzbc-trt-kins.tool-offset",
|
|
"target": "xyzbc-trt-gui.tool-offset",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "x-offset",
|
|
"source": "xyzbc-trt-kins.x-offset",
|
|
"target": "xyzbc-trt-gui.x-offset",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "z-offset",
|
|
"source": "xyzbc-trt-kins.z-offset",
|
|
"target": "xyzbc-trt-gui.z-offset",
|
|
"boundary": "ini-halcmd"
|
|
},
|
|
{
|
|
"signal": "kinstype.is-0",
|
|
"source": "kinstype.is-0",
|
|
"target": "pyvcp.multilabel.0.legend0",
|
|
"boundary": "postgui-hal"
|
|
},
|
|
{
|
|
"signal": "kinstype.is-1",
|
|
"source": "kinstype.is-1",
|
|
"target": "pyvcp.multilabel.0.legend1",
|
|
"boundary": "postgui-hal"
|
|
},
|
|
{
|
|
"signal": "kinstype.is-2",
|
|
"source": "kinstype.is-2",
|
|
"target": "pyvcp.multilabel.0.legend2",
|
|
"boundary": "postgui-hal"
|
|
},
|
|
{
|
|
"signal": "vismach-clear",
|
|
"source": "pyvcp.vismach-clear",
|
|
"target": "vismach.plotclear",
|
|
"boundary": "postgui-hal"
|
|
},
|
|
{
|
|
"signal": "type0-button",
|
|
"source": "pyvcp.type0-button",
|
|
"target": "halui.mdi-command-00",
|
|
"command": "M429",
|
|
"boundary": "postgui-hal"
|
|
},
|
|
{
|
|
"signal": "type1-button",
|
|
"source": "pyvcp.type1-button",
|
|
"target": "halui.mdi-command-01",
|
|
"command": "M428",
|
|
"boundary": "postgui-hal"
|
|
},
|
|
{
|
|
"signal": "type2-button",
|
|
"source": "pyvcp.type2-button",
|
|
"target": "halui.mdi-command-02",
|
|
"command": "M430",
|
|
"boundary": "postgui-hal"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"category": "basic-sim",
|
|
"requirement": "native basic_sim joint/home/spindle/toolchange feedback readable",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"basicSimEquivalent": {
|
|
"ready": true,
|
|
"source": "LIB:basic_sim.tcl native runtime",
|
|
"jointFeedback": {
|
|
"joint.0.pos-fb": 0,
|
|
"joint.1.pos-fb": 0,
|
|
"joint.2.pos-fb": 0,
|
|
"joint.3.pos-fb": 0,
|
|
"joint.4.pos-fb": 0
|
|
},
|
|
"homing": {
|
|
"firstFiveHomedBefore": [
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false
|
|
],
|
|
"firstFiveHomedAfter": [
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false
|
|
],
|
|
"allConfiguredAxesHomed": false
|
|
},
|
|
"manualToolChange": {
|
|
"toolOffsetZ": 0,
|
|
"toolOffsetLinked": true
|
|
},
|
|
"spindle": {
|
|
"speed": 0,
|
|
"feedrate": 1,
|
|
"rapidrate": 1
|
|
},
|
|
"execution": {
|
|
"completed": true,
|
|
"eventCount": 3
|
|
},
|
|
"semanticBoundary": "native_basic_sim_joint_home_spindle_manualtoolchange_feedback"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "basic-sim",
|
|
"requirement": "web task/HAL basic_sim equivalent covers joint/home/spindle/toolchange feedback",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"basicSimEquivalent": {
|
|
"ready": true,
|
|
"source": "web linuxcnc_task_hal WASM plus LinuxCNC task policy",
|
|
"jointFeedback": {
|
|
"joint.0.pos-fb": -10,
|
|
"joint.1.pos-fb": 20,
|
|
"joint.2.pos-fb": 10,
|
|
"joint.3.pos-fb": 0,
|
|
"joint.4.pos-fb": 0
|
|
},
|
|
"homing": {
|
|
"allConfiguredAxesHomed": true,
|
|
"taskPolicyCanHome": false
|
|
},
|
|
"manualToolChange": {
|
|
"activeToolNumber": 2,
|
|
"toolOffsetZ": 10
|
|
},
|
|
"spindle": {
|
|
"speed": 0,
|
|
"canSpindle": false
|
|
},
|
|
"execution": {
|
|
"completed": true,
|
|
"sampleCount": 228,
|
|
"taskHalEventCount": 35
|
|
},
|
|
"semanticBoundary": "web_basic_sim_joint_home_spindle_manualtoolchange_feedback"
|
|
},
|
|
"taskHalEquivalence": {
|
|
"ready": true,
|
|
"unavailableReason": null,
|
|
"taskHal": {
|
|
"semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime",
|
|
"sessionProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc",
|
|
"completed": true,
|
|
"eventCount": 35
|
|
},
|
|
"taskPolicy": {
|
|
"taskState": "estop-reset",
|
|
"taskMode": "manual",
|
|
"interpState": "idle",
|
|
"canJog": false,
|
|
"canHome": false,
|
|
"canRunAuto": false,
|
|
"canExecuteMdi": false,
|
|
"canPause": false,
|
|
"canResume": false,
|
|
"canSpindle": false,
|
|
"canOverride": false
|
|
},
|
|
"taskHalStatusSummary": null,
|
|
"basicSimEquivalent": {
|
|
"ready": true,
|
|
"source": "web linuxcnc_task_hal WASM plus LinuxCNC task policy",
|
|
"jointFeedback": {
|
|
"joint.0.pos-fb": -10,
|
|
"joint.1.pos-fb": 20,
|
|
"joint.2.pos-fb": 10,
|
|
"joint.3.pos-fb": 0,
|
|
"joint.4.pos-fb": 0
|
|
},
|
|
"homing": {
|
|
"allConfiguredAxesHomed": true,
|
|
"taskPolicyCanHome": false
|
|
},
|
|
"manualToolChange": {
|
|
"activeToolNumber": 2,
|
|
"toolOffsetZ": 10
|
|
},
|
|
"spindle": {
|
|
"speed": 0,
|
|
"canSpindle": false
|
|
},
|
|
"execution": {
|
|
"completed": true,
|
|
"sampleCount": 228,
|
|
"taskHalEventCount": 35
|
|
},
|
|
"semanticBoundary": "web_basic_sim_joint_home_spindle_manualtoolchange_feedback"
|
|
},
|
|
"semanticBoundary": "web_task_hal_basic_sim_equivalent_state_flow"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "kinematics",
|
|
"requirement": "web kinematics HAL pins represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"kinematicsPins": {
|
|
"xOffset": -20,
|
|
"zOffset": -15,
|
|
"xRotPoint": 0,
|
|
"yRotPoint": 0,
|
|
"zRotPoint": 0,
|
|
"conventionalDirections": 0,
|
|
"toolOffsetSource": "motion.tooloffset.z",
|
|
"toolOffsetValue": 10,
|
|
"toolOffsetToolNumber": 2,
|
|
"pins": [
|
|
"motion.switchkins-type",
|
|
"motion.analog-out-03",
|
|
"motion.tooloffset.z",
|
|
"xyzbc-trt-kins.tool-offset",
|
|
"xyzbc-trt-kins.x-offset",
|
|
"xyzbc-trt-kins.z-offset",
|
|
"xyzbc-trt-kins.x-rot-point",
|
|
"xyzbc-trt-kins.y-rot-point",
|
|
"xyzbc-trt-kins.z-rot-point",
|
|
"xyzbc-trt-kins.conventional-directions",
|
|
"halui.mdi-command-00",
|
|
"halui.mdi-command-01",
|
|
"halui.mdi-command-02"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "limits",
|
|
"requirement": "web TRAJ/AXIS/JOINT limits represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"axisJointLimits": {
|
|
"coordinates": "XYZBC",
|
|
"linearUnits": "mm",
|
|
"angularUnits": "deg",
|
|
"jogAxes": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"C"
|
|
],
|
|
"geometry": "XYZB",
|
|
"traj": {
|
|
"coordinates": "XYZBC",
|
|
"linearUnits": "mm",
|
|
"angularUnits": "deg",
|
|
"defaultLinearVelocity": 20,
|
|
"maxLinearVelocity": 35,
|
|
"defaultLinearAcceleration": 300,
|
|
"maxLinearAcceleration": 400
|
|
},
|
|
"axisLimits": {
|
|
"X": {
|
|
"min": -200,
|
|
"max": 200,
|
|
"maxVelocity": 20,
|
|
"maxAcceleration": 300
|
|
},
|
|
"Y": {
|
|
"min": -100,
|
|
"max": 100,
|
|
"maxVelocity": 20,
|
|
"maxAcceleration": 300
|
|
},
|
|
"Z": {
|
|
"min": -120,
|
|
"max": 120,
|
|
"maxVelocity": 20,
|
|
"maxAcceleration": 300
|
|
},
|
|
"B": {
|
|
"min": -36000,
|
|
"max": 36000,
|
|
"maxVelocity": 30,
|
|
"maxAcceleration": 300
|
|
},
|
|
"C": {
|
|
"min": -36000,
|
|
"max": 36000,
|
|
"maxVelocity": 30,
|
|
"maxAcceleration": 300
|
|
}
|
|
},
|
|
"jointCount": 5,
|
|
"jointConfig": [
|
|
{
|
|
"id": 0,
|
|
"axis": "X",
|
|
"type": "LINEAR",
|
|
"home": 0,
|
|
"min": -200,
|
|
"max": 200,
|
|
"maxVelocity": 20,
|
|
"maxAcceleration": 300,
|
|
"homeSearchVelocity": 0,
|
|
"homeSequence": 0
|
|
},
|
|
{
|
|
"id": 1,
|
|
"axis": "Y",
|
|
"type": "LINEAR",
|
|
"home": 0,
|
|
"min": -100,
|
|
"max": 100,
|
|
"maxVelocity": 20,
|
|
"maxAcceleration": 300,
|
|
"homeSearchVelocity": 0,
|
|
"homeSequence": 0
|
|
},
|
|
{
|
|
"id": 2,
|
|
"axis": "Z",
|
|
"type": "LINEAR",
|
|
"home": 0,
|
|
"min": -120,
|
|
"max": 120,
|
|
"maxVelocity": 20,
|
|
"maxAcceleration": 300,
|
|
"homeSearchVelocity": 0,
|
|
"homeSequence": 0
|
|
},
|
|
{
|
|
"id": 3,
|
|
"axis": "B",
|
|
"type": "ANGULAR",
|
|
"home": 0,
|
|
"min": -100,
|
|
"max": 50,
|
|
"maxVelocity": 30,
|
|
"maxAcceleration": 300,
|
|
"homeSearchVelocity": 0,
|
|
"homeSequence": 0
|
|
},
|
|
{
|
|
"id": 4,
|
|
"axis": "C",
|
|
"type": "ANGULAR",
|
|
"home": 0,
|
|
"min": -36000,
|
|
"max": 36000,
|
|
"maxVelocity": 30,
|
|
"maxAcceleration": 300,
|
|
"homeSearchVelocity": 0,
|
|
"homeSequence": 0
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "ui",
|
|
"requirement": "web AXIS first screen exposes program, coordinates, status, MDI/switchkins, override, tool, preview, and execution",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"axisMainUi": {
|
|
"semanticBoundary": "xyzbc_trt_axis_first_screen_program_coordinates_status_mdi_switchkins_override_tool_preview_execution",
|
|
"firstViewport": "axis-equivalent-cnc-console",
|
|
"profileId": "xyzbc-trt",
|
|
"coordinates": "XYZBC",
|
|
"requiredSections": [
|
|
{
|
|
"id": "preview",
|
|
"section": "preview-toolpath-and-machine-model"
|
|
},
|
|
{
|
|
"id": "dro",
|
|
"section": "coordinates-dro"
|
|
},
|
|
{
|
|
"id": "gcode",
|
|
"section": "program-and-mdi"
|
|
},
|
|
{
|
|
"id": "status-sidebar",
|
|
"section": "status-mode-and-switchkins"
|
|
},
|
|
{
|
|
"id": "info-tabs",
|
|
"section": "execution-tool-and-runtime-state"
|
|
},
|
|
{
|
|
"id": "override",
|
|
"section": "feed-rapid-override"
|
|
},
|
|
{
|
|
"id": "spindle-coolant",
|
|
"section": "spindle-coolant"
|
|
},
|
|
{
|
|
"id": "bottom-controls",
|
|
"section": "run-jog-home-controls"
|
|
}
|
|
],
|
|
"axisButtonParity": {
|
|
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
|
|
"pyvcpSourceFiles": [
|
|
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
|
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
|
|
],
|
|
"requiredActions": [
|
|
"estop",
|
|
"power",
|
|
"open",
|
|
"reload",
|
|
"run-ready",
|
|
"run",
|
|
"pause",
|
|
"resume",
|
|
"step",
|
|
"stop",
|
|
"home-all",
|
|
"jog-minus",
|
|
"jog-plus",
|
|
"touch-off",
|
|
"tool-touch-off",
|
|
"spindle-forward",
|
|
"spindle-stop",
|
|
"spindle-reverse",
|
|
"feed-override-down",
|
|
"feed-override-up",
|
|
"rapid-override-down",
|
|
"rapid-override-up",
|
|
"spindle-override-down",
|
|
"spindle-override-up",
|
|
"ignore-limits",
|
|
"block-delete",
|
|
"optional-stop",
|
|
"toggle-flood",
|
|
"toggle-mist",
|
|
"mdi-form",
|
|
"mdi-history",
|
|
"kins-identity",
|
|
"kins-tcp",
|
|
"kins-userk",
|
|
"clear-preview",
|
|
"view-x",
|
|
"view-y",
|
|
"view-z",
|
|
"view-p"
|
|
],
|
|
"coveredActions": [
|
|
"open",
|
|
"reload",
|
|
"stage",
|
|
"save-session",
|
|
"restore-session",
|
|
"estop",
|
|
"power",
|
|
"home-all",
|
|
"run-ready",
|
|
"run",
|
|
"pause",
|
|
"resume",
|
|
"step",
|
|
"stop",
|
|
"view-z",
|
|
"view-y",
|
|
"view-x",
|
|
"view-p",
|
|
"clear-preview",
|
|
"audit",
|
|
"toggle-auto-manual",
|
|
"pause-resume",
|
|
"tab-manual",
|
|
"tab-mdi",
|
|
"select-joint",
|
|
"jog-increment",
|
|
"jog-minus",
|
|
"jog-plus",
|
|
"touch-off",
|
|
"tool-touch-off",
|
|
"spindle-reverse",
|
|
"spindle-stop",
|
|
"spindle-forward",
|
|
"feed-override-down",
|
|
"feed-override-up",
|
|
"rapid-override-down",
|
|
"rapid-override-up",
|
|
"spindle-override-down",
|
|
"spindle-override-up",
|
|
"ignore-limits",
|
|
"block-delete",
|
|
"optional-stop",
|
|
"toggle-flood",
|
|
"toggle-mist",
|
|
"mdi-input",
|
|
"mdi-form",
|
|
"mdi-history",
|
|
"kins-identity",
|
|
"kins-tcp",
|
|
"kins-userk"
|
|
],
|
|
"missingActions": [],
|
|
"buttonCount": 63,
|
|
"sourceReferencedCount": 63,
|
|
"ready": true
|
|
},
|
|
"buttons": [
|
|
{
|
|
"id": "menu-open",
|
|
"action": "open",
|
|
"sourceSymbol": "commands.open_file",
|
|
"sourceLines": "axis.py:2243-2262",
|
|
"expected": "file picker opens without changing runtime state"
|
|
},
|
|
{
|
|
"id": "menu-reload",
|
|
"action": "reload",
|
|
"sourceSymbol": "commands.reload_file",
|
|
"sourceLines": "axis.py:2296-2297",
|
|
"expected": "program reload resets active playback state"
|
|
},
|
|
{
|
|
"id": "menu-stage",
|
|
"action": "stage",
|
|
"sourceSymbol": "web OPFS staging for DISPLAY PROGRAM_PREFIX",
|
|
"sourceLines": "xyzbc-trt.ini:[DISPLAY] PROGRAM_PREFIX",
|
|
"expected": "LinuxCNC profile files are staged"
|
|
},
|
|
{
|
|
"id": "menu-save-session",
|
|
"action": "save-session",
|
|
"sourceSymbol": "web session persistence",
|
|
"sourceLines": "five-axis-session.js",
|
|
"expected": "session snapshot is requested"
|
|
},
|
|
{
|
|
"id": "menu-restore-session",
|
|
"action": "restore-session",
|
|
"sourceSymbol": "web session persistence",
|
|
"sourceLines": "five-axis-session.js",
|
|
"expected": "session restore is requested"
|
|
},
|
|
{
|
|
"id": "menu-estop",
|
|
"action": "estop",
|
|
"sourceSymbol": "commands.estop_clicked",
|
|
"sourceLines": "axis.py:2223-2229",
|
|
"expected": "toggle ESTOP/ESTOP_RESET"
|
|
},
|
|
{
|
|
"id": "menu-power",
|
|
"action": "power",
|
|
"sourceSymbol": "commands.onoff_clicked",
|
|
"sourceLines": "axis.py:2231-2241",
|
|
"expected": "toggle machine ON/OFF after estop reset"
|
|
},
|
|
{
|
|
"id": "menu-home-all",
|
|
"action": "home-all",
|
|
"sourceSymbol": "commands.home_all_joints",
|
|
"sourceLines": "axis.py:2586-2596",
|
|
"expected": "home all joints in manual mode"
|
|
},
|
|
{
|
|
"id": "menu-run-ready",
|
|
"action": "run-ready",
|
|
"sourceSymbol": "AXIS run preconditions",
|
|
"sourceLines": "axis.py:2379-2391",
|
|
"expected": "open/stage the selected program without substituting power, Home All, or Run"
|
|
},
|
|
{
|
|
"id": "menu-run",
|
|
"action": "run",
|
|
"sourceSymbol": "commands.task_run",
|
|
"sourceLines": "axis.py:2308-2320",
|
|
"expected": "AUTO_RUN from current start line"
|
|
},
|
|
{
|
|
"id": "menu-pause",
|
|
"action": "pause",
|
|
"sourceSymbol": "commands.task_pause",
|
|
"sourceLines": "axis.py:2329-2333",
|
|
"expected": "AUTO_PAUSE when running"
|
|
},
|
|
{
|
|
"id": "menu-resume",
|
|
"action": "resume",
|
|
"sourceSymbol": "commands.task_resume",
|
|
"sourceLines": "axis.py:2344-2351",
|
|
"expected": "AUTO_RESUME when paused"
|
|
},
|
|
{
|
|
"id": "menu-step",
|
|
"action": "step",
|
|
"sourceSymbol": "commands.task_step",
|
|
"sourceLines": "axis.py:2321-2327",
|
|
"expected": "AUTO_STEP one cycle/segment"
|
|
},
|
|
{
|
|
"id": "menu-stop",
|
|
"action": "stop",
|
|
"sourceSymbol": "commands.task_stop",
|
|
"sourceLines": "axis.py:2365-2372",
|
|
"expected": "abort current task"
|
|
},
|
|
{
|
|
"id": "menu-view-z",
|
|
"action": "view-z",
|
|
"sourceSymbol": "commands.set_view_z",
|
|
"sourceLines": "axis.py:2208-2215",
|
|
"expected": "select top Z camera"
|
|
},
|
|
{
|
|
"id": "menu-view-y",
|
|
"action": "view-y",
|
|
"sourceSymbol": "commands.set_view_y",
|
|
"sourceLines": "axis.py:2192-2200",
|
|
"expected": "select front Y camera"
|
|
},
|
|
{
|
|
"id": "menu-view-x",
|
|
"action": "view-x",
|
|
"sourceSymbol": "commands.set_view_x",
|
|
"sourceLines": "axis.py:2182-2190",
|
|
"expected": "select side X camera"
|
|
},
|
|
{
|
|
"id": "menu-view-p",
|
|
"action": "view-p",
|
|
"sourceSymbol": "commands.set_view_p",
|
|
"sourceLines": "axis.py:2220-2221",
|
|
"expected": "select perspective/fit camera"
|
|
},
|
|
{
|
|
"id": "menu-clear-preview",
|
|
"action": "clear-preview",
|
|
"sourceSymbol": "commands.clear_live_plot",
|
|
"sourceLines": "axis.py:2557-2558",
|
|
"expected": "clear live plot buffer"
|
|
},
|
|
{
|
|
"id": "menu-audit",
|
|
"action": "audit",
|
|
"sourceSymbol": "web parity audit",
|
|
"sourceLines": "collect-web-xyzbc-trt-evidence.mjs",
|
|
"expected": "request native/Web parity audit"
|
|
},
|
|
{
|
|
"id": "toolbar-estop",
|
|
"action": "estop",
|
|
"sourceSymbol": "commands.estop_clicked",
|
|
"sourceLines": "axis.py:2223-2229",
|
|
"expected": "toggle ESTOP/ESTOP_RESET"
|
|
},
|
|
{
|
|
"id": "toolbar-power",
|
|
"action": "power",
|
|
"sourceSymbol": "commands.onoff_clicked",
|
|
"sourceLines": "axis.py:2231-2241",
|
|
"expected": "toggle machine power"
|
|
},
|
|
{
|
|
"id": "toolbar-auto-manual",
|
|
"action": "toggle-auto-manual",
|
|
"sourceSymbol": "commands.ensure_manual / commands.task_mode_auto",
|
|
"sourceLines": "axis.py:2308-2320,2520-2531",
|
|
"expected": "toggle task mode between AUTO and MANUAL"
|
|
},
|
|
{
|
|
"id": "toolbar-load",
|
|
"action": "open",
|
|
"sourceSymbol": "commands.open_file",
|
|
"sourceLines": "axis.py:2243-2262",
|
|
"expected": "open local G-code"
|
|
},
|
|
{
|
|
"id": "toolbar-reload",
|
|
"action": "reload",
|
|
"sourceSymbol": "commands.reload_file",
|
|
"sourceLines": "axis.py:2296-2297",
|
|
"expected": "reload active program"
|
|
},
|
|
{
|
|
"id": "toolbar-run",
|
|
"action": "run",
|
|
"sourceSymbol": "commands.task_run",
|
|
"sourceLines": "axis.py:2308-2320",
|
|
"expected": "start AUTO run"
|
|
},
|
|
{
|
|
"id": "toolbar-pause-resume",
|
|
"action": "pause-resume",
|
|
"sourceSymbol": "commands.task_pauseresume",
|
|
"sourceLines": "axis.py:2433-2443 / axis.tcl:543-549",
|
|
"expected": "AUTO_PAUSE when interpreter is not idle; AUTO_RESUME when paused"
|
|
},
|
|
{
|
|
"id": "toolbar-step",
|
|
"action": "step",
|
|
"sourceSymbol": "commands.task_step",
|
|
"sourceLines": "axis.py:2321-2327",
|
|
"expected": "single step"
|
|
},
|
|
{
|
|
"id": "toolbar-stop",
|
|
"action": "stop",
|
|
"sourceSymbol": "commands.task_stop",
|
|
"sourceLines": "axis.py:2365-2372",
|
|
"expected": "abort current task"
|
|
},
|
|
{
|
|
"id": "toolbar-view-z",
|
|
"action": "view-z",
|
|
"sourceSymbol": "commands.set_view_z",
|
|
"sourceLines": "axis.py:2208-2215",
|
|
"expected": "Z view"
|
|
},
|
|
{
|
|
"id": "toolbar-view-y",
|
|
"action": "view-y",
|
|
"sourceSymbol": "commands.set_view_y",
|
|
"sourceLines": "axis.py:2192-2200",
|
|
"expected": "Y view"
|
|
},
|
|
{
|
|
"id": "toolbar-view-x",
|
|
"action": "view-x",
|
|
"sourceSymbol": "commands.set_view_x",
|
|
"sourceLines": "axis.py:2182-2190",
|
|
"expected": "X view"
|
|
},
|
|
{
|
|
"id": "toolbar-view-p",
|
|
"action": "view-p",
|
|
"sourceSymbol": "commands.set_view_p",
|
|
"sourceLines": "axis.py:2220-2221",
|
|
"expected": "perspective view"
|
|
},
|
|
{
|
|
"id": "toolbar-clear-preview",
|
|
"action": "clear-preview",
|
|
"sourceSymbol": "commands.clear_live_plot",
|
|
"sourceLines": "axis.py:2557-2558",
|
|
"expected": "clear path count"
|
|
},
|
|
{
|
|
"id": "manual-tab",
|
|
"action": "tab-manual",
|
|
"sourceSymbol": "commands.ensure_manual",
|
|
"sourceLines": "axis.py:2520-2531",
|
|
"expected": "manual mode tab selected"
|
|
},
|
|
{
|
|
"id": "mdi-tab",
|
|
"action": "tab-mdi",
|
|
"sourceSymbol": "commands.ensure_mdi",
|
|
"sourceLines": "axis.py:2533-2540",
|
|
"expected": "MDI mode tab selected"
|
|
},
|
|
{
|
|
"id": "manual-select-joint",
|
|
"action": "select-joint",
|
|
"sourceSymbol": "axis radiobuttons ja_rbutton",
|
|
"sourceLines": "axis.py:1369-1380",
|
|
"expected": "active joint/axis selected"
|
|
},
|
|
{
|
|
"id": "manual-jog-increment",
|
|
"action": "jog-increment",
|
|
"sourceSymbol": "set_hal_jogincrement",
|
|
"sourceLines": "axis.py:1507-1515",
|
|
"expected": "jog increment updates HAL-equivalent state"
|
|
},
|
|
{
|
|
"id": "manual-jog-minus",
|
|
"action": "jog-minus",
|
|
"sourceSymbol": "commands.jog_minus",
|
|
"sourceLines": "axis.py:2573-2577",
|
|
"expected": "negative jog of active axis/joint"
|
|
},
|
|
{
|
|
"id": "manual-jog-plus",
|
|
"action": "jog-plus",
|
|
"sourceSymbol": "commands.jog_plus",
|
|
"sourceLines": "axis.py:2567-2571",
|
|
"expected": "positive jog of active axis/joint"
|
|
},
|
|
{
|
|
"id": "manual-touch-off",
|
|
"action": "touch-off",
|
|
"sourceSymbol": "commands.touch_off_system",
|
|
"sourceLines": "axis.py:2631-2650",
|
|
"expected": "G10 touch off MDI equivalent"
|
|
},
|
|
{
|
|
"id": "manual-tool-touch-off",
|
|
"action": "tool-touch-off",
|
|
"sourceSymbol": "commands.touch_off_tool",
|
|
"sourceLines": "axis.py:2651-2685",
|
|
"expected": "tool length offset equivalent"
|
|
},
|
|
{
|
|
"id": "manual-spindle-reverse",
|
|
"action": "spindle-reverse",
|
|
"sourceSymbol": "spindle CCW control",
|
|
"sourceLines": "axis.py:1389-1398",
|
|
"expected": "spindle reverse"
|
|
},
|
|
{
|
|
"id": "manual-spindle-stop",
|
|
"action": "spindle-stop",
|
|
"sourceSymbol": "spindle stop control",
|
|
"sourceLines": "axis.py:1389-1398",
|
|
"expected": "spindle stop"
|
|
},
|
|
{
|
|
"id": "manual-spindle-forward",
|
|
"action": "spindle-forward",
|
|
"sourceSymbol": "spindle CW control",
|
|
"sourceLines": "axis.py:1389-1398",
|
|
"expected": "spindle forward"
|
|
},
|
|
{
|
|
"id": "override-feed-down",
|
|
"action": "feed-override-down",
|
|
"sourceSymbol": "commands.set_feedrate",
|
|
"sourceLines": "axis.py:2131-2137",
|
|
"expected": "feed override down"
|
|
},
|
|
{
|
|
"id": "override-feed-up",
|
|
"action": "feed-override-up",
|
|
"sourceSymbol": "commands.set_feedrate",
|
|
"sourceLines": "axis.py:2131-2137",
|
|
"expected": "feed override up"
|
|
},
|
|
{
|
|
"id": "override-rapid-down",
|
|
"action": "rapid-override-down",
|
|
"sourceSymbol": "commands.set_rapidrate",
|
|
"sourceLines": "axis.py:2139-2145",
|
|
"expected": "rapid override down"
|
|
},
|
|
{
|
|
"id": "override-rapid-up",
|
|
"action": "rapid-override-up",
|
|
"sourceSymbol": "commands.set_rapidrate",
|
|
"sourceLines": "axis.py:2139-2145",
|
|
"expected": "rapid override up"
|
|
},
|
|
{
|
|
"id": "override-spindle-down",
|
|
"action": "spindle-override-down",
|
|
"sourceSymbol": "commands.set_spindlerate",
|
|
"sourceLines": "axis.py:2122-2129",
|
|
"expected": "spindle override down"
|
|
},
|
|
{
|
|
"id": "override-spindle-up",
|
|
"action": "spindle-override-up",
|
|
"sourceSymbol": "commands.set_spindlerate",
|
|
"sourceLines": "axis.py:2122-2129",
|
|
"expected": "spindle override up"
|
|
},
|
|
{
|
|
"id": "manual-ignore-limits",
|
|
"action": "ignore-limits",
|
|
"sourceSymbol": "commands.toggle_override_limits",
|
|
"sourceLines": "axis.py:3161",
|
|
"expected": "limit override checkbox state"
|
|
},
|
|
{
|
|
"id": "manual-block-delete",
|
|
"action": "block-delete",
|
|
"sourceSymbol": "commands.toggle_block_delete",
|
|
"sourceLines": "axis.py:2051-2059",
|
|
"expected": "block delete state"
|
|
},
|
|
{
|
|
"id": "manual-optional-stop",
|
|
"action": "optional-stop",
|
|
"sourceSymbol": "commands.toggle_optional_stop",
|
|
"sourceLines": "axis.py:2047-2049",
|
|
"expected": "optional stop state"
|
|
},
|
|
{
|
|
"id": "manual-flood",
|
|
"action": "toggle-flood",
|
|
"sourceSymbol": "commands.flood_toggle",
|
|
"sourceLines": "axis.py:3176",
|
|
"expected": "flood coolant toggle"
|
|
},
|
|
{
|
|
"id": "manual-mist",
|
|
"action": "toggle-mist",
|
|
"sourceSymbol": "commands.mist_toggle",
|
|
"sourceLines": "axis.py:3175",
|
|
"expected": "mist coolant toggle"
|
|
},
|
|
{
|
|
"id": "mdi-input",
|
|
"action": "mdi-input",
|
|
"sourceSymbol": "commands.mdi_command.entry",
|
|
"sourceLines": "axis.py:2413-2417,2499-2516",
|
|
"expected": "edit pending MDI command text before submit/history execution"
|
|
},
|
|
{
|
|
"id": "mdi-submit",
|
|
"action": "mdi-form",
|
|
"sourceSymbol": "commands.send_mdi",
|
|
"sourceLines": "axis.py:2413-2417",
|
|
"expected": "submit MDI command"
|
|
},
|
|
{
|
|
"id": "mdi-history",
|
|
"action": "mdi-history",
|
|
"sourceSymbol": "commands.mdi_history_butt_1",
|
|
"sourceLines": "axis.py:2499-2516",
|
|
"expected": "run/restore MDI history command"
|
|
},
|
|
{
|
|
"id": "pyvcp-identity",
|
|
"action": "kins-identity",
|
|
"sourceSymbol": "pyvcp.type0-button -> halui.mdi-command-00",
|
|
"sourceLines": "switchkins_postgui.hal",
|
|
"expected": "M429 sets identity kins"
|
|
},
|
|
{
|
|
"id": "pyvcp-tcp",
|
|
"action": "kins-tcp",
|
|
"sourceSymbol": "pyvcp.type1-button -> halui.mdi-command-01",
|
|
"sourceLines": "switchkins_postgui.hal",
|
|
"expected": "M428 sets tcp-xyzbc kins"
|
|
},
|
|
{
|
|
"id": "pyvcp-userk",
|
|
"action": "kins-userk",
|
|
"sourceSymbol": "pyvcp.type2-button -> halui.mdi-command-02",
|
|
"sourceLines": "switchkins_postgui.hal",
|
|
"expected": "M430 sets userk kins"
|
|
},
|
|
{
|
|
"id": "pyvcp-clear",
|
|
"action": "clear-preview",
|
|
"sourceSymbol": "pyvcp.vismach-clear -> vismach.plotclear",
|
|
"sourceLines": "switchkins_postgui.hal",
|
|
"expected": "clear Vismach plot"
|
|
}
|
|
],
|
|
"capabilities": [
|
|
{
|
|
"id": "program",
|
|
"ready": true,
|
|
"evidence": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
|
},
|
|
{
|
|
"id": "coordinates",
|
|
"ready": true,
|
|
"evidence": {
|
|
"coordinates": "XYZBC",
|
|
"droAxes": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"B",
|
|
"C"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "status",
|
|
"ready": true,
|
|
"evidence": {
|
|
"taskState": "estop-reset",
|
|
"mode": "manual",
|
|
"runState": "idle"
|
|
}
|
|
},
|
|
{
|
|
"id": "mdi",
|
|
"ready": true,
|
|
"evidence": {
|
|
"command": "G0 X0 Y0 Z0",
|
|
"switchkinsMdi": [
|
|
"M429",
|
|
"M428",
|
|
"M430"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "switchkins",
|
|
"ready": true,
|
|
"evidence": [
|
|
{
|
|
"value": 0,
|
|
"label": "identity",
|
|
"mdiCommand": "M429",
|
|
"webKinsType": "identity",
|
|
"remap": {
|
|
"code": "M429",
|
|
"modalGroup": 10,
|
|
"ngc": "429remap",
|
|
"path": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc",
|
|
"switchkinsType": 0,
|
|
"analogOutputIndex": 3,
|
|
"syncInputIndex": 0,
|
|
"requiresHalPinVars": true
|
|
},
|
|
"haluiCommand": "M429",
|
|
"halPin": "motion.switchkins-type"
|
|
},
|
|
{
|
|
"value": 1,
|
|
"label": "XYZBC TCP",
|
|
"mdiCommand": "M428",
|
|
"webKinsType": "tcp-xyzbc",
|
|
"remap": {
|
|
"code": "M428",
|
|
"modalGroup": 10,
|
|
"ngc": "428remap",
|
|
"path": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc",
|
|
"switchkinsType": 1,
|
|
"analogOutputIndex": 3,
|
|
"syncInputIndex": 0,
|
|
"requiresHalPinVars": true
|
|
},
|
|
"haluiCommand": "M428",
|
|
"halPin": "motion.switchkins-type"
|
|
},
|
|
{
|
|
"value": 2,
|
|
"label": "USERK",
|
|
"mdiCommand": "M430",
|
|
"webKinsType": "userk",
|
|
"remap": {
|
|
"code": "M430",
|
|
"modalGroup": 10,
|
|
"ngc": "430remap",
|
|
"path": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc",
|
|
"switchkinsType": 2,
|
|
"analogOutputIndex": 3,
|
|
"syncInputIndex": 0,
|
|
"requiresHalPinVars": true
|
|
},
|
|
"haluiCommand": "M430",
|
|
"halPin": "motion.switchkins-type"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "override",
|
|
"ready": true,
|
|
"evidence": {
|
|
"feedOverride": 100,
|
|
"rapidOverride": 100
|
|
}
|
|
},
|
|
{
|
|
"id": "tool",
|
|
"ready": true,
|
|
"evidence": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
}
|
|
},
|
|
{
|
|
"id": "preview",
|
|
"ready": true,
|
|
"evidence": {
|
|
"samplePeriodMs": 50,
|
|
"sampleCount": 1300
|
|
}
|
|
},
|
|
{
|
|
"id": "execution",
|
|
"ready": true,
|
|
"evidence": {
|
|
"samplePeriodMs": 50,
|
|
"sampleCount": 228
|
|
}
|
|
},
|
|
{
|
|
"id": "axis-buttons",
|
|
"ready": true,
|
|
"evidence": {
|
|
"canRunAuto": false,
|
|
"canExecuteMdi": false,
|
|
"canJog": false,
|
|
"canHome": false,
|
|
"axisButtonParity": {
|
|
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
|
|
"pyvcpSourceFiles": [
|
|
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
|
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
|
|
],
|
|
"requiredActions": [
|
|
"estop",
|
|
"power",
|
|
"open",
|
|
"reload",
|
|
"run-ready",
|
|
"run",
|
|
"pause",
|
|
"resume",
|
|
"step",
|
|
"stop",
|
|
"home-all",
|
|
"jog-minus",
|
|
"jog-plus",
|
|
"touch-off",
|
|
"tool-touch-off",
|
|
"spindle-forward",
|
|
"spindle-stop",
|
|
"spindle-reverse",
|
|
"feed-override-down",
|
|
"feed-override-up",
|
|
"rapid-override-down",
|
|
"rapid-override-up",
|
|
"spindle-override-down",
|
|
"spindle-override-up",
|
|
"ignore-limits",
|
|
"block-delete",
|
|
"optional-stop",
|
|
"toggle-flood",
|
|
"toggle-mist",
|
|
"mdi-form",
|
|
"mdi-history",
|
|
"kins-identity",
|
|
"kins-tcp",
|
|
"kins-userk",
|
|
"clear-preview",
|
|
"view-x",
|
|
"view-y",
|
|
"view-z",
|
|
"view-p"
|
|
],
|
|
"coveredActions": [
|
|
"open",
|
|
"reload",
|
|
"stage",
|
|
"save-session",
|
|
"restore-session",
|
|
"estop",
|
|
"power",
|
|
"home-all",
|
|
"run-ready",
|
|
"run",
|
|
"pause",
|
|
"resume",
|
|
"step",
|
|
"stop",
|
|
"view-z",
|
|
"view-y",
|
|
"view-x",
|
|
"view-p",
|
|
"clear-preview",
|
|
"audit",
|
|
"toggle-auto-manual",
|
|
"pause-resume",
|
|
"tab-manual",
|
|
"tab-mdi",
|
|
"select-joint",
|
|
"jog-increment",
|
|
"jog-minus",
|
|
"jog-plus",
|
|
"touch-off",
|
|
"tool-touch-off",
|
|
"spindle-reverse",
|
|
"spindle-stop",
|
|
"spindle-forward",
|
|
"feed-override-down",
|
|
"feed-override-up",
|
|
"rapid-override-down",
|
|
"rapid-override-up",
|
|
"spindle-override-down",
|
|
"spindle-override-up",
|
|
"ignore-limits",
|
|
"block-delete",
|
|
"optional-stop",
|
|
"toggle-flood",
|
|
"toggle-mist",
|
|
"mdi-input",
|
|
"mdi-form",
|
|
"mdi-history",
|
|
"kins-identity",
|
|
"kins-tcp",
|
|
"kins-userk"
|
|
],
|
|
"missingActions": [],
|
|
"buttonCount": 63,
|
|
"sourceReferencedCount": 63,
|
|
"ready": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"missingCapabilities": [],
|
|
"ready": true
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "ui",
|
|
"requirement": "web AXIS/PyVCP buttons are source-referenced and covered by a button-level parity matrix",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"axisButtonParity": {
|
|
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
|
|
"pyvcpSourceFiles": [
|
|
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
|
|
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
|
|
],
|
|
"requiredActions": [
|
|
"estop",
|
|
"power",
|
|
"open",
|
|
"reload",
|
|
"run-ready",
|
|
"run",
|
|
"pause",
|
|
"resume",
|
|
"step",
|
|
"stop",
|
|
"home-all",
|
|
"jog-minus",
|
|
"jog-plus",
|
|
"touch-off",
|
|
"tool-touch-off",
|
|
"spindle-forward",
|
|
"spindle-stop",
|
|
"spindle-reverse",
|
|
"feed-override-down",
|
|
"feed-override-up",
|
|
"rapid-override-down",
|
|
"rapid-override-up",
|
|
"spindle-override-down",
|
|
"spindle-override-up",
|
|
"ignore-limits",
|
|
"block-delete",
|
|
"optional-stop",
|
|
"toggle-flood",
|
|
"toggle-mist",
|
|
"mdi-form",
|
|
"mdi-history",
|
|
"kins-identity",
|
|
"kins-tcp",
|
|
"kins-userk",
|
|
"clear-preview",
|
|
"view-x",
|
|
"view-y",
|
|
"view-z",
|
|
"view-p"
|
|
],
|
|
"coveredActions": [
|
|
"open",
|
|
"reload",
|
|
"stage",
|
|
"save-session",
|
|
"restore-session",
|
|
"estop",
|
|
"power",
|
|
"home-all",
|
|
"run-ready",
|
|
"run",
|
|
"pause",
|
|
"resume",
|
|
"step",
|
|
"stop",
|
|
"view-z",
|
|
"view-y",
|
|
"view-x",
|
|
"view-p",
|
|
"clear-preview",
|
|
"audit",
|
|
"toggle-auto-manual",
|
|
"pause-resume",
|
|
"tab-manual",
|
|
"tab-mdi",
|
|
"select-joint",
|
|
"jog-increment",
|
|
"jog-minus",
|
|
"jog-plus",
|
|
"touch-off",
|
|
"tool-touch-off",
|
|
"spindle-reverse",
|
|
"spindle-stop",
|
|
"spindle-forward",
|
|
"feed-override-down",
|
|
"feed-override-up",
|
|
"rapid-override-down",
|
|
"rapid-override-up",
|
|
"spindle-override-down",
|
|
"spindle-override-up",
|
|
"ignore-limits",
|
|
"block-delete",
|
|
"optional-stop",
|
|
"toggle-flood",
|
|
"toggle-mist",
|
|
"mdi-input",
|
|
"mdi-form",
|
|
"mdi-history",
|
|
"kins-identity",
|
|
"kins-tcp",
|
|
"kins-userk"
|
|
],
|
|
"missingActions": [],
|
|
"buttonCount": 63,
|
|
"sourceReferencedCount": 63,
|
|
"ready": true
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "ui",
|
|
"requirement": "web UI state flow, buttons, HAL pins, and paths are rechecked against native xyzbc-trt runtime",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeTaskStateFlow": {
|
|
"ready": true,
|
|
"executionCompleted": true,
|
|
"eventCount": 3,
|
|
"states": [
|
|
{
|
|
"name": "before",
|
|
"taskState": 0,
|
|
"taskMode": 0,
|
|
"interpState": 0,
|
|
"execState": 0,
|
|
"homed": [
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false
|
|
],
|
|
"file": ""
|
|
},
|
|
{
|
|
"name": "after",
|
|
"taskState": 4,
|
|
"taskMode": 1,
|
|
"interpState": 1,
|
|
"execState": 2,
|
|
"homed": [
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false
|
|
],
|
|
"file": "/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
|
}
|
|
],
|
|
"kinstype": 0,
|
|
"semanticBoundary": "native_linuxcnc_estop_power_home_auto_mdi_interlock_state_flow"
|
|
},
|
|
"webNativeStateFlowReview": {
|
|
"ready": true,
|
|
"source": "web_task_hal_basic_sim_equivalent_state_flow",
|
|
"stateFields": [
|
|
"taskState",
|
|
"taskMode",
|
|
"interpState",
|
|
"estop",
|
|
"enabled",
|
|
"homed",
|
|
"kinstype"
|
|
],
|
|
"buttonInterlocks": {
|
|
"taskState": "estop-reset",
|
|
"taskMode": "manual",
|
|
"interpState": "idle",
|
|
"canJog": false,
|
|
"canHome": false,
|
|
"canRunAuto": false,
|
|
"canExecuteMdi": false,
|
|
"canPause": false,
|
|
"canResume": false,
|
|
"canSpindle": false,
|
|
"canOverride": false
|
|
},
|
|
"switchkinsButtons": [
|
|
{
|
|
"command": "M429",
|
|
"gatedBy": "machine on and interpreter idle",
|
|
"represented": true
|
|
},
|
|
{
|
|
"command": "M428",
|
|
"gatedBy": "machine on and interpreter idle",
|
|
"represented": true
|
|
},
|
|
{
|
|
"command": "M430",
|
|
"gatedBy": "machine on and interpreter idle",
|
|
"represented": true
|
|
}
|
|
],
|
|
"pathHalPinsReviewed": [
|
|
"motion.switchkins-type",
|
|
"motion.analog-out-03",
|
|
"motion.tooloffset.z",
|
|
"joint.0.pos-fb",
|
|
"joint.1.pos-fb",
|
|
"joint.2.pos-fb",
|
|
"joint.3.pos-fb",
|
|
"joint.4.pos-fb"
|
|
],
|
|
"semanticBoundary": "web_ui_rechecked_against_native_xyzbc_trt_state_flow_buttons_hal_pins_paths"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview",
|
|
"requirement": "native and web preview path sample period is 50ms",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSamplePeriodMs": 50,
|
|
"webSamplePeriodMs": 50
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview",
|
|
"requirement": "native and web preview paths have samples",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSampleCount": 1300,
|
|
"webSampleCount": 1300,
|
|
"unavailable": []
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview",
|
|
"requirement": "native and web preview tool paths are geometrically aligned",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"thresholds": {
|
|
"maxTcpErrorMm": 0.001,
|
|
"maxJointError": 0.001,
|
|
"maxToolAxisAngleDeg": 0.001,
|
|
"sampleCountDelta": 0
|
|
},
|
|
"maxTcpErrorMm": 3.552713678800501e-15,
|
|
"rmsTcpErrorMm": 4.515420281608176e-16,
|
|
"maxJointError": 3.552713678800501e-15,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 0
|
|
}
|
|
},
|
|
{
|
|
"category": "path-execution",
|
|
"requirement": "native and web execution path sample period is 50ms",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSamplePeriodMs": 50,
|
|
"webSamplePeriodMs": 50
|
|
}
|
|
},
|
|
{
|
|
"category": "path-execution",
|
|
"requirement": "native and web execution paths have samples",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSampleCount": 4,
|
|
"webSampleCount": 228,
|
|
"unavailable": []
|
|
}
|
|
},
|
|
{
|
|
"category": "path-execution",
|
|
"requirement": "native and web source-expanded execution paths are geometrically aligned",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"thresholds": {
|
|
"maxTcpErrorMm": 0.001,
|
|
"maxJointError": 0.001,
|
|
"maxToolAxisAngleDeg": 0.001,
|
|
"sampleCountDelta": 0
|
|
},
|
|
"nativeSampleCount": 1300,
|
|
"webSampleCount": 1300,
|
|
"maxTcpErrorMm": 3.552713678800501e-15,
|
|
"rmsTcpErrorMm": 4.515420281608176e-16,
|
|
"maxJointError": 3.552713678800501e-15,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"machineStateMismatchCount": 0,
|
|
"sampleCountDelta": 0
|
|
}
|
|
},
|
|
{
|
|
"category": "line-execution",
|
|
"requirement": "native and web per-line G-code execution trace matches",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeTraceCount": 64,
|
|
"webTraceCount": 64,
|
|
"mismatchCount": 0,
|
|
"mismatches": []
|
|
}
|
|
},
|
|
{
|
|
"category": "axis-values",
|
|
"requirement": "native and web actual axis values by executed line match",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeLineValueCount": 29,
|
|
"webLineValueCount": 29,
|
|
"thresholds": {
|
|
"maxTcpErrorMm": 0.001,
|
|
"maxJointError": 0.001,
|
|
"maxToolAxisAngleDeg": 0.001
|
|
},
|
|
"maxTcpErrorMm": 0,
|
|
"maxJointError": 0,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"mismatchCount": 0,
|
|
"mismatches": []
|
|
}
|
|
},
|
|
{
|
|
"category": "gcode-process",
|
|
"requirement": "native and web complete G-code execution process JSON matches",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeExecutionStepCount": 128,
|
|
"webExecutionStepCount": 128,
|
|
"nativeSourceLineCoverageCount": 65,
|
|
"webSourceLineCoverageCount": 65,
|
|
"mismatchCount": 0,
|
|
"mismatches": []
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview-execution-consistency",
|
|
"requirement": "native preview and execution paths are comparable",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativePreviewSampleCount": 1300,
|
|
"nativeExecutionSampleCount": 4,
|
|
"unavailable": []
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview-execution-consistency",
|
|
"requirement": "web preview and execution paths are comparable",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"webPreviewSampleCount": 1300,
|
|
"webExecutionSampleCount": 228,
|
|
"unavailable": []
|
|
}
|
|
},
|
|
{
|
|
"category": "source-manifest",
|
|
"requirement": "T-051 LinuxCNC source tree authority manifest is complete",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeFileCount": 23,
|
|
"nativeMissingCount": 0,
|
|
"webFileCount": 20,
|
|
"nativeRoles": [
|
|
"axis-source",
|
|
"demo-program",
|
|
"desktop-entry",
|
|
"halcmd",
|
|
"ini",
|
|
"kinematics-source",
|
|
"ngcgui-subroutine",
|
|
"parameter-file",
|
|
"postgui-hal",
|
|
"pyvcp",
|
|
"remap",
|
|
"runtime-artifact",
|
|
"runtime-entry",
|
|
"tool-table",
|
|
"vismach-source"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"category": "runtime-launch",
|
|
"requirement": "T-052 native/Web launch entrypoints and runtime environment are recorded",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeEntrypoints": {
|
|
"ripEnvironment": "/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment",
|
|
"linuxcnc": "/home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc",
|
|
"axis": "/home/mes123456/cnc_wams/linuxcnc/bin/axis",
|
|
"vismach": "/home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui",
|
|
"desktop": "/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop"
|
|
},
|
|
"webEntrypoints": {
|
|
"app": "app/index.html",
|
|
"devServer": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run dev",
|
|
"staticBuild": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "ini-full",
|
|
"requirement": "T-053 complete INI section/key coverage matches native baseline",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeSectionCount": 21,
|
|
"webSectionCount": 21,
|
|
"nativeKeyCount": 124,
|
|
"webKeyCount": 124
|
|
}
|
|
},
|
|
{
|
|
"category": "hal-graph",
|
|
"requirement": "T-054 HAL source graph and runtime pin model are present",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeCommandCount": 172,
|
|
"webCommandCount": 23,
|
|
"nativeRuntimePins": 15,
|
|
"webRuntimePins": 13
|
|
}
|
|
},
|
|
{
|
|
"category": "kinematics",
|
|
"requirement": "T-055 xyzbc-trt kinematics formula evidence and sample validation are present",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "source_formula_references_plus_xyzbc_sample_validation",
|
|
"webBoundary": "web_xyzbc_kinematics_formula_sample_validation"
|
|
}
|
|
},
|
|
{
|
|
"category": "remap",
|
|
"requirement": "T-056 M428/M429/M430 remap semantics are source-checked",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "m428_m429_m430_remap_semantics_source_checked",
|
|
"webBoundary": "web_m428_m429_m430_remap_semantics"
|
|
}
|
|
},
|
|
{
|
|
"category": "pyvcp-postgui",
|
|
"requirement": "T-057 PyVCP POSTGUI HAL full chain is represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "pyvcp_xml_postgui_hal_full_chain",
|
|
"webBoundary": "web_pyvcp_postgui_hal_chain"
|
|
}
|
|
},
|
|
{
|
|
"category": "axis-ui",
|
|
"requirement": "T-058 AXIS UI source behavior references are represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_axis_py_ui_behavior_source_reference",
|
|
"webBoundary": "web_axis_ui_source_referenced_behavior"
|
|
}
|
|
},
|
|
{
|
|
"category": "vismach",
|
|
"requirement": "T-059 Vismach transform tree evidence is represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_vismach_transform_tree_source_reference",
|
|
"webBoundary": "web_vismach_transform_tree_strict"
|
|
}
|
|
},
|
|
{
|
|
"category": "timing",
|
|
"requirement": "T-060 servo/task timing and 50ms sampling budget are represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"native": {
|
|
"ready": true,
|
|
"servoPeriodNs": 1000000,
|
|
"taskCycleTimeSeconds": 0.01,
|
|
"samplePeriodMs": 50,
|
|
"runtimeEventCount": 3,
|
|
"runtimeSampleDeltasMs": [
|
|
50,
|
|
51
|
|
],
|
|
"runtimeDeltaMinMs": 50,
|
|
"runtimeDeltaMaxMs": 51,
|
|
"semanticBoundary": "native_servo_task_timing_and_50ms_sampling_budget"
|
|
},
|
|
"web": {
|
|
"ready": true,
|
|
"samplePeriodMs": 50,
|
|
"taskCycleTimeSeconds": 0.01,
|
|
"servoPeriodNs": 1000000,
|
|
"runtimeSampleCount": 228,
|
|
"semanticBoundary": "web_servo_task_timing_budget"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "runtime-execution",
|
|
"requirement": "T-061 true runtime execution samples are separated from source-derived expansion",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeRuntimeStatus": "completed",
|
|
"nativeRuntimeEventCount": 3,
|
|
"webRuntimeSampleCount": 228,
|
|
"nativeSourceDerivedSampleCount": 1300,
|
|
"webSourceDerivedSampleCount": 1300
|
|
}
|
|
},
|
|
{
|
|
"category": "staging-hash",
|
|
"requirement": "T-062 Web staged file hashes match native source manifest for staged files",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"commonFileCount": 12,
|
|
"mismatchCount": 0,
|
|
"mismatches": []
|
|
}
|
|
},
|
|
{
|
|
"category": "wasm-source",
|
|
"requirement": "T-063 WASM artifacts are bound to source and have hashes",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"artifactCount": 8,
|
|
"sourceManifestSha256": "da59feae2d963a410e7f8fdf968a2238f5ca2b3c7bf7a6c6e408ea28f514fbef"
|
|
}
|
|
},
|
|
{
|
|
"category": "task-hal-full",
|
|
"requirement": "T-064 task/HAL full state fields are represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_task_hal_full_state_snapshot",
|
|
"webBoundary": "web_task_hal_full_state"
|
|
}
|
|
},
|
|
{
|
|
"category": "limits",
|
|
"requirement": "T-065 TRAJ/AXIS/JOINT limits and interlocks are represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "traj_axis_joint_limits_and_interlock_source",
|
|
"webBoundary": "web_axis_joint_limits_and_interlocks"
|
|
}
|
|
},
|
|
{
|
|
"category": "tool-parameters",
|
|
"requirement": "T-066 tool table and parameter file persistence are represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "tool_table_parameter_file_persistence_native_source",
|
|
"webBoundary": "web_tool_table_parameter_persistence"
|
|
}
|
|
},
|
|
{
|
|
"category": "program-corpus",
|
|
"requirement": "T-067 Ngcgui and demo program corpus execution is represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "ngcgui_and_demo_program_corpus_source_runtime_coverage",
|
|
"webBoundary": "web_program_corpus_execution"
|
|
}
|
|
},
|
|
{
|
|
"category": "visual",
|
|
"requirement": "T-068 native/Web visual evidence paths are present",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_web_visual_evidence_paths_for_same_state_review",
|
|
"webBoundary": "web_visual_evidence_paths"
|
|
}
|
|
},
|
|
{
|
|
"category": "errors",
|
|
"requirement": "T-069 error path parity matrix is represented",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_web_error_path_and_message_parity_matrix",
|
|
"webBoundary": "web_error_path_matrix"
|
|
}
|
|
},
|
|
{
|
|
"category": "dual-baseline",
|
|
"requirement": "T-070 compare JSON contains source/runtime dual baseline sections",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"sections": [
|
|
"sourceManifestComparison",
|
|
"runtimeLaunchComparison",
|
|
"halGraphComparison",
|
|
"iniFullComparison",
|
|
"kinematicsFormulaComparison",
|
|
"uiBehaviorComparison",
|
|
"visualComparison"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"category": "classification",
|
|
"requirement": "T-071 evidence classification prevents static derivation being labeled runtime",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"native": {
|
|
"ready": true,
|
|
"sourceDerived": [
|
|
"sourceManifest",
|
|
"iniFull",
|
|
"halGraph.sourceFiles",
|
|
"semanticExecutionPath"
|
|
],
|
|
"runtimeObserved": [
|
|
"linuxcncRuntime.processes",
|
|
"before",
|
|
"after",
|
|
"hal.raw"
|
|
],
|
|
"runtimeSampled": [
|
|
"commandResult.events"
|
|
],
|
|
"rule": "runtimeSampled fields must come from linuxcnc stat/HAL/log channels; source expansion remains explicitly sourceDerived.",
|
|
"semanticBoundary": "explicit_no_static_derivation_as_runtime_observation"
|
|
},
|
|
"web": {
|
|
"ready": true,
|
|
"sourceDerived": [
|
|
"sourceManifest",
|
|
"iniFull",
|
|
"semanticExecutionPath"
|
|
],
|
|
"runtimeObserved": [
|
|
"taskHalEquivalence",
|
|
"state",
|
|
"paths.executionPath"
|
|
],
|
|
"runtimeSampled": [
|
|
"executionPath.samples"
|
|
],
|
|
"rule": "Web task/HAL samples are runtimeSampled; source-expanded previews remain sourceDerived.",
|
|
"semanticBoundary": "web_runtime_classification_no_static_as_runtime"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "rerun",
|
|
"requirement": "T-072 one-command rerun entrypoint is recorded",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeRerunCommand": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web && npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare",
|
|
"webEvidenceFiles": [
|
|
"working/evidence/native-xyzbc-trt-evidence.json",
|
|
"working/evidence/web-xyzbc-trt-evidence.json",
|
|
"working/evidence/compare-xyzbc-trt-evidence.json"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"category": "reverse-index",
|
|
"requirement": "T-073 reverse source index is present",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "working_conclusions_reverse_index_to_linuxcnc_source_lines_and_web_files",
|
|
"webBoundary": "web_reverse_source_index"
|
|
}
|
|
},
|
|
{
|
|
"category": "performance",
|
|
"requirement": "T-074 performance/error budget is represented and current geometric errors fit",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"maxTcpErrorMm": 3.552713678800501e-15,
|
|
"maxJointError": 3.552713678800501e-15,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 0
|
|
}
|
|
},
|
|
{
|
|
"category": "strict-acceptance",
|
|
"requirement": "T-075 strict acceptance freeze metadata is present",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "strict_acceptance_freeze_manifest_evidence_compare",
|
|
"webBoundary": "web_strict_acceptance_freeze"
|
|
}
|
|
}
|
|
],
|
|
"functionalChecks": [
|
|
{
|
|
"category": "functional",
|
|
"requirement": "cppTaskStateMachineParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"emcTaskSetState",
|
|
"determineState",
|
|
"EMC_STAT.task"
|
|
],
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"taskPolicy": {
|
|
"taskState": "estop-reset",
|
|
"taskMode": "manual",
|
|
"interpState": "idle",
|
|
"canJog": false,
|
|
"canHome": false,
|
|
"canRunAuto": false,
|
|
"canExecuteMdi": false,
|
|
"canPause": false,
|
|
"canResume": false,
|
|
"canSpindle": false,
|
|
"canOverride": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "functional",
|
|
"requirement": "cppModeGateParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"emcTaskSetMode",
|
|
"AUTO non-idle/manual gate",
|
|
"AXIS manual_ok/mdi gate"
|
|
],
|
|
"nativeWrongModeRepresented": true,
|
|
"webWrongModeRepresented": true,
|
|
"taskPolicy": {
|
|
"taskState": "estop-reset",
|
|
"taskMode": "manual",
|
|
"interpState": "idle",
|
|
"canJog": false,
|
|
"canHome": false,
|
|
"canRunAuto": false,
|
|
"canExecuteMdi": false,
|
|
"canPause": false,
|
|
"canResume": false,
|
|
"canSpindle": false,
|
|
"canOverride": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "functional",
|
|
"requirement": "cppHomingParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"EMC_JOINT_HOME",
|
|
"EMCMOT_JOINT_HOME",
|
|
"homing.c HOME_START/HOME_FINISHED"
|
|
],
|
|
"nativeTaskStateFlowReady": true,
|
|
"webHoming": {
|
|
"allConfiguredAxesHomed": true,
|
|
"taskPolicyCanHome": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "functional",
|
|
"requirement": "cppRunGateParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"EMC_TASK_PLAN_RUN",
|
|
"all_homed",
|
|
"program open",
|
|
"motion plan loaded"
|
|
],
|
|
"nativeErrorPaths": [
|
|
"missing-hal-pin",
|
|
"bad-switchkins-type",
|
|
"run-while-estop",
|
|
"run-before-homed",
|
|
"wrong-mode",
|
|
"missing-file",
|
|
"remap-stop",
|
|
"toolchange-not-confirmed"
|
|
],
|
|
"webErrorPaths": [
|
|
"missing-hal-pin",
|
|
"bad-switchkins-type",
|
|
"run-while-estop",
|
|
"run-before-homed",
|
|
"wrong-mode",
|
|
"missing-file",
|
|
"remap-stop",
|
|
"toolchange-not-confirmed"
|
|
],
|
|
"webExecution": {
|
|
"semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime",
|
|
"sessionProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc",
|
|
"completed": true,
|
|
"eventCount": 35
|
|
},
|
|
"executionPath": {
|
|
"nativeSampleCount": 4,
|
|
"webSampleCount": 228
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "functional",
|
|
"requirement": "cppPauseResumeParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"EMC_TASK_PLAN_PAUSE",
|
|
"EMC_TASK_PLAN_RESUME",
|
|
"EMCMOT_PAUSE",
|
|
"EMCMOT_RESUME"
|
|
],
|
|
"taskPolicy": {
|
|
"canPause": false,
|
|
"canResume": false,
|
|
"interpState": "idle"
|
|
},
|
|
"semanticExecutionMachineStateMismatchCount": 0
|
|
}
|
|
},
|
|
{
|
|
"category": "functional",
|
|
"requirement": "cppStepParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"EMC_TASK_PLAN_STEP",
|
|
"EMCMOT_STEP",
|
|
"motion id/current line progression"
|
|
],
|
|
"lineExecution": {
|
|
"nativeTraceCount": 64,
|
|
"webTraceCount": 64
|
|
},
|
|
"gcodeExecution": {
|
|
"nativeExecutionStepCount": 128,
|
|
"webExecutionStepCount": 128
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"category": "functional",
|
|
"requirement": "illegalCommandParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"runtime command rejection",
|
|
"UI policy gate consistency",
|
|
"operator error parity"
|
|
],
|
|
"requiredIllegalPaths": [
|
|
"run-while-estop",
|
|
"run-before-homed",
|
|
"wrong-mode",
|
|
"missing-file",
|
|
"bad-switchkins-type",
|
|
"remap-stop"
|
|
],
|
|
"nativeErrorPaths": [
|
|
"missing-hal-pin",
|
|
"bad-switchkins-type",
|
|
"run-while-estop",
|
|
"run-before-homed",
|
|
"wrong-mode",
|
|
"missing-file",
|
|
"remap-stop",
|
|
"toolchange-not-confirmed"
|
|
],
|
|
"webErrorPaths": [
|
|
"missing-hal-pin",
|
|
"bad-switchkins-type",
|
|
"run-while-estop",
|
|
"run-before-homed",
|
|
"wrong-mode",
|
|
"missing-file",
|
|
"remap-stop",
|
|
"toolchange-not-confirmed"
|
|
],
|
|
"limitInterlocksStatus": "pass"
|
|
}
|
|
},
|
|
{
|
|
"category": "functional",
|
|
"requirement": "realProgramExecutionParity",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"linuxCncRules": [
|
|
"real G-code line/currentLine/motion/path/status parity"
|
|
],
|
|
"runtimeExecutionStatus": "pass",
|
|
"semanticExecution": {
|
|
"nativeSampleCount": 1300,
|
|
"webSampleCount": 1300,
|
|
"maxTcpErrorMm": 3.552713678800501e-15,
|
|
"maxJointError": 3.552713678800501e-15,
|
|
"maxToolAxisAngleDeg": 0
|
|
},
|
|
"lineExecutionStatus": "pass",
|
|
"axisValuesStatus": "pass",
|
|
"gcodeExecutionStatus": "pass"
|
|
}
|
|
}
|
|
],
|
|
"pathComparison": {
|
|
"samplePeriodMs": 50,
|
|
"previewVsPreview": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"geometricAligned": true,
|
|
"thresholds": {
|
|
"maxTcpErrorMm": 0.001,
|
|
"maxJointError": 0.001,
|
|
"maxToolAxisAngleDeg": 0.001,
|
|
"sampleCountDelta": 0
|
|
},
|
|
"periodsMatch": true,
|
|
"nativeSamplePeriodMs": 50,
|
|
"webSamplePeriodMs": 50,
|
|
"leftSampleCount": 1300,
|
|
"rightSampleCount": 1300,
|
|
"nativeSampleCount": 1300,
|
|
"webSampleCount": 1300,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 3.552713678800501e-15,
|
|
"rmsTcpErrorMm": 4.515420281608176e-16,
|
|
"maxJointError": 3.552713678800501e-15,
|
|
"rmsJointError": 4.515420281608176e-16,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 0,
|
|
"missingSamples": [],
|
|
"machineStateMismatchCount": 0,
|
|
"machineStateMismatches": []
|
|
},
|
|
"executionVsExecution": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"geometricAligned": true,
|
|
"thresholds": null,
|
|
"periodsMatch": true,
|
|
"nativeSamplePeriodMs": 50,
|
|
"webSamplePeriodMs": 50,
|
|
"leftSampleCount": 4,
|
|
"rightSampleCount": 228,
|
|
"nativeSampleCount": 4,
|
|
"webSampleCount": 228,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 5.61798,
|
|
"rmsTcpErrorMm": 3.846366141275425,
|
|
"maxJointError": 5.61798,
|
|
"rmsJointError": 3.846366141275425,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 224,
|
|
"missingSamples": [],
|
|
"machineStateMismatchCount": 4,
|
|
"machineStateMismatches": [
|
|
{
|
|
"index": 0,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 1,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 2,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 3,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"semanticExecutionVsSemanticExecution": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"geometricAligned": true,
|
|
"thresholds": {
|
|
"maxTcpErrorMm": 0.001,
|
|
"maxJointError": 0.001,
|
|
"maxToolAxisAngleDeg": 0.001,
|
|
"sampleCountDelta": 0
|
|
},
|
|
"periodsMatch": true,
|
|
"nativeSamplePeriodMs": 50,
|
|
"webSamplePeriodMs": 50,
|
|
"leftSampleCount": 1300,
|
|
"rightSampleCount": 1300,
|
|
"nativeSampleCount": 1300,
|
|
"webSampleCount": 1300,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 3.552713678800501e-15,
|
|
"rmsTcpErrorMm": 4.515420281608176e-16,
|
|
"maxJointError": 3.552713678800501e-15,
|
|
"rmsJointError": 4.515420281608176e-16,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 0,
|
|
"missingSamples": [],
|
|
"machineStateMismatchCount": 0,
|
|
"machineStateMismatches": []
|
|
},
|
|
"previewVsExecutionNative": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"geometricAligned": true,
|
|
"thresholds": null,
|
|
"periodsMatch": true,
|
|
"nativePreviewSamplePeriodMs": 50,
|
|
"nativeExecutionSamplePeriodMs": 50,
|
|
"leftSampleCount": 1300,
|
|
"rightSampleCount": 4,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 10.539101686569952,
|
|
"rmsTcpErrorMm": 10.171539097523873,
|
|
"maxJointError": 10.539101686569952,
|
|
"rmsJointError": 10.171539097523873,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 1296,
|
|
"missingSamples": [],
|
|
"machineStateMismatchCount": 4,
|
|
"machineStateMismatches": [
|
|
{
|
|
"index": 0,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 1,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 2,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 3,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1,
|
|
"actualMmPerMin": 1,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"previewVsExecutionWeb": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"geometricAligned": true,
|
|
"thresholds": null,
|
|
"periodsMatch": true,
|
|
"webPreviewSamplePeriodMs": 50,
|
|
"webExecutionSamplePeriodMs": 50,
|
|
"leftSampleCount": 1300,
|
|
"rightSampleCount": 228,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 38.302720817901054,
|
|
"rmsTcpErrorMm": 27.083943307199817,
|
|
"maxJointError": 60.1956712201985,
|
|
"rmsJointError": 30.61792131178714,
|
|
"maxToolAxisAngleDeg": 19.999999999999993,
|
|
"sampleCountDelta": 1072,
|
|
"missingSamples": [],
|
|
"machineStateMismatchCount": 211,
|
|
"machineStateMismatches": [
|
|
{
|
|
"index": 17,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 18,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 19,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 20,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 21,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 22,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 23,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 24,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 25,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"index": 26,
|
|
"native": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 2100,
|
|
"actualMmPerMin": 2100,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": false,
|
|
"cuttingSpeedMmPerMin": 0
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
},
|
|
"web": {
|
|
"spindle": {
|
|
"speedRpm": 0,
|
|
"direction": "stopped",
|
|
"enabled": false
|
|
},
|
|
"feed": {
|
|
"programmedMmPerMin": 1000.002,
|
|
"actualMmPerMin": 1000.002,
|
|
"overridePercent": 100
|
|
},
|
|
"cutting": {
|
|
"active": true,
|
|
"cuttingSpeedMmPerMin": 1000.002
|
|
},
|
|
"tool": {
|
|
"id": 2,
|
|
"pocket": 2,
|
|
"length": 10,
|
|
"diameter": 8
|
|
},
|
|
"toolChange": {
|
|
"activeTool": 2,
|
|
"activePocket": 2,
|
|
"changed": false,
|
|
"command": null
|
|
},
|
|
"coolant": {
|
|
"mist": false,
|
|
"flood": false
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"lineExecutionComparison": {
|
|
"status": "pass",
|
|
"nativeTraceCount": 64,
|
|
"webTraceCount": 64,
|
|
"mismatchCount": 0,
|
|
"mismatches": [],
|
|
"semanticBoundary": "native_web_line_by_line_gcode_execution_trace_comparison"
|
|
},
|
|
"axisValuesByLineComparison": {
|
|
"status": "pass",
|
|
"nativeLineValueCount": 29,
|
|
"webLineValueCount": 29,
|
|
"thresholds": {
|
|
"maxTcpErrorMm": 0.001,
|
|
"maxJointError": 0.001,
|
|
"maxToolAxisAngleDeg": 0.001
|
|
},
|
|
"maxTcpErrorMm": 0,
|
|
"maxJointError": 0,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"mismatchCount": 0,
|
|
"mismatches": [],
|
|
"semanticBoundary": "native_web_executed_line_axis_values_comparison"
|
|
},
|
|
"gcodeExecutionProcessComparison": {
|
|
"status": "pass",
|
|
"nativeExecutionStepCount": 128,
|
|
"webExecutionStepCount": 128,
|
|
"nativeSourceLineCoverageCount": 65,
|
|
"webSourceLineCoverageCount": 65,
|
|
"nativeSummary": {
|
|
"motionStepCount": 29,
|
|
"switchkinsStepCount": 21,
|
|
"parameterAssignmentStepCount": 41,
|
|
"workOffsetStepCount": 9,
|
|
"callStepCount": 5,
|
|
"noMotionStepCount": 99,
|
|
"finalJoint": {
|
|
"x": 0,
|
|
"y": 0,
|
|
"z": 10,
|
|
"b": 0,
|
|
"c": 0
|
|
},
|
|
"finalKinematics": "identity"
|
|
},
|
|
"webSummary": {
|
|
"motionStepCount": 29,
|
|
"switchkinsStepCount": 21,
|
|
"parameterAssignmentStepCount": 41,
|
|
"workOffsetStepCount": 9,
|
|
"callStepCount": 5,
|
|
"noMotionStepCount": 99,
|
|
"finalJoint": {
|
|
"x": 0,
|
|
"y": 0,
|
|
"z": 10,
|
|
"b": 0,
|
|
"c": 0
|
|
},
|
|
"finalKinematics": "identity"
|
|
},
|
|
"mismatchCount": 0,
|
|
"mismatches": [],
|
|
"semanticBoundary": "native_web_complete_gcode_execution_process_json_comparison"
|
|
},
|
|
"sourceManifestComparison": {
|
|
"status": "pass",
|
|
"nativeFileCount": 23,
|
|
"nativeMissingCount": 0,
|
|
"webFileCount": 20,
|
|
"nativeRoles": [
|
|
"axis-source",
|
|
"demo-program",
|
|
"desktop-entry",
|
|
"halcmd",
|
|
"ini",
|
|
"kinematics-source",
|
|
"ngcgui-subroutine",
|
|
"parameter-file",
|
|
"postgui-hal",
|
|
"pyvcp",
|
|
"remap",
|
|
"runtime-artifact",
|
|
"runtime-entry",
|
|
"tool-table",
|
|
"vismach-source"
|
|
]
|
|
},
|
|
"runtimeLaunchComparison": {
|
|
"status": "pass",
|
|
"nativeEntrypoints": {
|
|
"ripEnvironment": "/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment",
|
|
"linuxcnc": "/home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc",
|
|
"axis": "/home/mes123456/cnc_wams/linuxcnc/bin/axis",
|
|
"vismach": "/home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui",
|
|
"desktop": "/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop"
|
|
},
|
|
"webEntrypoints": {
|
|
"app": "app/index.html",
|
|
"devServer": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run dev",
|
|
"staticBuild": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build"
|
|
}
|
|
},
|
|
"halGraphComparison": {
|
|
"status": "pass",
|
|
"nativeCommandCount": 172,
|
|
"webCommandCount": 23,
|
|
"nativeRuntimePins": 15,
|
|
"webRuntimePins": 13
|
|
},
|
|
"iniFullComparison": {
|
|
"status": "pass",
|
|
"nativeSectionCount": 21,
|
|
"webSectionCount": 21,
|
|
"nativeKeyCount": 124,
|
|
"webKeyCount": 124
|
|
},
|
|
"kinematicsFormulaComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "source_formula_references_plus_xyzbc_sample_validation",
|
|
"webBoundary": "web_xyzbc_kinematics_formula_sample_validation"
|
|
},
|
|
"uiBehaviorComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_axis_py_ui_behavior_source_reference",
|
|
"webBoundary": "web_axis_ui_source_referenced_behavior"
|
|
},
|
|
"visualComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_vismach_transform_tree_source_reference",
|
|
"webBoundary": "web_vismach_transform_tree_strict"
|
|
},
|
|
"strictComparison": {
|
|
"sourceManifestComparison": {
|
|
"status": "pass",
|
|
"nativeFileCount": 23,
|
|
"nativeMissingCount": 0,
|
|
"webFileCount": 20,
|
|
"nativeRoles": [
|
|
"axis-source",
|
|
"demo-program",
|
|
"desktop-entry",
|
|
"halcmd",
|
|
"ini",
|
|
"kinematics-source",
|
|
"ngcgui-subroutine",
|
|
"parameter-file",
|
|
"postgui-hal",
|
|
"pyvcp",
|
|
"remap",
|
|
"runtime-artifact",
|
|
"runtime-entry",
|
|
"tool-table",
|
|
"vismach-source"
|
|
]
|
|
},
|
|
"runtimeLaunchComparison": {
|
|
"status": "pass",
|
|
"nativeEntrypoints": {
|
|
"ripEnvironment": "/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment",
|
|
"linuxcnc": "/home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc",
|
|
"axis": "/home/mes123456/cnc_wams/linuxcnc/bin/axis",
|
|
"vismach": "/home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui",
|
|
"desktop": "/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop"
|
|
},
|
|
"webEntrypoints": {
|
|
"app": "app/index.html",
|
|
"devServer": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run dev",
|
|
"staticBuild": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build"
|
|
}
|
|
},
|
|
"iniFullComparison": {
|
|
"status": "pass",
|
|
"nativeSectionCount": 21,
|
|
"webSectionCount": 21,
|
|
"nativeKeyCount": 124,
|
|
"webKeyCount": 124
|
|
},
|
|
"halGraphComparison": {
|
|
"status": "pass",
|
|
"nativeCommandCount": 172,
|
|
"webCommandCount": 23,
|
|
"nativeRuntimePins": 15,
|
|
"webRuntimePins": 13
|
|
},
|
|
"kinematicsFormulaComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "source_formula_references_plus_xyzbc_sample_validation",
|
|
"webBoundary": "web_xyzbc_kinematics_formula_sample_validation"
|
|
},
|
|
"remapSemanticsComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "m428_m429_m430_remap_semantics_source_checked",
|
|
"webBoundary": "web_m428_m429_m430_remap_semantics"
|
|
},
|
|
"pyvcpPostguiComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "pyvcp_xml_postgui_hal_full_chain",
|
|
"webBoundary": "web_pyvcp_postgui_hal_chain"
|
|
},
|
|
"axisUiBehaviorComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_axis_py_ui_behavior_source_reference",
|
|
"webBoundary": "web_axis_ui_source_referenced_behavior"
|
|
},
|
|
"visualComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_vismach_transform_tree_source_reference",
|
|
"webBoundary": "web_vismach_transform_tree_strict"
|
|
},
|
|
"servoTaskTimingComparison": {
|
|
"status": "pass",
|
|
"native": {
|
|
"ready": true,
|
|
"servoPeriodNs": 1000000,
|
|
"taskCycleTimeSeconds": 0.01,
|
|
"samplePeriodMs": 50,
|
|
"runtimeEventCount": 3,
|
|
"runtimeSampleDeltasMs": [
|
|
50,
|
|
51
|
|
],
|
|
"runtimeDeltaMinMs": 50,
|
|
"runtimeDeltaMaxMs": 51,
|
|
"semanticBoundary": "native_servo_task_timing_and_50ms_sampling_budget"
|
|
},
|
|
"web": {
|
|
"ready": true,
|
|
"samplePeriodMs": 50,
|
|
"taskCycleTimeSeconds": 0.01,
|
|
"servoPeriodNs": 1000000,
|
|
"runtimeSampleCount": 228,
|
|
"semanticBoundary": "web_servo_task_timing_budget"
|
|
}
|
|
},
|
|
"runtimeExecutionComparison": {
|
|
"status": "pass",
|
|
"nativeRuntimeStatus": "completed",
|
|
"nativeRuntimeEventCount": 3,
|
|
"webRuntimeSampleCount": 228,
|
|
"nativeSourceDerivedSampleCount": 1300,
|
|
"webSourceDerivedSampleCount": 1300
|
|
},
|
|
"webStagingHashComparison": {
|
|
"status": "pass",
|
|
"commonFileCount": 12,
|
|
"mismatchCount": 0,
|
|
"mismatches": []
|
|
},
|
|
"wasmSourceBindingComparison": {
|
|
"status": "pass",
|
|
"artifactCount": 8,
|
|
"sourceManifestSha256": "da59feae2d963a410e7f8fdf968a2238f5ca2b3c7bf7a6c6e408ea28f514fbef"
|
|
},
|
|
"taskHalFullStateComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_task_hal_full_state_snapshot",
|
|
"webBoundary": "web_task_hal_full_state"
|
|
},
|
|
"limitInterlocksComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "traj_axis_joint_limits_and_interlock_source",
|
|
"webBoundary": "web_axis_joint_limits_and_interlocks"
|
|
},
|
|
"toolParameterComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "tool_table_parameter_file_persistence_native_source",
|
|
"webBoundary": "web_tool_table_parameter_persistence"
|
|
},
|
|
"programCorpusComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "ngcgui_and_demo_program_corpus_source_runtime_coverage",
|
|
"webBoundary": "web_program_corpus_execution"
|
|
},
|
|
"nativeWebVisualComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_web_visual_evidence_paths_for_same_state_review",
|
|
"webBoundary": "web_visual_evidence_paths"
|
|
},
|
|
"errorPathComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "native_web_error_path_and_message_parity_matrix",
|
|
"webBoundary": "web_error_path_matrix"
|
|
},
|
|
"dualBaselineComparison": {
|
|
"status": "pass",
|
|
"sections": [
|
|
"sourceManifestComparison",
|
|
"runtimeLaunchComparison",
|
|
"halGraphComparison",
|
|
"iniFullComparison",
|
|
"kinematicsFormulaComparison",
|
|
"uiBehaviorComparison",
|
|
"visualComparison"
|
|
]
|
|
},
|
|
"evidenceClassificationComparison": {
|
|
"status": "pass",
|
|
"native": {
|
|
"ready": true,
|
|
"sourceDerived": [
|
|
"sourceManifest",
|
|
"iniFull",
|
|
"halGraph.sourceFiles",
|
|
"semanticExecutionPath"
|
|
],
|
|
"runtimeObserved": [
|
|
"linuxcncRuntime.processes",
|
|
"before",
|
|
"after",
|
|
"hal.raw"
|
|
],
|
|
"runtimeSampled": [
|
|
"commandResult.events"
|
|
],
|
|
"rule": "runtimeSampled fields must come from linuxcnc stat/HAL/log channels; source expansion remains explicitly sourceDerived.",
|
|
"semanticBoundary": "explicit_no_static_derivation_as_runtime_observation"
|
|
},
|
|
"web": {
|
|
"ready": true,
|
|
"sourceDerived": [
|
|
"sourceManifest",
|
|
"iniFull",
|
|
"semanticExecutionPath"
|
|
],
|
|
"runtimeObserved": [
|
|
"taskHalEquivalence",
|
|
"state",
|
|
"paths.executionPath"
|
|
],
|
|
"runtimeSampled": [
|
|
"executionPath.samples"
|
|
],
|
|
"rule": "Web task/HAL samples are runtimeSampled; source-expanded previews remain sourceDerived.",
|
|
"semanticBoundary": "web_runtime_classification_no_static_as_runtime"
|
|
}
|
|
},
|
|
"rerunEntryComparison": {
|
|
"status": "pass",
|
|
"nativeRerunCommand": "npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web && npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare",
|
|
"webEvidenceFiles": [
|
|
"working/evidence/native-xyzbc-trt-evidence.json",
|
|
"working/evidence/web-xyzbc-trt-evidence.json",
|
|
"working/evidence/compare-xyzbc-trt-evidence.json"
|
|
]
|
|
},
|
|
"reverseSourceIndexComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "working_conclusions_reverse_index_to_linuxcnc_source_lines_and_web_files",
|
|
"webBoundary": "web_reverse_source_index"
|
|
},
|
|
"performanceBudgetComparison": {
|
|
"status": "pass",
|
|
"maxTcpErrorMm": 3.552713678800501e-15,
|
|
"maxJointError": 3.552713678800501e-15,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 0
|
|
},
|
|
"strictAcceptanceComparison": {
|
|
"status": "pass",
|
|
"nativeReady": true,
|
|
"webReady": true,
|
|
"nativeBoundary": "strict_acceptance_freeze_manifest_evidence_compare",
|
|
"webBoundary": "web_strict_acceptance_freeze"
|
|
}
|
|
},
|
|
"requiredImprovements": [],
|
|
"semanticBoundary": "native_linuxcnc_vs_web_opfs_wasm_xyzbc_trt_evidence_comparison"
|
|
}
|