大家好,欢迎来到IT知识分享网。
宏程序是指在程序中主要起到运算所用的程序,似乎系统为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算,逻辑运算和函数的混合运算。那么宏程序这么好,该怎么学习呢?那么由老傅带你们走进这神秘的宏程序大门吧!
我们普通程序(如G01X100.Y100.F200)X,Y地址后面都是些常量,如果我们把这些常量用变量来编写如G01X#1 Y#2 F200,这就是我们所谓的宏程序。
那么# 和后面的1、2、3、4…..数字标识到底什么关系。这些#号,它是宏代码,1、2、3….是区分这些宏代码的标记。
举个最简单的例子:如果有三个人,他们的名字叫 小李、小李、小李。那么当你呼叫小李的时候,会发生一个问题,这三个人都会回答,但你其实只想喊其中的一个。这就分不清了。
同理,#1 #1 #1 ,如果后面的数字都是一样,当系统使用#1的时候,它也会发生糊涂,到底让我用哪个呢?
所以为了区分它们,就把后面的数字写成不同的,比如#1,#2,#3。
此时如果系统使用#1,就不会发生混乱了。
当然了,标示数字的不同,宏变量的意义也不同,分局部变量、公共变量、系统变量等等,就目前来说,我们使用的是局部变量,能把它用好就不错了,基础打好了再说!
- 变量的赋值
这所谓赋值,我们可以这么理解:我本来很穷,突然有一天有人给我100块!那么此时此刻,这100块就是我的了,因为它给我了!这个“给我”的过程,就称为赋值。
那么在宏里面怎么赋值呢?我们看一个赋值的语句就理解了:#1 = 100 这就称为赋值!
它的意思是把100这个值给了#1。那么#1在不发生运算的情况下,它的结果就是100。
也就是说#1此后代表100。如果有一个程序语句:GOX100. 那么宏语句GOX#1 与其等同。
下面在举个例子:
#1=10
#2=20
#3=30
G01X#1 Y#2 F#3
以上这个宏程序相当于G01X10.0 Y20.0 F30这个普通程序。
补充说明:
上面的例子是给变量#1,#2,#3赋了一个具体值,宏程序中我们还可以赋予表达式。
表达式的运算优先级就是加减乘除先算哪个,后算哪个。如果有括号,就先算括号里面的等等
看下面的例子,设:
#1 = 100
#2 = 10
#3 = 50
#4 = 20
那么 #1 – #2 * #3 = ?
#1/#2 = ?
#3/#2*#4 = ?
(#1-#3)/#2 = ?
以上四个运算表达式的结果分别是:-400、10、100、5 相信你也没什么问题吧!
以上包工给大家诠释了变量,赋值等最基本的宏程序概念。大家明白即可!
我们此时更重要的是先学习好宏语句,它将伴随着所有学习宏程序的人,所以一定要理解透彻!
- 宏程序两大主要语句
1,IF…..GOTO语句:
直观意思是:如果…就跳转到哪(或者是做什么事)。
我们不妨用这个格式来造句,如果福布斯有我的名字,那么我就不上班了;
如果我看过清风的宏教程,那么我还会看他的其他教程!
这类语句都有一个共同点:“如果”的后面会跟着一个条件!
根据这个条件,决定我做什么事!
所以很多书中都这么介绍此语句:IF[条件成立]GOTO
%
O0001
#1 = 10
N10 #2 = 20
IF[#2 EQ 20] GOTO10
G0 X100.
Z100.
…….
M30
%
上面这个IF语句是什么意思呢? 它表示:如果#2这个变量的值等于20的话,就跳转到第10号程序段。可能有人会问“GOTO10”后面的10表示什么意思。
其实这个10表示行号。数控的程序一般都有行号的,如果没有,那是系统参数设定的事,不过你只要知道有行号就行。
还有人会问 EQ 是什么意思,这个是英文EQUAL的简写,含义是等于的意思。
对于新手,建议掌握以下几个常用的符号(如下表):
所以这里我们不难理解上面判断语句的意思了:如果#2等于20,就跳转到第10号段。由于#2是等于20的(因为在赋值的时候,#2=20),所以条件成立,就跳到了第10号段执行。
我们都知道数控程序一般是从上往下执行的,那么我们这跳到了第10行,接着往下执行时又遇到了IF判断语句,于是有开始判断#2是不是等于20,结果等于!于是又成立了,继续跳到第10行。所以,这个程序是死循环,永远不会结束。
说到这,细心人会发现一个问题:条件成立了,会执行GOTO语句,那要是不成立,程序会怎么办? 其实很简单,不成立就往下面走。也就是说如果不成立,就执行G0X100. 的程序段,直到程序运行至M30结束!
总结:如果条件成立,就执行GOTO语句,你写的行号是多少,它就跳到那个行;要是条件不成立,那么就执行IF下面的语句,不执行GOTO语句!
2,WHILE…..DO语句:
看到这个语句,还是老样子,先直观翻译下:当…..就执行某某代码段。
和IF语句差不多,这个语句也是用来做条件判断的,但WHILE…..DO自身没有跳转的功能。
那么这个语句该怎么用?我们是造句说明吧,“当年薪达到100W的时候,我就可以买跑车”。这里“年薪达到100W”是条件,如果条件达到了100W,我就执行买跑车这个想法。就这么简单的逻辑!
下面我们用一个程序来解释它
%
O0002
#1 = 20
#2 = 20
WHILE[#1 EQ #2] DO1
GO X50. Y50.
G0 X0.Y0.
END1
G0X100.
Z100.
…….
M30
%
上面这个程序段的意思是:当#1和#2的值相等,那么就执行DO1与END1之间的程序。有人会问一个问题:END1是什么东西。DO后面的 1 又是什么东西?这里呢要说明一下,WHILE语句一定要和 END 结合使用。因为END是它的目标地址。就像IF语句里的行号一样,是个目的地!那么END和DO 后面各有一个1,我们就白话的理解为第一层循环的意思。
如果这里DO后面跟的是2,而END后面跟的是1,那么程序将报警,因为DO2找不到与之匹配的END2!所以DO和END后面的数字,一定要匹配!前面说到第一层循环,因为宏是支持循环嵌套的,这个知识点系统教程会着重的讲解,这里不赘述。
现在我们分析下上面的程序段。
由于#1和#2在初始赋值的时候都是20,所以#1和#2是相等的。程序在执行WHILE语句时,它会判断中括号里的#1和#2是不是相等,如果相等,就执行DO1与END1之间的程序;
反之如果#1和#2不相等,那么就不执行 DO1 与 END1 之间的程序,而是往END1下面的程序走,执行G0X100. 直到程序运行至M30结束!
讲到这,很多朋友会发现WHILE和IF其实一样的,只不过格式不同、目的地的表示方法不同而已。
接下来分享几组宏程序供大家参考:
多边形 宏程序
#1=0 起始角度 0°
#2=16 边数 16
#4=360+#1
#3=10/COS[360/2*#2]
WHILE[#1LE#4]DO1
G01X[#3*COS[#1]]Y[#3*SIN[#1]]
#1=#1+360/#2
END1
阿基米德螺旋线
#1=0 起始角度
#2=15 起始半径
#3=30 终止半径
WHILE[#2LE#3]DO1;
G01X[#2*COS[#1]]Y[#2*SIN[#1]]
#1=#1+1
#2=#2+15/200 跨度200增加半径15 (每旋转1°半径r增加15/200)
END1
凹球面
G00 G90 G54 X0. Y0.
G43 H01 Z30.
Z0.
#1=0
#10=0.2
N10 #2=-7
#3=16.216-#1
#4=SQRT[30*30-#3*#3]
#5=#4-7
G01X[#5]Y0Z[#1]F1200
G02I[-#5]J0
#1=#1-#10
IF[#1GE#2]GOTO10
倒斜角
M3S200
Z-35.
#1=0
WHILE[#1LE35]DO1
#2=50-#1*TAN[45]
G1X#2Z[-35+#1]
G3I-#2
#1=#1+3
END1
M30
倒圆角
G43G00Z50H3
X0Y0
Z0
G41G01X17D01F1000
#1=0
#2=-7
N10 #3=7+#1
#4=SQRT[7*7-#3*#3]
#5=17-#4
G01X[#5]Y0Z[#1]F1000
G02I[-#5]J0
#1=#1-0.1
IF[#1GE#2]GOTO10
G40X0
凸球面
G00X0Y0Z0
#1=-15
N10 #2=0
#3=27.059+15+#1
#4=SQRT[45*45-#3*#3]
#5=#4+8
G01X[#5]Y0Z[#1]F1200
G02I[-#5]J0
#1=#1+0.02
IF[#1LE#2]GOTO10
卧加自动找正宏程序
1.取两个任一点,用百分表压在同一个数(先压在旋转中心的负方向)
2.压好第一点运行程序
O0428;
#1=ABS[#5021];
#2=ABS[#5023];
M99;
3.压好第二点运行程序
O0429;
#3=ABS[#5021];
#4=ABS[#5023];
#5=#3-#1;
#6=#4-#2;
#7=ABS[ATAN[#6]/[#5]];
G91 G0 Z100.;
IF[#7GT90] GOTO10;
G91 G0 B#7;(先压在旋转中心的负方向才能不转反)
M30;
N10;
G91 G0 B-[180-[#7]];
M30;
4.#5021、#5023分别为X、Z轴当前的位置坐标;
5.机床自动运用反正切计算出当前夹角,B轴自动找正。
6.#6004为反正切的角度计算范围:#6004为“0”时,角度为0-360度;#6004为“1”时,角度为(-180)-180度;
7.Tan1-89度(为正数)分别对应Tan91-179度(为负数)Tan0、180为0,Tan90不存在;
此程序有局限性:不适用于梳齿盘类型B轴结构的机床(一度一分、和半度一分的)。
正弦曲线
#1=0
WHILE[#1LE360]DO1
G01X[50*#1/180-50]Y[10*SIN[#1]]
#1=#1+1
END1
螺旋铣孔
#1=50 圆孔直径
#2=40 圆孔深度
#3=30 刀具直径
#4=0 Z坐标设为自变量,赋值为0
#17=1 Z坐标每次递增量
#5=[#1-#3]/2 刀具回转直径
G00 G90 G54 X0 Y0 S1000 M3
G43 H01 Z30. M08
G00 X#5
Z[-#4+1]
G01 Z-#4 F200
WHILE[#4 LT #2]DO01
#4= #4+#17
G03 I-#5 Z-#4 F1000
END 01
G03 I-#5
G01 X[#5-1]
G00 Z100.
G91 G28 Z0. M09
M30
螺旋线
#1=8 ( 圈数 )
#2=2 ( 螺距 )
#3=0
#4=-360*#1
#5=10 ( 螺旋直径 )
#6=0
WHILE[#3GE#4]DO1
G01X[#5*COS[#3]]Y[#5*SIN[#3]]Z-#6
#3=#3-1
#6=#6+#2/360
END1
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/79912.html