三八资料网

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

查看: 801|回复: 0

如何写参数化程序

[复制链接]

高级技师

Rank: 7Rank: 7Rank: 7

帖子
215
主题
123
积分
3756
在线时间
16 小时
注册时间
2012-11-7
最后登录
2012-12-13

第三次发帖优秀会员

发表于 2012-11-23 16:46:41 | 显示全部楼层 |阅读模式
老实说,siemens的参数化编制程序是件很愉快的事情。 就此,简单讲一下参数程序的编制问题,希望对感兴趣的有朋友所帮助。

笔者对siemens840D比较熟悉,所以以下说讲的一切均在siemnes840D系统上测试过,是经过实践检验的编制,可靠性应该是很好的。
先介绍一下参数化的几种形式:

1)用DEF命令,在MPF或者SPF程序中制定变量,以达到调用的目的;
2)通过siemens自带的1000个R参数进行参数的编制;

3)直接调用siemens系统变量,进行参数化程序编制。
大概也就这几种常见的形式了。以下分别给初学者进行讲解:

1)用DEF命令,在MPF或者SPF程序中制定变量,以达到调用的目的。
这是一种很灵活的参数化编制形式。

请看一下例子:
==========

MPF:
DEFINE Z_MAX AS G0 G90 G40 G17 SUPA Z850 D0 SPOS=0

DEF REAL DiaMAX=50,DiaMIN=45.8,CAO_KUAN=5
EXTERN XICAO_1(REAL,REAL,REAL)

$P_UIFR[1]=CTRANS(X,,Y,,Z,,B,) ;G54 B=?
;$P_UIFR[2]=CTRANS(X,,Y,,Z,,B,) ;G55 B=??

;$P_UIFR[3]=CTRANS(X,,Y,,Z,,B,) ;G56 B=???
...

N320 CS_TOOL("",,1) ;XI CAO B#
CS_TP("",,1)

G56 G90 G17 G40
MIRROR X0

R90=85.3 R91=WIDTH-110.3 R92=31.3
XICAO_1(DiaMAX,DiaMIN,CAO_KUAN);也可以写成XICAO_1

R90=235.3
XICAO_1

MIRROR
Z_MAX

...
SPF:

%_N_XICAO_1_SPF
;$PATH=/_N_SPF_DIR

PROC XICAO_1(REAL DiaMAX,REAL DiaMIN,REAL CAO_KUAN) SAVE
;R90 is X Coordinate

;R91 is Y Coordinate
;R92 is Z Coordinate

;R93 is S Value
;R94 is OutSide F Value

;R95 is InSide F Value
;DEF REAL DiaMAX,DiaMIN,CAO_KUAN

;MUST SET D1,D2,D3
S=R93 M03

G01 X=R90 Y=R91 F=R94
M08

R40=DiaMAX R41=DiaMIN R60=2 R61=1
R0=0 R1=R92 R3=(R92-CAO_KUAN) R5=20 R6=5 R72=50

F=R95
L8000

M05
M09

STOPRE
M17

============
以上是一个编制的挖槽程序截取。

在MPF中,在程序最开头进行了三个参数点定制:DiaMAX=50,DiaMIN=45.8,CAO_KUAN=5
并用EXTERN命令进行SPF程序XICAO_1的声明,一般情况如果该程序位于siemnes的标准循环文件夹里面,或者是MPF相同的目录下是没有必要进行EXTERN的,这是一种习惯,一般习惯把SPF文件放在SUBPROGRAM文件夹里面,便于管理,所以每次在调用XICAO_1这个程序的时候必须进行程序的声明,这很重要,否则,如果你不能调用SPF文件就没有办法了。当然,也有其他方式进行参数传递的SPF调用的,比如:PCALL等等命令,这里就不多说。

DEF命令是定义你需要的参数,REAL是说明参数点类型是实数型的,如果是整数型的,就是INT,这个和VB语言很相似,如果有VB程序语言基础的朋友应该很容易理解,只不过VB里面是用DIM进行变量的定义的罢了。你也可以定义STRING[50]这种字串型,还有布尔型的,在此就不多说。
在MPF程序的后面将会引用这三个参数,并将这三个参数传递到SPF中去。

请大家注意SPF的编制格式,是:
PROC XICAO_1(REAL DiaMAX,REAL DiaMIN,REAL CAO_KUAN) SAVE

括号里面的参数顺序直接控制了你传递参数时填写的数字传递顺序。
比如:XICAO_1(50,48.5,5)就是按照PROC后面的那个括号里面的顺序进行传递的。

这也就是siemens的CYCLE标准循环里面的格式一样的,如果你使用过siemens的CYCLE循环,那么在定义参数的时候,你的定义顺序必须按照说明书上的顺序来,否则,参数将会传递错误的信息,后果自负……
SAVE可以要,也可以不要,没有关系的。SAVE的作用是在执行完SPF以后,回到MPF时,将保留原MPF中的制定格式,怎么理解呢?简单的距离就是:当你的SPF中时G91编程的,而MPF中是G90编程的,那么加上SVAE以后,在M17执行完后,回到MPF以后,保留G90的形式进行下面的工作,否则就是按照SPF中的G91进行执行,也许就会出错。

用个在siemens的CYCLE里面在SAVE后面添加了一个DISPLOF参数的,用这个参数可以“拟制”SPF中的每一段程序的显示,当然也可以用SBLOF来单块拟制。
不过,通常没有必要拟制程序的显示,因为不便于程序的检查,什么叫拟制呢?简单的说就是在运行SPF时,加上DISPLOF后,以下的程序段,一直到M17结束,在AUTO界面教你嘎时,你无法看见这些程序段的执行过程。

编制格式为:
PROC XICAO_1(REAL DiaMAX,REAL DiaMIN,REAL CAO_KUAN) SAVE DISPLOF

大概这种形式的参数化程序就是这样子的了。当然,这方面还有其他的一些编制参数,不过一般的朋友没有必要要,我讲的应该可以满足一般的要求了。
值得一提的是MACROS的编制。

格式为:DEFINE ... AS ........
在我的前面程序例子前面已经提到了,就是:DEFINE Z_MAX AS G0 G90 G40 G17 SUPA Z850 D0 SPOS=0

在MPF以前定义这个以后,在整个MPF中的任何位置都可以调用这个“宏”,
DEFINE Z_MAX AS G0 G90 G40 G17 SUPA Z850 D0 SPOS=0的作用就是用G0,取消所有坐标(采用机床原点坐标),取笑刀具几何补偿,C轴转到O°以后,回到Z=850的位置。

这个很简单,你也可以进行“全局MARCO”的编制,有点象VB程序语言中的“定义全局变量”的功效,往UMAC文件中添加就行了。不熟悉的朋友就不用管这个了。
2)通过siemens自带的1000个R参数进行参数的编制;

请参考前面的程序例子,值得提示的是,请确定是否你的设备供应商已经占用了一些R参数,如果有设备制造商占用了一些R参数,最好不要使用
这些R参数,选取其他R参数就可以了。

其实,R参数的用法和用DEF定义的变量用法是一样的,重要的区别是R参数不用定义,可以直接在程序中任何位置进行调用就可以了。而且不受SPF,MPF的控制,任何程序都可以直接调用。
不过,最好在使用R参数的时候,进行一些约定俗成,以便以后不会因为人员的变动造成参数含义的错乱,那时候就非常麻烦了!!!

其他关于R参数的就没有讲的。
3)直接调用siemens系统变量,进行参数化程序编制。

最简单的引用就是前面治理中的$P_UIFR[1]=CTRANS(X,,Y,,Z,,B,,) ;G54 B=?
其中$P_UIFR[1]就是系统的变量中的“框架数据”,这和在“参数”里面的“坐标设置”是一样的功效,只是“坐标设置”中不能设定B罢了……

这种格式也是可以直接进行坐标的变换的,比如:
$P_UIFR[1]=CTRANS(X,,Y,,Z,,B,,):CROT(Z,180)

具体情况就不多说了……
接下来说说系统变量中常见的一些变量。

$P_Txxx,这个变量的作用是激活主轴上的刀具数据;
$P_TOOL,是激活刀边补偿,D1,D2,D3,D4...;

$P_TOOLL[1],激活整个刀具的几何补偿,通常是指的刀具的悬长,G17-Z,G18-Y,G19-X;
$P_TOOLL[2],激活整个刀具的几何补偿,通常是指的刀具的悬长,G17-Y,G18-X,G19-Z;

$P_TOOLL[3],激活整个刀具的几何补偿,通常是指的刀具的悬长,G17-X,G18-Z,G19-Y;
$P_TOOLNO,激活siemens内部的刀号,T1,T2,T3,T32000;

$_P_TOOLR,激活刀具半径补偿;
$P_SEARCH,搜索变量,值为TRUE=1或者0;

以上参数仅做参考,也许会因为设备制造商的不同有所小区别。
以上这些参数都是可以在程序编制中直接编制的。

大概参数化编程就讲完,还有很多东西没有来得及讲,希望感兴趣一起研究之……
==========

至于还有朋友提高的IF ... ELSE ...ENDIF的条件语句结构,这好像不是属于参数化编程的一部分。 严格上来讲应该属于“柔性编程”的一部分更贴近些。
写个程序,给感兴趣的朋友,一个简单程序。你可以直接做成MPF,进行调用,看看结果就晓得是怎么回事情了。

条件:某工厂是中午12:00下班,晚上18:30下班。程序功能,在MDA中运行,显示时间,提示操作者是否到了下班时间。
=====

%_N_SHOWTIME_MDF
;$PATH=/_N_MPF_DIR

DEF INT SHI,FEN
SHI=$A_HOUR

FEN=$A_MINUTE
IF (SHI=11) AND (FEN>=50)

MSG("TIME IS : "<<2000+$A_YEAR<<"."<<$A_MONTH<<"."<<$A_DAY<<", "<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<" ,Good noon ! Let us have a rest!")
M0

M2
ELSE

IF (SHI=18) AND (FEN>=20)
MSG("TIME IS : "<<2000+$A_YEAR<<"."<<$A_MONTH<<"."<<$A_DAY<<", "<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<" ,Good evening ! Let us go home!")

M0
M2

ELSE
MSG("TIME IS : "<<2000+$A_YEAR<<"."<<$A_MONTH<<"."<<$A_DAY<<", "<<$A_HOUR<<":"<<$A_MINUTE<<":"<<$A_SECOND<<" , Let us go on!")

M0
M2

ENDIF
ENDIF

=====
这就是简单的条件语句的程序,拷贝一下,去试试会出现什么情况呢?呵呵……

当然siemens840D里面不仅仅是这么一点点,还有LOOP、WHILE,REPEAT,GOTOF,GOTOB这种条件语句。感兴趣的朋友,可以继续讨论学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|门户地图|手机版|小黑屋|家电维修论坛 ( 蜀ICP备14030498号 )

GMT+8, 2024-4-25 20:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表