一段话讲清 CNC 机床 S 语言定义
程序采用字地址格式编写,这种格式源自 RS-274,后来标准化为 ISO 6983。每个字由一个字母加一个数字组成:G01、X25.4、F250、S8000、T07。控制器从左到右解析该行,把每个字母分配到对应寄存器,然后把该程序段作为一条运动指令执行。
字母就是地址,地址决定数字的含义。X 始终是 X 轴上的位置,F 始终是进给,S 始终是主轴转速。换一个字母,同样的数字含义就不同。这就是这门语言的全部诀窍:字母表很小,却被反复用于多种用途。
程序段之间用程序段结束字符分隔,具体是分号还是换行取决于控制器。有些控制器允许一个程序段多条指令,有些则每行只允许一条运动指令。一个能在 Fanuc 风格铣床上运行的程序,如果不修改后处理,放到 Heidenhain 或 Siemens 控制器上可能报格式错误。
这就是为什么定义在机床上重要,而不只是在手册里重要。当操作员看到 N340 行报警时,他们读的不是一句话,而是一张寄存器映射表,修复方法几乎总是某个地址写错或某个模态状态不对。
各地址字母控制什么
G 设定模式:快速、进给、圆弧、固定循环、坐标系。M 设定机床功能:主轴启动、切削液开启、换刀、程序结束。G 和 M 一起承载了大部分逻辑。字母表中其余字母承载这些逻辑所作用的数字。
X、Y、Z 给出当前工件坐标系中的目标点。I、J、K 给出圆弧中心偏移或固定循环深度,具体取决于当前生效的 G 代码。R 给出退刀平面或圆弧半径。U、V、W 通常是同一轴上的增量移动。
F 是进给率,可以是每分钟进给(G94)或每转进给(G95)。S 是主轴转速,单位为 rpm;当 G96 启用恒线速时,S 表示线速度。T 选择刀具,在车床上通常也选择刀补。N 只是行号,完全没有运动含义。
D 和 H 从偏置表中选取刀具半径或长度偏置。P 和 Q 出现在子程序调用、暂停时间和固定循环参数中。同样的字母在不同控制器上含义会变,所以在信任后处理之前,务必查阅你所操作机床的控制器手册。
模态状态、默认值以及程序为何会跑偏
大多数 G 代码是模态的。它们保持生效,直到同一组中的另一个代码替换它们。G01 保持生效,直到调用 G00、G02 或 G03。这很高效,但也意味着缺失的 G 代码会继承之前运行的状态。
模态组是防护栏。控制器会拒绝同一程序段中来自同一组的两个 G 代码,因为它无法同时执行两者。进给模式、平面选择、单位和距离模式各自位于自己的组中。如果混用组,你会得到报警,而不是静默错误。
单位是最常见的陷阱。G20 是英寸,G21 是毫米。一个按英寸后处理输出的程序在毫米模式下运行,移动距离会比预期远 25.4 倍。对于公差为 ±0.005 mm 的零件,这不是报废,而是撞机。
上电默认值是第二个陷阱。复位后,控制器回到默认设置:通常是 G00、G17、G21 或 G20、G40、G49、G80、G90。如果程序假定另一种状态却没有明确声明,前几个程序段就会在错误模式下运行。务必在程序开头附近声明单位、平面和距离模式。
CNC 机床 S 语言定义在哪里不再通用
不存在单一的 CNC 语言。ISO 6983 定义的是字结构,而不是完整词汇表。Fanuc、Siemens、Heidenhain、Mitsubishi、Mazak 和 Haas 实现的代码集有重叠但各不相同。在一个控制器上表示钻孔循环的 G 代码,在另一个控制器上可能表示别的含义,或者没有含义。
Fanuc 风格控制器最接近通用基线,大多数后处理默认采用这种方言。Siemens ShopMill 和 Sinumerik 使用更多循环调用和命名参数。Heidenhain 使用纯文本对话式程序段,看起来完全不像 G 代码。Mazak Smooth 和 Haas 有自己的扩展。
宏程序进一步拉大差距。Fanuc 自定义宏 B、Siemens R 参数和 Okuma 变量让程序员能在程序内编写循环和算术运算。这对零件族加工很强大,同时也意味着程序不重写就无法迁移到另一个控制器。
实用规则:把后处理器和控制器手册当作一个整体。程序的可移植性只取决于两者的一致程度。当工件在我们 5 轴加工中心和客户自己的机床之间转移时,我们针对目标控制器做后处理,而不是针对生成模型的那台控制器。
这门语言在车间里如何体现
车间里的术语是程序功能的简写。固定循环是重复钻孔或攻丝模式的 G81、G83 或 G84 程序段。子程序是通过 M98 调用的已存储例程。宏程序是由变量驱动、自行计算数值的程序段。
刀具偏置是告诉控制系统切削刃实际位置的 D 或 H 值。对刀是手动点动刀具下降,直到它刚好接触工件或量块的那一刻,该点即成为零点基准。对刀出错,所有尺寸都会偏移相同的误差。
撞机是刀具、刀柄、工件或工装夹具之间的任何意外接触。损失的不只是刀具,还有主轴、工装夹具和排产计划。与五轴加工中撞坏刀柄相比,首次运行前的仿真成本很低。
让刀具远离零件进行空运行、单段执行并抬高快速移动平面,可在主轴转动前发现大部分问题。但这些都不能替代阅读代码。控制系统严格按指令执行,包括错误指令。
地址字母及其含义
Fanuc 风格控制系统中的常见含义。不同方言的差异请查阅各自手册。
| 地址 | 携带内容 | 典型示例 |
|---|---|---|
| G | 运动模式与循环选择 | G01、G81、G84 |
| M | 机床开/关功能 | M03、M08、M30 |
| X Y Z | 当前工件坐标系中的目标点 | X25.4 Y0 Z-3.0 |
| I J K | 圆弧中心或循环深度 | I10.0 J0 K-2.5 |
| R | 退刀平面或圆弧半径 | R2.0 |
| F | 每分钟或每转进给率 | F250 或 F0.15 |
| S | 主轴转速,单位 rpm | S8000 |
| T | 刀具号,有时为偏置号 | T07 |
| H D | 长度或半径偏置号 | H07 D07 |
| N | 行号,无运动含义 | N340 |
工程师关于 CNC 代码的常见问题
G 代码与 ISO 6983 相同吗?
ISO 6983 定义了字地址结构和一组核心代码。G 代码是用该结构编写的程序的通用名称。实际控制系统会增删或重定义代码,因此两台机床都能运行 G 代码,却未必能运行彼此的程序。
为什么我的程序在一台机床上报警,在另一台上却能运行?
模态组不同、循环语法不同,或该控制系统不存在某个代码。Siemens 和 Heidenhain 对循环和参数的处理与 Fanuc 风格控制系统不同。请针对目标控制系统重新后处理,并对照手册检查报警行。
我需要学习宏程序编程吗?
单件零件不需要。加工尺寸变化的相似零件族,或需要在程序内进行数学运算和逻辑判断时,宏程序才有价值。它也会把程序锁定到某一控制系统系列,需权衡可移植性成本。
模态在实际中意味着什么?
模态代码会保持有效,直到同组的另一代码将其替换。这就是缺少 G01 可能让机床处于快速移动状态的原因,也是应在每个程序开头声明单位和平面选择、而非默认假设的原因。
这种语言能把公差控制到多紧?
语言承载的是数值,不是精度。在我们的五轴加工中心上,几何和材料允许时,可保持 ±0.005 mm 公差和 Ra 0.2–0.8 μm 表面粗糙度。控制系统、刀具和装夹决定实际极限。
你们能根据客户现有的 G 代码编程吗?
可以,前提是图纸和目标控制系统明确。我们会重新后处理到我们的机床,仿真刀路,并在首次切削前标出任何依赖特定控制系统功能的程序段。
