数控宏程序是什么,该如何编写?

技术小编 9597 0

过去,我有一个误区:大家有问题可以咨询,现在看来这种观念不合理,因为很多初学者压根就不会,当然就提不出什么问题,另一方面学员的知识体系尚未建立起来,这个知识点讲解下,那个知识点讲解下,这样点对点的讲解,学员听着可能还是一头雾水,知识是学不完的。我一贯坚持授人以鱼不如授人以渔”,俗话说:“师傅引进门,修行在个人”。下面简单给大家聊一聊什么是宏程序。

相信见过宏程序的朋友一定会见到很多的犹如#1、#2、....#149 等宏变量以及一些

IF [#1LE#3]GOTO100 等之类的宏语句,其实诸如用#1、#2 等变量编写的程序就叫宏程序。下面我们进入正题


一、变量

1变量的含义:

我们普通程序

(如 G01 X100. Y100. F200.XY 地址后面都是些常量,如果我们把这些常量变量来编写(如 G01 X#1 Y#2 F#9),这就是我们所谓的宏程序。那么# 和后面的 1、2、3、.....数字标识到底什么关系。让我们用最白话的方式理解它吧。这些#号,它是宏代码,1、2、3....是区分这些宏代码的标记。什么意思呢?

举个最简单的例子:如果有三个人,他们的名字叫 小李、小李、小李。那么当你呼叫小李的时候,会发生一个问题,这三个人都会回答,但你其实只想喊其中的一个。这就分不清了。同理,#1 #1 #1 ,如果后面的数字都是一样,当系统使用#1 的时候,它也会发生糊涂,到底让我用哪个呢?所以为了区分它们,就把后面的数字写成不同的,比如#1,#2,#3。此时如果系统使用#1,就不会发生混乱了。当然了,标示数字的不同,宏变量的意义也不同,分局部变量公共变量系统变量等等,就目前来说,我们使用的是局部变量,能把它用好就不错了,基础打好了再说!


2变量的赋值:

所谓的赋值,我们可以这么理解:我本来很穷,突然有一天有人给我100 块!那么此时此刻,这100 块就是我的了,因为它给我了!这个给我”的过程,就称为赋值。那么在宏程序里面怎么赋值呢?我们看一个赋值的语句就理解了:#1= 100 这就称为赋值!它的意思是把 100 这个值给了#1。那么#1在不发生运算的情况下,它的结果就是100。也就是说#1此后代表 100。如果有一个程序语句:GO X100. 那么宏语句 GO X#1 与其等同。下面在举个例子:

#1=10

#2=20

#9=30

G01 X#1 Y#2 F#9

以上这个宏程序相当于 G01 X10. Y20. 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 相信你也没什么问题吧!以上已经诠释了变量赋值最基本的宏程序概念

 

宏程序两大主要语句 

1IF…..GOTO 语句:

直观意思是:如果...就跳转到哪(或者是做什么事)。我们不妨用这个格式来造句,如果福布斯有我的名字,那么我就不上班了;如果我关注了“CNC345CAM”公众号,那么我就要将看到的好文分享给大家。等等这类语句都有一个共同点:“如果”的后面会跟着一个条件!根据这个条件,决定我做什么事!

那么我们用一个小程序来详细的解释下这语句

%

O0001

#1=10

N10

#2=20

IF[#2 EQ 20] GOTO10

G0 X100.

Z100.

.......

M30

%

上面这个IF语句是什么意思呢? 它表示:如果#2 这个变量的值等于20的话,就跳转到第10 号程序段。可能有人会问“GOTO10”后面的10 表示什么意思。其实这个10 表示行号。数控的程序一般都有行号的,如果没有,那是系统参数设定的事,不过你只要知道有行号就行。还有人会问EQ是什么意思,这个是英文EQUAL的简写,含义是等于的意思。对于新手,建议掌握以下几个常用的符号(如下表):

运算符

含义

英文注释




EQ

等于(=)

Equal




NE

不等于(≠)

Not Equal




GT

大于(>)

Great Than




GE

大于或等于(≧)

Great than or Equal




LT

小于(﹤)

Less Than




  LE

小于或等于(≦)

Less than or Equal


由于#2是等于20的(因为在赋值的时候,#2=20),所以条件成立,就跳到了第10号段行。我们都知道数控程序一般是从上往下执行的,那么我们这跳到了第 10 行,接着往下执行时又遇到了IF判断语句,于是有开始判断#2是不是等于 20,结果等于!于是又成立了,继续跳到第 10 行。所以,这个程序是死循环,永远不会结束。说到这,细心人会发现一个问题:条件成立执行GOTO语句,那要是不成立,程序会怎么办? 其实很简单,不成立就往下面走。也就是说如果不成立,就执行 G0 X100. 的程序段,直到程序运行至 M30 结束!所以这里我们不难理解上面判断语句的意思了:如果#2等于20,那么就跳转到第10 号段。

总结:如果条件成立,就执行 GOTO 语句,你写的行号是多少,它就跳到那个行;要是条件不成立,那么就执行IF下面的语句,不执行GOTO语句!

 

2WHILE…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的值相等,那么就执行DO1END1之间的程序。有人会问一个问题:END1是什么东西。DO后面的1又是什么东西?这里呢要说明一下,WHILE语句一定要和END结合使用因为END是它的目标地址。就像IF语句里的行号一样,是个目的地!那么ENDDO?后面各有一个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结束!讲到这,很多朋友会发现WHILEIF其实一样的,只不过格式不同、目的地的表示方法不同而已。

现在手机壳行业招聘CNC技术员AND工程师如果你懂宏程序并玩的溜,那么你的工资就会比别人高好多!宏程序不单单是加工工件那么点用处!它的功能很强大的,数控系统的宏程序功能不是标配的,是需要额外花钱买的,宏程序应用很多,比如探头的运用,在线测量,全都是宏程序。比如自动刀仪,比如程式防呆,坐标的防呆和时时更新需要的位置坐标,刀具寿命,刀具磨损自动补偿,刀具长度防呆,自动夹具防呆,自动暖机,与机器人的使用AND防呆等等都会用到宏程序来实现!!!!等等!!当然这些都是对批量,大量的工件!对一天一个形状不重复的工件!那宏程序确实是只能有个计算铣削的功能了!相对而言功能性就没有了发挥的余地了。


抱歉,评论功能暂时关闭!