Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
2026-07-02 10:10:54 -04:00

924 lines
26 KiB
JSON

{
"apiName": "xyzbc-trt-native-web-evidence-comparison",
"status": "fail",
"comparedAt": "2026-07-02T13:57:49.317Z",
"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": 25,
"passCount": 20,
"failCount": 5,
"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/linuxcnc-master/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": 3.552713678800501e-15,
"2": 10,
"3": 3.552713678800501e-15,
"4": 7.105427357601002e-15
}
}
},
{
"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"
},
{
"filename": "centering.ngc",
"staged": true,
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc"
},
{
"filename": "helix_bc.ngc",
"staged": true,
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc"
}
]
}
},
{
"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": "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": "path-preview",
"requirement": "native and web preview path sample period is 20ms",
"status": "fail",
"evidence": {
"nativeSamplePeriodMs": null,
"webSamplePeriodMs": 20
}
},
{
"category": "path-preview",
"requirement": "native and web preview paths have samples",
"status": "fail",
"evidence": {
"nativeSampleCount": 0,
"webSampleCount": 3074,
"unavailable": [
"native: missing samples",
"sample period mismatch null/20"
]
}
},
{
"category": "path-execution",
"requirement": "native and web execution path sample period is 20ms",
"status": "fail",
"evidence": {
"nativeSamplePeriodMs": null,
"webSamplePeriodMs": 20
}
},
{
"category": "path-execution",
"requirement": "native and web execution paths have samples",
"status": "fail",
"evidence": {
"nativeSampleCount": 0,
"webSampleCount": 569,
"unavailable": [
"native: missing samples",
"sample period mismatch null/20"
]
}
},
{
"category": "path-preview-execution-consistency",
"requirement": "native preview and execution paths are comparable",
"status": "fail",
"evidence": {
"nativePreviewSampleCount": 0,
"nativeExecutionSampleCount": 0,
"unavailable": [
"nativePreview: missing samples",
"nativeExecution: missing samples",
"sample period mismatch null/null"
]
}
},
{
"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": "fail",
"comparable": false,
"periodsMatch": false,
"nativeSamplePeriodMs": null,
"webSamplePeriodMs": 20,
"leftSampleCount": 0,
"rightSampleCount": 3074,
"nativeSampleCount": 0,
"webSampleCount": 3074,
"unavailable": [
"native: missing samples",
"sample period mismatch null/20"
],
"maxTcpErrorMm": null,
"rmsTcpErrorMm": null,
"maxJointError": null,
"rmsJointError": null,
"maxToolAxisAngleDeg": null,
"sampleCountDelta": 3074,
"missingSamples": []
},
"executionVsExecution": {
"status": "fail",
"comparable": false,
"periodsMatch": false,
"nativeSamplePeriodMs": null,
"webSamplePeriodMs": 20,
"leftSampleCount": 0,
"rightSampleCount": 569,
"nativeSampleCount": 0,
"webSampleCount": 569,
"unavailable": [
"native: missing samples",
"sample period mismatch null/20"
],
"maxTcpErrorMm": null,
"rmsTcpErrorMm": null,
"maxJointError": null,
"rmsJointError": null,
"maxToolAxisAngleDeg": null,
"sampleCountDelta": 569,
"missingSamples": []
},
"previewVsExecutionNative": {
"status": "fail",
"comparable": false,
"periodsMatch": false,
"nativePreviewSamplePeriodMs": null,
"nativeExecutionSamplePeriodMs": null,
"leftSampleCount": 0,
"rightSampleCount": 0,
"unavailable": [
"nativePreview: missing samples",
"nativeExecution: missing samples",
"sample period mismatch null/null"
],
"maxTcpErrorMm": null,
"rmsTcpErrorMm": null,
"maxJointError": null,
"rmsJointError": null,
"maxToolAxisAngleDeg": null,
"sampleCountDelta": 0,
"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": [
{
"category": "path-preview",
"requirement": "native and web preview path sample period is 20ms",
"evidence": {
"nativeSamplePeriodMs": null,
"webSamplePeriodMs": 20
}
},
{
"category": "path-preview",
"requirement": "native and web preview paths have samples",
"evidence": {
"nativeSampleCount": 0,
"webSampleCount": 3074,
"unavailable": [
"native: missing samples",
"sample period mismatch null/20"
]
}
},
{
"category": "path-execution",
"requirement": "native and web execution path sample period is 20ms",
"evidence": {
"nativeSamplePeriodMs": null,
"webSamplePeriodMs": 20
}
},
{
"category": "path-execution",
"requirement": "native and web execution paths have samples",
"evidence": {
"nativeSampleCount": 0,
"webSampleCount": 569,
"unavailable": [
"native: missing samples",
"sample period mismatch null/20"
]
}
},
{
"category": "path-preview-execution-consistency",
"requirement": "native preview and execution paths are comparable",
"evidence": {
"nativePreviewSampleCount": 0,
"nativeExecutionSampleCount": 0,
"unavailable": [
"nativePreview: missing samples",
"nativeExecution: missing samples",
"sample period mismatch null/null"
]
}
}
],
"semanticBoundary": "native_linuxcnc_vs_web_opfs_wasm_xyzbc_trt_evidence_comparison"
}