法兰克用户宏程序
WHILE […] DO 2; ﹕
END1; 程序;
END2;
转移不能进入循环区: IF […] GOTO n;
﹕
WHILE […] DO 1; N1…; END1;
41
六、宏程序调用
宏程序调用方法: ①非模态调用(G65) ②模态调用(G66、G67) ③用G代码调用宏程序 ④用M代码调用宏程序 ⑤用M代码调用子程序 ⑥用T代码调用子程序
20、异或: #i=#j XOR #k ; 21、与: #i=#j AND #k ;
按位执行
22、从BCD转为BIN #i=BIN[#j ];
23、从BIN转为BCD #i=BCD[#j ];
注:
①ARCSIN #i=ASIN[#j] 取值范围
当No.6004.0=0时 :270°~90°
No.6004.0=1时 :-90°~90°
25
6、正弦: 7、反正弦: 8、余弦: 9、反余弦: 10、正切:
#i=SIN[#j] ; #i=ASIN[#j]; #i=COS[#j]; #i=ACOS[#j]; #i=TAN[#j];
角度以度指定 90°30′表示为 90.5度
11、反正切: #i=ATAN[#j]/[#K];
12、平方根: #i=SQRT[#j];
31
⑥运算次序 函数→乘、除(*、/、AND)→加、减(+、、OR、XOR)
⑦括号嵌套(方括号[],圆括号用于说明) 括号用于改变运算次序,可以使用5级。
32
四、宏程序语句和NC
下面的程序段为宏程序语句: ●包含算术或逻辑运算(=)的程序段。 ●包含控制语句(例如,GOTO,DO,END)
的程序段。 ●包含宏程序调用指令(例如,用G65,G66,
条件不满足
END m; 程序; 说明:① m=1,2,3,可以多次使用。 ② 最多嵌套三层。 ③ 省略WHILE,则产生从DO 到END的
无限循环。 ④ WHILE比GOTO 处理快。
39
标号可以多次使用:
WHILE […] DO 1; 程序;
END1; ﹕
WHILE […] DO 1; 程序;
END1;
N#2G00X100.0 /#3Y200.0
12
二、系统变量
1、刀具补偿值
13
2、时间信息
14
3、自动运行控制 可以改变自动运行的控制状态
15
●当电源接通时,该变量的值为0。 ●当单程序段停止无效时,即使单程序段开
关设为ON,也不执行单程序段停止。 ●当不指定等待辅助功能(M,S和T功能)完
可以跳到循环外边:
WHILE […] DO 1; IF […] GOTO n;
END1; N1
可以嵌套3层:
WHILE […] DO 1; ﹕
WHILE […] DO 2; ﹕
WHILE […] DO 3; 程序;
END3; ﹕
END2; ﹕
END1;
40
DO的范围不能交叉:
WHILE […] DO 1; 程序;
M99;
#1=4; G65 P5 A5; ﹕ ﹕
用户宏程序
虽然子程序对编制相同加工操作的程 序非常有用,但用户宏程序由于允许使 用变量、算术和逻辑运算及条件转移, 使得编制相同加工操作的程序更方便, 更容易。可将相同加工操作编为通用程 序,如型腔加工宏程序和固定加工循环 宏程序。使用时,加工程序可用一条简 单指令调出用户宏程序,和调用子程序 完全一样。
下列的运算可以在变量中执行。运算符 右边的表达式可包含常量和/或由函数或 运算符组成的变量。表达式中的变量#j和 #k可以用常数赋值。左边的变量也可以用 表达式赋值。
1、(定义)赋值: #i=#j; 2、加法: #i=#j+#k 3、减法: #i=#j-#k 4、乘法: #i=#j*#k 5、除法: #i=#j/#k
②ARCCOS #I=ACOS[#j] 取值范围
180°~0°
27
3π/2 π
π/2
-1 0 1
π/2 -1
01 -π/2
π π/2 -1 0 1
28
③ ARCTAN #i=ATAN[#j]/[#K]; 取值范围 当No.6004.0=0时 :0°~360° No.6004.0=1时 :-180°~180°
1
(最多999次)
2
3
4
一、变量
1、变量
使用用户宏程序时,数值可以直接指定或用 变量指定。当用变量时,变量值可用程序或用 MDI面板上的操作改变。
#1=#2+100;
G01 X#1 F300;
2、变量的表示
计算机允许使用变量名,用户宏程序不行。 变量用变量符号(#)和后面的变量号指定。
表达式可以用于指定变量号。此时,表达式 必须封闭在括号中。
G67或其它G代码,M代码调用宏程序) 的程序段。 除了宏程序语句以外的任何程序段都为 NC语句。
33
说明 ● 与NC语句的不同
①即使置于单程序段运行方式,机床 也不停止。但是,当参数No.6000.5SBM 设定为1时,在单程序段方式中,机床停 止。
②在刀具半径补偿方式中宏程序语句 段不做为不移动程序段处理。
7
被引用变量的值根据地址的最小设定单位自 动地舍入。
例如: G00 X#1, 以1/1000mm的单位执行时, CNC把12.3456赋值给变量#1,实际指令值为 G00 X12.346;。
改变引用变量的值的符号,要把负号(一)放 在#的前面。
例如:G00 X-#1;
当引用未定义的变量时,变量及地址字都被 忽略。
45
自变量指定Ⅰ、Ⅱ混合。CNC内部能够自动 识别自变量指定Ⅰ、Ⅱ,后指定的有效。 例如: G65 A1.0 B2.0 I-3.0 I4.0 D5.0 P1000;
则 #1=1.0 #2=2.0 #3 #4=-3.0 #5= #6 #7=4.0 #7=5.0
46
调用嵌套和局部变量的级别:可以嵌套4级。
GT 大于(>) GE 大于等于(≥) LT 小于(<) LE 小于等于(≤)
37
例:求1~10的总和。 O9000; #1=0; #2=1; N1 IF[#2 GT 10] GOTO 2; #1=#1+#2; #2=#2+1; GOTO 1; N2 M30;
38
3、循环 WHILE[<条件表达式>] DO m; 条件满足 程序 ;
34
● 与宏程序语句有相同性质的NC语句 ①含有子程序调用指令(例如,用M98
或其它M代码或用T代码调用子程序) 句 ②不包含O.N.P或L以外的指令地址的
程序段其性质与宏程序语句相同。
35
五、转移和循环
使用GOTO语句和IF语句可以改变控制的流 向。有三中转移和循环可供使用。
GOTO无条件转移 IF条件转移 WHILE当型循环 1、无条件转移 GOTO n; n为顺序 例如:GOTO 1;
变量号 地址
#4 T
#5 U
#6
V
#13 W
#17 X
#18 Y
#19 Z
变量号 #20 #21 #22 #23 #24 #25 #26
注:每个字母只指定一次,可以不按顺序,但I、J、K需
按顺序指定。
44
自变量指定Ⅱ
地址 A B C I1 J1 K1 I2 J2 K2 I3 J3
变量号 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11
13、绝对值: #i=ABS[#j];
14、舍入: #i=ROUND[#j];
15、上取整: #i= FUP[#j] ;
16、下取整: #i= FIX[#j] ;
17、自然对数: #i=LN[#j]; y=lnx
18、指数函数: #i=EXP[#j]; y=ex
26
19、或: #i=#j OR #k ;
主程序
(0级)
O001; ﹕ #1=1; G65 P2 A2; ﹕ ﹕ M30;
局部变量
(0级)
#1 1 ﹕
#33
宏程序(1级) 宏程序(2级) 宏程序(31级)宏程序(4级)
O002; ﹕
O003; ﹕
O004; ﹕
O005; ﹕
#1=2; G65 P3 A3; ﹕ ﹕
M99;
#1=3; G65 P4 A4; ﹕ ﹕
●当准确停止检测无效时,即使那些不执行切削 的程序段也不进行准确停止检测(位置检测)。
18
攻丝循环中使用变量3004的例子
N5 N7
19
4、已加工的零件数
20
5、当前位置(只读)
21
●图中第1位代表轴号(从1到4)。 ●变量#5081—#5084存储的刀具长度偏置值
是当前的执行值,不是后面的程序段的 处理值。
0~2π 0~π
0~-π
2π
第四象限
3π/2
第二象限
π
第三象限
π/2
第一象限
0
第二象限 第四象限
π
π/2
0
第一象限
-π/2
第三象限
-π
29
④ROUND函数
●在逻辑运算指令IF、WHILE中,ROUND函数在第 一个小数位四舍五入。
例如 #2=1.2345;
#1=ROUND[#2]; 变量1的值是1.0
例如: #1
#[#1+#2-12]
5
3、变量的类型
6
4、变量值得范围 局部变量和公共变量可以有0值或下面
范围中的值: -1047至-10-29
或 10-29至1047 5、变量的引用
为在程序中使用变量值,指定后跟变 量号的地址。当用表达式指定变量时, 把表达式放在括号中。 例如:G01 X#1 F#[#2+#3]