1.关系的基本概念
关系(也称参数关系)是用户定义的尺寸(或其他参数)之间关系的数学表达式。关系能捕捉特征之间、参数之间或装配元件之间的设计联系,是捕捉设计意图的一种方式。用户可用它驱动模型——改变关系也就改变了模型。例如在图2.1.1所示的模型中,通过创建关系d26=2*d23,可以使孔特征1的直径总是孔特征2的直径的两倍,而且孔特征1的直径始终由孔特征2的直径所驱动和控制。
图2.1.1 关系的基本概念
➢ 关系类型
有两种类型的关系。
● 等式:使等式左边的一个参数等于右边的表达式。这种关系用于给尺寸和参数赋值。例如:简单的赋值d1=4.75,复杂的赋值d5=d2*(SQRT(d7/3.0+d4))。
● 比较:比较左边的表达式和右边的表达式。这种关系一般是作为一个约束或用于逻辑分支的条件语句。例如:
作为约束(d1+d2)>(d3+2.5)
在条件语句中IF(d1+2.5)>=d7
➢ 关系层次
可以把关系增加到:
(1)特征的截面草图中(在二维草绘模式下)。
(2)特征中(在零件或装配模式下)。
(3)零件中(在零件或装配模式下)。
(4)装配中(在装配模式下)。
➢ 进入关系操作界面
要进入关系操作界面,可在功能选项卡区域的 选项卡中单击 按钮,系统弹出图2.1.2所示的“关系”对话框,可在 区域指定要查看其中关系的对象的类型,然后选取某个对象。以装配模型为例,系统将显示如下几种对象类型。
● :访问装配中的关系。
● :访问装配中骨架模型的关系(只对装配适用)。
● :访问零件中的关系。
图2.1.2 “关系”对话框
● :访问元件中的关系(只对装配适用)。
● :访问特征中的关系。
● :访问继承关系。适用于“零件”“装配”。
● :如果特征有一个截面,那么用户就可对截面中的关系进行访问。
● :访问阵列所特有的关系。
2.关系中使用的参数符号
在关系中,Creo支持四种类型的参数符号。
(1)尺寸符号。
—d#:零件模式下的尺寸。
—d#:#:装配模式下的尺寸。第二个#为装配或元件的进程标识。
—sd#:草绘环境中截面的尺寸。
—rd#:零件模式下的参考尺寸。
—rd#:#:装配模式中的参考尺寸。第二个#为装配或元件的进程标识。
—rsd#:草绘环境中截面的参考尺寸。
—kd#:在草绘环境中,截面中的已知尺寸(在父零件或装配中)。
(2)公差:当尺寸由数字转向参数的时候,会同时出现公差参数。
—tpm#:加减对称格式中的公差,#是尺寸数。
—tp#:加减格式中的正公差,#是尺寸数。
—tm#:加减格式中的负公差,#是尺寸数。
(3)实例数:这是整数参数,比如阵列方向上的实例个数。
注意 :如果将实例数定义为一个非整数值,系统将截去其小数部分。例如,2.90将变为2。
(4)用户参数:这是由用户所定义的参数。
例如:Volume=d0*d1*d2 Vendor="TWTI Corp."
注意:
● 用户参数名必须以字母开头(如果它们要用于关系的话)。
● 用户参数名不能包含非字母数字字符,例如!、@、#、$。
● 不能使用d#、kd#、rd#、tm#、tp#或tpm#作为用户参数名,因为它们是尺寸符号保留使用的。
● 下列参数是由系统保留使用的。
PI(几何常数):3.14159(不能改变该值)。
G(引力常数):9.8m/s 2 。
C1、C2、C3和C4是默认值,分别等于1.0、2.0、3.0和4.0。
3.关系中的运算符
下列三类运算符可用于关系中。
(1)算术运算符。
+加 -减 /除
*乘 ^指数 ()分组括号
(2)赋值运算符。
=是一个赋值运算符,它使得两边的式子或关系相等。应用时,等式左边只能有一个参数。
(3)比较运算符:只要能返回TRUE或FALSE值,就可使用比较运算符。
系统支持下列比较运算符:
== 等于 <= 小于或等于
> 大于 | 或
>= 大于或等于 & 与
< 小于 ~或! 非
~= 不等于
运算符|、&、!和~扩展了比较关系的应用,它们使得能在单一的语句中设置若干条件。例如,当d1在2和3之间且不等于2.5时,下面关系返回TRUE:
d1>2&d1<3&d1~=2.5
4.关系中使用的函数
(1)数学函数。
cos()余弦 asin()反正弦 cosh()双曲线余弦
tan()正切 acos()反余弦 tanh()双曲线正切
sin()正弦 atan()反正切
sqrt()平方根 sinh()双曲线正弦
log()以10为底的对数 abs()绝对值
ln()自然对数 ceil()不小于其值的最小整数
exp()e的幂 floor()不超过其值的最大整数
注意:
● 所有三角函数都使用单位“度”。
● 可以给函数ceil和floor加一个可选的自变量,用它指定要保留的小数位数。
这两个函数的语法如下。
ceil(参数名或数值,小数位数)
floor(参数名或数值,小数位数)
其中,小数位数是可选值。
☑ 可以被表示为一个数或一个用户自定义参数。如果该参数值是一个实数,则被圆整成为一个整数。
☑ 它的最大值是8。如果超过8,则不会舍入要舍入的数(第一个自变量),并使用其初值。
☑ 如果不指定它,则功能同前期版本一样。
使用不指定小数部分位数的ceil和floor函数,举例如下。
ceil(10.2)值为11 floor(10.2)值为10
使用指定小数部分位数的ceil和f loor函数,举例如下。
ceil(10.255,2)等于10.26 floor(10.255,1)等于10.2
ceil(10.255,0)等于11 floor(10.255,2)等于10.25
(2)曲线表计算:曲线表计算使用户能用曲线表特征通过关系来驱动尺寸。尺寸可以是截面、零件或装配尺寸。格式如下:
evalgraph("graph_name",x)
其中graph_name是曲线表的名称,x是沿曲线表x轴的值,返回y值。
对于混合特征,可以指定轨道参数trajpar作为该函数的第二个自变量。
注意 :曲线表特征通常是用于计算x轴上所定义范围内x值对应的y值。当超出范围时,y值是通过外推的方法来计算的。对于小于初始值的x值,系统通过从初始点延长切线的方法计算外推值;同样,对于大于终点值的x值,系统将通过切线从终点往外延伸的方法计算外推值。
(3)复合曲线轨道函数:在关系中可以使用复合曲线的轨道参数trajpar_of_pnt。该函数返回一个0.0和1.0之间的值,函数格式如下:
trajpar_of_pnt("trajname","pointname")
其中,trajname是复合曲线名,pointname是基准点名。
5.关系中的条件语句
● IF语句
IF语句可以加到关系中以形成条件语句。例如:
IF d1>d2
length=24.5
ENDIF
IF d1<=d2
length=17.0
ENDIF
条件是一个值为TRUE(或YES)或FALSE(或NO)的表达式,这些值也可以用于条件语句。例如:
IF ANSWER==YES
IF ANSWER==TRUE
IF ANSWER
● ELSE语句
即使再复杂的条件结构,都可以通过在分支中使用ELSE语句来实现。用这一语句,前一个关系可以修改成如下形式:
IF d1>d2
length=24.5
ELSE
length=17.0
ENDIF
在IF、ELSE和ENDIF语句之间可以有若干个特征。此外,IF-ELSE-ENDIF结构可以在特征序列(它们是其他IF-ELSE-ENDIF结构的模型)内嵌套。IF语句的语法如下:
IF<条件>
若干个关系的序列或IF语句
ELSE(可选项)
若干个关系的序列或IF语句
ENDIF
注意:
● ENDIF必须作为一个字来拼写。
● ELSE必须占一行。
● 条件语句中的相等必须使用两个等号(==),赋值号必须是一个等号(=)。
6.关系中的联立方程组
联立方程组是指若干个关系,在其中必须联立解出若干变量或尺寸。例如有一个宽为d1、高为d2的长方形,并要指定下列条件:其面积等于200,且其周长要等于60。
可以输入下列方程组:
SOLVE
d1*d2=200
2*(d1+d2)=60
FOR d1 d2(或FOR d1,d2)
所有SOLVE和FOR语句之间的行成为方程组的一部分,FOR行列出要求解的变量。所有在联立方程组中出现而在FOR列表中不出现的变量被解释为常数。
联立方程组中的变量必须预先初始化。
由联立方程组定义的关系可以同单变量关系自由混合。选择“显示关系”时,两者都显示,并且它们可以用“编辑关系”进行编辑。
注意 :即使方程组有多组解,也只返回一组。但用户可以通过增加额外的约束条件来确定他所需要的那一组方程解。比如,上例中有两组解,用户可以增加约束d1<=d2,程序为:
IF d1>d2
temp=d1
d1=d2
d2=temp
ENDIF
7.用参数来传递字符串
可以给参数赋予字符串值,字符串值放在双引号之间。例如,在工程图注释内可使用参数名,参数关系可以表示如下:
IF d1>d2
MIL_REF="MIL-STD XXXXA"
ELSE
MIL_REF="MIL-STD XXXXB"
ENDIF
8.字符串运算符和函数
字符串可以使用下列运算符:
== 比较字符串的相等。
!=,<>,~= 比较字符串的不等。
+ 合并字符串。
下面是与字符串有关的几个函数。
(1)itos(int):将整数转换为字符串。其中,int可以是一个数或表达式,非整数将被舍入。
(2)search(字符串,子串):搜索子串。结果值是子串在串中的位置(如未找到,返回0)。
(3)extract(字符串,位置,长度):提取一个子串。
(4)string_length():返回某参数中字符的个数。例如,串参数material的值是steel,则string_length(material)等于5,因为steel有5个字母。
(5)rel_model_name():返回当前模型名。例如,当前在零件A中工作,则rel_model_name()等于A。要在装配的关系中使用该函数,关系应为:
名称=rel_model_name:2() 注意:括号内是空的。
(6)rel_model_type():返回当前模型的类型。如果正在“装配”模式下工作,则rel_model_type()等于装配名。
(7)exists():判断某个项目(如参数、尺寸)是否存在。该函数适用于正在计算关系的模型。例如:
IF exists("d5:20")检查运行时标识为20的模型的尺寸是否为d5。
IF exists("par:f id_25:cid_12")检查元件标识12中特征标识为25的特征是否有参数par。该参数只存在于大型装配的一个零件中。例如,在机床等大型装配中有若干系统(如液压、气动、电气系统),但大多数对象不属于任何系统。在这种情况下,为了进行基于参数的计算评估,只需给系统中所属的模型指派适当的参数。例如,电气系统中的项目需要使用BOM报表中的零件号,而不是模型名,则可以创建一个报表参数bom_name,并写出如下关系:
IF exists("asm_mbr_cabling")
bom_name=part_no
ELSE
bom_name=asm_mbr_name
ENDIF
9.关系错误信息
系统会检查编辑的文件中关系的有效性。如果发现关系文件中的错误,则立即返回到编辑模式,并给错误的关系打上标记,然后可以修正有标记的关系。
在关系文件中可能出现三种类型的错误信息。
(1)长行:关系行超过80个字符。编辑该行,或把该行分成两行(其方法是输入反斜杠符号\,以表示关系在下一行继续)。
(2)长符号名:符号名超过31个字符。
(3)错误:发生语法错误。例如,出现没有定义的参数。此时可检查关系中的错误并编辑。
注意 :这种错误检查捕捉不到约束冲突。如果联立关系不能成立,则在消息区出现警告;如果遇到不确定的联立关系,则在最后一个关系行下的空行上出现错误信息。
1.在零件模型中创建关系
在本节中,将给图2.1.3所示的零件模型中两个孔的直径添加关系,注意这里的两个孔应该是两个独立的特征。
Step1.先将工作目录设置至D:\creo8.2\work\ch02.01,然后打开模型relation.prt。
Step2.在零件模块中,在功能选项卡区域的 选项卡中单击 按钮。
Step3.系统弹出“关系”对话框,在“查找范围”下拉列表中选择 选项。
图2.1.3 在零件模型中创建关系
Step4.分别单击两个孔特征,此时模型上显示出两个孔特征的所有尺寸参数符号;在“关系”对话框的按钮区(图2.1.4)单击 按钮,可以将模型尺寸在符号与数值间切换。
图2.1.4 “关系”对话框中的命令按钮
图2.1.4所示的“关系”对话框中的各命令按钮的说明如下。
A:撤销。
B:重做。
C:剪切。
D:复制。
E:粘贴。
F:删除。
G:在尺寸值和名称间切换。
H:提供尺寸、参数或表达式的值。
I:显示当前模型中的特定尺寸。
J:将关系设置为对参数和尺寸的单位敏感。
K:从列表中插入函数。
L:从列表中插入参数名称。
M:从可用值列表中选取单位。
N:排序关系。
O:执行/校验关系并按关系创建新参数。
Step5.添加关系:在“关系”对话框中的关系编辑区,输入关系式d27=2*d25。
Step6.单击该对话框中的 按钮。
Step7.验证所创建的关系:改变d25的值,再生后,d27的值按关系式的约束自动改变。
注意: 添加关系后,用户不能直接修改d27的值,可通过对特征的编辑来实现。
在“关系”对话框中,除上例用到的选项外,其他几个主要选项的说明如下。
● 在“关系”对话框的 菜单中有如下选项。
☑ :通过该命令,可在模型中增加用户参数。
☑ :通过该命令,可在模型中删除用户参数。
● 单击 按钮后,再输入一个尺寸名(即尺寸参数符号,如d26),系统即在模型上显示该参数符号的位置。
● 通过按钮 ,可计算某个参数或某一个表达式(可为单一参数或等式)的值。
● 无论何时选择按钮 ,系统将对模型中的关系进行排序,从而使得依赖于另一关系值的关系在另一关系之后计算。
例如,如果用户分别按下列顺序输入关系式:
d0=2*d1
d1=d2+d3
则单击“排序关系”后,关系式的顺序如下:
d1=d2+d3
d0=2*d1
这就是计算关系时应该有的次序。
注意:
● 如果模型内存在多个关系式,关系的计算从输入的第一个关系开始,以最近输入的关系结束。因此,如果两个关系驱动一个参数,则后一个关系覆盖前一个关系。在有些情况下,在不同层级定义的关系会相互矛盾。可使用有关工具查看关系,确保实现设计意图。
● 如果尺寸由关系驱动,则不能直接修改它。如果用户试图修改它,系统会显示错误信息。例如,本例中已输入关系d27=2*d25,则不能直接修改d27的值,如果一定要改变d27的值,可以通过修改d25的值或者编辑关系来实现。如果修改尺寸符号,这种改变会自动地反映在关系文件中。
● 关系式d27=2*d25和d25=0.5*d27的区别:在关系式d27=2*d25中,d25是驱动尺寸,d27是被驱动尺寸,d27的值由d25驱动和控制;而在关系式d25=0.5*d27中,d25是被驱动尺寸,d27则是驱动尺寸,d25的值由d27驱动和控制。
2.在特征的截面中创建关系
下面将给图2.1.3所示的零件模型中的基础特征的截面添加关系。该特征的截面草图如图2.1.5所示。
Step1.通过编辑定义,进入截面的草绘环境。
Step2.在草绘环境中,在功能选项卡区域的 选项卡中单击 按钮。
Step3.通过单击 按钮,可以使截面尺寸在符号与数值间进行切换。
Step4.添加关系:在系统弹出的“关系”对话框的编辑区中,输入关系式sd19=0.5*sd0,单击该对话框中的 按钮,此时可立即看到刚才输入的关系已经起作用了。
图2.1.5 截面草图
在截面中创建或修改关系时的注意事项如下。
(1)截面关系与截面一起存储,不能在零件模型环境中编辑某个特征截面中的关系,但可以查看。
(2)不能在一个特征的截面关系式中,直接引入另一个特征截面的尺寸。
例如sd3是一个截面中的草绘尺寸,而sd40是另一特征(特征标识f id_10)截面中的草绘尺寸,系统不会接受截面关系:
sd3=5*sd40:f id_10
但在模型级中,可以使用不同截面中的等价尺寸(d#)来创建所需的关系。另外,也可以在模型中创建一个过渡用户参数,然后可以从截面中访问它。
例如,在前面的sd3=5*sd40:f id_10中,如果sd3在模型环境中显示为d15,sd40:f id_10在模型环境中显示为d45,则在模型级中创建的关系式d15=5*d45可以实现相同的设计意图。
(3)在截面级(草绘环境)中,只能通过关系创建用户参数(因为此时“增加参数”命令不能用),然后可在模型级中像任何其他参数一样使用它们。
例如,在前面的基础特征的截面环境中,可以通过关系aaa=sd17+sd8来创建用户参数aaa,再在模型中添加新的关系sd1=aaa,然后再单击“关系”对话框中的 (排序关系)命令按钮。
3.在装配体中创建关系
在装配体中创建关系与在零件中创建关系的操作方法和规则基本相同。不同的是,要注意装配中的进程标识。
当创建装配或将装配带入工作区时,每一个模型(包括顶层装配、子装配和零件)都被赋予一个进程标识(Session Id)。例如,在图2.1.6所示的装配模型中,尺寸符号后面的0、1和2分别是装配体、零件1和零件2的进程标识。通过“关系”对话框中的 菜单下的 选项,可以查看各元件的进程标识号。
在装配中创建关系时,必须将各元件的进程标识作为后缀包括在尺寸符号中。
例如,装配关系式d0:1=0.5*d2:0是正确的关系式,而不带进程标识的关系式d0=2*d2则是无效的。
图2.1.6 装配模型