# xyzbc-trt 当前运行配置文件说明
本文档记录当前运行的 LinuxCNC RTCP/TCP 五轴示例:
`configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini`
它是一个 `XYZBC` table rotary/tilting 五轴仿真配置,使用 AXIS 主界面、PyVCP 面板、Vismach 三维机床模型,以及 `switchkins` 方式在不同运动学模式之间切换。
当前对标的 run-in-place 根目录:
```text
/home/mes123456/cnc_wams/linuxcnc
```
当前启动命令:
```bash
/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment linuxcnc \
/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
## 当前进程
当前目标配置运行时的关键进程如下:
```text
/bin/bash /home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
linuxcncsvr -ini /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
/home/mes123456/cnc_wams/linuxcnc/bin/rtapi_app load tpmod
milltask -ini /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
halui -ini /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/hal_manualtoolchange
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/axis -ini /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
当前目标配置的进程均来自 `/home/mes123456/cnc_wams/linuxcnc`,并使用 `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini`。
当前 LinuxCNC Python API 状态检查:
```text
file = ./demos/xyzbc_switchkins.ngc
axis_mask = 55
position = [0.0, 0.0, 0.0, 0.0, 0.0]
task_state = 1
interp_state = 1
```
## 启动入口
快捷方式:
```text
/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop
```
快捷方式执行命令:
```bash
/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment linuxcnc \
/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
`rip-environment` 负责设置 run-in-place 环境,包括 `PATH`、`LD_LIBRARY_PATH`、`PYTHONPATH`、`TCLLIBPATH` 等,使本地编译出来的 LinuxCNC 程序、库、Python 模块可被找到。
## 文件关系总览
主配置文件:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
它引用或触发以下文件:
```text
[DISPLAY] DISPLAY = axis
-> bin/axis
-> src/emc/usr_intf/axis/scripts/axis.py
[DISPLAY] PYVCP = ./xyzbc-trt.xml
-> configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
[DISPLAY] OPEN_FILE = ./demos/xyzbc_switchkins.ngc
-> configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc
[HAL] HALFILE = LIB:basic_sim.tcl
-> lib/hallib/basic_sim.tcl
-> 运行后生成 configs/.../xyzbc-trt_cmds.hal
[HAL] POSTGUI_HALFILE = switchkins_postgui.hal
-> configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
[HAL] HALCMD = loadusr -W xyzbc-trt-gui
-> bin/xyzbc-trt-gui
-> src/hal/user_comps/vismach/xyzbc-trt-gui.py
[RS274NGC] SUBROUTINE_PATH = ./remap_subs
-> remap_subs/428remap.ngc
-> remap_subs/429remap.ngc
-> remap_subs/430remap.ngc
-> remap_subs/xyzbc_switchkins_sub.ngc
-> remap_subs/centering.ngc
-> remap_subs/helix_bc.ngc
[EMCIO] TOOL_TABLE = xyzbc-trt.tbl
-> configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl
[RS274NGC] PARAMETER_FILE = xyzbc.var
-> configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var
```
## 主 INI 文件
路径:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
关键内容:
```ini
[EMC]
VERSION = 1.1
MACHINE = sim-xyzbc-trt-kins (switchkins)
[DISPLAY]
GEOMETRY = XYZB
OPEN_FILE = ./demos/xyzbc_switchkins.ngc
PYVCP = ./xyzbc-trt.xml
JOG_AXES = XYZC
DISPLAY = axis
MAX_ANGULAR_VELOCITY = 360
MAX_LINEAR_VELOCITY = 1000
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2
PROGRAM_PREFIX = ../../nc_files
INTRO_GRAPHIC = emc2.gif
INTRO_TIME = 1
TOOL_EDITOR = tooledit z diam
TKPKG = Ngcgui 1.0
NGCGUI_FONT = Helvetica -12 normal
NGCGUI_SUBFILE = xyzbc_switchkins_sub.ngc
NGCGUI_SUBFILE = centering.ngc
[RS274NGC]
SUBROUTINE_PATH = ./remap_subs
HAL_PIN_VARS = 1
REMAP = M428 modalgroup=10 ngc=428remap
REMAP = M429 modalgroup=10 ngc=429remap
REMAP = M430 modalgroup=10 ngc=430remap
PARAMETER_FILE = xyzbc.var
[KINS]
# default switchkins-type == 0 is xyzbc-trt-kins
# here switchkins-type == 0 is identity kins
KINEMATICS = xyzbc-trt-kins sparm=identityfirst
JOINTS = 5
[HAL]
HALUI = halui
HALFILE = LIB:basic_sim.tcl
POSTGUI_HALFILE = switchkins_postgui.hal
# net for control of motion.switchkins-type
HALCMD = net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
# vismach xyzbc-trt-gui items
HALCMD = loadusr -W xyzbc-trt-gui
HALCMD = net :table-x joint.0.pos-fb xyzbc-trt-gui.table-x
HALCMD = net :saddle-y joint.1.pos-fb xyzbc-trt-gui.saddle-y
HALCMD = net :spindle-z joint.2.pos-fb xyzbc-trt-gui.spindle-z
HALCMD = net :tilt-b joint.3.pos-fb xyzbc-trt-gui.tilt-b
HALCMD = net :rotate-c joint.4.pos-fb xyzbc-trt-gui.rotate-c
HALCMD = net :tool-offset motion.tooloffset.z
HALCMD = net :tool-offset xyzbc-trt-kins.tool-offset xyzbc-trt-gui.tool-offset
HALCMD = net :x-offset xyzbc-trt-kins.x-offset xyzbc-trt-gui.x-offset
HALCMD = net :z-offset xyzbc-trt-kins.z-offset xyzbc-trt-gui.z-offset
HALCMD = sets :x-offset -20
HALCMD = sets :z-offset -15
HALCMD = setp xyzbc-trt-kins.x-rot-point 0
HALCMD = setp xyzbc-trt-kins.y-rot-point 0
HALCMD = setp xyzbc-trt-kins.z-rot-point 0
HALCMD = setp xyzbc-trt-kins.conventional-directions 0
[HALUI]
# kinstype==0 is identity kins because sparm=identityfirst
# M429: identity kins
# M428: xyzbc kins / TCP mode
# M430: userk kins
MDI_COMMAND = M429
MDI_COMMAND = M428
MDI_COMMAND = M430
[TRAJ]
COORDINATES = XYZBC
LINEAR_UNITS = mm
ANGULAR_UNITS = deg
DEFAULT_LINEAR_VELOCITY = 20
MAX_LINEAR_VELOCITY = 35
MAX_LINEAR_ACCELERATION = 400
DEFAULT_LINEAR_ACCELERATION = 300
[EMCMOT]
EMCMOT = motmod
SERVO_PERIOD = 1000000
COMM_TIMEOUT = 1
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[EMCIO]
TOOL_TABLE = xyzbc-trt.tbl
```
轴和关节部分定义 `XYZBC` 五轴:
```ini
[AXIS_X] [AXIS_Y] [AXIS_Z]
LINEAR axes, limits in mm.
[AXIS_B] [AXIS_C]
ANGULAR axes, limits in degrees.
[JOINT_0] X linear
[JOINT_1] Y linear
[JOINT_2] Z linear
[JOINT_3] B angular, MIN_LIMIT=-100, MAX_LIMIT=50
[JOINT_4] C angular, MIN_LIMIT=-36000, MAX_LIMIT=36000
```
## PyVCP 界面文件
路径:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
```
这个 XML 文件由 AXIS 读取 `[DISPLAY]PYVCP` 后加载,显示在 AXIS 窗口右侧。它提供:
- 当前运动学模式显示:`0:IDENTITY`、`1: XYZBC`、`2: USERK`
- 三个按钮:`IDENTITY`、`TCP:XYZBC`、`userk`
- 一个 `vismach-clear` 按钮,用于清除 Vismach 轨迹显示
完整内容:
```xml
"ridge"
5
["0:IDENTITY", "1: XYZBC ", "2: USERK "]
("Helvetica",16)
"black"
"yellow"
"ridge"
5
```
## POSTGUI HAL 文件
路径:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
```
这个文件在 AXIS/PyVCP 界面创建完成后加载,所以它可以连接 `pyvcp.*` 引脚。
完整内容:
```hal
# switchkins pyvcp connections for:
# xyzac-trt-kins.ini,xyzbc-trt-kins.ini
net :kinstype.is-0 <= kinstype.is-0 => pyvcp.multilabel.0.legend0
net :kinstype.is-1 <= kinstype.is-1 => pyvcp.multilabel.0.legend1
net :kinstype.is-2 <= kinstype.is-2 => pyvcp.multilabel.0.legend2
net :vismach-clear <= pyvcp.vismach-clear => vismach.plotclear
net :type0-button <= pyvcp.type0-button => halui.mdi-command-00
net :type1-button <= pyvcp.type1-button => halui.mdi-command-01
net :type2-button <= pyvcp.type2-button => halui.mdi-command-02
```
作用:
- `kinstype.is-*` 驱动 PyVCP 的 `multilabel`,显示当前 kinematics 类型。
- PyVCP 三个按钮连接到 `halui.mdi-command-00/01/02`。
- `[HALUI] MDI_COMMAND` 定义这三个命令分别执行 `M429`、`M428`、`M430`。
- `vismach-clear` 连接到 `vismach.plotclear`,清除 Vismach 显示轨迹。
## Vismach Python 界面文件
运行入口:
```text
/home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui
```
源码路径:
```text
src/hal/user_comps/vismach/xyzbc-trt-gui.py
```
该 Python 文件创建名为 `xyzbc-trt-gui` 的 HAL 用户组件,并建立 Vismach 三维机床模型。INI 中的以下 HALCMD 启动并连接它:
```hal
HALCMD = loadusr -W xyzbc-trt-gui
HALCMD = net :table-x joint.0.pos-fb xyzbc-trt-gui.table-x
HALCMD = net :saddle-y joint.1.pos-fb xyzbc-trt-gui.saddle-y
HALCMD = net :spindle-z joint.2.pos-fb xyzbc-trt-gui.spindle-z
HALCMD = net :tilt-b joint.3.pos-fb xyzbc-trt-gui.tilt-b
HALCMD = net :rotate-c joint.4.pos-fb xyzbc-trt-gui.rotate-c
HALCMD = net :tool-offset xyzbc-trt-kins.tool-offset xyzbc-trt-gui.tool-offset
HALCMD = net :x-offset xyzbc-trt-kins.x-offset xyzbc-trt-gui.x-offset
HALCMD = net :z-offset xyzbc-trt-kins.z-offset xyzbc-trt-gui.z-offset
```
### HAL 引脚
`xyzbc-trt-gui.py` 创建这些输入引脚:
```python
c = hal.component("xyzbc-trt-gui")
c.newpin("table-x", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("saddle-y", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("spindle-z", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("tilt-b", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("rotate-c", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("z-offset", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("x-offset", hal.HAL_FLOAT, hal.HAL_IN)
c.newpin("tool-offset", hal.HAL_FLOAT, hal.HAL_IN)
c.ready()
```
### 模型结构
该脚本使用 `vismach` 的 `Collection`、`Box`、`CylinderZ`、`HalTranslate`、`HalRotate` 等构造机床模型:
- `tool`: 刀具和刀尖捕获点,受 `tool-offset` 影响。
- `spindle`: 主轴和刀柄。
- `head`: 主轴头,受 `spindle-z` 影响。
- `ctable`: C 轴旋转台,受 `rotate-c` 影响。
- `arotary`: B 轴倾斜组件,受 `tilt-b` 影响。
- `table`: X 方向工作台,受 `table-x` 影响。
- `saddle`: Y 方向滑鞍,受 `saddle-y` 影响。
- `base`: 机床底座和立柱。
最终调用:
```python
model = Collection([yslide, base])
myhud = Hud()
myhud.show("XYZBC")
main(model, tooltip, work, size=500, hud=myhud, lat=-60, lon=25)
```
这会打开 Vismach 窗口,显示 `XYZBC` 五轴仿真模型。
## AXIS 主界面 Python 文件
运行入口:
```text
/home/mes123456/cnc_wams/linuxcnc/bin/axis
```
对应源码:
```text
src/emc/usr_intf/axis/scripts/axis.py
```
`bin/axis` 是构建后的可执行 Python 脚本,当前进程为:
```text
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/axis -ini /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
这个文件很大,当前源码约 `4308` 行。与本配置直接相关的加载点如下。
读取 INI:
```python
if sys.argv[1] != "-ini":
raise SystemExit("-ini must be first argument")
inifile = linuxcnc.ini(sys.argv[2])
```
读取 POSTGUI HAL、几何、坐标等配置:
```python
vars.emcini.set(sys.argv[2])
jointcount = inifile.getint("KINS", "JOINTS", fallback=0)
open_directory = inifile.getstring("DISPLAY", "PROGRAM_PREFIX", fallback=open_directory)
vars.machine.set(inifile.getstring("EMC", "MACHINE", fallback=""))
postgui_halfile = inifile.findall("HAL", "POSTGUI_HALFILE") or None
postgui_halcmds = inifile.findall("HAL", "POSTGUI_HALCMD") or None
geometry = inifile.getstring("DISPLAY", "GEOMETRY", fallback="XYZABCUVW")
```
读取 PyVCP:
```python
vcp = inifile.find("DISPLAY", "PYVCP")
```
创建 PyVCP 面板:
```python
if vcp:
import vcpparse
f = Tkinter.Frame(root_window)
if inifile.find("DISPLAY", "PYVCP_POSITION") == "BOTTOM":
f.grid(row=4, column=0, columnspan=6, sticky="nw", padx=4, pady=4)
else:
f.grid(row=0, column=4, rowspan=6, sticky="nw", padx=4, pady=4)
vcpparse.filename = vcp
vcpcomp = hal.component("pyvcp")
vcpparse.create_vcp(f, vcpcomp)
vcpcomp.ready()
vcp_frame = f
```
这些代码解释了为什么 `[DISPLAY]PYVCP = ./xyzbc-trt.xml` 会在 AXIS 中生成右侧的 `SWITCHKINS` 面板。
## 基础仿真 HAL/Tcl 文件
路径:
```text
lib/hallib/basic_sim.tcl
```
INI 中:
```ini
[HAL]
HALFILE = LIB:basic_sim.tcl
```
作用:
- 加载通用仿真组件。
- 根据 `[TRAJ]COORDINATES` 和 `[KINS]JOINTS` 创建基础运动仿真。
- 创建 `ddt`、模拟回零、手动换刀和模拟主轴。
- 运行后生成等效 HAL 文件:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt_cmds.hal
```
关键逻辑:
```tcl
source [file join $::env(HALLIB_DIR) sim_lib.tcl]
set axes [get_traj_coordinates]
set number_of_joints $::KINS(JOINTS)
core_sim $axes \
$number_of_joints \
$::EMCMOT(SERVO_PERIOD) \
$base_period \
$::EMCMOT(EMCMOT)
make_ddts $number_of_joints
simulated_home $number_of_joints
use_hal_manualtoolchange
sim_spindle
save_hal_cmds $savefilename $save_options
```
## switchkins / RTCP 切换逻辑
本配置使用 `motion.switchkins-type` 选择不同运动学模式。
关键 HAL 连接:
```hal
net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type
```
关键 MDI 命令:
```ini
[HALUI]
MDI_COMMAND = M429
MDI_COMMAND = M428
MDI_COMMAND = M430
```
三个 remap 子程序:
```text
remap_subs/429remap.ngc -> kinstype = 0 -> IDENTITY
remap_subs/428remap.ngc -> kinstype = 1 -> XYZBC / TCP
remap_subs/430remap.ngc -> kinstype = 2 -> USERK
```
`M428` 的核心逻辑:
```ngc
;M428 by remap: kinstype==1 (xyzac,xyzbc)
o<428remap>sub
# = 1
# = 3
M68 E# Q#
M66 E0 L0
o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #]]
(debug,M428: Wrong motion.switchkins-type)
(debug,or missing hal net to analog-out-0x)
(debug,STOP)
M2
o2 else
o2 endif
o<428remap>endsub
```
`M429` 类似,但设置 `kinstype = 0`;`M430` 设置 `kinstype = 2`。
## 演示 G-code
启动时自动打开:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc
```
内容:
```ngc
; zmax zmin r frate n a b c dist
o call [10] [5] [10][1000][3][0][20][45][20]
m2
```
它调用:
```text
remap_subs/xyzbc_switchkins_sub.ngc
```
该子程序会在四个象限中:
- 先用 `M429` 切到 Identity kinematics。
- 设置机器坐标和 G54。
- 调用 `helix_bc`,用 B/C 角度演示 TCP/五轴联动轨迹。
- 最后回到 Identity kinematics。
## 工具表
路径:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl
```
内容:
```text
T1 P1 D1
T2 P2 Z10 D8
```
工具表会影响 `motion.tooloffset.z`,并通过 HAL 连接到:
```hal
xyzbc-trt-kins.tool-offset
xyzbc-trt-gui.tool-offset
```
所以工具长度会同时影响运动学计算和 Vismach 显示。
## 运动学组件
运行时加载:
```text
rtlib/xyzbc-trt-kins.so
```
源码:
```text
src/emc/kinematics/xyzbc-trt-kins.c
```
相关说明文件:
```text
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.txt
```
说明文件中的核心语义:
```text
M429: Identity Kinematics
M428: XYZBC (TCP)
M430: userk Kinematics
net :kinstype-select <= motion.analog-out-03
net :kinstype-select => motion.switchkins-type
```
`xyzbc-trt-kins` 提供这些和配置相关的 HAL 输入:
```text
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
xyzbc-trt-kins.tool-offset
```
## 加载顺序
简化后的启动流程:
1. `.desktop` 执行 `rip-environment linuxcnc xyzbc-trt.ini`。
2. `scripts/linuxcnc` 读取 INI,启动 `linuxcncsvr`、`rtapi_app`、`milltask`、`halui`。
3. `[HAL] HALFILE = LIB:basic_sim.tcl` 加载基础仿真 HAL。
4. `[KINS] KINEMATICS = xyzbc-trt-kins sparm=identityfirst` 加载运动学组件。
5. `[HAL] HALCMD = loadusr -W xyzbc-trt-gui` 启动 Vismach Python 模型。
6. `[DISPLAY] DISPLAY = axis` 启动 AXIS。
7. AXIS 读取 `[DISPLAY] PYVCP = ./xyzbc-trt.xml`,创建 PyVCP 面板。
8. AXIS 界面创建后加载 `POSTGUI_HALFILE = switchkins_postgui.hal`,连接 PyVCP 引脚和 HALUI MDI 命令。
9. `[DISPLAY] OPEN_FILE = ./demos/xyzbc_switchkins.ngc` 自动载入演示 G-code。
## 重要文件清单
```text
主配置:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
AXIS 主界面:
bin/axis
src/emc/usr_intf/axis/scripts/axis.py
PyVCP 面板:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
POSTGUI HAL:
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
Vismach Python 机床模型:
bin/xyzbc-trt-gui
src/hal/user_comps/vismach/xyzbc-trt-gui.py
基础仿真 HAL/Tcl:
lib/hallib/basic_sim.tcl
运行后生成的等效 HAL:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt_cmds.hal
运动学组件:
rtlib/xyzbc-trt-kins.so
src/emc/kinematics/xyzbc-trt-kins.c
remap 子程序:
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc
演示程序:
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc
工具表和参数:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var
```