GSP(G代码程序)的执行方式与 ACSPL+ 缓冲区类似,即 每个控制周期执行一行代码。但 运动指令(G0/G1/G2/G3) 的触发规则较为特殊,需特别注意,否则可能导致程序逻辑错误。
1. 基本执行规则
(1) 非运动指令(同步执行)
-
G代码中的大多数指令(如G17/G20/G90等) 仅用于 设置内部状态或计算,会 立即执行,不影响运动队列。
-
示例:
G90 ; 立即切换为绝对坐标模式 G17 ; 立即选择XY平面
(2) 运动指令(G0/G1/G2/G3 - 异步触发)
-
关键规则:
-
运动不会在遇到
G0/G1/G2/G3
时立即启动,而是 等到下一条运动指令出现时才真正执行。 -
这种设计是为了优化 多轴插补,确保运动平滑衔接。
-
-
示例:
N10 G00 X100 ; 运动未启动,仅加入队列 N20 G01 Y200 ; 此时 N10 和 N20 的运动同时开始
-
执行顺序:
-
N10
的G00 X100
被 缓存,但 不立即执行。 -
N20
的G01 Y200
触发 N10 和 N20 的运动同时开始(X/Y 轴同步移动)。
-
-
2. GSP 与 ACSPL+ 混合编程的潜在问题
错误案例
N10 G00 X1000 Y1000 ; 运动未启动,仅缓存 TILL RPOS(X) > 500 ; 等待 X 轴位置 > 500 N20 G00 Z1000 ; 由于 TILL 阻塞,程序无法执行到 N20
-
问题:
-
TILL
会一直等待X > 500
,但X
轴的运动 尚未开始(因为N20
未执行)。 -
导致 死锁,程序卡在
TILL
无法继续。
-
正确写法
N10 G00 X1000 Y1000 ; 运动缓存 N20 G00 Z1000 ; 触发 N10 和 N20 的运动 TILL RPOS(X) > 500 ; 此时 X 轴已在运动,条件可满足
-
关键点:
-
先发送所有运动指令,再执行
TILL
等待。 -
确保 运动已真正启动,再检测位置。
-
3. G 代码模态与隐含运动功能
-
模态影响:
-
如果一行 G 代码 未指定运动指令(G0/G1/G2/G3),但包含 坐标轴(X/Y/Z等),则 沿用最近一次的运动模式。
-
示例:
N10 G01 X100 ; 线性插补 N20 Y200 ; 隐含 G01(沿用 N10 的模式)
-
N20
没有写G01
,但仍按G01
执行。
-
-
4. 总结 & 编程建议
规则 | 说明 | 示例 |
---|---|---|
非运动指令 | 立即执行 | G90 , G17 |
运动指令(G0/G1/G2/G3) | 需下一条运动指令触发 | G00 X100 + G01 Y200 → 同时执行 |
TILL / WAIT 使用 | 必须确保运动已启动 | 先发 G00 ,再 TILL RPOS(X)>500 |
模态隐含运动 | 未写 G 代码时沿用最近模式 | G01 X100 → Y200 (仍为 G01 ) |
最佳实践
-
避免在运动指令之间插入
TILL
/WAIT
,否则可能死锁。 -
连续运动指令尽量集中,确保插补优化。
-
检查模态状态,防止隐含运动模式导致意外行为。
通过合理规划 GSP 和 ACSPL+ 的混合编程,可避免运动控制中的常见陷阱。