Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md
2026-07-02 08:01:34 -04:00

19 KiB
Raw Blame History

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 根目录:

/home/mes123456/cnc_wams/linuxcnc

当前启动命令:

/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

当前进程

当前目标配置运行时的关键进程如下:

/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 状态检查:

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

启动入口

快捷方式:

/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop

快捷方式执行命令:

/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 环境,包括 PATHLD_LIBRARY_PATHPYTHONPATHTCLLIBPATH 等,使本地编译出来的 LinuxCNC 程序、库、Python 模块可被找到。

文件关系总览

主配置文件:

configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini

它引用或触发以下文件:

[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 文件

路径:

configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.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 五轴:

[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 界面文件

路径:

configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml

这个 XML 文件由 AXIS 读取 [DISPLAY]PYVCP 后加载,显示在 AXIS 窗口右侧。它提供:

  • 当前运动学模式显示:0:IDENTITY1: XYZBC2: USERK
  • 三个按钮:IDENTITYTCP:XYZBCuserk
  • 一个 vismach-clear 按钮,用于清除 Vismach 轨迹显示

完整内容:

<?xml version='1.0' encoding='UTF-8'?>
<pyvcp>

  <vbox>
    <relief>"ridge"</relief>
    <bd>5</bd>
    <label>
      <text>"SWITCHKINS"</text>
      <relief>RIDGE</relief>
      <bd>3</bd>
    </label>
    <multilabel>
      <legends>["0:IDENTITY", "1: XYZBC  ", "2: USERK  "]</legends>
      <font>("Helvetica",16)</font>
      <bg>"black"</bg>
      <fg>"yellow"</fg>
    </multilabel>
    <button>
      <halpin>"type0-button"</halpin>
      <text>"IDENTITY"</text>
      <bd>3</bd>
    </button>
    <button>
      <halpin>"type1-button"</halpin>
      <text>"TCP:XYZBC"</text>
      <bd>3</bd>
    </button>
    <button>
      <halpin>"type2-button"</halpin>
      <text>"userk"</text>
      <bd>3</bd>
    </button>
  </vbox>

  <vbox>
    <relief>"ridge"</relief>
    <bd>5</bd>
    <button>
      <halpin>"vismach-clear"</halpin>
      <text>"vismach-clear"</text>
      <bd>3</bd>
    </button>
  </vbox>

</pyvcp>

POSTGUI HAL 文件

路径:

configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal

这个文件在 AXIS/PyVCP 界面创建完成后加载,所以它可以连接 pyvcp.* 引脚。

完整内容:

# 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 定义这三个命令分别执行 M429M428M430
  • vismach-clear 连接到 vismach.plotclear,清除 Vismach 显示轨迹。

Vismach Python 界面文件

运行入口:

/home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui

源码路径:

src/hal/user_comps/vismach/xyzbc-trt-gui.py

该 Python 文件创建名为 xyzbc-trt-gui 的 HAL 用户组件,并建立 Vismach 三维机床模型。INI 中的以下 HALCMD 启动并连接它:

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 创建这些输入引脚:

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()

模型结构

该脚本使用 vismachCollectionBoxCylinderZHalTranslateHalRotate 等构造机床模型:

  • tool: 刀具和刀尖捕获点,受 tool-offset 影响。
  • spindle: 主轴和刀柄。
  • head: 主轴头,受 spindle-z 影响。
  • ctable: C 轴旋转台,受 rotate-c 影响。
  • arotary: B 轴倾斜组件,受 tilt-b 影响。
  • table: X 方向工作台,受 table-x 影响。
  • saddle: Y 方向滑鞍,受 saddle-y 影响。
  • base: 机床底座和立柱。

最终调用:

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 文件

运行入口:

/home/mes123456/cnc_wams/linuxcnc/bin/axis

对应源码:

src/emc/usr_intf/axis/scripts/axis.py

bin/axis 是构建后的可执行 Python 脚本,当前进程为:

/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

if sys.argv[1] != "-ini":
    raise SystemExit("-ini must be first argument")

inifile = linuxcnc.ini(sys.argv[2])

读取 POSTGUI HAL、几何、坐标等配置

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="<unknown>"))
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

vcp = inifile.find("DISPLAY", "PYVCP")

创建 PyVCP 面板:

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 文件

路径:

lib/hallib/basic_sim.tcl

INI 中:

[HAL]
HALFILE = LIB:basic_sim.tcl

作用:

  • 加载通用仿真组件。
  • 根据 [TRAJ]COORDINATES[KINS]JOINTS 创建基础运动仿真。
  • 创建 ddt、模拟回零、手动换刀和模拟主轴。
  • 运行后生成等效 HAL 文件:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt_cmds.hal

关键逻辑:

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 连接:

net :kinstype-select <= motion.analog-out-03 => motion.switchkins-type

关键 MDI 命令:

[HALUI]
MDI_COMMAND = M429
MDI_COMMAND = M428
MDI_COMMAND = M430

三个 remap 子程序:

remap_subs/429remap.ngc -> kinstype = 0 -> IDENTITY
remap_subs/428remap.ngc -> kinstype = 1 -> XYZBC / TCP
remap_subs/430remap.ngc -> kinstype = 2 -> USERK

M428 的核心逻辑:

;M428 by remap: kinstype==1 (xyzac,xyzbc)
o<428remap>sub
  #<kinstype> = 1
  #<SWITCHKINS_PIN> = 3

   M68  E#<SWITCHKINS_PIN> Q#<kinstype>
   M66  E0 L0

o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE #<kinstype>]]
     (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 = 0M430 设置 kinstype = 2

演示 G-code

启动时自动打开:

configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc

内容:

;                            zmax zmin r   frate n  a   b  c   dist
o<xyzbc_switchkins_sub> call [10] [5]  [10][1000][3][0][20][45][20]
m2

它调用:

remap_subs/xyzbc_switchkins_sub.ngc

该子程序会在四个象限中:

  • 先用 M429 切到 Identity kinematics。
  • 设置机器坐标和 G54。
  • 调用 helix_bc,用 B/C 角度演示 TCP/五轴联动轨迹。
  • 最后回到 Identity kinematics。

工具表

路径:

configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl

内容:

T1 P1 D1
T2 P2 Z10 D8

工具表会影响 motion.tooloffset.z,并通过 HAL 连接到:

xyzbc-trt-kins.tool-offset
xyzbc-trt-gui.tool-offset

所以工具长度会同时影响运动学计算和 Vismach 显示。

运动学组件

运行时加载:

rtlib/xyzbc-trt-kins.so

源码:

src/emc/kinematics/xyzbc-trt-kins.c

相关说明文件:

configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.txt

说明文件中的核心语义:

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 输入:

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启动 linuxcncsvrrtapi_appmilltaskhalui
  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。

重要文件清单

主配置:
  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