数控宏程序编程从入门到精通(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-18 18:33:38

点击下载

作者:杜军、李贞惠、唐万军 编著

出版社:化学工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

数控宏程序编程从入门到精通

数控宏程序编程从入门到精通试读:

前言

数控宏程序编程是“神秘”的,它令初涉者望而却步,入门者欣喜若狂,精通者讳莫如深。同时数控宏程序又是“神奇”的,程序短小精悍且功能非常强大,易于定制,使用简单,合理运用它既可以提高程序本身质量,又可以提高加工质量,节约时间,提高工作效率。

但是,学习宏程序编程并不容易。现在各大工科类大学和高职院校并不进行系统、深入的学习,一些商业化的培训学校也仅介绍基础知识,学习效果并不太好,因此学习强大的宏程序编程技术主要还得靠数控编程技术人员来自学。目前,许多宏程序编程的图书大多介绍相关知识,鲜有应用案例。而编写本书的目的,就是希望为广大读者提供一本宏程序编程知识与技能的实用性工具书,以满足广大读者系统学习、全面掌握宏程序编程技术的需求。

本书较全面、系统地讲解了FANUC、华中、SIEMENS三大数控系统宏程序编程的基础知识和编程案例,以典型的零件型面加工为线索,内容详尽,知识讲解由浅入深、循序渐进,便于理解,程序实例典型丰富、可操作性强,全部采用模块化编写,适合读者逐章自学或者随时查阅,并适于实际加工直接调用。

宏程序的功能强大,学会编制宏程序有相当的难度,如何简单、有效地学习宏程序和编制宏程序,避免多走弯路,编著者在本书的编写过程中做了积极的探索,并对宏程序的学习提一些建议和想法:(1)具备一定的英语基础 在宏程序编制过程中需要用到许多英文单词或单词的缩写,掌握一定的英语基础可以正确理解其含义,增强分析程序和编制程序的能力;再者,数控系统面板按键及显示屏幕中也有为数不少的英语单词,良好的英语基础有利于熟练操作数控系统。(2)储备适量数学知识 编制宏程序必须有良好的数学基础,数学知识的作用有多方面:计算轮廓节点坐标需要频繁的数学运算;在加工规律曲线、曲面时,必须熟悉其数学公式并根据公式编制相应的宏程序进行拟合加工,如椭圆的加工;更重要的是,良好的数学基础可以使人的思维敏捷,具有条理性,这正是编制宏程序所必需的。(3)掌握一定的计算机编程知识 宏程序是一类特殊的、实用性极强的专用计算机控制程序,其中许多基本概念、编程规则都是从通用计算机语言编程中移植过来的,所以学习C语言、BSAIC、FORTAN等高级编程语言的知识,有助于快速理解并掌握宏程序。(4)好的学习目标 多学习优秀的程序代码和源代码。阅读他人的程序代码是非常好的学习方法,特别是代码库的作者是专家或者程序的质量有很高评价时。一个经典案例,一本好书都值得收藏。(5)良好的编程习惯 采用模块化结构编程,尽量减少模块间联系,便于每个模块可以独立编制、测试。程序要简单可靠,有必要的容错性,适当的冗余设计,正确的算法,无误的程序语句格式,对应的变量与引用。在编程时尽可能做好必要的注释,方便事后的查看。(6)足够的耐心与毅力 编制好的程序先不急于直接上机床运行,多做计算机仿真验证。程序的修改和调试是必要的,要静下心来,不急不躁。程序有bug是正常的,多检查程序结构、变量定义与引用,格式的疏忽甚至输入细微的错误都可能导致程序出错。相对于普通程序,宏程序显得枯燥且难懂。编制宏程序过程中需要灵活的逻辑思维能力,调试宏程序需要付出更多的努力,发现并修正其中的错误需要耐心与细致,更要有毅力从一次次失败中汲取经验教训并最终取得成功。

为了本书内容的正确和案例程序不出错误并按预期执行,编著者做了很多细致的实践验证工作。但鉴于水平有限,不足之处在所难免,具体使用环境的不同也会带来无法预料的结果,望读者见谅并提出宝贵修改意见。编著者引言

如图0-1(a)所示直角三角形,已知一直边a长3,另一直边b长4,试求斜边c的长度?图0-1 直角三角形

答案是显而易见的,解题时需要用到几何中的勾股定理,直角三角形的两条直角边的平方和等于斜边的平方,写为表达式:222a+b=c  (0-1)

如图0-1(b)所示,中国古代称直角三角形为勾股形,并且直角边中较小者为勾,另一长直角边为股,斜边为弦,所以称这个定理为勾股定理。

由于a=3,b=4,解得:c==5

当然本题的更简便解法是运用“勾三股四弦五”(图0-2),意思是如果勾是三,股是四,那么弦就是五,这是勾股定理的一个特例。图0-2 勾三股四弦五

来个复杂点的,如图0-3(a)所示,若已知R和L的值,试求A点的坐标值(填出表0-1中的XY值)。图0-3 求A点坐标值表0-1 填出A点的XY值

在图0-3(b)中构建了一个直角三角形,斜边长R,一直边长L(即A点的X坐标值),另一直边长(A点的Y坐标值)可用勾股定理的转换式子Y=算出。

其实这个题也可以用“勾三股四弦五”计算,如表0-2所示。表0-2 A点的XY值

你会发现,“勾三股四弦五”中的“三四五”并不只能是数字“345”,我们把它理解成“三份、四份、五份”更合适。

上面两图多个尺寸的计算中,虽然数值各不相同,但是都可以用同一种算法知识(勾三股四弦五)来解决!这就是举一反三谓之“变”。

再来一题:找一找,图0-4中三个圆锥有什么共同点?图0-4 三个圆锥

答案是图中三个圆锥的锥度值相同,都是1∶4,不信你用圆锥的四个基本参数关系式算算吧:C=  (0-2)

式中,C表示圆锥锥度(如图0-5所示);D是圆锥大径;d是小径;L为圆锥长度。图0-5 圆锥四个基本参数

面对纷繁的事物,就像图0-4中表面上看是三个不同的圆锥一样,也许它们之间存在某种内在的联系呢!正所谓追根溯源寻“不变”,就看你能不能发现它了。

我们在观察某一现象或过程时,常常会遇到各种不同的量,其中有的量在过程中不起变化,我们把其称之为常量,如上面例子中的3、4、50、18等都是常量;而有的量在过程中是变化的,也就是可以取不同的数值,我们称其为变量,上面例子中提到的勾股定理[式(0-1)]中的abc、“勾三股四弦五”中的“三四五”和圆锥的四个基本参数关系式[式(0-2)]中的DdLC都是变量。当然常量和变量也不是一成不变的,它们的关系是辩证的,可能存在着某种联系:(1)变量的“万变”

变量就像一张银行卡,变量的值是可以变化的(卡里的钱多少是可以变化的,可以往卡里存钱,也可以取钱),如图0-6所示。图0-6 银行卡(2)变量的“不变”

同银行卡一样,当我们去查询的某一刻,变量的值(银行卡里的钱)又是固定的,如图0-7所示。图0-7 账户余额(3)变量之间的运算

变量之间可以进行运算,就像银行卡间可以转账一样,如图0-8所示。图0-8 转账

总结一下,常量是在某个过程中保持不变的量;变量是在某个过程中产生变化的量。理解常量与变量的辩证关系,对宏程序编程具有重要的意义。

从常量到变量,不是数值或表述的变化,而是发生了质上的根本性变化,是思维上的变化,是解决宏程序编程问题的钥匙。

某种意义上来说,宏程序玩的就是“变量”,或者说数字游戏,就像纸牌(图0-9),提前制定好规则,在规则范围内发挥吧!简单点就玩比大小,复杂点就“斗地主”,烧脑点就“三国杀”,变化多端,趣味无穷,看你自己愿意挑战哪个难度。图0-9 纸牌

一场宏程序编程“游戏”的大幕已经拉开了!第1章 从外圆柱面车削开始

通过前一节学习,我们了解到了变量对于数控宏程序编程具有重要的意义。本章我们将通过一个简单的圆柱面车削实例来完成宏程序编程基础知识的学习。1.1 变量

数控车削精加工如图1-1所示ϕ50×60外圆柱面,试编程。图1-1 ϕ50×60圆柱

设工件原点在圆柱右端面与轴线的交点上,选用外圆车刀,从(100,100)位置起刀,加工完毕后返回起刀点。编制加工部分程序如下:G00 X50 Z2G01 Z-60 F0.1G00 X100Z100

如果数控车削精加工如图1-2(b)所示D×L外圆柱面,可编程如下:图1-2 D×L圆柱G00 XD Z2G01 Z-L F0.1G00 X100Z100

圆柱直径用符号D表示,长度用符号L表示,它可以代表原来的ϕ50×60,也可以表示ϕ40×35、ϕ20×30等其他值的圆柱。根据前面的定义,ϕ50×60就是用常量表示的圆柱,D×L就是用变量表示的圆柱。

符号D或者L就是一个变量,只不过这样的符号不被数控系统所接受,FANUC数控系统能接受变量形如“#i”的符号,如图1-3(c)所示,编制精加工程序如下:G00 X#1 Z2G01 Z-#2 F0.1G00 X100Z100图1-3 外圆柱面车削

含有变量的数控程序称为宏程序,上面就是一段简短的宏程序,程序中涉及变量的表示与引用两个知识点。(1)变量的表示形式

FANUC数控系统的变量表示形式为:#i,其中,“#”为变量符号,“i”为变量号,变量号可用1、2、3等数字表示,也可以用表达式来指定变量号,但其表达式必须全部写入方括号“[ ]”中,例如#1和#[#1+#2+10]均表示变量,当变量#1=10,变量#2=100时,变量#[#1+#2+10]表示#120。(2)变量的引用

将跟随在地址符后的数值用变量来代替的过程称为引用变量。如上面程序中的程序段:G00 X#1 Z2,要使被引用的变量值反号,在“#”前加前缀“-”即可,如G01 Z-#2 F0.1。

同样的,引用变量也可以采用表达式。在程序中引用(使用)变量时,其格式为在指令字地址后面跟变量号。当用表达式表示变量时,表达式应包含在一对方括号内,如:G01 X[#1+#2]F#3。(3)变量的赋值

如果要利用上面的宏程序加工一个ϕ50×60的圆柱,就要让变量#1的值为50,#2的值为60;如果要加工一个ϕ30×20的圆柱,就让变量#1的值为30,#2的值为20即可。要想实现这样的功能,就需要对变量进行赋值,其格式为:

变量=数值(表达式或者变量)

切记不能把“=”理解为“等于”,其真正作用是将“=”号右边的值赋给左边的变量,就像把钱(“=”号右边的值)存到银行卡(“=”号左边的变量)。例如:#1=300 (把300赋值给变量#1,相当于把300元钱存入银行卡1中)#2=400 (把400赋值给变量#2,相当于把400元钱存入银行卡2中)

把变量的赋值结合起来,一个加工外圆柱面的宏程序就有了:#1=50 (将圆柱直径50赋值给#1)#2=60 (将圆柱长度60赋值给#2)G00 X#1 Z2 (进刀)G01 Z-#2 F0.1 (切削)G00 X100 (退刀)Z100 (返回)

精加工表1-1中4个外圆柱面,试分别用宏程序编程。表1-1 外圆柱面尺寸

提示:只需要修改相应变量的赋值即可,如表中零件1的尺寸为ϕ50×40,其加工程序为:#1=50 (将圆柱直径50赋值给#1)#2=40 (将圆柱长度40赋值给#2)G00 X#1 Z2 (进刀)G01 Z-#2 F0.1 (切削)G00 X100 (退刀)Z100 (返回)1.2 算术运算

编制一个如图1-4所示实现从A→B→C→D→A矩形循环路线的宏程序,用于加工直径#1×长度#2尺寸的外圆柱面。图1-4 矩形循环路线加工外圆柱面

设工件原点在圆柱面右端面与轴线的交点上,A→B之间的距离为10mm(直径值),B点距离右端面2mm,编制程序如下:G00 X#1 Z2 (从A点进刀到B点)G01 Z-#2 F0.1 (从B点切削到C点)G00 X[#1+10] (从C点退刀到D点)Z2 (从D点返回到A点)

注意第三个程序段中的X[#1+10],表示把变量#1的值加上10后供X程序字引用,也就是说变量能进行加法运算,除此之外,减、乘、除法运算都可以。表1-2为算术四则运算的格式。表1-2 算术四则运算的格式

举两个例子,若上题中圆柱尺寸提供的是半径#3,换算成直径值就是2*#3,则第一个程序段可修改为:G00 X[2*#3]Z2 (从A点进刀到B点)

若增加一个中间变量#4,将#1+10的值赋给#4,上面程序可以修改为:#4=#1+10 (将#1+10赋值给#4)G00 X#1 Z2 (从A点进刀到B点)G01 Z-#2 F0.1 (从B点切削到C点)G00 X#4 (从C点退刀到D点)Z2 (从D点返回到A点)

如图1-5所示,若已知毛坯直径#3=50,要求加工到最终外圆尺寸为ϕ42×30,试编制其粗精加工程序。图1-5 粗精加工圆柱面

如图1-6所示分层加工,设每一层背吃刀量2mm,编制加工宏程序如下:图1-6 分层加工示意图#1=42 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3-2 (加工X值赋初值,当前值为48,图1-6中第一层X1位置)G00 X#4 Z2 (从A点进刀到B点)G01 Z-#2 F0.1 (从B点切削到C点)G00 X[#4+10] (从C点退刀到D点)Z2 (从D点返回到A点)#4=#4-2 (加工X值递减2mm,当前值为46,图1-6中第二层X2位置)G00 X#4 Z2 (从A点进刀到B点)G01 Z-#2 F0.1 (从B点切削到C点)G00 X[#4+10] (从C点退刀到D点)Z2 (从D点返回到A点)#4=#4-2 (加工X值递减2mm,当前值为44,图1-6中第三层X3位置)G00 X#4 Z2 (从A点进刀到B点)G01 Z-#2 F0.1 (从B点切削到C点)G00 X[#4+10] (从C点退刀到D点)Z2 (从D点返回到A点)#4=#4-2 (加工X值递减2mm,当前值为42,图1-6中第四层X4位置)G00 X#4 Z2 (从A点进刀到B点)G01 Z-#2 F0.1 (从B点切削到C点)G00 X[#4+10] (从C点退刀到D点)Z2 (从D点返回到A点)

仔细研究我们会发现程序中的A→B→C→D→A矩形循环加工部分程序每一层加工时都没有变化,每一层加工的X值变量赋值语句除赋初值“#4=#3-2”不同之外,其余每一段都是“#4=#4-2”,当然我们要注意理解#4内在的值实际上是发生了变化的。

结合算术运算,我们将变量的赋值再梳理一遍:

变量的赋值格式为:

变量=数值(表达式或者变量)

切记不能把“=”理解为“等于”,其真正作用是将“=”号右边的值赋给左边的变量,就像把钱(“=”号右边的值)存到银行卡(“=”号左边的变量)。例如:#1=500 (把500赋值给变量#1,相当于把500元钱存入银行卡1中)#2=600 (把600赋值给变量#2,相当于把600元钱存入银行卡2中)#3=#1+2*#2+700 (把#1+2*#2+700的值赋给变量#3,相当于把银行卡1中的500元和 银行卡2中600元的两倍,另加700元一起存入银行卡3中,其值为 2400)

但是同一个变量后赋的值会覆盖掉原来的值,例如:#4=800 (把800赋值给变量#4,即#4的值为800,相当于把800元钱存 入银行卡4中)#4=10 (把10赋值给变量#4,即#4的值为10,银行卡4中原来的800元没有 了!)

神不神奇,惊不惊喜?

要想实现在银行卡中现有钱数中存入或取出,请看下面的例子:#5=900 (把900赋值给变量#5,即银行卡5中存入了900元)#5=#5+100 (把#5+100的值赋值给变量#5,即银行卡5中变成了1000元)#5=#5-50 (把#5-50的值赋值给变量#5,即银行卡5中变成了950元)

也许你被搞糊涂了,其实你只需要记住前面所说的一句话:

变量赋值的作用是将“=”号右边的值赋给左边的变量。

形如“#1=#1+1”“#1=#1-1”的赋值语句称为变量的自赋值,能实现变量的自加或自减,这种语句在宏程序中有非常重要的作用。

请读者再理解理解上面程序段中的“#4=#4-2”吧,注意“=”不是“等于”,而是把#4-2的值赋给#4!1.3 转移语句

前一节虽然我们实现了将毛坯直径ϕ50的棒料加工到了ϕ42,但是程序也太长了点,能不能想办法简化些?答案是肯定的,本节的转移语句就能帮到你。(1)无条件转移指令(GOTO语句)

指令格式:GOTO+目标程序段号(不带N)

无条件转移指令用于无条件转移到指定程序段号的程序段开始执行,可用表达式指定目标程序段号。

例如,GOTO10 (转移到顺序号为N10的程序段)

例如,#100=50

GOTO#100 (转移到由变量#100指定的程序段号为N50的程序段)

心动不如行动,看看修改后的程序:#1=42 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3-2 (加工X值赋初值)N1 G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.1 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)#4=#4-2 (加工X值递减2mm)GOTO1 (无条件跳转到N1程序段)

将程序导入仿真软件中验证,结果如图1-7所示。图1-7 仿真验证结果

死循环!为什么?我们分析一下程序,执行第一次矩形循环的时候,#4的值为48(#3-2),执行完后接着执行“#4=#4-2”程序段,#4的值变成了46,然后执行“GOTO1”程序跳转到N1程序段开始执行第二次矩形循环,接着执行“#4=#4-2”,#4的值从46变成了44,再次执行“GOTO1”跳转到N1程序段开始执行第三次矩形循环,然后#4的值为42的时候执行第四次矩形循环,#4的值为40的时候执行第五次矩形循环……停不下来,程序陷入了死循环!(2)条件转移指令(IF语句)

指令格式:IF+[条件表达式]+GOTO+目标程序段号(不带N)

当条件满足时,转移到指定程序段号的程序段,如果条件不满足则执行下一程序段。

例如下程序,如果变量#1的值大于10(条件满足),转移到程序段号为N100的程序段,如果条件不满足则执行N20程序段。N10 IF [#1GT10] GOTO100N20 G00 X70 Y20……N100 G00 G91 X10

① 条件表达式 条件表达式必须包括运算符号,运算符插在两个变量或变量和常数之间,并且用方括号封闭。表达式可以替代变量。

② 运算符 运算符由2个字母组成,用于两个值的比较,以决定它们的大小或相等关系。注意不能使用不等号。表1-3为运算符含义。表1-3 运算符含义

采用条件转移指令(IF语句)修改后的程序如下,仿真验证结果如图1-8所示。#1=42 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3-2 (加工X值赋初值)N1 G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.1 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)#4=#4-2 (加工X值递减2mm)IF[#4LT#1] GOTO2 (如果#4小于#1程序跳转到N2程序段)GOTO1 (无条件跳转到N1程序段)N2 (程序段号N2,跳转标记)图1-8 修改程序后仿真验证结果1

当然也可以修改为如下程序,仿真验证结果如图1-9所示:#1=42 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3-2 (加工X值赋初值)N1 G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.1 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)#4=#4-2 (加工X值递减2mm)IF[#4GE#1]GOTO1 (如果#4大于等于#1程序跳转到N1程序段)图1-9 修改程序后仿真验证结果2

细心的你能发现两个程序中条件跳转程序段中的区别吗?一个向前跳转,一个向后跳转,一个是“LT”小于,另一个是“GE”大于等于。简单来说就是若#4小于#1的时候不再执行矩形循环加工,若#4大于等于#1就继续执行矩形循环加工。

若#1=41,即要求加工的最终直径值为ϕ41,上面的程序能完成预期加工目标吗?分析一下程序执行情况:

当#4=48时,执行第一次加工;

当#4=46时,执行第二次加工;

当#4=44时,执行第三次加工;

当#4=42时,执行第四次加工;

当#4=40时,不再执行;

也就是说只加工到ϕ42时结束了,程序并没有加工到预期的ϕ41。

一种看似最简便的解决方法是将原程序中的“#4=#4-2”程序段修改为“#4=#4-1”,即每一层的背吃刀量修改为1mm,但这样修改后的程序适应性并不强,例如若#1=40.5,程序又不能保证加工到规定尺寸了。下面是修改后的程序,注意字体加粗的两个程序段。#1=41 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3-2 (加工X值赋初值)N1 G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.2 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)#4=#4-2 (加工X值递减2mm)IF[#4GT#1] GOTO1 (如果#4大于#1程序跳转到N1程序段)#4=#1 (将最终尺寸直接赋值给#4,然后执行精加工) G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.1 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)

延伸问题1:若将每一层背吃刀量设为#5,程序如何修改?

前面程序中“#4=#3-2”和“#4=#4-2”程序段中的“2”就表示切削层的背吃刀量,直接替换成#5就可以了,程序如下(别忘了给#5赋初值):#1=41 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#5=2 (背吃刀量#5赋初值)#4=#3-#5 (加工X值赋初值)N1 G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.2 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)#4=#4-#5 (加工X值递减#5)IF[#4GT#1] GOTO1 (如果#4大于#1程序跳转到N1程序段)#4=#1 (将最终尺寸直接赋值给#4,然后执行精加工) G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.1 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)

类似的,进给速度F后面的值也可以用变量代替,还可以根据粗精加工赋给不同的值。

延伸问题2:若要求粗精加工取不同的背吃刀量,程序如何修改?例如:

若加工余量大于3,背吃刀量#5=3;

若加工余量大于2,背吃刀量#5=2;

若加工余量大于1,背吃刀量#5=1;

若加工余量大于0.5,背吃刀量#5=0.5;

若加工余量小于等于0.5,直接精加工。(3)另一种IF条件转移语句

指令格式:IF+[条件表达式]+THEN+宏程序语句

当条件表达式满足时,执行预先决定的宏程序语句。例如执行程序段IF[#1EQ#2]THEN#3=0,该程序段的含义是如果#1和#2的值相等,则将0赋给#3。

将上面的要求转换成程序就是:IF [[#4-#1]GT3] THEN #5=3 (如果加工余量大于3,背吃刀量#5=3)IF [[#4-#1]GT2] THEN #5=2 (如果加工余量大于2,背吃刀量#5=2)IF [[#4-#1]GT1] THEN #5=1 (如果加工余量大于1,背吃刀量#5=1)IF [[#4-#1]GT0.5] THEN #5=0.5 (如果加工余量大于0.5,背吃刀量#5=0.5)IF [[#4-#1]LE0.5] THEN #5=#4-#1 (如果加工余量小于等于0.5,直接取精加工值)

采用表1-4特值法检验一下程序是否正确。表1-4 特值法检验程序

通过表1-4特值法验证,我们发现,若加工余量为4时(即#4-#1的值为4),期望背吃刀量取值3(如图1-10所示),但实际最终程序执行结果却是0.5,与期望不符合。图1-10 背吃刀量取值

其实我们只需要将程序调换一下先后顺序即可。IF[[#4-#1]LE0.5] THEN #5=#4-#1 (如果加工余量小于等于0.5,直接取精加工值)IF [[#4-#1]GT0.5] THEN #5=0.5 (如果加工余量大于0.5,背吃刀量#5=0.5)IF [[#4-#1]GT1] THEN #5=1 (如果加工余量大于1,背吃刀量#5=1)IF [[#4-#1]GT2] THEN #5=2 (如果加工余量大于2,背吃刀量#5=2)IF [[#4-#1]GT3] THEN #5=3 (如果加工余量大于3,背吃刀量#5=3)

整合一下:#1=41 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3 (加工X值赋初值)IF[[#4-#1]LE0.5] THEN #5=#4-#1 (如果加工余量小于等于0.5,直接取精加工值)IF[[#4-#1]GT0.5] THEN #5=0.5 (如果加工余量大于0.5,背吃刀量#5=0.5)IF [[#4-#1]GT1] THEN #5=1 (如果加工余量大于1,背吃刀量#5=1)IF [[#4-#1]GT2] THEN #5=2 (如果加工余量大于2,背吃刀量#5=2)IF [[#4-#1]GT3] THEN #5=3 (如果加工余量大于3,背吃刀量#5=3)#4=#4-#5 (加工X值递减#5)N1 G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.2 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)IF [[#4-#1]LE0.5] THEN #5=#4-#1 (如果加工余量小于等于0.5,直接取精加工值)IF [[#4-#1]GT0.5] THEN #5=0.5 (如果加工余量大于0.5,背吃刀量#5=0.5)IF [[#4-#1]GT1] THEN #5=1 (如果加工余量大于1,背吃刀量#5=1)IF [[#4-#1]GT2] THEN #5=2 (如果加工余量大于2,背吃刀量#5=2)IF [[#4-#1]GT3] THEN #5=3 (如果加工余量大于3,背吃刀量#5=3)#4=#4-#5 (加工X值递减#5)IF[#4GT#1] GOTO1 (如果#4大于#1程序跳转到N1程序段) G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.1 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)

程序段“#5=#4-#1”的作用是把剩下的余量全部赋值给#5,执行“#4=#4-#5”时使#4的值为#1,也就是精加工。

优化一下程序结构,得到最终程序:#1=41 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3 (加工X值赋初值)N1IF [[#4-#1]LE0.5] THEN #5=#4-#1 (如果加工余量小于等于0.5,直接取精加工值) IF [[#4-#1]GT0.5] THEN #5=0.5 (如果加工余量大于0.5,背吃刀量#5=0.5) IF [[#4-#1]GT1] THEN #5=1 (如果加工余量大于1,背吃刀量#5=1) IF [[#4-#1]GT2] THEN #5=2 (如果加工余量大于2,背吃刀量#5=2) IF [[#4-#1]GT3] THEN #5=3 (如果加工余量大于3,背吃刀量#5=3) #4=#4-#5 (加工X值递减#5) G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.2 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)IF[#4GT#1] GOTO1 (如果#4大于#1程序跳转到N1程序段)1.4 循环语句

继续外圆柱面的车削加工,前一节用条件转移IF语句实现了圆柱面的分层车削,本节采用循环指令(WHILE语句)来编程实现。

循环指令(WHILE语句)格式:WHILE[条件表达式] DOm(m=1、2、3);……ENDm;

当条件满足时,就循环执行DO与END之间的程序段(称循环体),当条件不满足时,就执行END后的下一个程序段。DO和END后的数字m用于指定程序执行范围的识别号,该识别号只能在1、2、3中取值,否则系统报警。

例如下程序,如果变量#1的值大于10(条件满足),执行N20程序段,如果条件不满足则转移到程序段号为N100的程序段结束循环。N10 WHILE [#1GT10] DO1N20 G00 X70 Y20……N100 END1

采用循环指令(WHILE语句)编程如下:#1=41 (直径#1赋值)#2=30 (长度#2赋值)#3=50 (毛坯直径#3赋值)#4=#3 (加工X值赋初值)WHILE [#4GT#1] DO1 (条件判断) IF [[#4-#1]LE0.5] THEN #5=#4-#1 (如果加工余量小于等于0.5,直接取精加工值) IF [[#4-#1]GT0.5] THEN #5=0.5 (如果加工余量大于0.5,背吃刀量#5=0.5) IF [[#4-#1]GT1] THEN #5=1 (如果加工余量大于1,背吃刀量#5=1) IF [[#4-#1]GT2] THEN #5=2 (如果加工余量大于2,背吃刀量#5=2) IF [[#4-#1]GT3] THEN #5=3 (如果加工余量大于3,背吃刀量#5=3) #4=#4-#5 (加工X值递减#5) G00 X#4 Z2 (从A点进刀到B点) G01 Z-#2 F0.2 (从B点切削到C点) G00 X[#4+10] (从C点退刀到D点) Z2 (从D点返回到A点)END1 (循环体1结束)

对比IF语句编写的程序,程序结构没有变化,只是语句格式与运用上的区别。

归纳整理下,一个完整的宏程序可大致分为零件加工、变量赋值、程序运算三大基本部分,如表1-5所示。表1-5 宏程序的三大基本部分

对于具有代表性的典型加工特征,我们可以建立如图1-11所示的几何参数模型,事先编制好对应的宏程序,需要的时候直接修改图中参数对应的变量赋值即可使用。图中中部为加工零件的几何参数模型,涉及的几何参数均做了对应标注(如图中的D、d、L),图中下方表格中给出了参数对应的名称(如D表示毛坯直径),图中右下方文字为本参数模型的名称(如图中“外圆柱面车削加工几何参数模型”),图中右边正方形框中表示可适用的加工场合(如本图适用于加工“光轴”或“台阶轴”)。图1-11 外圆柱面车削加工几何参数模型

对应宏程序如下:#1=41 (工件直径D赋值)#2=30 (工件长度L赋值)#3=50 (毛坯直径D赋值)#4=0 (工件右端面Z坐标值)#5=0.2 (进给速度赋值)#10=#3 (加工X值赋初值)WHILE [#10GT#1] DO1 (条件判断)

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载