宏程序语句

宏程序语句
和NC 语句
下面的程序段为宏程序语句:
? 包含算术或逻辑运算(=)的程序段。
? 包含控制语句(例如,GOTO,DO,END)的程序段。
? 包含宏程序调用指令(例如,用G65,G66,G67 或其它G 代码,M 代码
调用宏程序)的程序段。
除了宏程序语句以外的任何程序段都为NC 语句。
说明
? 即使置于单程序段运行方式, 机床也不停止。但是, 当参数
N0.6000#5SBM 设定为1 时,在单程序段方式中,机床停止。
? 与NC 语句的不同
? 在刀具半径补偿方式中宏程序语句段不做为不移动程序段处理(见Ⅱ-
15.7 节)。
如果NPS(参数N0.3450#4)为1,满足以下条件时程序段中的NC 语句
可认为与宏程序语句性质相同。
? 与宏程序语句有相
同性质的NC 语句
? 含有子程序调用指令(例如,用M98 或其它M 代码或用T 代码调用子
程序)但没有除O,N 或L 地址之外的其它地址指令的NC 语句其性质
与宏程序相同。
? 不包含除O,N,P 或L 以外的指令地址的程序段其性质与宏程序语句
相同。
15.5.2 IF 之后指定条件表达式。
条件转移
(IF 语句)
IF[<条件表达式>] GOTO n
如果指定的条件表达式满足时,转移到标有顺序号n 的程序段。如果指定
的条件表达式不满足,执行下个程序段。
如果变量#1 的值大于10,转移到顺序号N2 的程序段。
IF[#1GT10]GOTO2;
如果条件满足
程序
如果条件不满足
N2 G00 G91 X10.0;
IF[<条件表达式
>]THEN
如果条件表达式满足,执行预先决定的宏程序语句。只执行一个宏程序语
句。
如果#1 和#2 的值相同,0 赋给#3。
IF〔#1 EQ #2〕THEN #3=0;
说明
·条件表达式 条件表达式必须包括算符。算符插在两个变量中间或变量和常数中间,并
且用括号 (〔,〕)封闭。表达式可以替代变量。
运算符由2 个字母组成,用于两个值的比较,以决定它们是相等还是一个
值小于或大于另一个值。注意,不能使用不等符号。
·运算符
表15.5.2 运算符
运算符 含义
EQ 等于(=)
NE 不等于(≠)
GT 大于(>)
GE 大于或等于(≥)
LT 小于(<)
LE 小于等于(≤)
·示例程序 下面的程序计算数值1~10 的总和
〇9500
#1=0;???????????存储和数变量的初值
#2=1;???????????被加数变量的初值
N1 IF〔#2 GT 10〕GOTO2;??当被加数大于10 时转移到N2
#1=#1+#2;?????????计算和数
#2=#2+#1;?????????下一个被加数
GOTO1;??????????转到N1
N2 M30;??????????程序结束





功能 格式 备注
定义 #i=#j
加法 #i=#j+#k;
减法 #i=#j-#k;
乘法 #i=#j*#k;
除法 #i=#j/#k;
正弦 #i=SIN[#j];
反正弦 #i=ASIN[#j];
余弦 #i=COS[#j];
反余弦 #i=ACOS[#j];

正切 #i=TAN[#j];
反正切 #i=ATAN[#j]/[#k];
角度以度指定。90°30′
表示为90.5 度。
平方根 #i=SQRT[#j];
绝对值 #i=ABS[#j];
舍入 #i=ROUND[#j];
上取整 #i=FIX[#j];
下取整 #i=FUP[#j];
自然对数 #i=LN[#j];
指数函数 #i=EXP[#j];
或 #i=#j OR #k;
异或 #i=#j XOR #k;
与 #i=#j AND #k;
逻辑运算一位一位地按
二进制数执行。
从BCD 转为BIN #i=BIN[#j];
从BIN 转为BCD #i=BCD[#j]; 用于与PMC 的信号交换
转移和循环
在程序中,使用GOTO 语句和IF 语句可以改变控制的流向。有三种转移
和循环操作可供使用:
转移和循环 GOTO 语句(无条件转移)
IF 语句(条件转移:IF?THEN?)
WHILE 语句(当?时循环)
转移到标有顺序号n 的程序段。当指定1 到99999 以外的顺序号时,出现
P/S 报警No.128。可用表达式指定顺序号。
15.5.1
无条件转移
(GOTO 语句)
GOTOn;n:顺序号(1~99999)
例:
GOTO1;
GOTO#10;
15.5.3 循环
(WHILE 语句)
在WHILE 后指定一个条件表达式,当指定条件满足时,执行从DO 到END
之间的程序。否则,转到END 后的程序段。
WHILE [条件表达式]DO m;(m=1,2,3)

如果条件不满足
END m;
如果条件满足程序
当指定的条件满足时,执行WHILE 从DO 到END 之间的程序。否则,
转而执行END 之后的程序段。这种指令格式适用于IF 语句。DO 后的号
和END 后的号是指定程序执行范围的标号,标号值为1,2,3。若用1,
2,3 以外的值会产生P/S 报警No.126。用下面的方法调用宏程序:
15.6
宏程序调用
宏程序调用 非模态调用(G65)
—— 模态调用(G66,G67)
—— 用G 代码调用宏程序
—— 用M 代码调用宏程序
—— 用M 代码调用子程序
—— 用T 代码调用子程序
限制
? 宏程序调用和子程 宏程序调用(G65)不同于子程序调用(M98),如下所述。
序调用之间的差别 ? 用G65,可以指定自变量(数据传送到宏程序)。M98 没有该功能。
? 当M98 程序段包含另一个NC 指令(例如,G01 X100.0 M98Pp)时,在指
令执行之后调用子程序。相反,G65 无条件地调用宏程序。
? M98 程序段包含另一个NC 指令(例如,G01 X100.0 M98Pp)时,在单程
序段方式中,机床停止。相反,G65 机床不停止。
? 用G65,改变局部变量的级别。用M98,不改变局部变量的级别。

说明
? 呼调 ? 在G65 之后,用地址P 指定用户宏程序的程序号。
? 当要求重复时,在地址L 后指定从1 到9999 的重复次数。省略L 值时,
认为L 等于1。
? 使用自变量指定,其值被赋值到相应的局部变量。
可用两种形式的自变量指定。自变量指定I 使用除了G,L,O,N 和P 以
外的字母,每个字母指定一次。自变量指定Ⅱ使用A,B,C 和Ii,Ji 和
Ki(i 为1~10)。根据使用的字母,自动地决定自变量指定

的类型。
? 自变量指定
自变量指定I
地址 变量号
T #20
U #21
V #22
W #23
X #24
Y #25
Z #26
地址 变量号
I #4
J #5
K #6
M #13
Q #17
R #18
S #19
地址 变量号
A #1
B #2
C #3
D #7
E #8
F #9
H #11
? 地址G,L,N,O 和P 不能在自变量中使用。
? 不需要指定的地址可以省略,对应于省略地址的局部变量设为空。
? 地址不需要按字母顺序指定。但应符合字地址的格式。但是,I,J 和
K 需要按字母顺序指定。
例:
B_A_D_??J_K_ 正确
B_A_D_??J_I_ 不正确
调用宏程序的主程序 O0003;
G50 X100.0 Z200.0;
S1000 M03;
G66 P9110 U5.0 F0.5;
G00 X60.0 Z80.0
Z50.0
Z30.0
G67;
G00 X00.0 Z200.0 M05;
M30;
? 宏程序 O9110;
(被调用的程序) G01U-=#21F#9??????????加工
G00U#21????????????撤回刀具
M99;


有一椭圆,长轴b=25,短轴a=18,现在加工其右半部分,工件坐标系设在右端面。

主程序:
N10 G98 G21 F60
N20 T0101
N30 M03 S600
N40 G00 X40 Z5;设毛坯为φ38mm
N50 #105=38
N60 IF #105 GT 0
N70 G65 P1015 A18 B25 C25 D0 K1;A--#1,B--#2,C--#3,D--#7,K--#6
N80 G00 X40 Z5
N90 #105=#105-1
N100 GOTO 60
N110 G00 X80 Z80
N120 M05
N130 M30


子程序:
O1015
N10 #5=[#1+#1]*SQRT[1-#2*#2/#3/#3];[X=2a ]
N20 G01 X[#5+#105] Z[#2-#3]
N30 #2=#2-#6;Z轴方向切削的步长为1
N40 IF [#2 GE #7] GOTO 10
N60 M99

注意:这是一个通用的椭圆加工宏程序,只要改变起刀点的坐标和G65指令中的A、B、C三个赋值(椭圆的长轴和短轴的长度),即可加工任意椭圆。

相关文档
最新文档