chore: finalize remaining project artifacts

This commit is contained in:
wangdequan
2026-07-05 22:13:40 -04:00
parent 4224f835dc
commit 6b937a038d
30 changed files with 14093 additions and 46 deletions

View File

@@ -0,0 +1,338 @@
# 5axis-xyzbc-trt-sim 执行流程图
本文档用 Mermaid 描述 `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` 的主要执行流程。
## 1. 总体启动流程
```mermaid
flowchart TD
A["xyzbc-trt.desktop"] --> B["scripts/rip-environment"]
B --> C["scripts/linuxcnc xyzbc-trt.ini"]
C --> D["读取 INI 配置"]
D --> D1["[TASK] TASK = milltask"]
D --> D2["[HAL] HALUI = halui"]
D --> D3["[HAL] HALFILE = LIB:basic_sim.tcl"]
D --> D4["[DISPLAY] DISPLAY = axis"]
D --> D5["[KINS] KINEMATICS = xyzbc-trt-kins sparm=identityfirst"]
C --> E["启动 linuxcncsvr"]
E --> F["启动 realtime / HAL"]
F --> G["loadrt tpmod / homemod"]
G --> H["启动 milltask"]
H --> I["启动 halui"]
I --> J["执行 basic_sim.tcl"]
J --> K["执行 INI 中的 HALCMD"]
K --> L["halcmd start 启动实时线程"]
L --> M["启动 AXIS GUI"]
M --> N["加载 PyVCP: xyzbc-trt.xml"]
N --> O["执行 POSTGUI_HALFILE: switchkins_postgui.hal"]
```
## 2. basic_sim.tcl 与仿真 HAL 建立流程
```mermaid
flowchart TD
A["[HAL] HALFILE = LIB:basic_sim.tcl"] --> B["basic_sim.tcl"]
B --> C["读取 TRAJ.COORDINATES = XYZBC"]
B --> D["读取 KINS.JOINTS = 5"]
B --> E["读取 EMCMOT.SERVO_PERIOD = 1000000"]
C --> F["core_sim axes=xyzbc joints=5"]
D --> F
E --> F
F --> G["setup_kins"]
G --> H["loadrt xyzbc-trt-kins sparm=identityfirst"]
F --> I["loadrt motmod num_joints=5 servo_period_nsec=1000000"]
I --> J["addf motion-command-handler servo-thread"]
I --> K["addf motion-controller servo-thread"]
F --> L["loadrt pid names=J0_pid..J4_pid"]
F --> M["loadrt mux2 names=J0_mux..J4_mux"]
F --> N["loadrt sim_home_switch"]
F --> O["loadusr hal_manualtoolchange"]
F --> P["loadrt sim_spindle / limit2 / lowpass / near / scale"]
L --> Q["joint.N.motor-pos-cmd -> JN_pid.command"]
Q --> R["JN_pid.output -> JN_mux.in1"]
R --> S["JN_mux.out -> joint.N.motor-pos-fb"]
S --> T["形成理想伺服仿真闭环"]
```
## 3. switchkins 初始化流程
```mermaid
flowchart TD
A["loadrt xyzbc-trt-kins sparm=identityfirst"] --> B["rtapi_app_main in switchkins.c"]
B --> C["调用 xyzbc-trt-kins.c:switchkinsSetup"]
C --> D{"sparm 包含 identityfirst?"}
D -- 是 --> E["type 0 = identity"]
D -- 是 --> F["type 1 = xyzbc TRT"]
D -- 是 --> G["type 2 = userk"]
D -- 否 --> H["type 0 = xyzbc TRT"]
D -- 否 --> I["type 1 = identity"]
D -- 否 --> J["type 2 = userk"]
E --> K["创建 HAL pin: kinstype.is-0/1/2"]
F --> K
G --> K
H --> K
I --> K
J --> K
K --> L["创建 TRT 几何 HAL pin"]
L --> L1["x/y/z-rot-point"]
L --> L2["x/y/z-offset"]
L --> L3["tool-offset"]
L --> L4["conventional-directions"]
L --> M["switchkins_type = 0"]
M --> N["kinematicsSwitch(0)"]
N --> O["启动默认状态: identity kinematics"]
```
## 4. PyVCP 按钮到运动学切换流程
```mermaid
flowchart TD
A["AXIS 加载 xyzbc-trt.xml"] --> B["创建 PyVCP SWITCHKINS 面板"]
B --> C1["按钮: IDENTITY"]
B --> C2["按钮: TCP:XYZBC"]
B --> C3["按钮: userk"]
A --> D["执行 switchkins_postgui.hal"]
C1 --> E1["pyvcp.type0-button"]
C2 --> E2["pyvcp.type1-button"]
C3 --> E3["pyvcp.type2-button"]
E1 --> F1["halui.mdi-command-00"]
E2 --> F2["halui.mdi-command-01"]
E3 --> F3["halui.mdi-command-02"]
F1 --> G1["M429"]
F2 --> G2["M428"]
F3 --> G3["M430"]
G1 --> H1["429remap.ngc: kinstype = 0"]
G2 --> H2["428remap.ngc: kinstype = 1"]
G3 --> H3["430remap.ngc: kinstype = 2"]
H1 --> I1["M68 E3 Q0"]
H2 --> I2["M68 E3 Q1"]
H3 --> I3["M68 E3 Q2"]
I1 --> J["motion.analog-out-03"]
I2 --> J
I3 --> J
J --> K["HAL net :kinstype-select"]
K --> L["motion.switchkins-type"]
L --> M["servo thread: handle_kinematicsSwitch()"]
M --> N["kinematicsSwitch(type)"]
N --> O1["type 0: identity"]
N --> O2["type 1: xyzbc TRT"]
N --> O3["type 2: userk"]
N --> P["kinstype.is-N 更新"]
P --> Q["PyVCP multilabel 显示当前类型"]
```
## 5. M68 到 motion.switchkins-type 的内部路径
```mermaid
flowchart TD
A["G-code: M68 E3 Q<type>"] --> B["RS274NGC interpreter"]
B --> C["interp_convert.cc"]
C --> D["SET_AUX_OUTPUT_VALUE(3, type)"]
D --> E["emccanon.cc 创建 EMC_MOTION_SET_AOUT"]
E --> F["taskintf.cc: emcMotionSetAout"]
F --> G["motion command: EMCMOT_SET_AOUT"]
G --> H["command.c: emcmotAioWrite(3, type)"]
H --> I["motion.analog-out-03 = type"]
I --> J["HAL net :kinstype-select"]
J --> K["motion.switchkins-type = type"]
```
## 6. 运动执行数据流
```mermaid
flowchart TD
A["G-code XYZBC"] --> B["RS274NGC interpreter"]
B --> C["milltask"]
C --> D["motion trajectory planner"]
D --> E["emcmotStatus->carte_pos_cmd"]
E --> F{"当前 switchkins type"}
F -- "type 0" --> G["identityKinematicsInverse"]
F -- "type 1" --> H["xyzbcKinematicsInverse"]
F -- "type 2" --> I["userkKinematicsInverse"]
H --> H1["读取 x-offset = -20"]
H --> H2["读取 z-offset = -15"]
H --> H3["读取 tool-offset = motion.tooloffset.z"]
H --> H4["读取 B/C 角度和旋转中心"]
G --> J["joint target positions"]
H1 --> J
H2 --> J
H3 --> J
H4 --> J
I --> J
J --> K["joint.N.coarse_pos"]
K --> L["joint.N.motor-pos-cmd"]
L --> M["仿真 PID / mux2"]
M --> N["joint.N.motor-pos-fb"]
N --> O["motion 状态反馈"]
N --> P["Vismach xyzbc-trt-gui"]
```
## 7. Vismach 显示数据流
```mermaid
flowchart TD
A["joint.0.pos-fb"] --> B["xyzbc-trt-gui.table-x"]
C["joint.1.pos-fb"] --> D["xyzbc-trt-gui.saddle-y"]
E["joint.2.pos-fb"] --> F["xyzbc-trt-gui.spindle-z"]
G["joint.3.pos-fb"] --> H["xyzbc-trt-gui.tilt-b"]
I["joint.4.pos-fb"] --> J["xyzbc-trt-gui.rotate-c"]
K["xyzbc-trt-kins.x-offset"] --> L["xyzbc-trt-gui.x-offset"]
M["xyzbc-trt-kins.z-offset"] --> N["xyzbc-trt-gui.z-offset"]
O["motion.tooloffset.z"] --> P["xyzbc-trt-kins.tool-offset"]
P --> Q["xyzbc-trt-gui.tool-offset"]
B --> R["Vismach 机床模型"]
D --> R
F --> R
H --> R
J --> R
L --> R
N --> R
Q --> R
```
## 8. 演示 G-code 执行流程
```mermaid
flowchart TD
A["AXIS OPEN_FILE: demos/xyzbc_switchkins.ngc"] --> B["调用 xyzbc_switchkins_sub"]
B --> C["参数: zmax=10 zmin=5 r=10 frate=1000 n=3 b=20 c=45 dist=20"]
C --> D["象限 I"]
C --> E["象限 II"]
C --> F["象限 III"]
C --> G["象限 IV"]
D --> H["M429: identity"]
E --> H
F --> H
G --> H
H --> I["G53 G0 X0 Y0 Zzmax B0 C0"]
I --> J["G10 L20 P0 重设 G54"]
J --> K["G0 移动到当前象限中心"]
K --> L["调用 helix_bc"]
L --> M["M429: identity"]
M --> N["调整 X 到圆弧起点"]
N --> O["G10 L20 P0 重设坐标"]
O --> P["M428: xyzbc TRT"]
P --> Q["G0 B#<b> C#<c>"]
Q --> R["G2 I#<r> Z#<zmin> P#<n> 螺旋插补"]
R --> S["M429: identity"]
S --> T["回安全位置"]
T --> U["M428: xyzbc TRT"]
U --> V{"四个象限完成?"}
V -- 否 --> H
V -- 是 --> W["最终 M429 回 identity 并复位"]
```
## 9. 核心关系简图
```mermaid
flowchart LR
A["INI: xyzbc-trt.ini"] --> B["HAL: basic_sim.tcl"]
A --> C["KINS: xyzbc-trt-kins"]
A --> D["GUI: axis"]
A --> E["Vismach: xyzbc-trt-gui"]
A --> F["PyVCP: xyzbc-trt.xml"]
A --> G["Remap: M428/M429/M430"]
B --> H["motmod + servo-thread + sim feedback"]
C --> I["switchkins type 0/1/2"]
D --> F
F --> G
G --> J["motion.switchkins-type"]
J --> I
I --> K["inverse / forward kinematics"]
K --> H
H --> E
```
## 10. LinuxCNC 数据系统核心原理图
高清 PNG
```text
项目分析/LinuxCNC数据系统核心原理高清流程图.png
```
可编辑 SVG
```text
项目分析/LinuxCNC数据系统核心原理高清流程图.svg
```
对应原理文档:
```text
项目分析/LinuxCNC数据系统核心原理.md
```
```mermaid
flowchart TD
A["INI 配置数据"] --> B["scripts/linuxcnc 启动装配"]
B --> C["linuxcncsvr / NML channels"]
B --> D["HAL: loadrt/loadusr/HALFILE/HALCMD"]
B --> E["milltask"]
B --> F["GUI: AXIS / halui"]
F --> G["NML emcCommand"]
G --> E
E --> H["Interpreter / Canonical Commands"]
H --> I["taskintf.cc"]
I --> J["Motion Shared Memory: emcmot_command_t"]
J --> K["Realtime motion servo cycle"]
K --> L["HAL pins/signals"]
L --> M["驱动 / 仿真组件 / Vismach / halui"]
M --> L
K --> N["emcmot_status_t"]
N --> E
E --> O["EMC_STAT: task + motion + io"]
O --> P["NML emcStatus"]
P --> F
Q["emcError"] --> F
E --> Q
K --> Q
```
核心区分:
```text
NML: 系统命令、系统状态、错误信息。
HAL: 实时机器信号、pin/signal/parameter、servo-thread 函数顺序。
Motion shared memory: task 和 realtime motion 的命令/状态边界。
INI: 启动装配数据,不是实时数据通道。
```