APP下载

带参数传递的子程序技术及其应用

2014-11-30王乃彦闫明璞上海电气电站设备有限公司汽轮厂200240

装备机械 2014年2期
关键词:主程序子程序调用

王乃彦 闫明璞 上海电气电站设备有限公司汽轮厂 (200240)

王乃彦(1980年~),男,工程师,专业方向为汽轮机制造。

0 引 言

在数控系统中,为方便程序编制,数控系统提供多种标准循环,如西门子840D中的铣螺纹循环CYCLE90(),切槽循环CYCLE93()等,作为一组基本指令的集合,实现了一些典型结构的加工。数控程序编制时,编程人员并不需要知道固定循环内部的结构和指令,只需要按说明填写相应的参数就可完成程序的编制。标准循环简化了程序、降低了编程的难度和出错率,增强了数控程序的可读性。这些标准循环主要使用子程序技术,参考标准循环的编程方法,将一些通用性较强的结构使用子程序编程,同样可以简化程序,降低程序编制的难度,提高工作效率,方便数控程序的管理。

1 子程序技术

数控程序编制过程中,如果零件不同位置具有相同或相似的结构(见图1),为了简化程序,可以把这些重复的程序段单独列出,按一定的格式编写成子程序。主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,完成相关结构的加工。子程序执行完后返回到主程序,继续执行后面的程序段。使用子程序技术,不但减少了程序长度,增加了程序的可读性,还降低了程序的出错率,方便程序的修改。

图1 有相同结构的零件

2 带参数传递的子程序

在加工中,经常会遇到一些典型结构,几何形状比较复杂,尺寸要素较多,加工方法相同或相似,区别只是位置、尺寸不同。加工这类典型零件时,数控程序使用的参数多、程序复杂。采用普通子程序编程,加工不同的零件时,不能直接被调用,必须对其中涉及到的尺寸、加工参数进行修改。这样就增加了子程序调用的难度,而且容易出错。在子程序技术中,有一种带参数传递的子程序技术,编制的子程序类似于数控系统中标准循环,可以把典型结构的加工程序封装在子程序中,将所有的几何尺寸、加工参数等变量以参数的形式传递给该子程序。同时也可以把一组类似的加工程序封装在一个子程序中,把加工方式作为子程序参数,使用时根据需要选择加工方式。这样可以减少程序数量,方便程序管理。

2.1 子程序定义

格式:

PROC PROGRAMNAME(VARIABLENTYP1 VARIABLE1,VARIABLENTYP2 VARIABLE2,…)

PROC:PROC指令,子程序标记关键字

PROGRAMNAME:子程序名称

VARIABLENTYP1:参数1类型,

VARIABLE1:参数1名称,

VARIABLENTYP2:参数2类型,

VARIABLE2:参数2名称,

参数可以是普通的数据类型,也可以是数组。如果是数组,则必须在数组类型前加关键字VAR。

注意:带 PROC 的定义指令必须在一个独立的NC程序段中编程。可以最多有 127 个参数用于参数传送。

子程序定义举例:

PROC KONTUR(REAL LENGTH, REAL WITH)

N10 …

N50 X= LENGTH

N60 Y= WITH

N100 M17

子程序以M17或RET结束。

2.2 子程序调用

主程序中,在调用带参数传递的子程序前,必需用EXTERN指令对子程序声明,格式如下:

EXTERN NAME(TYP1, TYP2, …)

NAME:子程序名称

TYP1:参数1类型,

TYP2:参数2类型,

声明子程序时,参数类型和顺序都必须与定义时一致,每个参数类型都必须填写,不能省略。

注意:此处只有参数类型,没有参数名称。

举例:

N10 EXTERN KONTUR(REAL, REAL);声明子程序

N20 DEF REAL LENGTH,W

N30 LENGTH=10.18

N40 W=3.29

N100 KONTUR(LENGTH, W) ;调用子程序

N200 M30

在调用子程序时,参数类型和传送的顺序都必须与子程序定义时PROC语句中一致。但参数名称不一定与子程序定义时一样,这里只是把主程序中的相关数值(或地址)传递给子程序,与参数名称无关。

3 应用

在汽轮机蒸汽阀门中,有很多大螺距的锯齿形螺纹(图2),因螺距太大,无法使用普通的螺纹加工方式(车削或铣削)加工。为此专门开发出加工大尺寸锯齿形螺纹的新技术解决了大尺寸螺纹的加工,参数见附表。

图2 锯齿形螺纹结构

附表

加工锯齿形螺纹,主要采用分层切削,利用数控程序控制螺纹截面轮廓,采用普通菱形车刀多次车削,最终加工出符合图样要求的螺纹(见图3)。

图3 螺纹加工示意

因螺纹截面轮廓复杂,其精度和表面粗糙度要求较高。为了提高工作效率和便于编制数控程序,把整个加工过程分解成四部分:粗加工、精加工、圆角加工和倒角加工。粗加工以去除大部分多余材料为主要目的,在机床和刀具满足要求的情况下尽可能地加大切削量。但在整个切削过程中,每刀的切削状况不尽相同(比如每层的初始进刀和后续切削工作状况差别很大),这就要在加工过程中对其计算,调整切削参数,以使其切削量尽量均衡。精加工和圆角、倒角加工过程中,精度和表面粗糙度为关注要点。刀尖圆弧对精度和表面粗糙度的影响尤为重要。这就要根据刀尖所处的位置对刀尖圆弧的影响进行补偿。以刀尖圆弧对加工轮廓的影响为例(见图4):P点为刀具对刀零点,很显然,刀具切削点与P点不重合,并且其相对位置关系随着切削点的变化在不断变化。此处圆弧在空间为一螺旋曲面,切削原理与车圆弧不同,因此不能用G41(或G42)刀尖半径补偿。必须在程序中对P点和刀具切削点相对位置进行计算,根据刀具切削点位置计算出P点位置,以便程序控制刀具路径。

图4 刀尖圆弧对加工轮廓的影响

因此,在此数控程序中,有大量的尺寸参数和加工参数参与运算,并且要运用大量的循环、判断语句,整个程序非常复杂。如果采用普通编程方法,只要螺纹尺寸有所改变,或者加工方式和加工参数有所改变,程序中大量数据都必须相应改变。为确保程序正确,在程序编制完成后需试加工,验证程序正确后才能应用于生产。

产品中涉及此类螺纹规格繁多,螺距从5~20mm,螺纹直径从210~1 000mm不等,既有外螺纹又有内螺纹,加工方法无法统一,车削加工和镗削加工都会用到。采用普通方法编程,程序将达几十种之多。如对每种程序都进行验证,成本将非常高。结果是不但工作量大,不便于加工参数的调试,而且极易出错。因此采用普通方法编制的程序难以维护,没有通用性。采用普通的子程序技术,虽然能解决普通编程方法存在的一些问题,但对于主程序和子程序之间存在大量的参数传递的情况,采用普通子程序技术也存在较大困难。

采用带参数的子程序技术,把螺纹所有几何尺寸和工艺参数提取出来,作为螺纹子程序的参数,增加相应参数区分内外螺纹、加工方法(直径编程或半径编程等)。通过这种编程方法可以把复杂的程序封装在子程序里,在主程序调用该子程序时填写相应参数,即可方便地编制出各种规格的螺纹加工程序。以下以螺纹的粗加工子程序加以说明。

3.1 螺纹粗加工子程序

%_N_rough_SPF

proc rough(real U_Dim,… ,int U_FS) SAVE DISPLOF;子程序定义

def int U_CengShu;变量定义

……

def real U_Feed

IF (U_FS<>-2)and(U_FS<>-1)and(U_FS<>1)and(U_FS<>2);参数检查

MSG("U_FS 参数赋值错误")

GOTOF MARK_1

ENDIF

……

U_ThStart=U_ThStart-U_zFinallow;数据运算

……

U_CengShu=U_StartDNum

Begin_0:;层切循环

U_N=U_Width/U_zFeed

……

MSG("正在切削第"<

U_CengShu=U_CengShu+1

Begin_1:;每层开始切口循环

U_Depth=U_Depth+U_pDepth

……

REPEAT Begin_1 P=U_xNum

IF U_Num<0 GOTOF MARKE_0

Begin_2:;每层切削循环,包含运算、选择执行语句

U_ThStart1=U_ThStart1-U_Feed

……

REPEAT Begin_2 P=U_Num

MARKE_0:

……

MSG()

MARK_1:

M17

3.2 子程序说明

rough(real U_Dim,…,int U_FS)

U_Dim:螺纹底孔(外圆)直径

……

U_FS:加工方式 -2:直径编程,内螺纹;-1:半径编程,内螺纹;1:半径编程,外螺纹;2:直径编程,外螺纹

在子程序后应附该程序的使用说明以及特殊要求(如参数赋值范围等),以便其他人在不用了解子程序内部详细信息的情况下就能直接调用,便于数控程序的共享。

3.3 主程序

%_N_NS650x20_MPF

Extern rough(real,real,real,real,real,real,real,real,real,int,int,real,real,real,real,int,int);子程序声明,如没有此声明,子程序不能被正确调用

G90 G18

G54 G00 T1 D1

X800 Z100

M3 S15

rough (650,20,0,-250,10.5,15.5,45.25,20,10,20,1,0.2,0,0.2,0.9,5,2) ;粗加工子程序调用

G00 X800 Z100

M05

M30

4 其他常用指令

为了避免因调用子程序导致模态G功能值的改变,导致后续程序产生不可预知的错误,应在PROC指令结束处添加SAVE指令。此指令的工作过程是在调用子程序前,将G功能的值暂时保存起来。调用子程序结束后,返回主程序(或调用此子程序的子程序)后,将G功能的值恢复到调用前的状态。比如子程序中用G90或G91改变了绝对坐标或相对坐标状态时,不用SAVE指令,子程序结束返回主程序后将会出现错误。

在子程序经过调试、验证无误后,可在PROC指令结束处添加DISPLOF指令,使程序在运行时不显示子程序内部的程序段。这可使加工程序在运行时操作界面显得非常简洁(见图5)。

加工过程中的重要信息可通过MSG指令在屏幕上方显示出来,适当地使用此指令可使操作人员及时、准确地了解加工状态和加工进度,增强程序执行的透明度。如上述例子中显示加工到第几层。

图5 程序运行界面

5 结论

通过带参数的子程序技术,可以实现典型结构加工的标准化、模块化,方便程序的修改和优化。编程人员开发出子程序,编写出此子程序的使用说明,其他人就可以根据说明直接使用此子程序,只需要填写子程序需要的参数,而不需了解子程序的工作原理及工作过程。从而避免了编程错误,降低程序测试成本,降低了编程人员的工作强度,大大提高工作效率。

猜你喜欢

主程序子程序调用
自动升级程序在船舶监测系统中的应用
浅谈数控铣削技术代码程序的嵌套方式研究
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
电控冰箱软件模块化设计
时光倒流 换回PotPlayer老图标
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索
西门子840D系统JOG模式下PLC调用并执行NC程序
利用RFC技术实现SAP系统接口通信