如图5-1所示,这些孔沿直线以相等间隔呈线性排列,夹角为#2度。观察图形不难发现这些孔的斜边长构成了一个等差数列,首项 a 1 为#1,公差 d 为#3,那么该孔斜边长的通项公式为#4=#1+[#5-1]*#3(其中#4为通项 a n ,#5为项数 n ),加之图形中给出了角度,在编程的方式上首先想到的就是采用极坐标方式。
极坐标方式编程在此图中是最常见的编程方式,当然,在某些场合中,极坐标方式编程也会给我们带来不便,要具体问题具体分析,现在一一进行探讨。
图5-1 单直线孔组
说明: 该程序中,有几个注意的重点。其一,极坐标的建立和取消应该一一对应,虽然在程序中G15的有无对程序没有影响,但是为了不影响到其他的程序,所以应该及时用G15取消极坐标。其二,尤其要注意“#5=#5+1”的位置,读者想想,假如“#5=#5+1”的位置位于“WHILE[#5LE#6]D01”的正下方程序将发生怎样的变化?其三,注意“#4=#1+[-1]*#3”程序段的位置。
在之前的讨论中,笔者也说到,在某些情况下,极坐标编程方式也将给程序编程带来不便,那么只好避开极坐标方式,直接用三角函数代替编程,程序如下
比较O0521-1与O0521-2程序不难发现,它们的程序大体一致,关键的不同点在于数控程序对孔位置的定位方式不同,一种采用边长与夹角定位方式,一种采用两直角边长定位方式,从这两个程序中也能看出宏程序的编程特点。对同一图形而言,编程方式并不是唯一的,它能有多种不同形式,找出最适合的编程方式,用最简洁的编程语言来表达图形是宏程序的特点之一。
毫无疑问,此图中走刀路线有两种方式,其一是左下方至右上方,其二是右上方至左下方。对于后者,它的编程方式又会发生怎样的变化呢,这里依旧采用极坐标编程方式。
程序中仅仅把“#4=#1+[#5-1]*#3”改写为“#4=#1+[#6-#5]*#3”,便能实现走刀从右上方至左下方。这个小的改动就能使程序发生“翻天覆地”的变化,由此能看出宏程序具有牵一发而动全身的特点。笔者认为,对宏程序的改动应该是在整个程序的全盘把握下才能进行,千万不能“管中窥豹”,否则后果可想而知。
值得提到的是,由“#4=#1+[#5-1]*#3”改写为“#4=#1+[#6-#5]*#3”,对以后图形宏程序编辑有重要的指导意义。
如图5-2所示,孔沿矩形方框以间隔呈线性排列,与图5-1有类似的特点。第1孔相对于G54对刀原点坐标值为(#1,#2),行向孔间距为#3,列向孔间距为#5,孔组旋转角度为#4。
图5-2 框形点阵孔组
对于此类图形的程序编辑,首先就应该思考编程原点设在何处最为合适,并且采用怎样的编程语言对程序编写最为有利。毫无疑问,此例中,将编程原点放置在1号孔的圆心,且采用G68旋转指令对图形进行旋转复位,是最有利的编程方式。极坐标编程方式在这里不适用,否则程序将变得相当复杂。走刀方式采用逆时针走刀。
说明: ①这个程序有个有趣的现象,由于走刀路线是按照逆时针走刀,并且在四段移动轨迹中,前一段轨迹的终点孔是后一段轨迹的起点孔。所以,在宏程序的编写中尤其要注意这点,防止轨迹交点孔的重复钻削。请读者用心体会程序赋值的特点。
②由于G52局部坐标系偏移指令并没有移动效果,所以在建立、取消局部坐标系后,应该马上用移动类指令进行移动检测,确认是否建立或者取消,虽然这样做对程序没有影响,但能避免出错。
在程序编写的开始:
在程序编写的末尾:
③程序中涉及G54、G52、G68、G69组合运用的问题,在编程的过程中这些代码编写有先后顺序要求,并且这些代码的建立和取消只能包含不能交叉。否则机床要么报警,要么胡乱走动。
在编写程序代码时应该遵循如下原则:G54>G52>G68。
…… G54G00X0Y0Z200 G52X#1Y#2Z0 G00X0Y0 G68X0Y0R#4 ……
以上是正确的编写顺序。
…… G54G00X0Y0Z200 G68X0Y0R#4 G52X#1Y#2Z0 G00X0Y0 ……
以上是错误的编写顺序。
也就是说,任何程序编辑时,如果将用到局部坐标系与旋转坐标系同时存在时,应该是首先局部坐标系偏移然后再启动旋转坐标系,而不是先旋转了坐标后才进行局部坐标系偏移。
之前,也提到了对于这几个编程指令的建立和取消只能包含,不能交叉,如下文所示。
…… G54G00X0Y0Z200 G52X#1Y#2Z0 G00X0Y0 G68X0Y0R#4 …… …… G69 G52X0Y0 G00X0Y0 ……
以上是正确的编写顺序。
…… G54G00X0Y0Z200 G52X#1Y#2Z0 G00X0Y0 G68X0Y0R#4 …… …… G52X0Y0 G00X0Y0 G69 ……
以上是错误的编写顺序
④在WHILE循环语句中,DO后面的号是指定程序执行范围的标号,标号值为1、2、3。如果超过了这些值,将触发No.126报警。在该例中,循环语言使用4次,但是标号值只能是1、2、3。所以在编程时,需按照程序语言向下分析,才能得出正确的标号值用于编程。
到此,探讨了此类图形的编程语言问题,假如编程采用顺时针走刀呢?程序又将发生怎样的变化,顺时针走刀方式程序如下:
如图5-3所示,这个例子是图5-2的延伸,第1孔相对于G54对刀原点坐标值为(#1,#2),行向孔间距为#3,列向孔间距为#5,孔组旋转了一个#4的角度。矩阵孔的特点是孔与孔之间有很强规律性可言,为了编程方面,依然将G54编程原点用G52局部坐标系偏移至(1行,1列)孔处,同时采用G68坐标系旋转。
图5-3 矩形矩阵孔组
此图的走刀方式有两种:
①单向走刀方式先加工第1行,即从孔(1行,1列)开始加工,依次加工(1行,1列)→(1行,2列)→…→(1行,6列)。然后加工第2行,即从孔(2行,1列)开始加工,依次加工(2行,1列)→(2行,2列)→…→(2行,6列)。然后加工第3行,即从孔(3行,1列)开始加工,依次加工(3行,1列)→(3行,2列)→…→(3行,6列)。最后加工第4行,即从孔(4行,1列)开始加工,依次加工(4行,1列)→(4行,2列)→…→(4行,6列)。依次循环,直到全部孔加工完毕。这种方式的特点是空行程较多,但是编程较简单。程序如下所示:
②双向走刀方式先加工第1行,即从孔(1行,1列)开始加工,依次加工(1行,1列1行,2列)→…→(1行,6列)。然后加工第2行,即从孔(2行,6列)开始加工,依次加工(2行,6列)→(2行,5列)→…→(2行,1列)。然后加工第3行,即从孔(3行,1列)开始加工,依次加工(3行,1列)→(3行,2列)→…→(3行,6列)。最后加工第4行,即从孔(4行,6列)开始加工,依次加工(4行,6列)→(4行,5列)→…→(4行,1列)。依次循环,直到全部孔加工完毕。这种方式的特点是空行程较少,加工效率高,加工路径很优化,但是编程较复杂。程序如下所示:
说明: ①注意WHILE循环语句中,包含的运用特点。
②注意局部坐标系G52与旋转坐标系G68的综合运用特点。
③在程序O0523-2程序中出现了一段奇偶判断语句, “IF[[#6AND1]EQ0]GOTO10”,这是使孔能双向走刀判断的核心。离开了这一点,采用其他的编程形式将会使程序变得很复杂。
④在程序O0523-2程序段中,有一个对程序跳转的判断,如下所示:
…… IF[[#6AND1]EQ0]GOTO10 #12=[#10-1]*#3 #13=[#6-1]*#5 GOTO20 N10#12=[#11-#10]*#3 #13=[#6-1]*#5 N20G01X#12Y#13F1000 ……
这一小段程序,对以后图形宏程序编辑有重要的指导意义。务必领会其中奥妙。
如图5-4所示,这是图5-3的变形,在图5-3的基础上,矩阵孔变化为了菱形,夹角为#6度,第1孔相对于G54对刀原点坐标值为(#1,#2),行向孔间距为#3,列向孔间距为#5,孔组旋转了一个#4的角度。依然将G54编程原点用G52局部坐标系偏移至(1行,1列)孔处,同时采用G68坐标系旋转。在5.1中,孔类宏程序的编辑最核心的内容是孔坐标点的确认。在该例中,孔坐标的确认更能体现这一点。
图5-4 菱形矩阵孔组
在该例中,采用双向走刀方式,先加工第1行,即从孔(1行,1列)开始加工,依次加工(1行,1列)→(1行,2列)→…→(1行,6列)。然后加工第2行,即从孔(2行,6列)开始加工,依次加工(2行,6列)→(2行,5列)→…→(2行,1列)。然后加工第3行,即从孔(3行,1列)开始加工,依次加工(3行,1列)→(3行,2列)→…→(3行,6列)。最后加工第4行,即从孔(4行,6列)开始加工,依次加工(4行,6列)→(4行,5列)→…→(4行,1列)。依次循环,直到全部孔加工完毕。
在编程之前,先来分析孔坐标的数学关系。
任意孔所在 X 轴的数列方程式为
#13=[#11-1]*#3+[#7-1]*#5*COS[#6]…………………………奇数段时
#13=[#12-#11]*#3+[#7-1]*#5*COS[#6]…………………………偶数段时
任意孔所在 Y 轴的数列方程式为
#14=[#7-1]*#5*sin[#6]
其中,#7为行数;#11为列数;#12为总列数。
接下来,采用程序图5-3进行类似转化,便能实现很好的加工效果,程序如下所示:
说明: 这里尤其要注意孔位置的确认。另外,#7和#11虽然首先都赋值为1,但是它们代表的意义却完全不一样,要注意区别。
如图5-5所示,这是一个过滤网板,一般用在液压元器件中,不难发现图5-5中矩阵网孔并非摆列的那么整齐,而是错开的,与一般的状况相比,编程难度上升了不少,同时,这里不考虑机床的反向间隙,而是从加工效率来考虑进行 Z 字形走刀(见图5-6)。
图5-5 交错网孔
图5-6 交错网孔走刀路线
对于该零件的编程,核心点在于找到任意孔的坐标。这里把编程原点设置在零件的左下角(见图5-5)。
从图5-6中能看出每一层孔的 Y 坐标是一个等差数列,等差数列的公式为
#4=10+[#1-1]*10
其中#4代表任何孔的 Y 坐标值,#1代表层数,这里有6层。
从图5-5中不难看出 X 轴坐标的确定要分为两种情况,奇数层与偶数层,因为采用的是 Z 字形走刀,必须考虑一个奇偶变换的问题。
同时任意层的孔都有一个共性,孔间距公式都为
#6=[#2-1]*10
#6代表任意层孔间距
#2代表孔增量
这样,在奇数层时,钻头从左到右, X 轴公式为
#3=10+#6
在偶数层时,钻头从右到左, X 轴公式为
#3=95-#6
在此必须留意#6,#6参数特意提出来,在接下来的运用中有特殊的意义。
说明: #5、#6参数运用是这个程序的关键,如果运用不正确,直接导致程序的复杂与难理解。宏程序是数控编程很有效的语言,如果运用好,能很好地提高程序的可读性与机床的可控性,节约人力、物力、财力。
如图5-7所示,这是一个正多边形孔组,G54编程原点设置在多边形中心,为了简化编程与思路分析,用局部坐标系G52偏移指令,将编程原点偏移至图中 A 孔处,即(#11,#12)。图中与 X 轴平行的轴,在此认为是“行”,图中与 Y 轴平行的轴,在此认为是“列”。孔的行间距为#14,列间距为#13。走刀路线采用“S”形走刀,如图5-8所示,这样能保证路径的最优化,最短化。程序如下。
图5-7 正多边形孔组
图5-8 正多边形孔组走刀路线
说明: 编写此程序的核心在于思路的建立与关键因素的跳转。分析如下。
①首先,每行孔的个数是不一样的,在以行数加1递增的同时,应该让程序分析出,在当前行孔的个数是多少。
IF[#1GT4]GOTO10 #2=#1+3 GOTO20 N10 #2=11-#1
#2代表孔个数,1至4行孔时,孔个数方程为“#2=#1+3”;5至7行孔时,孔个数方程为“#2=11-#1”。
②1至4行中,任意孔 X 轴坐标方程式为“#5=#4-[[#1-1]*#13]/TAN[60]”。其中,“#4”为孔的行间距,“[[#1-1]*#13]/TAN[60]”为行的起始点向左的偏移量。又由于采用的双向走刀,当行数在偶数行时,钻头从右钻到左边,方程式必有变动,任意孔 X 轴坐标方程式变为了“#5=[#2-1]*#14-[[#1-1]*#13]/TAN[60]-#4”,其中,“[#2-1]*#14”为偶数行孔间距的总长度。“[[#1-1]*#13]/TAN[60]”为行的起始点向左的偏移量,“#4”为孔的行间距。由于这里又有一个奇偶转换的问题,所以有一个判断语句在程序中。
在5至7行, X 轴坐标方程系中,其实与1至4行 X 轴坐标方程是一样的,所要面对的问题也与1至4行一样,唯一不一样的是,在5至7行中 X 轴坐标向右偏移了一个#14的孔间距,因此,在程序中,要多加一个判断语句,如下所示
…… N50 IF[#1GT4]GOTO60 GOTO70 N60#5=#5+#14 ……
③这样的孔特征,是否能通过其他的方式来编辑呢,答案是肯定的,如图5-9所示。根据零件的形状,将孔组分为三个矩阵,然后采用5.2.4节关于菱形矩阵孔组的介绍分析,运用类似的方法,便能很好地解决问题。
图5-9 多边形矩阵孔