Advance simulation parity and 3-axis tutorial coverage

This commit is contained in:
2026-08-23 18:00:56 +08:00
parent 4a11d9692b
commit 938654b19d
107 changed files with 13537 additions and 3565 deletions

View File

@@ -0,0 +1,472 @@
{
"boundaries": [
"only this case is in scope",
"exact paths are retained; basename substitution is forbidden",
"host Python process is replaced by a source-mapped Web Vismach adapter",
"real hardware and realtime scheduling are outside this pure simulation case"
],
"capabilities": {
"./3axis-tutorial": "WEB-EQUIV",
"axis": "WEB-EQUIV",
"hal_manualtoolchange": "SIM-ADAPTER",
"trivkins": "SIM-CORE",
"vismach_model": "WEB-EQUIV"
},
"case": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial",
"entrypoint": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"hal_entries": [
{
"command": "loadrt",
"line": 5,
"raw": "loadrt [KINS]KINEMATICS",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "loadrt",
"line": 8,
"raw": "loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "loadrt",
"line": 10,
"raw": "loadrt ddt names=ddt_x,ddt_xv,ddt_y,ddt_yv,ddt_z,ddt_zv",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "loadrt",
"line": 12,
"raw": "loadrt hypot names=vel_xy,vel_xyz",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 15,
"raw": "addf motion-command-handler servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 16,
"raw": "addf motion-controller servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 18,
"raw": "addf ddt_x servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 19,
"raw": "addf ddt_xv servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 20,
"raw": "addf ddt_y servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 21,
"raw": "addf ddt_yv servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 22,
"raw": "addf ddt_z servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 23,
"raw": "addf ddt_zv servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 24,
"raw": "addf vel_xy servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "addf",
"line": 25,
"raw": "addf vel_xyz servo-thread",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 29,
"raw": "net Xpos joint.0.motor-pos-cmd => joint.0.motor-pos-fb ddt_x.in",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 30,
"raw": "net Ypos joint.1.motor-pos-cmd => joint.1.motor-pos-fb ddt_y.in",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 31,
"raw": "net Zpos joint.2.motor-pos-cmd => joint.2.motor-pos-fb ddt_z.in",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 35,
"raw": "net Xvel ddt_x.out => ddt_xv.in vel_xy.in0",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 36,
"raw": "net Xacc <= ddt_xv.out",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 37,
"raw": "net Yvel ddt_y.out => ddt_yv.in vel_xy.in1",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 38,
"raw": "net Yacc <= ddt_yv.out",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 39,
"raw": "net Zvel ddt_z.out => ddt_zv.in vel_xyz.in0",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 40,
"raw": "net Zacc <= ddt_zv.out",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 43,
"raw": "net XYvel vel_xy.out => vel_xyz.in1",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 44,
"raw": "net XYZvel <= vel_xyz.out",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 47,
"raw": "net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "loadusr",
"line": 49,
"raw": "loadusr -W hal_manualtoolchange",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 50,
"raw": "net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 51,
"raw": "net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 52,
"raw": "net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 53,
"raw": "net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "loadusr",
"line": 56,
"raw": "loadusr -W ./3axis-tutorial",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 59,
"raw": "net j0 joint.0.pos-fb => 3axis-tutorial.jointX",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 60,
"raw": "net j1 joint.1.pos-fb => 3axis-tutorial.jointY",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 61,
"raw": "net j2 joint.2.pos-fb => 3axis-tutorial.jointZ",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 64,
"raw": "net tool_len 3axis-tutorial.toollength <= motion.tooloffset.z",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
},
{
"command": "net",
"line": 65,
"raw": "net tool_rad halui.tool.diameter 3axis-tutorial.tooldiameter",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal"
}
],
"ini_entries": [
{
"key": "VERSION",
"line": 14,
"section": "EMC",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "1.0"
},
{
"key": "DISPLAY",
"line": 27,
"section": "DISPLAY",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "axis"
},
{
"key": "INTRO_GRAPHIC",
"line": 48,
"section": "DISPLAY",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "linuxcnc.gif"
},
{
"key": "PARAMETER_FILE",
"line": 69,
"section": "RS274NGC",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "3axis-tutorial_mm.var"
},
{
"key": "HALFILE",
"line": 105,
"section": "HAL",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "3axis-tutorial.hal"
},
{
"key": "COORDINATES",
"line": 126,
"section": "TRAJ",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "X Y Z"
},
{
"key": "TOOL_TABLE",
"line": 154,
"section": "EMCIO",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "tool.tbl"
},
{
"key": "KINEMATICS",
"line": 159,
"section": "KINS",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "trivkins"
},
{
"key": "JOINTS",
"line": 161,
"section": "KINS",
"source": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"value": "3"
}
],
"report_sha256": "fde31d4730cfd8a3345a550d32983c30ea9515493902a68b151352438de10c62",
"runtime_generated": [
{
"kind": "parameter_file",
"path": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial_mm.var",
"policy": "missing file starts with zero defaults and is created/updated at runtime",
"source": "linuxcnc/src/emc/rs274ngc/rs274ngc_pre.cc::restore_parameters/save_parameters"
},
{
"kind": "parameter_backup",
"path": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial_mm.var.bak",
"policy": "native backup created on parameter save",
"source": "linuxcnc/src/emc/rs274ngc/rs274ngc_pre.cc::save_parameters"
},
{
"kind": "position_file",
"path": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/position_mm.txt",
"policy": "runtime position persistence; not a source fixture",
"source": "3axis-tutorial.ini:[TRAJ]POSITION_FILE"
}
],
"schema": "axis3-tutorial-resource-graph.v1",
"shared_assets": [
{
"configured_value": "linuxcnc.gif",
"resolved_path": "linuxcnc/linuxcnc.gif",
"scope": "DISPLAY.INTRO_GRAPHIC only"
}
],
"source_files": [
{
"bytes": 5349,
"path": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.ini",
"role": "case_source",
"sha256": "b801d4fb7a3d66fac7a4202d56c384f75b039f55c70cce64c2975c5454875388",
"status": "present"
},
{
"bytes": 2447,
"path": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial.hal",
"role": "case_source",
"sha256": "6c01e40c2244d3b534c0d3c60f26a9cdc5232defc79611234c78477209cfda1f",
"status": "present"
},
{
"bytes": 10203,
"path": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/3axis-tutorial",
"role": "case_source",
"sha256": "da5f8266cecd79cdeaa01bf07c4fba17d5c748ccc7dedfc7efdf0354deee9cc7",
"status": "present"
},
{
"bytes": 115,
"path": "linuxcnc/configs/sim/axis/vismach/3axis-tutorial/tool.tbl",
"role": "case_source",
"sha256": "6a1736d9a44a30e62d7a8be4df960adc909e7ef026af10ab8e8abf6a613ce4ea",
"status": "present"
},
{
"bytes": 8718,
"path": "linuxcnc/linuxcnc.gif",
"role": "source_dependency",
"sha256": "6c6da4afc3ecdc1b812dd6878318da0120996bd6889b4dd2ddb480b905d9f4b1",
"status": "present"
},
{
"bytes": 33242,
"path": "linuxcnc/lib/python/vismach.py",
"role": "source_dependency",
"sha256": "e3b317eb8f4b17428ae0127850681c947fd3aecac4d23938d21449defe0d6998",
"status": "present"
},
{
"bytes": 2332,
"path": "linuxcnc/lib/python/hal.py",
"role": "source_dependency",
"sha256": "cb5ea7bae18114d17961d929ec0ce65f96a7bd5188e3181da7bc650d82ae4b39",
"status": "present"
},
{
"bytes": 2274,
"path": "linuxcnc/lib/hallib/basic_sim.tcl",
"role": "source_dependency",
"sha256": "d9851b0a8861e6d66de745a8ae230d4b38b65c34f8b05bdb6705792d2d4050be",
"status": "present"
},
{
"bytes": 16117,
"path": "linuxcnc/src/libnml/inifile/inifile.cc",
"role": "source_dependency",
"sha256": "7defe6abe023a1741bb465c05de09d529c0750c34dcd80d57be962c5cbea71c0",
"status": "present"
},
{
"bytes": 94199,
"path": "linuxcnc/src/emc/rs274ngc/rs274ngc_pre.cc",
"role": "source_dependency",
"sha256": "73935d127557c0e8f9da6267f629351ec5198fbce05c665c678819383901d61b",
"status": "present"
}
],
"status": "verified",
"task_id": "TUTORIAL-01",
"vismach_python": {
"component": [
"3axis-tutorial"
],
"imports": [
[
"vismach",
""
],
[
"",
"hal"
],
[
"",
"math"
],
[
"",
"sys"
],
[
"",
"linuxcnc"
]
],
"model_symbols": [
"HalTranslate",
"HalToolCylinder",
"CylinderZ",
"Capture",
"Collection",
"main"
],
"pins": [
{
"direction": "HAL_IN",
"name": "jointX",
"type": "HAL_FLOAT"
},
{
"direction": "HAL_IN",
"name": "jointY",
"type": "HAL_FLOAT"
},
{
"direction": "HAL_IN",
"name": "jointZ",
"type": "HAL_FLOAT"
},
{
"direction": "HAL_IN",
"name": "toollength",
"type": "HAL_FLOAT"
},
{
"direction": "HAL_IN",
"name": "tooldiameter",
"type": "HAL_FLOAT"
}
],
"sha256": "da5f8266cecd79cdeaa01bf07c4fba17d5c748ccc7dedfc7efdf0354deee9cc7"
}
}