宏程序是c语言吗,宏程序是什么?如何编程和应用?
原标题:宏程序是什么?如何编程和应用?
1. 什么场合会用到宏程序编程?
其实说起来宏就是用公式来加工零件,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z坐标并且每次加一个量,那么宏就会自动算出X坐标并且进行切削,实际上宏在程序中主要起到的是运算作用。
手工编程加工公式曲线(计算简单,输入快捷)
有规律的切削路径(作为一个切削模块)
程序间的控制(程序的调度)
刀具的管理(刀具的磨损)
自动测量(机内测头)
2. 什么叫宏程序?
在编程时,我们会把能完成某一功能的一系列指令像子程序那样存入存储器,用一个总指令来调用它们,使用时只需给出这个总指令就能执行其功能所存入的这一系列指令称作用户宏程序本体,简称宏程序。
这个总指令称作用户宏程序调用指令。在编程时,编程员只要记住宏指令而不必记住宏程序。
3. 用户宏程序与普通程序的区别
1)在用户宏程序本体中,能使用变量,可以给变量赋值,变量间可以运算,程序可以跳转。
2)普通程序中,只能指定常量,常量之间不能运算,程序只能顺序执行,不能跳转,因此功能是固定的,不能变化。
3)用户宏功能是用户提高数控机床性能的一种特殊功能,在相类似工件的加工中巧用宏程序将起到事半功倍的效果。
4. 变量的三种类型
数控系统变量表示形式为“#”后跟1~4位数字,变量种类有三种:
(1)局部变量:#1~#33是在宏程序中局部使用的变量,它用于自变量转移。
(2)公用变量:用户可以自由使用,它对于由主程序调用的各子程序及各宏程序来说是可以公用的。#100~#149在关掉电源后,变量值全部被清除,而#500~#509在关掉电源后,变量值则可以保存。
(3)系统变量:由后跟4位数字来定义,它能获取包含在机床处理器或NC内存中的只读或读/写信息,包括与机床处理器有关的交换参数、机床状态获取参数、加工参数等系统信息。
5. 宏程序的特点
宏程序可使用变量,可用变量执行相应操作;实际变量值可由宏程序指令赋给变量。
6. 指令
(1)宏程序的简单调用格式
宏程序的简单调用是指在主程序中,宏程序可以被单个程序段单次调用。
调用指令格式:
G65 P(宏程序号)L(重复次数)(变量分配)。
其中:G65―宏程序调用指令;
P(宏程序号)―被调用的宏程序代号;
L(重复次数)―宏程序重复运行的次数,重复次数为1时,可省略不写;
(变量分配)―为宏程序中使用的变量赋值。
宏程序与子程序相同的一点是,一个宏程序可被另一个宏程序调用,最多可调用4重。
(2)宏程序的编写格式
宏程序的编写格式与子程序相同。其格式为:
0~(0001~8999为宏程序号)
N10 指令
N~ M99
上述宏程序内容中,除通常使用的编程指令外,还可使用变量、算术运算指令及其它控制指令。变量值在宏程序调用指令中赋给。
7. FANUC系统宏程序应用
(1)宏程序切槽
1)WHILE语句
G00 X52 Z2;
#2=-14;
是刀具z向的起刀点(因为刀宽为4mm,所以起刀点定在Z-14的位置)
WHILE〔#2 GE -30〕DO2;
是z方向的约束条件,当z等于-30时,z向就不再移动
G00 Z〔#2〕;
z方向的当前位置
#2=#2-2;
z方向的移动步距,每次移动2mm
#1=52;
是x方向的起刀点
WHILE〔#1 GE 20〕DO1;
X方向的约束条件,当直径等于20时就不再切削
G01 X〔#1〕F0.2;
x方向的切深
G00 X〔#1+1〕;
x方向的相对退刀量
#1=#1-1;
x方向的步距(每次切1mm)
END1;
G00 X52;
END2;
完整程序:
O1234;
G40 G97 G99;
T0101;
S1000 M3;
G00 X52 Z2;
#2=-14;
WHILE〔#2GE-30〕DO2; END1;
G00 Z〔#2〕;
#2=#2-2;
#1=52
WHILE〔#1GE20〕DO1;
G01X〔#1〕F0.2;
G00X〔#1+1〕;
#1=#1-1;
G00 X52;
END2;
G00 X150 Z150;
M30;
2)IF语句
G00 X52 Z-2;
#1=-14;
是刀具的z向起刀点(刀宽为4mm)
N2 #1=#1-2;
是z方向的移动步距
#2=52;
为x方向的起刀点
N1#2=#2-1;
是x方向的步距(每次切深1mm)
G01 X〔#2〕F0.2;
X方向的当前位置
G00 X〔#2+1〕;
X方向的相对退刀量
IF 〔#2 GE 21〕GOTO1;
x方向的约束条件(当x的数值切到20时就进行下面程序,不再返回)
G00 X52;
X退刀到52的位置
G00 Z〔#1〕;
Z方向的当前位置
IF 〔#1 GE -30〕GOTO2;
Z方向的约束条件,当z等于-30时,z向就不在移动
完整程序:
O1234;
G40G97G99;
T0101;
S1000M3;
G00 X52 Z-2;
#1=-14;
N2 #1=#1-2;
#2=52;
N1#2=#2-1;
G01 X〔#2〕F0.2;
G00 X〔#2+1〕;
IF〔#2GE21〕GOTO1;
G00X52;
G00Z〔#1〕;
IF〔#1GE-30〕GOTO2;
G00X200;
Z200;
M5;
M30;
(2)椭圆编程
1)椭圆WHILE语句的标准格式:
#1=a;
a :为刀具的起刀点在相对椭圆的轴线Z的正方向a mm处
WHILE〔#1 GE b〕DO1;
b: 为椭圆加工的终点在相对椭圆的轴线Z的负方向b mm处(如果加工的是一个完整的半椭圆,那a、b是数值相同符号不同的两个数值)
#2= c*SQRT〔1-#1*#1/d*d〕;
c: 椭圆的短半轴
d: 椭圆的长半轴(根据椭圆公式求#2,长半轴为d,短半轴为c,#2代表X的数值,#1为Z的数值,SQRT是开方的意思)
G01 X〔±2*#2+e〕Z〔#1±f〕;
e: 椭圆的X向轴线相对工件坐标系的偏移量(直径值)
f: 椭圆的Z向轴线相对工件坐标系的偏移量
#1=#1-1;步距(每次移动1mm)
END1;
注意事项:当车削凹椭圆时X后括号中的“±”取“﹣”;当车削凸椭圆时X后括号中的“±”取“+”。
当椭圆的X轴线向正向偏移则Z后括号中的“±”取“+”;当椭圆的X向轴线向负向偏移则Z后括号中的“±”取“﹣”
2)椭圆IF语句的标准格式
#1=a;
a: 为刀具的起刀点在相对椭圆的轴线Z的正方向a mm处
N1#2=b*SQRT〔1-#1*#1/c*c〕;
b:椭圆的短半轴c:椭圆的长半轴(根据椭圆公式X/c+ Y/b=1,SQRT是开方的意思)
G01X〔±2*#2+d〕Z〔#1±e〕F0.2; d:椭圆的X向轴线相对坐标零点的偏移量(直径值)e:椭圆的Z向轴线相对零面的偏移量
#1=#1-1;
步距(每次移动1mm)
IF〔#1 GE -f〕GOTO1
f:椭圆加工的终止
注意事项:当车削凹椭圆时X后括号中的“±”取“﹣”;当车削凸椭圆时X后括号中的“±”取“+”。当椭圆的X轴线向正向偏移则Z后括号中的“±”取“+”;当椭圆的X向轴线向负向偏移则Z后括号中的“±”取“﹣”。
WHILE语句
#1=20;
WHILE〔#1GE-20〕DO1;
#2=10*SQRT〔1-#1*#1/400〕;
G01X〔-2*#2+50〕Z〔#1-25〕;
#1=#1-1;
END1;
IF语句
#1=20;
N1#2=10*SQRT〔1-#1*#1/400〕;
G01X〔-2*#2+50〕Z〔#1-25〕F0.2;
#1=#1-1;
IF〔#1GE-20〕GOTO1;
完整程序
O1234;
G40G97G99;
T0101;
S1000 M3;
G00 X50 Z2;
G73 U5 R5;
G73 P10 Q20 U0.5 F0.2;
N10 G0 G42 Z-5;
#1=20;
WHILE〔#1GE-20〕DO1;
#2=10*SQRT〔1-#1*#1/400〕;
G01X〔-2*#2+50〕Z〔#1-25〕F0.2;
#1=#1-1;
END1;
G00 X50;
N20 G00 G40 Z2;
G70 P10 Q20;
G00 X200;
Z200;
M5;
M30;
IF语句完整格式省略,(IF语句也一样,只要加上循环就可以),在FANUC-0i系统中宏程序只能加在G73中。
(3)抛物线的加工
1)抛物线WHILE语句的标准格式:
#1=a;
a: 为刀具的起刀点在抛物线轴线Z的方向a mm处
WHILE〔#1 GE -b〕DO1;
b: 为椭圆z向的加工长度
#2=SQRT〔-#1*5/3〕;
(根据抛物线公式Z=-3/5*X*X,求其中的X值,也就是#2,其中SQRT是开平方的意思)
G01 X〔±2*#2+c〕Z〔#1〕;
c: 为抛物线的X向轴线相对工件坐标系的偏移量(直径值),“±”
取“+”时为凸,取“-”时为凹
#1=#1-1; 步距(每次移动1mm)
END1;
2)抛物线IF语句的标准格式
#1=a;
a: 为刀具的起刀点在抛物线轴线Z的方向a mm处
N1 #2=SQRT〔-#1*5/3〕;
(根据抛物线公式Z=-3/5*X*X,求其中的X值,也就是#2,其中SQRT是开平方的意思)
G01 X〔±2*#2+b〕Z〔#1〕;
b:为抛物线的X向轴线相对坐标零点的偏移量(直径值),“±”取“+”时为凸,取“-”时为凹
#1=#1-1;
(Z方向的步距,每次移动1mm)
IF〔#1 GE -c〕GOTO1; c:为椭圆z向的加工长度
抛物线IF语句的另一种形式
#1=a;
N1 #2=SQRT〔(+)#1*5/3〕;
“+”号可省略
G01 X〔2*#2+b〕Z〔-#1〕;
#1=#1+1;
IF〔#1 LE c〕GOTO1;
假设抛物线是向Z的正方向,再用Z〔-#1〕;把抛物线对称到负方向
WHILE语句
#1=0;
WHILE〔#1 GE -15〕DO1;
#2=SQRT〔-#1*5/3〕;
G01 X〔2*#2+30〕Z〔#1〕;
#1=#1-1;
END1;
IF语句
#1=0;
N1 #2=SQRT〔-#1*5/3〕;
G01X〔2*#2+30〕Z〔#1〕;
#1=#1-1;
IF〔#1 GE -15〕GOTO1;
完整程序
O1234;
G40 G97 G99;
T0101;
S1000 M3;
G00 X42 Z1;
G73 U5 R5;
G73 P10 Q20 U0.5 F0.2;
N10 G00 G42 Z0;
#1=0;
WHILE〔#1 GE -15〕DO1;
#2=SQRT〔-#1*5/3〕;
G01 X〔2*#2+30〕Z〔#1〕;
#1=#1-1;
END1;
G00 X42;
N20 G00 G40 Z2;
G70 P10 Q20;
G00 X200;
Z200;
M5;
M30;
(4)WHILE语句与IF语句的区别
1)两种语句返的方向不同
WHILE语句向后返
例:WHILE〔#1 GE 20〕DO1;
G01 X〔#1〕F0.2;
假设机床执行到此句时#1=20,它会继续往下执行,执行到#1=#1-1后#1的值变为19,不再满足约束条件所以就不会返回去。(X方向切到20)
G00 X〔#1+1);
#1=#1-1;
END1;
2)IF语句向前返
例:N1 #2=#2-1;
G01X〔#2〕F0.2;假设机床执行到此句时#2=20,它会继续往下执行,执行到IF〔#2 GE 20〕GOTO1;仍然满足条件,它会继续返回到N1 #2=#2-1;而现在的X值就会变为19,不再满足约束条件,而后再执行一
G01X〔#2〕F0.2;最后就执行下面的程序(X方向已经切到19)
G00X〔#2+1);
IF〔#2 GE 20〕GOTO1;
3)从上面的切槽程序可以看出,IF语句要比WHILE语句的字数要少很多。
4)由于返回的方向不同,在加工中WHILE语句少读一句,IF语句要多读一句。
8. SIEMENS系统(车床)宏程序应用
说明:宏程序是用变量编程,西门子系统的变量号用R表示。
例如用普通编程方法编写的:G01X-10
用宏程序可表示为:
R1=-10
G01 X=R1
条件转移:
IF GOTOB:向后跳转
IF GOTOF:向前跳转
用普通编程方法编写的
GO1X100
用变量可表示为:
R1=0
AA:R1=R1+1
G01X=R1
IF R1<100 GOTOB AA
R1是自变量,初始值为0,R1=R1+1表示的是自变量的递增数值为1,当程序每次走过此行时,R1的值增加1,R1<100是条件式,IF R1<100 GOTOB AA此行的意思是如果自变量R1<100则程序向后跳转到标记处:AA
如果R1大于或等于100,则程序往下走。
宏程序在G90和G91模态下都可以使用,不过它们含义不同,例如;
R1=0,G90R1=R1+1,G1X=R1,此程序走完第二遍X的值是2.
R1=0,G91R1=R1+1,G1X=R1,此程序走完第二遍X的值是3. 解释:程序走完第一遍R1的值是1,走第二遍的时候R1的值是2,但是在G91模态下它是在前面的基础上走的。
(1)切槽
T1
TC
T1D1
G0G40X100Z100
M03S1000
G0X54Z2
快速到达起刀点
Z-10
R1=3
定义刀片宽度为3mm
R2=-10-R1-0.2
起刀点 为-10,对刀时以刀片左边;
对刀,所以应减去刀片的宽度,0.2为精加工余量
G1Z=R2F0.1
刀具到达Z轴起刀点
AA:R2=R2-2.5
R3=50
槽X轴起到点
BB:R3=R3-2
定义每刀切削深度为2 mm
G1X=R3
X=R3+1
每切深2mm单边退0.5mm排屑
IF R3>30+0.4 GOTOB BB
定义槽深10mm,如果R3>30mm程序向后跳转到标记处BB,0.4为精加工余量
G0X50
刀具到达X轴起刀点
G1Z=R2
IF R2>-30+0.2 GOTOB AA
定义槽宽为20mm,0.2是精加工余量
G0X50
G01Z-13
精加工
X30
Z-16
G0X50
Z-30
G01X30
Z-16
G0X50
退刀
G0X100
Z100
M05
M30
(2)椭圆
1)基本格式
R1=0
定义变量R1初始值为0
AA:R2=b×SQRT(1-R1×R1/a×a)
根据椭圆方程所得,a是椭圆的长半轴,b是椭圆短半轴,SQRT是开平方符号。
G1X=±2×R2+X Z=R1-Z
设定椭圆的位置和形状,+2为凸形,-2为凹形,X、Z分别是工件轴线和椭圆轴线的距离(直径制)。
R1=R1-1
设定加工步距
IF R1>=n GOTOB AA
如过变量R1
2)编程举例:
T1D1
G0G40X100Z100
M3S1000
G0X52Z2
Z-20
CYCLE95( )
G42S1500
OO:
R1=20
AA:R2=5×SQRT(1-R1×R1/400)
G1X=-2×R2+50 Z=R1-40
R1=R1-2
IF R1>=-20 GOTOB AA
PP:X42
G0G40X100Z100
M05
M09
M30
(3)抛物线
1)基本格式:
R1=0
设定变量R1的初始值为0
AA:R2=SQRT(-R1×n)
根据抛物线基本格式所得,式中SQRT为开平方符号,n是系数
G01X=2×R2+n
Z=R1
加工路径,+2是凸形,n是X轴起点数值
R1=R1-1
变量增量值为1mm
IF R1>-30 GOTOB AA
如果变量R1>-30,程序向后跳转到标记处:AA
2)编程举例:
T1
Tc
T1D1
G0G40X100Z100
M03S1000
G0X52Z2
CYCLE95( )
G0G42
OO:
R1=0
AA:R2=SQRT(-R1×5/3)
G01X=2×R2+30 Z=R1
R1=R1-2
IF R1>-60 GOTOB AA
PP:X52
G0X100Z100
M05
M30
文章来源:前沿数控技术
免责声明:本文系网络转载,版权归原作者所有。但因转载众多,无法确认真正原始作者,故仅标明转载来源。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,我们将根据您提供的证明材料确认版权并按国家标准支付稿酬或立即删除内容!本文内容为原作者观点,并不代表本公众号赞同其观点和对其真实性负责。返回搜狐,查看更多
责任编辑:
宏程序是c语言吗,宏程序是什么?如何编程和应用?相关推荐
- c语言长度宏定义运算符,C语言在宏定义中使用语句表达式和预处理器运算符
语句表达式的亮点在于定义复杂功能的宏.使用语句表达式来定义宏,不仅可以实现复杂的功能,而且还能避免宏定义带来的歧义和漏洞.下面以一个简单的最小值的宏为例子一步步说明. 1.灰常简单的么,使用条件运算符 ...
- 电大java语言与面向对象程序设计基础_6406Java语言与面向对象程序设计基础A卷...
6406Java语言与面向对象程序设计基础A卷 试卷编号:6406 座位号 浙江广播电视大学2006年春季学期开放教育专科期末考试 <Java语言与面向对象程序设计基础>试题 2006年7 ...
- 程序设计基础c语言上机考试,程序设计基础C语言上机考试题第一套.DOC
程序设计基础(C语言)上机考试题 ( 第一套A卷 ) 2006~2007学年冬学期 2007年1月 应试人声明: 我保证遵守<上海大学学生手册>中的<上海大学考场规则>,如有考 ...
- linux 易语言窗口程序_易语言开发Linux程序
令人兴奋的是易语言可以开发Linux程序,易语言是一个跨平台的开发工具,支持Windows及Linux.使用易语言开发Linux程序,您可以在Windows环境下编写基本于Windows的程序,及编写 ...
- c语言闪烁灯程序,单片机c语言闪烁灯程序
<单片机c语言闪烁灯程序>由会员分享,可在线阅读,更多相关<单片机c语言闪烁灯程序(3页珍藏版)>请在人人文库网上搜索. 1.1 闪烁灯1 实验任务如图4.1.1 所示:在P1 ...
- c语言万年历程序原理,C语言实现万年历程序
C语言实现万年历程序 #include int year(int y) { if ((y%4==0) && (y%100!=0) || y%400==0) return 366; el ...
- C语言实现与功能的程序,用C语言实现Ping程序功能
2001 年 10 月 01 日 大部分人用ping命令只是作为查看另一个系统的网络连接是否正常的一种简单方法.在这篇文章中,作者将介绍如何用C语言编写一个模拟ping命令功能的程序. ping命令是 ...
- 应用c语言编辑画图程序,应用C语言编辑画图程序
您可能感兴趣的话题: C语言 核心提示:笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题 笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问 ...
- c51单片机时钟c语言程序,89c51 C语言单片机 时钟程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 谁可以帮忙在这个程序里加个闹钟程序 刚学不懂 顺便讲解一下 谢了 #include #include unsigned char code digit[1 ...
最新文章
- IOS开发笔记15-自定义类
- 正确使用cookie中的domain
- 通过获取客户端Json数据字符串,反序列化为实体对象的一段代码
- 网络计算机显示10,win10电脑网络显示一个球怎么回事
- (转)知乎:如何看待巴菲特有望赢得与对冲基金 10 年赌局?
- mysql基于时间盲注_MySQL基于时间盲注(Time-Based Blind SQL Injection)五种延时方法...
- Git可视化工具——SourceTree教程
- 《App后台开发运维和架构实践》资源汇总
- 双边滤波(Bilateral Filtering)
- 输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。(指针)
- 正高、正常高和大地高的区别
- 线性代数可以速成吗_怎样速成线性代数?
- QQ红包金额分配算法
- CSDN产品周报第31期|PC端开放账号注销功能
- 生活在深圳我们需要的不是叹息与感概
- 关于物联网远程控制技术,你了解的有多少?
- mysql在mye_数据库映射出现重大问题
- 《WEB开发-HEXO博客搭建》第3章 Hexo博客域名添加
- 安装hmc会依赖bios时间吗_VMWARE安装HMC
- P2495 [SDOI2011]消耗战 虚树入门