WFL车铣复合机床除了有强大的多轴加工功能,还能自动找正零件和在线测量零件。有了这些功能,车铣复合机床不仅能够大大提高零件的加工精度,而且能够大大提高零件的加工效率。
WFL车铣复合机床的功能比较强大、效率比较高,不仅有车、多轴铣和镗孔,还有多种测量循环,因此编程就比较复杂。实际生产中,虽然手工编程也能实现这些功能,但是手工编程也有一定局限性,因此实现车铣复合机床的电脑自动编程,是一件很有意义的事情。
以下就以WFL机床的一个简单的测量循环“PROBE”为例,叙述如何使用NX软件编程,以及后置处理输出WFL车铣复合机床测量循环的方法。
一、机床测量循环的代码定义
要写出能输出“PROBE”的正确的后置处理程序,首先必须要理解WFL车铣复合机床测量循环“PROBE”的含义—该测量循环的含义是在随机轴上测量轨迹点。该测量循环的格式为:PROBE(AX,DIS,MP,NUM),各参数的含义如下。
◎AX:测量轴。测头由AX定义的运动轴以很快的进给率(一般是以G0的速度)接近工件,然后进行测量,在WFL车铣复合机床上有三个测 量轴,X1、Y1和Z1,即机床的X、Y和Z轴。
◎DIS:测头移动的距离。测量轨迹点(即零件上要测量的点)到起始点(开始执行G1的点)之间的距离必须在DIS定义的距离之内,即二者距离必须小于该值。如果测量轨迹点与起始点之间的距离大于该值时,测头是测量不到测量轨迹点的。DIS值可以为正也可以为负,分别表示测量轨迹的运动方向是沿着测量轴的正方向还是负方向。
◎NUM:在第一次测量轨迹点之后,测头会沿测量轴稍回撤,然后以正常的测量进给率重复测轨迹点,重复的次数由NUM指定,一般是测量3次。
◎MP:是指定测量结果的存储位置。测量结果输出到机床的内存单元MC_P〔0中,同时被存储到以MP为下标的机床内存中,变成测量点MC_POINT〔MP〕。
我们只要在后置处理的程序中正确定义了这4个参数,并实现其输出,就可以输出该测量循环的正确机床代码。
以下的一段机床代码就是PROBE 应用的一个实际的例子,
N035 G54
N040 G0 X1=48 Y1=0 C1=0 Z1=10
N045 PROBE (“Z1”,-15,1,3)
N050 G0 X1=93
N055 G0 Z1=-50
N060 PROBE (“Z1”,-15,2,3)
…
在这段机床代码中,PROBE (“Z1”,-15,1,3) 的测量点为MP1,MP1的位置由该代码的上一句程序指定。该例中测量点MP1的位置为 (48,0,0),测头沿机床Z1轴的负方 向进行测量,定义的测头移动距离为15,测头的测量起始点为Z1=10 的位置,测量轨迹点自Z1=0 的位置,测量轨迹点到测量起始点之间的距离为10,小于测头移动距离15,测量结果存储在机床内存MC_P〔0〕和存储单元MC_POINT〔1〕中,重复测量 3 次。
PROBE (“Z1”,-15,2,3) 的测量点是,的位置由该代码的前两句程序指定MP2,MP2该例中测量点MP2的位置为(93,0,0),测头沿机床Z1轴的负方向进行测量,定义的测头移动距离为15,测头的测量起始点为Z1=-50的位置,测量轨迹点自Z1=-60的位置,测量轨迹点到测量起 始点之间的距离为10,小于测头移动距离15。测量结果存储在机床内存MC_P〔0〕和存储单元MC_POINT〔2〕中。
此处需要注意的是:此处为堆栈存储的方式,在完成第二次测量后,MC_P〔0〕内存储的值自动移动到MC_P〔1〕,最大能到MC_P〔3〕,该点重复测量3 次。
二、如何用后置处理器实现机床代码的正确输出
在NX 6.0中编写该测量循环的前置比较简单,这种测量循环在NX6.0中用操作“probe_point”就很容易写出正确的前置,后置处理的任务就是把前置程序翻译成WFL车铣复合机床能识别的机床代码PROBE(AX,DIS,MP,NUM)。 请注意:后面所提到程序的执行程序皆为后置处理时的执行顺序。以下所述就是定义并如何输出正确的机床代码的方法和步骤。
1.输出测量轴 AX
实现这一输出的后置处理程序如下 (后置处理的程序皆为TCL语言编写)。
global mom_probe_direction
global axis
global dis
global MP
if{$ mom_probe_direction = =“XAXIS”} {
set axis X1}
if{$ mom_probe_direction = =“YAXIS”} {
set axis Y1}
if{$ mom_probe_direction = =“ZAXIS”} {
set axis Z1}
MOM_output_literal“PROBE($axis,$dis,$MP,3)”
这段后置处理程序用来定义输出的主程序。mom_probe_direction为NX 的系统变量,axis、dis和MP均为用户自定义变量。mom_probe_direction 在系统里有三个取值,分别为“XAXIS”、“YAXIS”和“ZAXIS”。当NX操作里的测量方向为X轴时,其取值为“XAXIS”;当NX操作里的测量方向为Y轴时,其取值为“YAXIS”;当NX操作里的测量方向为Z轴时,其取值为“ZAXIS”。这样,就可以利用这个系统变量作为条件,用if 判断语句来进行判断,对应输出程序中的变量“axis”,也就是PROBE(AX,DIS,MP,NUM)中的“AX”的值。程序的解释为:当mom_probe_direction为“XAXIS”时,则将“X1”赋值给“axis”;当mom_probe_direction 为“YAXIS” 时,则将“Y1” 赋值给“axis”;当mom_probe_direction 为“ZA XIS”时,则将“Z1”赋值给“axis”,最后输出。
程序当中的部分参数含义为:globe表示全局变量; if表示判断条件;$为取值符;set表示赋值给其后面的参数(具体的介绍请参考TCL语言的教材)。
2.输出 DIS
“DIS”的输出要分为以下三个步骤:
(1)计算测量起始点的值。在进行每次测量循环操作前,运行下列程序,可以计算出起始点的X、Y和Z坐标值(其值用参数为X1_bofore、Y1_bofore 和Z1_bofore 定义,皆为用户自定义变量)。在下面的TCL程序中,mom_mcs_goto 为NX 的系统变量,其存储方式是一个数组,其中mom_mcs_go- to (0)自动存储当前加工坐标系X的值,mom_mcs_goto(1)自动存储当前加工坐标系Y的值,mom_mcs_goto (2)自动存储当前加工坐标系Z的值,这些变量与CLSF文件中的坐标值采用的坐标值一致。
global mom_mcs_goto
global X1_bofore
global Y1_bofore
global Z1_bofore
set X1_bofore$ mom_mcs_goto (0)
set Y1_bofore$ mom_mcs_goto (1)
set Z1_bofore$ mom_mcs_goto (2)
(2)计算测量轨迹点。在进行每次测量循环操作后,执行下列程序,可以计算出测量轨迹点的X、Y和Z坐标值,其值分别用参数X1_when、Y1_ when 和Z1_ when定义(三者皆为用户自定义变量)。
global mom_mcs_goto
global X1_ when
global Y1_ when
global Z1_ when
set X1_ when $ mom_mcs_goto (0)
set Y1_ when $ mom_mcs_goto (1)
set Z1_ when $ mom_mcs_goto (2)
(3)计算DIS。在进行测量循环操作最后,下列程序可以计算出“DIS”。“DIS”在后置处理的程序中是用用户自定义 的变量“dis”来表示。如果测量起始点减去测量轨迹点的值大于零,则说明测量轨迹是沿着测量轴负向运动,此时,用测量轨迹点的坐标值减去测量起始点的坐标值,再减去一个常量得到DIS,则可以保证测头的移动距离大于测量轨迹点到起始点之间的距离。如果测量起始点减去测量轨迹点的值小于零,则说明测量轨迹是沿着测量轴的正向运动,此时,用测量轨迹点的坐标值减去测量起始点的坐标值,再加上一个常量,即可得到DIS,则可以保证测头的移动距离大于测量轨迹点到起始点之间的距离。NX后置处理程序如下。
if {$ X1_bofore-$ X1_ when>0} {
set dis [expr($ X1_ when-$ X1_bofore-10)]}
if {$ X1_bofore-$ X1_ when<0} {
set dis [expr($ X1_ when-$ X1_bofore+10)]}
if {$ Y1_bofore-$ Y1_ when>0} {
set dis [expr($ Y1_ when-$ Y1_bofore-10)]}
if {$ Y1_bofore-$ Y1_ when<0} {
set dis [expr($ Y1_ when-$ Y1_bofore+10)]}
if {$ Z1_bofore-$ Z1_ when>0} {
set dis [expr($ Z1_ when-$ Z1_bofore-10)]}
if {$ Z1_bofore-$ Z1_ when<0} {
set dis [expr($ Z1_ when-$ Z1_bofore+10)]}
3.输出 MP
在一个测量程序中,可能会测量很多个点,这就需要很多次PROBE测量循环,每一个测量循环的结果都要占一个存储内存,所以每一个“MP”都应该有不同的值,因此可以用下面的程序分两个步骤来输出“MP”。
(1)初始化MP为0。在第一次测量程序开始执行之前执行下列后置处理程序:
global MP
Set MP0
该程序将 MP 初始化为0。
(2)每进行一次测量循环操作,执行一次下列程序,则可以实现参数“MP”的增加,因此可以保证每一个“MP”的值都不同,并且从“1”开始。每进行一次测量操作,就递增一次。
global mom_probe_cycle_type
global MP
if{ $ mom_probe_cycle_type!=0 }{
set MP[expr($MP+1)]}
其中,mom_probe_cycle_type 为系统变量,在执行数控程序的过程中,当有测量循环操作时,其赋值不等于0,当没有进行测量操作时,其赋值就是0。从NX的第一个操作开始就进行扫描,每当mom_probe_cycle_type不为零时,MP就自加一次。因此我们就可以利用这个变量作为条件,来完成“MP”的赋值和输出。
4.输出NUM
因为一般情况下,重复测轨迹的次数为3次,所以在输出的主程序中,已经直接定义了“NUM”为“3”,因此可以直接输出,不再需要对该参数进行定义。
三、结束语
经验证,用该方法写出的后置处理程序,可以输出正确无误的机床代码PROBE(AX,DIS,MP,NUM),如果按照此方法将后置处理程序加以完善,就可以输出完整、正确的WFL车铣复合机床其他测量循环的机床代码,实现该机床的测量循环的电脑编程,就可以充分发挥该机床的优点,大大提高加工效率和可靠性。(end)