宏程序应用指令.docx
《宏程序应用指令.docx》由会员分享,可在线阅读,更多相关《宏程序应用指令.docx(10页珍藏版)》请在冰豆网上搜索。
宏程序应用指令
ThismodelpaperwasrevisedbytheStandardizationOfficeonDecember10,2020
宏程序应用指令
宏程序跳转及重复指令
GOTOS:
跳回到程序开始
GOTOB:
以程序开始方向的带跳转目标的跳转指令。
GOTOF:
以程序末尾方向的带跳转目标的跳转指令。
GOTO:
带跳转目标查找的跳转指令。
查找先向程序末尾方向进行,然后再从程序开始处进行查找。
GOTOC:
与GOTO有区别的是,报警14080“跳转目标未找到”被抑制。
这表示,在跳转目标查找没有结果情况下不中断程序加工,而以指令GOTOC下面的程序行继续进行。
跳转条件允许使用所有的比较运算和逻辑运算(结果:
TRUE或者FALSE)。
如果这种
运算的结果为TRUE,则执行程序跳转。
TRUE(真实、准确)FALSE(错误)
特殊情况
一般情况
IF<跳转条件>=TRUEGOTOB<跳转目标>
IF<跳转条件>=GOTOB<跳转目标>
IF<跳转条件>=TRUEGOTOF<跳转目标>
IF<跳转条件>=GOTOF<跳转目标>
IF<跳转条件>=TRUEGOTO<跳转目标>
IF<跳转条件>=GOTO<跳转目标>
IF<跳转条件>=TRUEGOTOC<跳转目标>
IF<跳转条件>=GOTOC<跳转目标>
程序分支(CASE...OF...DEFAULT...)
CASE功能可以检测一个变量或者一个计算函数当前值(类型:
INT),
根据结果跳转到程序中的不同位置。
句法:
CASE(<表达式>)OF<常量_1>GOTOF<跳转目标_1><常量_2>GOTOF<跳转目标_2>...DEFAULTGOTOF<跳转目标_n>
常量:
变量或者计算函数首先规定的恒定值
DEFAULT:
对于变量或者计算函数没有采用规定值的情况,可以用DEFAULT指令确定跳转目标。
N20DEFINTVAR1VAR2VAR3
N30CASE(VAR1+VAR2-VAR3)OF7GOTOFLabel_19GOTOFLabel_2DEFAULTGOTOFLabel_3
N40Label_1:
G0X1Y1
N50Label_2:
G0X2Y2
N60Label_3:
G0X3Y3
CASE指令由N30定义下列程序分支可行性:
1.如果计算函数值VAR1+VAR2-VAR3=7,则跳转到带有跳转标记定义的程序段"Label_1"(→N40)。
2.如果计算函数值VAR1+VAR2-VAR3=9,则跳转到带有跳转标记定义的程序段"Label_2"(→N50)。
3.如果计算函数VAR1+VAR2-VAR3的值既不等于7也不等于9,则跳转到带有跳转标记定义的程序段“Label_3”(→N60)。
程序部分重复(REPEAT,REPEATB,ENDLABEL,P)
功能:
程序部分重复是指在一个程序中,可以任意组合重复已经编写的
程序部分。
需要重复的程序行或程序段落带有跳转标记(标签)。
REPEATB:
重复程序行的指令
REPEAT:
重复程序段落的指令
1、重复单个程序行
<跳转标记>:
...
...
REPEATB<跳转标记>P=
...
2.重复跳转标记和REPEAT指令之间的程序段落:
<跳转标记>:
...
...
REPEAT<跳转标记>P=
...
3.重复两个跳转标记间的段落:
<起始跳转标记>:
...
...
<结束跳转标记>:
...
...
REPEAT<起始跳转标记><结束跳转标记>P=
...
说明
REPEAT指令不能被括在这两个跳转标记之间。
如果在REPEAT指令前找到了<起始跳转标记>,但在REPEAT指令前没有找到<结束跳转标记>,则重复<起始跳转标记>和REPEAT指令之间的程序段落。
4.重复跳转标记和ENDLABEL间的段落:
<跳转标记>:
...
...
ENDLABEL:
...
...
REPEAT<跳转标记>P=
...
说明
REPEAT指令不能被括在<跳转标记>和ENDLABEL之间。
如果在REPEAT指令前找到了<跳转标记>,但在REPEAT指令前没有找到ENDLABEL,则重复<跳转标记>和
REPEAT指令之间的程序段落。
示例1:
重复单个程序行
N10POSITION1:
X10Y20
N20POSITION2:
CYCLE(0,,9,8);位置循环
N30...
N40REPEATBPOSITION1P=5;执行程序段SATZN10五次
N50REPEATBPOSITION2;执行程序段N20一次
N60...
N70M30
示例2:
重复跳转标记和REPEAT指令之间的程序段落
N5R10=15
N10Begin:
R10=R10+1;宽度
N20Z=10-R10
N30G1X=R10F200
N40Y=R10
N50X=-R10
N60Y=-R10
N70Z=10+R10
N80REPEATBEGINP=4;执行N10到N70程序部分四次
N90Z10
N100M30
示例3:
重复两个跳转标记间的段落
程序代码注释
N5R10=15
N10Begin:
R10=R10+1;宽度
N20Z=10-R10
N30G1X=R10F200
N40Y=R10
N50X=-R10
N60Y=-R10
N70END:
Z=10
N80Z10
N90CYCLE(10,20,30)
N100REPEATBEGINENDP=3;执行N10到N70程序部分三次
N110Z10
N120M30
示例4:
重复跳转标记和ENDLABEL间的段落
N10G1F300Z-10
N20BEGIN1:
N30X10
N40Y10
N50BEGIN2:
N60X20
N70Y30
N80ENDLABEL:
Z10
N90X0Y0Z0
N100Z-10
N110BEGIN3:
X20
N120Y30
N130REPEATBEGIN3P=3;执行N110到N120程序部分三次
N140REPEATBEGIN2P=2;执行N50到N80之间的程序部分两次
N150M100
N160REPEATBEGIN1P=2;执行N20到N80之间的程序部分两次
N170Z10
N180X0Y0
N190M30
示例5:
铣削加工、采用不同的工艺加工钻孔位置
N10ZENTRIERBOHRER();换上定中钻头。
N20POS_1:
;钻孔位置1
N30X1Y1
N40X2
N50Y2
N60X3Y3
N70ENDLABEL:
N80POS_2:
;钻孔位置2
N90X10Y5
N100X9Y-5
N110X3Y3
N120ENDLABEL:
N130BOHRER();更换钻头和钻孔循环。
N140GEWINDE(6);换上螺纹钻M6和螺纹循环。
N150REPEATPOS_1;重复程序部分一次,自POS_1到ENDLABEL,
N160BOHRER();更换钻头和钻孔循环。
N170GEWINDE(8);换上螺纹钻M8和螺纹循环。
N180REPEATPOS_2;重复程序部分一次,自POS_2到ENDLABEL。
N190M30
1、程序部分重复可以嵌套调用。
每次调用占用一个子程序级。
2、如果在执行程序重复过程中编程了M17或者RET,则程序重复被停止。
程序接着从REPEAT指令行之后的语句开始运行。
3、在当前的程序显示中,程序重复部分作为单独的子程序级显示。
4、如果在执行程序部分重复过程中取消该级别,则在调用程序部分执行之后,继续加工该程序。
示例6
N10G1F300Z-10
N20BEGIN1:
N30X=10
N40Y=10
N50GOTOFBEGIN2
N60ENDLABEL:
N70BEGIN2:
N80X20
N90Y30
N100ENDLABEL:
Z10
N110X0Y0Z0
N120Z-10
N130REPEATBEGIN1P=2
N140Z10
N150X0Y0
N160M30
说明:
REPEAT指令应位于运行程序段之后。
1、控制结构和程序部分重复可以组合使用。
但是,两者之间不得产生重叠。
一个程序部分重复应该位于一个控制结构分支之内,或者一个控制结构位于一个程序部分重复部分之内。
2、如果跳转和程序重复部分交织在一起,则程序段按次序执行。
比如说,程序重复部分有一个跳跃,则一直进行加工,直至找到编程的程序结束部分。
带选项的程序循环(IF,ELSE,ENDIF)
IF<条件>
...
ELSE
...
ENDIF
...
当查询循环应包含一个可选的程序块时,可使用带IF和ELSE的结构:
如果满足IF条件,则执行IF内的程序块。
如果IF条件不满足,则执行ELSE内可选的程序块。
说明:
如果不需要选择,则IF循环也可以不带ELSE指令,并对ELSE后的程序块编程。
计数循环(FOR...TO...,ENDFOR)
功能:
当一个带有一个确定值的操作程序被循环重复,计数循环就会被运行。
FOR<变量>=<初值>TO<终值>
...
ENDFOR
...
FOR:
引入计数循环。
ENDFOR:
一旦还没有得到计数终值,则标记循环结
束处并跳转到循环开头。
<变量>:
计数变量从初值开始向上计数,直到终值
且在每次运行时提高值“1”。
示例1:
整数变量作为计数变量:
DEFINTiVARIABLE1
R10=R12-R20*R1R11=6
FORiVARIABLE1=R10TOR11;
计数变量=整数变量
R20=R21*R22+R33
ENDFOR
M30
示例2:
R参数作为计数变量:
R11=6
FORR10=R12-R20*R1TOR11;
计数变量=R参数(实数变量)
R20=R21*R22+R33
ENDFOR
M30
示例3:
加工一个固定的零件数
DEFINTSTUECKZAHL
FORSTUECKZAHL=0TO100
G01…
ENDFOR;计数循环结束
M30
用名称“STUECKZAHL”定义的INT型变量
引入计数循环。
变量“STUECKZAHL”从初值“0”向上计数,直到终值“100”。
在循环开始处带有条件的程序循环(WHILE,ENDWHILE)
功能:
WHILE循环的开始是有条件的。
一旦满足条件,WHILE循环即开始运行。
句法
注释
WHILE<条件>
...
ENDWHILE
...
WHILE:
引入程序循环。
<条件>:
必须满足条件,只有这样WHILE循环才能运行。
ENDWHILE:
标记循环结束处并跳转到循环开头。
示例(方法1):
R参数赋值
R1=1
WHILER1>-10
G90G1Z=-R1F169
R1=R1+1
ENDWHILE
示例(方法2):
变量赋值
WHILE$AA_IW[钻削轴]>-10;
调用WHILE循环,当前的钻削轴WKS额定值必须大于-10。
G1G91F250AX[钻削轴]=-1
ENDWHILE
在循环结束处带有条件的程序循环(REPEAT,UNTIL)
句法
注释
功能
REPEAT;
...
UNTIL...;
...
调用REPEAT循环。
检查是否已满足条件。
REPEAT循环的结束是有条件的。
REPEAT循环一旦被执行会不断重复,直到满足条件为止
示例:
带层叠控制结构的程序示例
LOOP
IFNOT$P_SEARCH;没有程序段搜索
G01G90X0Z10F1000
WHILE$AA_IM[X]<=100
G1G91X10F500;钻孔图
Z–F100
Z5
ENDWHILE
Z10
ELSE
MSG(“在搜索过程中不钻孔”)
ENDIF
$A_OUT[1]=1;下一个钻孔板
G4F2
ENDLOOP
M30