新代数控系统车床的代码是什么?
G00 定位
G01 直线切削进程
G02/G03 圆弧切削
G4 延时等待
G10/G11 半径编程/直径编程
G11 直径编程(模态,初态)
G27 快速返回机械零点测试
G28 经中间点快速返回程序零点
G32 英制螺纹切削
G60 系统参数设置
G61 判参数值跳转
G74/G75/G76/G77 攻牙循环
G78 啄钻循环
G80 柱面锥面粗车循环
G81 端面锥面粗车循环
G82 英制螺纹加工循环
G83 公制螺纹加工循环
G84 Z轴方向切削的球面粗车循环
G85 X轴方向切削的球面粗车循环
G86 精加工子程序循环
G87 局部循环
G89 X轴方向的切槽循环
G92 浮动坐标系设定
G93 设置坐标偏置
G96 设置恒线速控制状态(模态)
G98 设置每分钟进给速度状态(初态,模态)
G99 设置每转进给速度状态(模态)
新代数控车宏程序说明
一.用户宏程序的基本概念
用一组指令构成某功能,并且像子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。
在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代表指令称为用户宏命令,也称作宏程序调用指令。
用户宏有以下四个主要特征:
1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式;
2)能够进行变量之间的各种运算;
3)可以用用户宏指令对变量进行赋值,就像许多高级语言中的带参函数或过程,实参能赋值给形参;
4)容易实现程序流程的控制。
使用用户宏时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时.只得将实际的值赋予变量即可,而不需要对每个不同的零件都编一个程序。
二. 基本书写格式
数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。当标题行含有关键字“@MACRO”时整个文档就会以系统所定义的MACRO语法处理。如果该行无“@MACRO”关键词此档案就会被视为一般ISO程序文档格式处理,此时将不能编写用户宏和使用其MACRO语法。而当书写ISO程序文档时标题行一般可以省略,直接书写数控程序。“@MACRO”关键词必须是大写字母。
对于程序的注释可以采用“//……”的形式,这和高级语言C++一样。
例一:MACRO格式文档
% @MACRO //用户宏程序文档,必须包含“@MACRO”关键词
IF @1 = 1 THEN
G00 X100.;
ELSE
G00 Z100.;
END_IF;
M99;
例二:ISO格式文档
% 这是标题行,可当作档案用途说明,此行可有可无
G00 X100.;
G00 Z100.;
G00 X0;
G00 Z0;
M99; 三. 用户宏程序的编写
如前所述,变量是指可以在用户宏程序中的地址码后代替具体数值,在调用宏程序时进行赋值的符号#i (i=1,2,3,…)。使用变量可以使用户宏程序具有通用性。用户宏程序中可以使用多个变量,以变量编号进行识别。
1、 变量的形式
变量是用符号#或@后面加上变量编号所构成的,即:
#i(i=1,2,3,…)
例如:#5
#109
#1005
也可用#[<表达式>]的形式来表示。
例如:#[#100]
#[#1001-1]
#[#6/2]
其实,通过用符号@后面加上变量编号也可构成的变量,即:
@ i(i=1,2,3,…)
例如:@5
@ [@5]
但一般地,由符号@后面加上变量编号构成的变量称为全局变量,不提倡在用户宏程序中使用,具体见后面的介绍。
2、 变量的引用
在地址符后的数值可以用变量置换。
例如:
若写成F#33,则当#33=1.5时,与F1.5相同。
若写成Z-#18,则当#18=20.0时,与Z-20.0相同。
但需要注意,作为地址符的O、N、/等,不能引用变量。
例如,O#27、N#1等,都是错误的。
3、 未定义变量
尚未被定义的变量,被称为空(VACANT)。
变量#0,@0 始终为空,经常被用作空变量使用。
3.变量赋值和引数赋值
变量赋值:用户宏程序中变量赋值使用赋值运算符“:=”,不可仅用“=”符号。因为在本系统中符号“=” 是被规定为关系运算符,用来比较是否相等的。
例如#30:=100,会将变量#30赋值为整数100;而#30=100,将不能为变量#30赋值,实际上是比较变量#30是否与整数100相等。
四.变量运算及变量表达式
1.用户宏运算符
要对变量进行各种运算操作就要用到运算符,它是“能对变量所存数据进行运算的符号”。本系统的运算符及其优先级如表3-2所示。
表3-2 运算符及其优先级
2、基本算数运算符
(1) + (加法运算符,如3+5,#12+4)
(2) – (减法运算符,或取负运算符,如#33-16,-#16)
(3) * (乘法运算符,如9*2,#13*8)
(4) / (除法运算符,如10/3,#43/15)
(5)MOD (模运算符,或称求余运算符,其两侧均应为整型数据,如7 MOD4的值为3,当#18=20时#18 MOD4的值为2)
3、算术表达式和运算符优先级
用算术运算符和括号将运算对象连接起来的、符合语法规则的式子称为算术表达式,运算对象可以是常数、变量、函数等。
例如:#6*8/#32-1.5+#18+ ROUND(#1)
这就是一个算术运算式,它可以作为一个整体赋值给某个变量,或用作其他表达式中的一个运算对象。
本系统按表表3-2规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如表达式#12-#41*5的左侧为减,右侧为乘号,而乘号优先于减号,因此,相当于#12-(#41*5)。
如果在一个运算对象两侧的运算符的优先级别相同,如#2-5+#23,则按规定的结合性(结合方向)处理,算术运算符的结合方向为“自左至右”,即先左后右。因此5先与减号结合,执行#2-5的运算,再执行加#23的运算。这样“自左至右的结合方向”又称为“左结合性”,即运算对象先与左面的运算符结合;对应地,也有“右结合性”的运算符,例如赋值运算符“:=”就是。
4、关系运算符和关系表达式
关系运算符是逻辑运算中比较简单的一种。所谓“关系运算”实际上就是“比较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。
例如,#3>10是一个关系表达式,大于号(>)是一个关系运算符,如果#3=12,则满足给定的“#3>10”条件,因此关系表达式的值为“真”(即“条件满足”);如果#3=6,不满足“#3>10”条件,则称关系表达式的值为“假”。
本系统提供6种关系运算符:
关于优先次序:
1、前4种关系运算符(<,<=,>,>=)的优先级别相同,它们却高于关系运算符“=”,而“=”又高于“<>”
2、关系运算符的优先级低于算术运算符。
3、关系运算符的优先级高于赋值运算符。
用两个关系运算符将两个表达式连接起来的式子,称为关系表达式。
例如:#6>36,#13+4<>#23
关系表达式的值是一个逻辑值,即“真”或“假”。例如,若#12为8,则关系表达式“#12=10”的值为“假”,“#12>=6”的值为“真”。
5、逻辑运算和逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。
本系统提供6种逻辑运算符和逻辑运算
(1) &,AND 逻辑与
(2) XOR 逻辑或
(3) OR 逻辑异或
它们都是“双目(元)运算符”,它要求有两个运算量(操作数),逻辑运算举例如下:
#1 AND #2 若#1 、#2为真,则#1 AND #2为真。
#1 OR #2 若#1 、 #2之一为真,则#1 XOR #2为真。
逻辑运算符低于关系运算符,见图3-1。
五. 用户宏程序的流程控制
所谓程序的流程(Flow Control)是通过控制程序的执行方向,进而掌握程序动态。这用户宏程序区别于一般数控程序的特征之一,也是用户选择用户宏程序编写数控代码的一大理由。用户宏程序的流程控制包括无条件判断、循环控制、无条件转移三大类,这与其他的高级语言程序类似,下面将分别介绍其功能和使用语法。
1、条件判断
判断条件的真假,然后根据真假或者对应情况到指定的地方去执行程序,这方面的语句有IF和CASE语句。
1、IF条件语句
1)基本语法:
IF <条件表达式> THEN→<操作>→ELSEIF <条件表达式> THEN→<操作>→ELSE→<操作>→END_IF;
说明:IF条件判断,根据真假情况到指定的地方去执行程序。
例如:
% @MACRO // 启动MACRO语法
#1 := 3.0;
G01 X20. Z15. F200;
IF #1 = 1 THEN;X(1.0*1);Z(1.0*1);
ELSEIF #1 = 2 THEN;X(1.0*2);Z(1.0*2);
ELSEIF #1 = 3 THEN;X(1.0*3);Z(1.0*3);
ELSE;X(1.0*4);Z(1.0*4);
END_IF;X(1.0)Z(1.0);
M30;
然而在实际使用中,可以有以下一些变形:
2)变形1
语法:
IF <条件表达式> THEN→<操作>→ELSE→<操作>→END_IF;
3)变形2
语法:
IF <条件表达式> THEN→<操作>→END_IF;
编程时可根据需要选择合适的语法格式。
2、循环控制
1、REPEAT直到型循环
语法:
REPEAT
<循环体>
UNTIL <条件表达式> END_REPEAT;
说明:REPEAT直到型循环控制,先执行循环体,后判断条件表达式,当条件满足时退出循环。
例如:
% @MACRO // 启动MACRO语法
#10 := 30.;
#11 := 22.5.;
#12 := #10/2;
#13 := #11/2;
#14 := 2.0;
#15 := 1.5;
G01 X#12 Z#13 F200.0;
REPEAT
G00 X(#12+#14) Z(#13+#15);
G01 X(#12+#14) Z(#13-#15);
X(#12-#14) Z(#13-#15);
X(#12-#14) Z(#13+#15);
X(#12+#14) Z(#13+#15);
#14 := #14 + 2.0;
#15 := #15 + 1.5;
UNTIL (#14 > #12) OR (#15 > #13) END_REPEAT;
X(1.0) Z(1.0);
M30;
3.WHILE当型循环
语法:
WHILE <条件表达式> DO→<循环体>→END_WHILE;
说明:WHILE当型循环控制,先判断条件表达式,当条件满足时执行循环体,否则退出循环。
例如:
% @MACRO;
#10 := 20.;
#11 := 15.;
#12 := #10/2;
#13 := #11/2;
#14 := 2.0;
#15 := 1.5;
G01 X#12 Z#13 F200.0;
WHILE (#14 <= #12) AND (#15 <= #13) DO
G00 X(#12+#14) Z(#13+#15);
G01 X(#12+#14) Z(#13-#15);
X(#12-#14) Z(#13-#15);
IF #14 > 6.0 THEN
EXIT;
END_IF;
X(#12-#14) Z(#13+#15);
X(#12+#14) Z(#13+#15);
#14 := #14 + 2.0;
#15 := #15 + 1.5;
END_WHILE;
X(-5.0) Z(5.0);
M02;
4.FOR循环
语法:
FOR <循环变量> := <表达式1> TO <表达式2> [ BY <表达式3>] DO
<循环体>
END_FOR;
说明:FOR循环控制,式中各参数意义如下
循环变量——控制循环次数的变量;
表达式1——循环计数的起始值,可为整数或表达式;
表达式2——循环计数的终止值,可为整数或表达式;
表达式3——循环计数每次的累加值,可为整数或表达式;
循环体 ——循环每次执行内容;
FOR循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次累加值,
5、无条件转移
GOTO转移语句
语法:
GOTO n;
说明:无条件地跳到指定的n行号执行,其中n可为整数或表达式。GOTO常和IF语句搭配使用,那就是说当程序检查到某个条件满足时用GOTO语句去进一步处理,但应尽量少用该语句以提高程序可读性。
范例:
% @MACRO // 启动MACRO语法
…
IF( #1 = 2 ) THEN GOTO 100;
G01 X10. Z10.;
…
N100 G01 X30. Z30.;
…
M02;
EXIT循环中断语句
语法:EXIT;
说明:循环中断,跳离循环控制;用在循环控制中,通常EXIT都和IF语句搭配使用,当某个条件满足后就跳离循环。
请参考WHILE范例。
六. 库函数
1、ABS
调用方法:ABS(<参数>)
函数描述:求一个数的绝对值
范例:
#1 := ABS(-2.3); // #1 的结果是 2.3
[注]:此处函数内“参数”既可为实际数值,也可为变量或表达式,以下若无特殊说明均按此处理。
2、SIN
调用方法:SIN (<参数>)
函数描述:求一个数的正弦值
范例:
#1 := SIN(#10);
3、ASIN
调用方法:ASIN (<参数>)
函数描述:求一个数的反正弦值
范例:
#1 := ASIN(#10);
4、MAX
调用方法:MAX(<参数1,参数2>)
函数描述:求两个数的最大值
范例1:
#1 := MAX(10,20); // #1等于20
范例2:
#1 := MAX(#2,#3);
5、SQRT
调用方法:SQRT (<参数>)
函数描述:求一个数的平方根值
范例1:
#2 := SQRT(3); // #2 等于 1.732
范例2:
#16 := SQRT(#10);
6、SIGN
调用方法:SIGN (<参数>)
函数描述:返回一个数的符号,-1表示该数是负数,1表示该数是正数,0表示该数是零。
范例:
IF( SIGN(#10) > 0 ) THEN
…
END_IF;
5、 CEIL
调用方法:CEIL(<参数>)
函数描述:返回比一个数大或与其相等的最小整数
范例1:
#2 := CEIL(2.3); // #2 等于 3
范例2:
#2 := CEIL(#10);
7、ROUND
调用方法:ROUND (<参数>)
函数描述:四舍五入化整,
范例1:
#2 := ROUND(2.3); // #2 等于 2
范例2:
#2 := ROUND(#10);
七.用户宏程序编写注意事项
1. 用户宏文档第一行必须为%@MACRO;程序段的每一行结束需加“;”结束符;对于用户宏子程序最后需加“M99;”,以便能返回到主程序。
2. 变量赋值使用“:=”符号,不可仅用“=”符号。
3. 文档名储存需依照下列规则。例如:编写G100之MACRO,需将该MACRO程序存在C:\\CNC\\MACRO目录底下,且文件名需为G0100,不需扩展名。而编写G100.1之MACRO,需将该MACRO程序存在C:\\CNC\\MACRO目录底下,且文件名需为G100001,不需扩展名。
4. 请多使用局部变量(#1~#50), 模态变量(#2001~#2100,#3001~#3100)为所有扩充G码的共享资源,请仅用于多个扩充G码间的数据交换,以节省共享资源;如果需要系统定义的初始值,请使用用户参数( #4001~#4100,#5001~ #5100 )。
5. 请不要使用全局变量(Global Variables,@1~@999),因为G码执行时,使用者的数据是由自变量(A_,B_…,Z_)传入,由公共变量传递不符合使用习惯。
6. 系统在执行加工时对于MACRO程序会事先预编译,因此MACRO执行速度会超前于G、M 代码指令,因此当要求变量赋值或数据读取须与G、M代码指令发出的时间进程相同时,请于变量赋值或数据读取前加WAIT()指令,否则该变量赋值或该数据读取将无法与G、M 代码同步。
7. 不可改变模式G码(G00/G01/G02/G03/G33/G34/G35,G91/G90,G40/G41/G42,…,)的状态,如果用户宏程序中需要改变其状态时,就需要模态信息的回复,
8. 对于长度或角度的自变量在运算前请使用STD()函数将单位标准化,以符合工具机使用习惯。
9. 不可以改变坐标系统设定,G92/G54/G52等与坐标系统相关指令不能使用,否则图形仿真功能将失去参考意义。
10. 请在程序中加上必要的注释,养成良好的编程习惯,以增加程序可读性和可维护性,以帮助后续开发人员维护和排除问题。
附录Ⅳ 运算符及其优先级
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。