1199 lines
35 KiB
JSON
1199 lines
35 KiB
JSON
{
|
|
"apiName": "xyzbc-trt-native-web-evidence-comparison",
|
|
"status": "pass",
|
|
"comparedAt": "2026-07-02T14:28:50.647Z",
|
|
"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": 29,
|
|
"passCount": 29,
|
|
"failCount": 0,
|
|
"blockers": [],
|
|
"nativeStatus": "ok",
|
|
"webStatus": "ready-for-wasm-runtime"
|
|
},
|
|
"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": 569,
|
|
"taskHalEventCount": 28
|
|
},
|
|
"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": 28
|
|
},
|
|
"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": 569,
|
|
"taskHalEventCount": 28
|
|
},
|
|
"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"
|
|
}
|
|
],
|
|
"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": 20,
|
|
"sampleCount": 3074
|
|
}
|
|
},
|
|
{
|
|
"id": "execution",
|
|
"ready": true,
|
|
"evidence": {
|
|
"samplePeriodMs": 20,
|
|
"sampleCount": 569
|
|
}
|
|
},
|
|
{
|
|
"id": "axis-buttons",
|
|
"ready": true,
|
|
"evidence": {
|
|
"canRunAuto": false,
|
|
"canExecuteMdi": false,
|
|
"canJog": false,
|
|
"canHome": false
|
|
}
|
|
}
|
|
],
|
|
"missingCapabilities": [],
|
|
"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": 1,
|
|
"taskMode": 1,
|
|
"interpState": 1,
|
|
"execState": 2,
|
|
"homed": [
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
false
|
|
],
|
|
"file": "./demos/xyzbc_switchkins.ngc"
|
|
},
|
|
{
|
|
"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 20ms",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSamplePeriodMs": 20,
|
|
"webSamplePeriodMs": 20
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview",
|
|
"requirement": "native and web preview paths have samples",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSampleCount": 3226,
|
|
"webSampleCount": 3074,
|
|
"unavailable": []
|
|
}
|
|
},
|
|
{
|
|
"category": "path-execution",
|
|
"requirement": "native and web execution path sample period is 20ms",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSamplePeriodMs": 20,
|
|
"webSamplePeriodMs": 20
|
|
}
|
|
},
|
|
{
|
|
"category": "path-execution",
|
|
"requirement": "native and web execution paths have samples",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativeSampleCount": 7,
|
|
"webSampleCount": 569,
|
|
"unavailable": []
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview-execution-consistency",
|
|
"requirement": "native preview and execution paths are comparable",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"nativePreviewSampleCount": 3226,
|
|
"nativeExecutionSampleCount": 7,
|
|
"unavailable": []
|
|
}
|
|
},
|
|
{
|
|
"category": "path-preview-execution-consistency",
|
|
"requirement": "web preview and execution paths are comparable",
|
|
"status": "pass",
|
|
"evidence": {
|
|
"webPreviewSampleCount": 3074,
|
|
"webExecutionSampleCount": 569,
|
|
"unavailable": []
|
|
}
|
|
}
|
|
],
|
|
"pathComparison": {
|
|
"samplePeriodMs": 20,
|
|
"previewVsPreview": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"periodsMatch": true,
|
|
"nativeSamplePeriodMs": 20,
|
|
"webSamplePeriodMs": 20,
|
|
"leftSampleCount": 3226,
|
|
"rightSampleCount": 3074,
|
|
"nativeSampleCount": 3226,
|
|
"webSampleCount": 3074,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 67.98043602330502,
|
|
"rmsTcpErrorMm": 32.95865162170114,
|
|
"maxJointError": 82.06891657213505,
|
|
"rmsJointError": 37.490160637344005,
|
|
"maxToolAxisAngleDeg": 19.999999999999993,
|
|
"sampleCountDelta": 152,
|
|
"missingSamples": []
|
|
},
|
|
"executionVsExecution": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"periodsMatch": true,
|
|
"nativeSamplePeriodMs": 20,
|
|
"webSamplePeriodMs": 20,
|
|
"leftSampleCount": 7,
|
|
"rightSampleCount": 569,
|
|
"nativeSampleCount": 7,
|
|
"webSampleCount": 569,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 3.93258,
|
|
"rmsTcpErrorMm": 2.51243569360787,
|
|
"maxJointError": 3.93258,
|
|
"rmsJointError": 2.51243569360787,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 562,
|
|
"missingSamples": []
|
|
},
|
|
"previewVsExecutionNative": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"periodsMatch": true,
|
|
"nativePreviewSamplePeriodMs": 20,
|
|
"nativeExecutionSamplePeriodMs": 20,
|
|
"leftSampleCount": 3226,
|
|
"rightSampleCount": 7,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 10.57816997180558,
|
|
"rmsTcpErrorMm": 10.185247706471639,
|
|
"maxJointError": 10.57816997180558,
|
|
"rmsJointError": 10.185247706471639,
|
|
"maxToolAxisAngleDeg": 0,
|
|
"sampleCountDelta": 3219,
|
|
"missingSamples": []
|
|
},
|
|
"previewVsExecutionWeb": {
|
|
"status": "pass",
|
|
"comparable": true,
|
|
"periodsMatch": true,
|
|
"webPreviewSamplePeriodMs": 20,
|
|
"webExecutionSamplePeriodMs": 20,
|
|
"leftSampleCount": 3074,
|
|
"rightSampleCount": 569,
|
|
"unavailable": [],
|
|
"maxTcpErrorMm": 31.575968660550437,
|
|
"rmsTcpErrorMm": 14.55884964854259,
|
|
"maxJointError": 58.498220458848685,
|
|
"rmsJointError": 20.762740311288844,
|
|
"maxToolAxisAngleDeg": 19.999999999999993,
|
|
"sampleCountDelta": 2505,
|
|
"missingSamples": []
|
|
}
|
|
},
|
|
"requiredImprovements": [],
|
|
"semanticBoundary": "native_linuxcnc_vs_web_opfs_wasm_xyzbc_trt_evidence_comparison"
|
|
}
|