Files
cnc_wams/项目分析/5axis-xyzbc-trt-sim高清流程图.svg
2026-07-05 22:13:40 -04:00

285 lines
25 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" width="4800" height="7200" viewBox="0 0 4800 7200">
<defs>
<marker id="arrow" markerWidth="18" markerHeight="18" refX="14" refY="6" orient="auto" markerUnits="strokeWidth">
<path d="M2,2 L14,6 L2,10 Z" fill="#1f3b57"/>
</marker>
<style>
svg { background: #ffffff; }
text { font-family: Noto Sans CJK SC, DejaVu Sans, sans-serif; fill: #17212b; }
.title { font-size: 76px; font-weight: 800; }
.subtitle { font-size: 34px; fill: #52606d; }
.section-title { font-size: 44px; font-weight: 800; fill: #24415f; }
.box-title { font-size: 34px; font-weight: 800; }
.box-text { font-size: 30px; font-weight: 650; }
.box-small { font-size: 27px; fill: #35495e; }
.note-title { font-size: 34px; font-weight: 800; fill: #7a4b00; }
.note-text { font-size: 27px; fill: #5c440b; }
.arrow-label { font-size: 26px; font-weight: 700; fill: #24415f; }
.legend { font-size: 28px; fill: #34495e; }
</style>
</defs>
<rect x="0" y="0" width="4800" height="7200" fill="#ffffff"/>
<text x="2400" y="120" class="title" text-anchor="middle">5axis-xyzbc-trt-sim 执行流程图</text>
<text x="2400" y="178" class="subtitle" text-anchor="middle">LinuxCNC: xyzbc-trt.ini / switchkins / Vismach / PyVCP / M428-M429-M430</text>
<rect x="120" y="260" width="4560" height="780" rx="36" fill="#eef6ff" stroke="#b8c7dc" stroke-width="4"/>
<text x="154" y="330" class="section-title">1. 总体启动链路</text>
<rect id="s1" x="210" y="390" width="500" height="150" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="460.0" y="434" class="box-title" text-anchor="middle">xyzbc-trt.desktop</text>
<text x="238" y="484" class="box-small">快捷方式入口</text>
<rect id="s2" x="820" y="390" width="520" height="150" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="1080.0" y="434" class="box-title" text-anchor="middle">rip-environment</text>
<text x="848" y="484" class="box-small">设置 RIP 环境</text>
<rect id="s3" x="1450" y="390" width="560" height="150" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="1730.0" y="434" class="box-title" text-anchor="middle">scripts/linuxcnc</text>
<text x="1478" y="484" class="box-small">读取 xyzbc-trt.ini</text>
<rect id="s4" x="2120" y="390" width="520" height="150" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="2380.0" y="434" class="box-title" text-anchor="middle">linuxcncsvr</text>
<text x="2148" y="484" class="box-small">NML 通道</text>
<rect id="s5" x="2750" y="390" width="560" height="150" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="3030.0" y="434" class="box-title" text-anchor="middle">realtime / HAL</text>
<text x="2778" y="484" class="box-small">加载 RTAPI/HAL</text>
<rect id="s6" x="3420" y="390" width="500" height="150" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="3670.0" y="434" class="box-title" text-anchor="middle">milltask / halui</text>
<text x="3448" y="484" class="box-small">任务与 MDI</text>
<rect id="s7" x="4030" y="390" width="520" height="150" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="4290.0" y="434" class="box-title" text-anchor="middle">AXIS GUI</text>
<text x="4058" y="484" class="box-small">前台显示</text>
<path d="M 710 465.0 L 820 465.0" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 1340 465.0 L 1450 465.0" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2010 465.0 L 2120 465.0" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2640 465.0 L 2750 465.0" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3310 465.0 L 3420 465.0" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3920 465.0 L 4030 465.0" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="ini" x="450" y="690" width="1050" height="230" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="975.0" y="734" class="box-title" text-anchor="middle">INI 核心项</text>
<text x="478" y="784" class="box-small">[KINS] xyzbc-trt-kins sparm=identityfirst; [TRAJ]</text>
<text x="478" y="818" class="box-small">XYZBC; [DISPLAY] axis + PyVCP; [HAL] basic_sim.tcl</text>
<rect id="halcmd" x="1760" y="690" width="1050" height="230" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="2285.0" y="734" class="box-title" text-anchor="middle">HAL 加载</text>
<text x="1788" y="784" class="box-small">basic_sim.tcl 建立仿真闭环; HALCMD 启动 Vismach</text>
<text x="1788" y="818" class="box-small">并连接 pins</text>
<rect id="postgui" x="3070" y="690" width="1050" height="230" rx="18" fill="#ffffff" stroke="#416788" stroke-width="4"/>
<text x="3595.0" y="734" class="box-title" text-anchor="middle">GUI 后置 HAL</text>
<text x="3098" y="784" class="box-small">AXIS 创建 PyVCP 后执行 switchkins_postgui.hal</text>
<path d="M 1500 805 L 1760 805" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2810 805 L 3070 805" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="120" y="1140" width="2200" height="1490" rx="36" fill="#f2fbf2" stroke="#b8c7dc" stroke-width="4"/>
<text x="154" y="1210" class="section-title">2. basic_sim.tcl / 仿真 HAL</text>
<rect id="b1" x="230" y="1280" width="520" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="490.0" y="1324" class="box-title" text-anchor="middle">basic_sim.tcl</text>
<text x="258" y="1374" class="box-small">读取</text>
<text x="258" y="1408" class="box-small">coordinates/joints/servo</text>
<text x="258" y="1442" class="box-small">period</text>
<rect id="b2" x="910" y="1280" width="560" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="1190.0" y="1324" class="box-title" text-anchor="middle">setup_kins</text>
<text x="938" y="1374" class="box-small">loadrt xyzbc-trt-kins</text>
<text x="938" y="1408" class="box-small">sparm=identityfirst</text>
<rect id="b3" x="1590" y="1280" width="560" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="1870.0" y="1324" class="box-title" text-anchor="middle">motmod</text>
<text x="1618" y="1374" class="box-small">num_joints=5 servo=1ms</text>
<path d="M 750 1355 L 910 1355" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 1470 1355 L 1590 1355" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="bc0" x="250" y="1600" width="720" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="610.0" y="1644" class="box-title" text-anchor="middle">pid J0..J4</text>
<text x="278" y="1694" class="box-small">basic_sim.tcl 创建/连接</text>
<rect id="bc1" x="1120" y="1600" width="720" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="1480.0" y="1644" class="box-title" text-anchor="middle">mux2 J0..J4</text>
<text x="1148" y="1694" class="box-small">basic_sim.tcl 创建/连接</text>
<rect id="bc2" x="250" y="1830" width="720" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="610.0" y="1874" class="box-title" text-anchor="middle">sim_home_switch</text>
<text x="278" y="1924" class="box-small">basic_sim.tcl 创建/连接</text>
<rect id="bc3" x="1120" y="1830" width="720" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="1480.0" y="1874" class="box-title" text-anchor="middle">sim_spindle</text>
<text x="1148" y="1924" class="box-small">basic_sim.tcl 创建/连接</text>
<rect id="bc4" x="250" y="2060" width="720" height="150" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="610.0" y="2104" class="box-title" text-anchor="middle">hal_manualtoolchange</text>
<text x="278" y="2154" class="box-small">basic_sim.tcl 创建/连接</text>
<path d="M 1870 1430 L 1870 1530 L 610 1530 L 610 1600" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 1870 1430 L 1870 1530 L 1480 1530 L 1480 1600" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="loop" x="250" y="2300" width="1720" height="190" rx="18" fill="#ffffff" stroke="#3f7d4a" stroke-width="4"/>
<text x="1110.0" y="2344" class="box-title" text-anchor="middle">理想伺服仿真闭环</text>
<text x="278" y="2394" class="box-small">joint.N.motor-pos-cmd -&gt; JN_pid.command -&gt; JN_mux.in1 -&gt; joint.N.motor-pos-fb</text>
<path d="M 1110 2210 L 1110 2300" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="2480" y="1140" width="2200" height="1490" rx="36" fill="#f9f3ff" stroke="#b8c7dc" stroke-width="4"/>
<text x="2514" y="1210" class="section-title">3. switchkins 初始化</text>
<rect id="k1" x="2590" y="1280" width="620" height="150" rx="18" fill="#ffffff" stroke="#7246a3" stroke-width="4"/>
<text x="2900.0" y="1324" class="box-title" text-anchor="middle">xyzbc-trt-kins</text>
<text x="2618" y="1374" class="box-small">switchkinsSetup()</text>
<rect id="k2" x="3350" y="1280" width="620" height="150" rx="18" fill="#ffffff" stroke="#7246a3" stroke-width="4"/>
<text x="3660.0" y="1324" class="box-title" text-anchor="middle">sparm=identityfirst</text>
<text x="3378" y="1374" class="box-small">改变 type 顺序</text>
<path d="M 3210 1355 L 3350 1355" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="t0" x="2630" y="1620" width="520" height="150" rx="18" fill="#ffffff" stroke="#7246a3" stroke-width="4"/>
<text x="2890.0" y="1664" class="box-title" text-anchor="middle">type 0</text>
<text x="2658" y="1714" class="box-small">identity kinematics</text>
<rect id="t1" x="3280" y="1620" width="520" height="150" rx="18" fill="#ffffff" stroke="#7246a3" stroke-width="4"/>
<text x="3540.0" y="1664" class="box-title" text-anchor="middle">type 1</text>
<text x="3308" y="1714" class="box-small">xyzbc TRT kinematics</text>
<rect id="t2" x="3930" y="1620" width="520" height="150" rx="18" fill="#ffffff" stroke="#7246a3" stroke-width="4"/>
<text x="4190.0" y="1664" class="box-title" text-anchor="middle">type 2</text>
<text x="3958" y="1714" class="box-small">userk kinematics</text>
<path d="M 3660 1430 L 3660 1530 L 2890 1530 L 2890 1620" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3660 1430 L 3660 1530 L 3540 1530 L 3540 1620" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3660 1430 L 3660 1530 L 4190 1530 L 4190 1620" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="pins" x="2700" y="1940" width="1560" height="180" rx="18" fill="#ffffff" stroke="#7246a3" stroke-width="4"/>
<text x="3480.0" y="1984" class="box-title" text-anchor="middle">HAL pins</text>
<text x="2728" y="2034" class="box-small">kinstype.is-0/1/2; x/y/z-rot-point; x/y/z-offset; tool-offset;</text>
<text x="2728" y="2068" class="box-small">conventional-directions</text>
<path d="M 3540 1770 L 3480 1940" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="default" x="2920" y="2280" width="1120" height="160" rx="18" fill="#ffffff" stroke="#7246a3" stroke-width="4"/>
<text x="3480.0" y="2324" class="box-title" text-anchor="middle">启动默认状态</text>
<text x="2948" y="2374" class="box-small">switchkins_type = 0 -&gt; identity</text>
<path d="M 3480 2120 L 3480 2280" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="120" y="2730" width="4560" height="1400" rx="36" fill="#fff8ee" stroke="#b8c7dc" stroke-width="4"/>
<text x="154" y="2800" class="section-title">4. PyVCP / M-code / motion.switchkins-type 切换链路</text>
<rect id="p1" x="240" y="2880" width="680" height="160" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="580.0" y="2924" class="box-title" text-anchor="middle">PyVCP SWITCHKINS 面板</text>
<text x="268" y="2974" class="box-small">IDENTITY / TCP:XYZBC / userk</text>
<rect id="p2" x="1100" y="2880" width="620" height="160" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="1410.0" y="2924" class="box-title" text-anchor="middle">switchkins_postgui.hal</text>
<text x="1128" y="2974" class="box-small">按钮接入 halui.mdi-command</text>
<rect id="p3" x="1900" y="2880" width="580" height="160" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="2190.0" y="2924" class="box-title" text-anchor="middle">halui MDI</text>
<text x="1928" y="2974" class="box-small">执行 M429 / M428 / M430</text>
<rect id="p4" x="2660" y="2880" width="640" height="160" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="2980.0" y="2924" class="box-title" text-anchor="middle">remap 子程序</text>
<text x="2688" y="2974" class="box-small">429/428/430remap.ngc</text>
<rect id="p5" x="3480" y="2880" width="520" height="160" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="3740.0" y="2924" class="box-title" text-anchor="middle">M68 E3 Qn</text>
<text x="3508" y="2974" class="box-small">设置 analog out</text>
<rect id="p6" x="4160" y="2880" width="420" height="160" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="4370.0" y="2924" class="box-title" text-anchor="middle">M66 E0 L0</text>
<text x="4188" y="2974" class="box-small">同步解释器与 motion</text>
<path d="M 920 2960 L 1100 2960" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 1720 2960 L 1900 2960" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2480 2960 L 2660 2960" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3300 2960 L 3480 2960" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 4000 2960 L 4160 2960" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="m429" x="520" y="3260" width="660" height="150" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="850.0" y="3304" class="box-title" text-anchor="middle">M429</text>
<text x="548" y="3354" class="box-small">type 0: identity</text>
<rect id="m428" x="1480" y="3260" width="660" height="150" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="1810.0" y="3304" class="box-title" text-anchor="middle">M428</text>
<text x="1508" y="3354" class="box-small">type 1: xyzbc TRT</text>
<rect id="m430" x="2440" y="3260" width="660" height="150" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="2770.0" y="3304" class="box-title" text-anchor="middle">M430</text>
<text x="2468" y="3354" class="box-small">type 2: userk</text>
<rect id="aout" x="3400" y="3260" width="720" height="150" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="3760.0" y="3304" class="box-title" text-anchor="middle">motion.analog-out-03</text>
<text x="3428" y="3354" class="box-small">HAL net :kinstype-select</text>
<path d="M 850 3040 L 850 3260" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="700.0" y="3102.0" width="300" height="46" rx="12" fill="#ffffff" opacity="0.92"/>
<text x="850.0" y="3134.0" class="arrow-label" text-anchor="middle">M429</text>
<path d="M 2200 3040 L 1810 3260" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="1855.0" y="3102.0" width="300" height="46" rx="12" fill="#ffffff" opacity="0.92"/>
<text x="2005.0" y="3134.0" class="arrow-label" text-anchor="middle">M428</text>
<path d="M 2200 3040 L 2770 3260" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="2335.0" y="3102.0" width="300" height="46" rx="12" fill="#ffffff" opacity="0.92"/>
<text x="2485.0" y="3134.0" class="arrow-label" text-anchor="middle">M430</text>
<path d="M 1180 3335 L 3400 3335" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="2140.0" y="3287.0" width="300" height="46" rx="12" fill="#ffffff" opacity="0.92"/>
<text x="2290.0" y="3319.0" class="arrow-label" text-anchor="middle">Q0</text>
<path d="M 2140 3335 L 3400 3335" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="2620.0" y="3287.0" width="300" height="46" rx="12" fill="#ffffff" opacity="0.92"/>
<text x="2770.0" y="3319.0" class="arrow-label" text-anchor="middle">Q1</text>
<path d="M 3100 3335 L 3400 3335" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="3100.0" y="3287.0" width="300" height="46" rx="12" fill="#ffffff" opacity="0.92"/>
<text x="3250.0" y="3319.0" class="arrow-label" text-anchor="middle">Q2</text>
<rect id="swpin" x="1580" y="3700" width="760" height="170" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="1960.0" y="3744" class="box-title" text-anchor="middle">motion.switchkins-type</text>
<text x="1608" y="3794" class="box-small">float HAL input, 被截断为整数 type</text>
<rect id="handle" x="2580" y="3700" width="820" height="170" rx="18" fill="#ffffff" stroke="#ba7a20" stroke-width="4"/>
<text x="2990.0" y="3744" class="box-title" text-anchor="middle">handle_kinematicsSwitch()</text>
<text x="2608" y="3794" class="box-small">servo-thread 每周期检测并调用</text>
<text x="2608" y="3828" class="box-small">kinematicsSwitch(type)</text>
<path d="M 3760 3410 L 1960 3700" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2340 3785 L 2580 3785" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="120" y="4230" width="4560" height="1520" rx="36" fill="#eef9f8" stroke="#b8c7dc" stroke-width="4"/>
<text x="154" y="4300" class="section-title">5. 运行时运动数据流与 Vismach 显示</text>
<rect id="gcode" x="240" y="4390" width="520" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="500.0" y="4434" class="box-title" text-anchor="middle">G-code XYZBC</text>
<text x="268" y="4484" class="box-small">程序指令</text>
<rect id="interp" x="920" y="4390" width="520" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="1180.0" y="4434" class="box-title" text-anchor="middle">interpreter</text>
<text x="948" y="4484" class="box-small">RS274NGC</text>
<rect id="task" x="1600" y="4390" width="520" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="1860.0" y="4434" class="box-title" text-anchor="middle">milltask</text>
<text x="1628" y="4484" class="box-small">任务层</text>
<rect id="tp" x="2280" y="4390" width="620" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="2590.0" y="4434" class="box-title" text-anchor="middle">trajectory planner</text>
<text x="2308" y="4484" class="box-small">生成 carte_pos_cmd</text>
<rect id="inv" x="3060" y="4390" width="760" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="3440.0" y="4434" class="box-title" text-anchor="middle">kinematicsInverse()</text>
<text x="3088" y="4484" class="box-small">按当前 type 分派</text>
<rect id="joint" x="3980" y="4390" width="560" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="4260.0" y="4434" class="box-title" text-anchor="middle">joint targets</text>
<text x="4008" y="4484" class="box-small">X/Y/Z/B/C joint 目标</text>
<path d="M 760 4465 L 920 4465" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 1440 4465 L 1600 4465" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2120 4465 L 2280 4465" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2900 4465 L 3060 4465" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3820 4465 L 3980 4465" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="idinv" x="540" y="4840" width="760" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="920.0" y="4884" class="box-title" text-anchor="middle">type 0: identity</text>
<text x="568" y="4934" class="box-small">一一映射</text>
<rect id="trtinv" x="1510" y="4840" width="1040" height="210" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="2030.0" y="4884" class="box-title" text-anchor="middle">type 1: xyzbcKinematicsInverse</text>
<text x="1538" y="4934" class="box-small">使用 B/C</text>
<text x="1538" y="4968" class="box-small">角度、x-offset=-20、z-offset=-15、tool-offset、旋转</text>
<text x="1538" y="5002" class="box-small">中心计算 joint</text>
<rect id="userkinv" x="2760" y="4840" width="760" height="150" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="3140.0" y="4884" class="box-title" text-anchor="middle">type 2: userk</text>
<text x="2788" y="4934" class="box-small">模板示例</text>
<path d="M 3440 4540 L 3440 4720 L 920 4720 L 920 4840" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3440 4540 L 3440 4720 L 2030 4720 L 2030 4840" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3440 4540 L 3440 4720 L 3140 4720 L 3140 4840" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect id="fb" x="820" y="5260" width="1000" height="160" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="1320.0" y="5304" class="box-title" text-anchor="middle">仿真反馈闭环</text>
<text x="848" y="5354" class="box-small">joint.N.motor-pos-cmd -&gt; pid/mux2 -&gt;</text>
<text x="848" y="5388" class="box-small">joint.N.motor-pos-fb</text>
<rect id="vis" x="2140" y="5260" width="1000" height="160" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="2640.0" y="5304" class="box-title" text-anchor="middle">Vismach</text>
<text x="2168" y="5354" class="box-small">joint feedback 驱动 table/saddle/spindle/B/C 模型</text>
<rect id="panel" x="3460" y="5260" width="780" height="160" rx="18" fill="#ffffff" stroke="#2b7a78" stroke-width="4"/>
<text x="3850.0" y="5304" class="box-title" text-anchor="middle">PyVCP 状态</text>
<text x="3488" y="5354" class="box-small">kinstype.is-N 显示当前运动学</text>
<path d="M 4260 4540 L 1320 5260" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 1820 5340 L 2140 5340" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2980 3870 L 3850 5260" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)" stroke-dasharray="18 12"/>
<rect x="3265.0" y="4517.0" width="300" height="46" rx="12" fill="#ffffff" opacity="0.92"/>
<text x="3415.0" y="4549.0" class="arrow-label" text-anchor="middle">kinstype.is-N</text>
<rect x="120" y="5860" width="4560" height="1060" rx="36" fill="#f7f7f7" stroke="#b8c7dc" stroke-width="4"/>
<text x="154" y="5930" class="section-title">6. 自动打开的演示 G-code 流程</text>
<rect id="d1" x="250" y="6020" width="660" height="150" rx="18" fill="#ffffff" stroke="#5b6570" stroke-width="4"/>
<text x="580.0" y="6064" class="box-title" text-anchor="middle">xyzbc_switchkins.ngc</text>
<text x="278" y="6114" class="box-small">AXIS OPEN_FILE</text>
<rect id="d2" x="1080" y="6020" width="760" height="150" rx="18" fill="#ffffff" stroke="#5b6570" stroke-width="4"/>
<text x="1460.0" y="6064" class="box-title" text-anchor="middle">xyzbc_switchkins_sub</text>
<text x="1108" y="6114" class="box-small">四个象限重复</text>
<rect id="d3" x="2010" y="6020" width="620" height="150" rx="18" fill="#ffffff" stroke="#5b6570" stroke-width="4"/>
<text x="2320.0" y="6064" class="box-title" text-anchor="middle">M429 identity</text>
<text x="2038" y="6114" class="box-small">安全定位 / 重设 G54</text>
<rect id="d4" x="2800" y="6020" width="620" height="150" rx="18" fill="#ffffff" stroke="#5b6570" stroke-width="4"/>
<text x="3110.0" y="6064" class="box-title" text-anchor="middle">helix_bc</text>
<text x="2828" y="6114" class="box-small">准备螺旋插补</text>
<rect id="d5" x="3590" y="6020" width="700" height="150" rx="18" fill="#ffffff" stroke="#5b6570" stroke-width="4"/>
<text x="3940.0" y="6064" class="box-title" text-anchor="middle">M428 xyzbc TRT</text>
<text x="3618" y="6114" class="box-small">B/C 倾斜后加工</text>
<path d="M 910 6095 L 1080 6095" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 1840 6095 L 2010 6095" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 2630 6095 L 2800 6095" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M 3420 6095 L 3590 6095" fill="none" stroke="#1f3b57" stroke-width="6" marker-end="url(#arrow)"/>
<rect x="360" y="6380" width="1780" height="330" rx="18" fill="#fff7e6" stroke="#d49b32" stroke-width="4"/>
<text x="388" y="6426" class="note-title">演示循环</text>
<text x="388" y="6470" class="note-text">每个象限先 M429 切回 identity。</text>
<text x="388" y="6502" class="note-text">G53 回机床安全位置G10 L20 P0 重设 G54。</text>
<text x="388" y="6534" class="note-text">移动到象限中心后调用 helix_bc。</text>
<rect x="2540" y="6380" width="1780" height="330" rx="18" fill="#fff7e6" stroke="#d49b32" stroke-width="4"/>
<text x="2568" y="6426" class="note-title">helix_bc 核心</text>
<text x="2568" y="6470" class="note-text">M428 切换到 xyzbc TRT。</text>
<text x="2568" y="6502" class="note-text">G0 B#&lt;b&gt; C#&lt;c&gt; 设置转台角度。</text>
<text x="2568" y="6534" class="note-text">G2 I#&lt;r&gt; Z#&lt;zmin&gt; P#&lt;n&gt; 执行螺旋插补。</text>
<text x="2400" y="7080" class="legend" text-anchor="middle">输出文件: 项目分析/5axis-xyzbc-trt-sim高清流程图.png源文件: 项目分析/5axis-xyzbc-trt-sim高清流程图.svg</text>
</svg>