727 lines
19 KiB
Markdown
727 lines
19 KiB
Markdown
# 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
|
||
<?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 文件
|
||
|
||
路径:
|
||
|
||
```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="<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:
|
||
|
||
```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
|
||
#<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 = 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<xyzbc_switchkins_sub> 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
|
||
```
|