加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]PROE/PROGRAM程序设计全解析

(2012-10-02 00:06:21)
标签:

转载

分类: creo学习
前言:本文对PROE/PROGRAM的所有语句及语法进行了详细的解说,并配备实例讲解。
关键字:Program、Input……End Input、Relations……End Relations、Add……End Add、Execute……End Execute、If……End If、Massprop……End Massprop、Lookup_inst、Suppressed、Modify、Choose、Interact。
 
PROE/PROGRAM其实是一门很简单的程序设计语言。这门语言的基本词语总共就只有11个:Input……End Input、Relations……End Relations、Add……End Add、Execute……End Execute、If……End If、Massprop……End Massprop、Lookup_inst、Suppressed、Modify、Choose、Interact。所有的一切,都是这里11个词组合出来。
PROE/PROGRAM的入口,在2001里是“菜单管理器”—>PART(或Assembly)”程序”,在WF里是“工具”“程序”.
我们先看一下一般的程序都是什么样子:
两图上可看到,程序可分成几个部份,第一部份是版本与文件信息.第二部份是一个Input……End Input语句.第三部份是一个Relations……End Relations语句.第四部份是若干个Add……End Add语句.第五部份是一个Massprop……End Massprop语句.
第一部份不用管它,系统自动生成的.第二部份就是设置变量的地方.第三部份就是设置关系式的地方.第四部份是管理所有的特征及零件的地方.第五部份是设置质量属性的地方.我们用PROGRAM的重点,就在第二/三/四这三块.
下面我先一个个说说这11个词都什么意思及如何使用.基本上兄弟们理解了它们的用法,也就自然而然理解了程序的设计与修改了.
 
一个,IF……End If
这个就是各种编程语言里都有的大名鼎鼎的条件语句了.实际上它是:
IF 条件1
……(执行语句段1)
Else
……(执行语句段2)
End If.
其含义是:如果满足条件1,则执行第一段的各种语句,否则,执行第二段的各种语句.Else和第二段是可以没有的,但End If是不可少的,且一个IF对应一个End IF,其数量是相等的.IF语句是一个逻辑语句,使用它的目的就是实现分支设计.单独使用是没有意义的,它必须和其它的语句一起使用(也就是必须有执行语句段----至少有一句).它本身可以嵌套,因此也就可以实现多重条件的组合运用.
 
第二个,Input……End Input.
Input……End Input是一个复合词,它实际上是一个程序段,这个程序段以Input为第一行,以End Input为最后一行,中间的就是我们这个程序中需要人工输入的变量和变量类型以及相关提示信息.程序每次再生的时候,系统会提示我们输入这个做里列出的每一个变量的新值.典型的Input段如下:
Input
A Number
B
C String
D Yes-No
Endinput
这里有几点要记住:
A.所有的变量都要以字母开头.
B.变量的类型有三种:Number,String,Yes-NO.Number就是实数型,其值是任意一个实数,String就是字符型,取值是任意一个字符串,Yes-No就是布尔型,也就是取值为YES或NO之一.
C.如果设置时不指定变量类型(像上面的那个B),则系统当它是实数型.
D.当提示输入时我们不输入新值,则各个变量系统会取当前值,如是第一次运行时也不输入,则系统将实数型变量取值为0,布尔型变量取值为NO,字符串型变量取值为空。
在Input段中可使用IF……Else……End If,以实现选择性输入.
在Input段中也可为输入变量加提示,加提示要注意:
A.提示信息必须包含在引号里
B.提示信息必须紧跟在相应的输入变量之后.
示例:
Input
 Hole  Yes-No
 “请确认有无工艺孔:”
    If Hole==Yes
       Hole_Dia Number
      “请输入孔直径:”
       Hole_Num Number
      “请输入孔数:”
     Endif
……
End Input
(以上,先确认有无孔,如果有孔,再输入孔数与直径,如果无孔,则不用输入孔数与直径)
 
第三个,Relations……End Relations
这个词也是一个语句段,第一行是Relations,最后一行是End Relations,中间是零件/组件中需要用到的各种关系式.在零件/组件中加入的各种关系式都放在这里(不含草图关系式及阵列关系式).在编程时也可直接在这里增加关系,所有在这里的关系,都可以在”特征”-”关系”里编辑.如果一行关系式太长(最长80个字符一行),可以在行尾写一个反斜杠(),然后接着在下一行写.示例如下:
Relations
  A=“Part0007”
  B=20.0
  C=d5*5/d2
  D=cos(d6)
End Relations
注:众所周知,Relations语句段中,也可使用IF语句.
 
第四个,Add……End Add
它又可细分为三种:Add Feature 特征名……End Add,Add Part 零件名……End Add,Add Subassembly 子组件名……End Add.它们也是语句段,第一行是Add Feature(Part/Subassembly) 特征名(零件名/子组件名),最后一行是End Add,中间是特征(零件/子组件)的具体信息,这些具体信息一般来说不用去管它.因为没有能让我们编辑的东西.
这个语句可与IF和Suppressed联用,以控制特征(零件/子组件)的显示与隐含.
对于特征,这个语句段里列出了特征的主要参数,如尺寸/拉伸深度等,但是,要记住的是,直接在这里改这些参数是没用的!!!
这里的特征名/零件名/子组件名,可以是字符型变量。如果是字符型变量的话,要用括号括起来,示例:(PartName)
 
第五个,Execute……End Execute
这个语句只用于组件中.它的作用是从组件向零件传递参数,以通过组件中的某些参数去控制构成组件的零件(的形状/尺寸……).它也是个语句段,第一行是Execute,最后一行是End Execute,中间的每一行是一个赋值语句.典型的结构如下:
Execute
  Part变量名1=ASM变量名1
  Part变量名2=ASM变量名2
 ……
End Execute
通常,在组件中的Input段和零件中的Input段,都设置相同的变量名,代表同一个参数.(这是为了方便,当然也可以不同,只不过不同的话就要小心点,以免搞错).然后将零件装配到组件中,再编辑程序,在对应的Add Part……End Add语句段前增加一个Execute语句段.这样,再生时,给变量输入新值,part的形状或尺寸就可以自动按要求变化.
 
第六个,Lookup_inst
这个实际上是PROE里的一个函数.它的取值是一个字符串,用于找出族表中符合指定条件的特定实例的名字.具体的语法如下:
Lookup_inst(“Name”,matchmode,Valuename1,Value1,Valuename2,Value2……)
Name:含有族表的模型的名字,它必须带后缀,也就是,必须写成如“PRT0002.prt”,“ASM0007.asm”这样,否则,不能得出正确结果.
Matchmode:设置查找原则,取值为-1,0,1.”-1”表示查找小于等于给定值且最接近给定值的实例,”0”表示查找等于给定值的实例,”1”表示查找大于等于给定值且最接近给定值的实例.
Valuename1/2/3...:是族表参数名,基本上也就是族表中各列的第一行那个东东.
Value1/2/3…:是用来匹配的值
示例:零件Part27.prt中,族表按尺寸d0=50,70,90给了三个实例,实例名分别为Part27-1,Part27-2,Part27-3.那么:
Lookup_inst(“Part27.prt”,0,”d0”,50)=Part27-1
Lookup_inst(“Part27.prt”,0,”d0”,70)=Part27-2
Lookup_inst(“Part27.prt”,0,”d0”,90)=Part27-3
Lookup_inst(“Part27.prt”,-1,”d0”,60)=Part27-1
Lookup_inst(“Part27.prt”,1,”d0”,60)=Part27-2
Lookup_inst(“Part27.prt”,1,”d0”,10)=Part27-1
注意:以上的”Part27.prt”如果写成”Part27”的话,是得不出结果的。
 
第七个,Suppressed
这个就是一个词,即”压缩”/”隐含”.它的作用跟它的词义一样,用于把一个特征/零件/子组件隐含起来,效果与在模型树里点右键用”隐含”相同.它不能单独用,必须与Add……End Add语句一起使用.当想隐含哪个特征/零件/子组件时,只要在它对应的Add……End Add语句的第一行的Add后加上Suppressed,再生之后它就不见了.
要注意的是,因为它的效果是”隐含”不是”隐藏”,所以用的时候要注意了,如果Suppressed了父亲而不Suppressed儿子的话,再生就要报错的.
Suppressed一个组或阵列中的一个子特征,必须将所有子特征全部Suppressed,对于组,因组标识在程序里还有个单独的Add……End Add语句,它也要Suppressed,否则报错.
但如果在Config里加一个设置:del_gp_memb_ind=yes,则组的各个子特征可以单独Suppressed.
Suppressed之后要恢复,可直接在模型树里“恢复”,也可在程序里将Suppressed去掉。
 
第八个,Modify
它的词义是“修改”,功能同其名,就是用来修改Add……End Add语句中的那些特征参数。前面说过,直接在Add……End Add语句中修改特征参数是无效的,但有时候,我们真想在程序里去修改,这时就可用Modify语句来实现了。Modify语句必须嵌在Add……End Add语句中使用。Modify语句语法如下:
Modify Valuename1=Value1
Modify Valuename2=Value2
……
示例:
Add Feather xxxx
   ……
   D0=30
   D2=25.5
   Modify d0=50
   Modify d2=35
End Add
此例:特征里有两个尺寸,一个d0=30,一个d2=25.5,用Modify语句将D0修改为50,将D2修改为35。(为了显示Modify语句的常用位置,上面示例把Add……End Add语句的主要结构也写出来了)
Modify语句是一次性的,再生之后,模型按它所修改的数值改变,而程序里的Modify语句则消失了。
 

第九个,Interact

Interact的词义就是“互动”“交互”,其作用就是在程序里的适当位置将系统控制权交给操作者,让操作者进行一定的操作后再将系统控制权还给系统----实现“交互式设计”。

在程序中使用Interact语句,当程序运行时遇到Interact,程序就暂停运行,此时模型树处于插入状态,用户(操作者)可以自己向part里增加特征(或向组件里增加组件级特征或元件),一个特征(或元件)增加完后,系统会提示是否继续增加,选否的话交回系统控制权,程序继续运行直到结束。

Interact语句在程序里的地位与Add……End Add、Execute……End Execute、Massprop……End Massprop、Input……End Input、Relations……End Relations语句同级,它不可以放在这几个语段内部。它可以与IF……End If语句联用。

 

示例:
Add Feather xxxx
……
End Add
Interact
Add Feather xxxx
……
End Add

Interact语句是一次性的,再生后,Interact语句消失,新加特征(元件)的Add……End Add语句放在原来的Interact语句的位置上。如果暂停时直接选“Done(完成)”结束了增加动作的话,程序里的Interact语句也消失了,但不增加任何内容。

当Interact语句用在part的程序里时,只要再生就会出现交互(即Interact语句起作用)。

当Interact语句用在组件的程序里时,有些兄弟的PROE里可能就要在再生时至少修改一个输入变量(Input……End Input段里的变量)的值才能触发Interact,如果再生时用“当前值”或选取了变量但输入时都用回车跳过了,Interact将不起作用。

 

第十个,Choose

Choose就是“选择”。这个用于UDF(用户自定义特征)。在建模的时候,如果使用了UDF,在模型树里,UDF就会显示为一个组,使用“特征”-“组”“替换”,可以将这个UDF组替换为另一个UDF组或同一个UDF里的另一个族表实例。替换后,被替换的组作为不活动特征仍保留在part里,只不过在模型树上看不到它了,但在程序里,可以用choose语句把它变成活动特征(而Choose前的那个组则变成不活动特征了)。

如果UDF组有子特征的话,被替换后,其子特征也一起变成不活动特征,用choose把它换回来后,它的子特征也同时变成活动特征。

同Interact语句一样,Choose语句在程序里的地位与Add……End Add、Execute……End Execute、Massprop……End Massprop、Input……End Input、Relations……End Relations语句同级,它不可以放在这几个语段内部。

同Interact语句一样,Choose语句也是一次性的,再生之后,Choose语句消失。
Choose语句语法如下:
Choose(Valuename)
Valuename:一个字符串型变量。

使用Choose 语句要先在Input……End Input语句中加一个字符串型变量。在加入UDF组后,做一次替换,再编辑程序,在组标记的Add……End Add语句段内就会多了一句:“组用特征标识(名称)替换: 1127(RRR)”,找到这一句(如果没能成功替换,则不会有这一句),记下这个数字,这个数字就是要被替换出来的那个组的特征ID。然后在这个组标记的Add……End Add语句段后增加一个Choose语句,Choose的变量就是先前建的那个字符串变量。再生时,将此变量的值修改为“1127”(刚才查到的ID)。再生后模型里的UDF组就被替换了。

  示例:
    Input
     ……
      Gp String
    End Input
     ……
    Add Feature xxxx
    ……
组用特征标识(名称)替换: 1127(RRR)
组是由UDF UUU驱动的
END ADD
Choose(GP)
(Input段中设置变量组标记Add段中查找ID组标记段后用Choose(变量名))

当Choose语句放在Massprop...End Massprop语句前时,Choose语句执行后不消失----变成固定语句。如此,如果模型中有多个UDF需要根据情况选择,则可在Massprop之前连着放几个Choose语句。而如果是一次性的操作,则可使用Choose语句的瞬时性。

 

第十一个,Massprop……End Massprop

这个语句用于再生时计算质量属性。计算后系统里的质量属性相关的参数变成最新值,可在其它地方直接引用而不必在引用前再进行一次质量属性计算。它也是一个语句段,其语法如下:
Massprop
  Part partname1
  Part partname2
  ……
  Assembly asmname1
  Assembly asmnmae2
  ……
End Massprop
(各零件/组件名可不用带扩展名)
在Massprop语句段中,可嵌入IF……End If语句。

 

好,前面把十一个词的意思都讲完了。再看一下这些词的分类与组合规则。

根据它们在程序中的保留时间,可分为固定语句和瞬时语句。固定语句一旦写到程序里,除非再做编辑人为删除它,它一直存在,每次再生都起作用。瞬时语句是一次性的,再生之后,就从程序里消失了。瞬时语句有Interact和Modify共二个。Choose语句则比较特殊,瞬时性与固定性兼具,当它放在Massprop......End Massprop语句段之前时,它是固定语句,当它放在Add......End Add语句之前时,它是瞬时语句。其它的都是固定语句。

根据它们在程序中的地位,可把这十一个词分成三种:段语句、独立语句、辅助语句。

段语句用来构成一个程序块,一个块实现一个独立的功能,如输入变量、设置关系、增加一个特征(元件)、向一个元件传递参数等等。段语句包括:Input……End Input 、Relations……End Relations、Add……End Add、Execute……End Execute、Massprop……End Massprop共五个。

独立语句,一个语句实现一个独立的功能,包括:Interact、Choose,共2个。
辅助语句不能单独使用,必须与其它语句一起使用,包括:If……End If、Lookup_inst 、Suppressed、Modify,共4个。

独立语句与段语句是平等的,不能嵌入段语句中使用,但辅助语句可以嵌入段语句中使用。

IF语句可嵌入所有的段语句中使用,也可将段语句(仅Add和Execute)和独立语句嵌入IF语句中使用。Lookup_inst、Suppressed、Modify必须嵌入Add语句中使用。

Interact可放在任何可放Add语句的地方。Choose语句应紧跟在组标记的Add语句之后。

在程序中,首先是Part及版本信息。接下来是程序的内容,以Input打头,Relations继后,Massprop结尾,在Relations与Massprop中间,是其它各种语句(段)的按上述规则的组合。

实际上,还有一个注释语句也应该算一个语句。但它不影响模型变化。故前面未将其列入基本词汇中。注释语句以斜杠加星号打头,即以“/*”打头,后面跟注释内容。

注释语句仅用在Relations……End Relations语句和Add Feather……End Add语句中。在Relations语句中,它可在任何位置,在Add Feather……End Add语句中,它必须紧跟在第一行Add Feather之后作为第二行。

注释语句加入的内容,不直接影响模型,也不会在模型中显示。在编辑关系的编辑器中,可以看到加在Relations语句中的注释,在特征信息中可以看到加在Add Feather……End Add语句中的注释。

注释语句不是一次性的,再生之后继续存在于程序中。

 

再看一下设计来源。

第一次从“编辑程序”进入一个模型的程序编辑器时,系统是直接打开编辑器的,同时新建一个名字为part名后缀为pls的文本文件(可在当前工作目录下找到)。编辑完后关闭编辑器,系统会提示是否将程序所做的修改体现到模型中,也即是否再生。选“是”的话,模型变更,同时pls文件从磁盘上消失。选“否”的话,模型不变更,程序内容被保存在pls文件中,pls文件继续保留于磁盘上。

实际上,每次编辑程序时,系统都会查找是否存在与零件(组件)同名的pls文件,如果存在,则在编辑程序时会弹出“设计来源”菜单,要求选择“从模型”还是“从文件”。选“从文件”的话,系统直接将已有的pls文件调入编辑器进行编辑。选“从模型”的话,系统将根据当前模型构建新的pls文件,同时会提示是否替换掉已经存在的pls文件,选“是”的话,替换掉原pls文件并将新pls文件调入编辑器,选“否”的话,中止操作。

编辑结束后会提示再生,选“是”将弹出“得到输入”菜单。此菜单选择程序里的输入变量的来源。有三种:Current Vals(当前值)、Enter(输入)、Read File(读取文件)。如是第一次编辑程序,应选“输入”,之后系统会列出Input语句中的所有变量名并加上复选框,选取需要输入新值的变量后,系统会一个一个的提示你输入每个变量的值。如不是第一次编辑了,输入变量可能已经都有正确的值了,就可选“当前值”,这样就直接跳过输入,直接进入再生。“读取文件”是先建一个文本文件(如A.txt),此文件由一行行的赋值语句组成,示例:
A=20.0
B=56
C=”txt”
D=Yes
k=No
N=9
……

选“读取文件”后,系统会要求输入文件名,输入:A.txt,则系统到A.txt这个文件中去查找与输入变量同名的变量,并将A.txt文件中的同名变量的值赋给输入变量。比如程序里Input段有A Number,B String,D Yes-No,M Number共四个变量,用“读取文件”到A.txt里找,找完的结果是A=20.0,B=空,D=yes,M=0.0。

这里要注意的是:如果输入变量在文件里找不到同名变量,则使用当前值或系统默认值(见前文)。文件里多出来的变量,系统是不会使用的。程序里,各变量是不分大小写的(写成小写的话,下次进入编辑器会自动变成大写的),但在文本文件里,是分大小写的,同时,在查找时,也是分大小写的。因此,程序里有变量B,文本文件里有变量b但没变量B的话,变量B的值将使用当前值或默认值。

由于以上的特点,我们可以用一个文本文件去管理多个模型的输入变量。

 

 再看一下变量的删除。

Input语段里的变量,再生之后将进入参数表(如果变量名与某个尺寸的尺寸名同名的话,则此变量将不在参数表里显示)。此后如果输入新值,可以在参数表里看到其新值。如果在程序里将先前已经赋过值的变量删除了或改名了,所有调用这个变量的地方将继续调用参数表里的那个同名参数。如果要将一个Input语段里的变量删除并清除对模型的影响,应先在程序里将其删除,然后在参数表里删除其同名变量。

 

一个细节,关于修改尺寸。

到现在,如果我们要在程序中修改某个尺寸的值。可以有两个办法实现:

A.在Relations语段修改。

B.在Add段的相应尺寸后用Modify语句修改。

以上两种改法的区别:

A.关系中修改的,再生后将在关系列表里加一条关系,这个尺寸变成由关系控制的了,以后不能直接在模型中修改它的尺寸值了,必须进入关系编辑器或程序编辑器里才能修改。

B.Modify语句修改的,是一次性生效的。再生之后,任何时候都可以直接在模型里修改那个尺寸的值。

 

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有