计算机辅助设计与制造:UG-KF知识熔接技术_第1页
计算机辅助设计与制造:UG-KF知识熔接技术_第2页
计算机辅助设计与制造:UG-KF知识熔接技术_第3页
计算机辅助设计与制造:UG-KF知识熔接技术_第4页
计算机辅助设计与制造:UG-KF知识熔接技术_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UG/KF知识熔接技术§4-1知识熔接(KF)开发语言综述§4-2KF语言编程语法基础

§4-3KF语言编程控制语句§4-4KF与用户界面(UIStyler)的交互

先进的科技知识和实践经验是优秀的、成功的设计的源泉KF的应用领域模型设计的增效和优化设计经验的捕捉和强制执行知识驱动的装配配置MOrthropGrummanHRTextronCallawayGolfITTGilfillan知识驱动的过程自动化Interpore-CrossCallawayGolfDensoGEOptimizationWizardStrengthWizardMoldWizardProgressiveDieWizard…DensoGEAircraftEnginesOpelTimkenKF的设计思路进行工程配置定义工程规则实现几何造型

产品设计装配结构组件设计知识库工程规则参数化建模§4-1知识熔接(KF)开发语言综述(1)知识熔接技术

知识熔接技术是介于传统的CAD技术和KBE技术之间新出现的边缘技术,是获得和操纵工程规则、设计意图的有力工具。

知识熔接技术能够在一个给定部件或装配中同时得到几何和非几何特性,以及创建这些特性的规则,使我们有能力在CAD/CAM部件文件中获得蕴含在产品中的信息,从而预知工程效果。

§4-1-1基本概念UG/KF语言是一种面向对象的语言,它建立在Intent语言基础之上。Intent语言是一种业界公认的完全基于规则的知识编程语言,主要用类来描述,其应用程序无需编译即可执行。用户可使用一般的文本编辑器来浏览和修改程序,从而实现了程序的开放性.(2)知识熔接语言(3)KFVDE(VisualDevelopmentEnvironment)

知识熔接的可视化开发环境。NX系统提供的用于知识熔接开发的交互界面,它提供了可视化的规则编辑环境,以简化用该语言编写规则来创建和管理模型的操作。

(4)DFA源文件

DFA文件是用知识熔接语言编写的用于记录类和函数的定义的ASCII格式源代码文件。DFA文件的编写要遵循一定的语法规范,其文件后缀名为.dfa。§4-1-2知识熔接语言简介(1)知识熔接语言的特点

解释性语言

无需编译/连接/测试的周期。源代码文件修改后,只需重载,即可更新设计。需求驱动的语言

规则的创建并不需要考虑顺序,知识熔接系统是通过规则之间的依赖关系来保证正确的规则求值顺序。

#!UGNX/KF2.0Defclass:demo1(ug_base..(NumberParameter)Dia……面向对象的语言

同现代计算机语言如C++一样,知识熔接语言是面向对象的,有类和对象(实例)之分,支持对象标识、分类、多态和(多重)继承。

层次化语言

如同产品设计,知识熔接中,部件构成子装配,子装配构成装配。

对字母大小写不敏感(2)知识熔接与NX交互系统的同步

知识熔接语言和NX交互系统都可创建同样的NX对象,对象的KF语言描述和通过相同对象的NX交互系统获取的所有信息这两方面始终是协调一致的。

(3)KF-VDE的应用

可以创建、编辑、浏览控制UG对象参数的规则对一个零件添加和编辑规则的零件修改器规则求解和结果检查的观察器和UIStyler集成,以设计具有交互能力的工程应用

KF-VDE的功能KF工具条

将鼠标移至NX工具栏的空白区域,点击右键,在弹出的快捷菜单中选中KnowledgeFusion项。将会弹出KF的工具条。如图所示。

123456781-KF工程应用 2-几何采用3-引用选择 4-DFA管理器5-延迟更新 6-立即更新7-部件规则检查器 8-KF调试工具KF导航器

在NX环境下,选中Application菜单中的KnowledgeFusion项,在NX的资源条栏中将出现KF的导航器。

根节点根属性节点实例节点子实例节点KFN根节点的操作添加属性添加子规则添加子规则链列出所有规则重载所有的类重新对所有规则求值重新生成规则树临时规则求值检查实例KFN子规则节点的操作编辑该子规则添加属性显示类中的规则重载选中的类删除子规则及对象删除子规则浏览依赖关系重命名复制规则KFN属性节点的操作查看并编辑属性(Number)acos_test:acos(0.5);acos(0.5)acos(0.5)KF参数预设置

为加载用户自定义的类和函数,需要为系统指定DFA文件所在的路径。点击NXPreference下拉菜单中的KnowledgeFusion项,弹出KnowledgeFusionPreference对话框。可在其中加入DFA文件的路径。

(4)与KF有关的环境变量

UGII_KF_CLASS_DIR

指定系统的类所在的位置。该环境变量不能改变。UGII_KF_USER_CLASS_DIR

系统将从这里找用户自定义的DFA文件。UGII_USER_DIR或UGII_SITE_DIR 指向下列四个子目录的父目录:

dfa,application,udo,和startupUGII_LIB_PATH

系统从其中寻找OpenAPI动态连接的库文件。UGII_KF_DOC_DIR/UGII_KF_DOC_URL

系统从其中寻找用户建立的文档。[例1]编写能生成一个实体块的类文件,要求块的长度是参数化的。在NX中创建该类的实例并进行编辑。(5)操作举例

参考操作步骤:第1步:在D盘上创建一个名为“APKFClass”的文件夹。并在其下创建三个子文件夹:“application”,“dfa”,“startup”。第2步:启动NX。设置知识熔接的搜索路径:选择Preferences->KnowledgeFusion。点击Bowse。选择刚刚建立的dfa子文件夹。点击OK。第3步:使用你熟悉的文本编辑器编写dfa文件。在dfa文件夹下创建新的名为xx_0010.dfa的文件。这里,xx为你的姓名的首字母。(1)在文件的第一行输入:

#!UGNX/KF2.0(2)定义类文件,使之继承ug_base_part

DefClass:xx_0010(ug_base_part);(3)定义属性L作为输入参数

(NumberParameter)L:100;(4)创建一个子规则:

(Child)MyBlock:{Class,ug_block,

Length,L:,Width,L:*0.75,Height,L:/3};(5)保存dfa文件第4步:在知识熔接导航器中创建本类的一个实例:(1)回到NX,在资源条中打开知识熔接导航器。(2)将光标放在根节点上,并右击。在弹出的快捷菜单中选择ReloadAll。(3)将光标放在根节点上,并再次右击。选择AddChildRule。(4)输入子规则名。(5)在类列表中选择xx_0010类。(6)可选的操作:可以在输入参数列表中选中L(Number),修改它的值。(7)点击OK创建一个实例。第5步:在知识熔接导航器中编辑该实例:在知识熔接导航器中双击刚刚创建的实例。编辑L。小结:我们通过本例,学习到:(1)如何声明一个继承其他类的类文件(2)如何创建一个子规则(3)如何通过KF导航器来创建一个类的实例并输入参数值(4)如何通过KF导航器来编辑一个实例§4-2KF语言编程语法基础

§4-2-1基本概念(1)类(class)

类是对目标体进行控制的一系列规则的集合,是创建一个对象或对象树的逻辑演算,是对对象的共同特征的抽象。有两种类:用户自定义类和UG系统基础类。

(2)对象(Object)

对象是类的实例化。即对象是类的特定实例。对象也称为实例。

(3)属性(Attribute)

一个可以被引用的有名字的值。在程序语言中最接近的概念是变量。(4)规则(Rule)规则是对对象如何创建的描述。

UG/KF语言规范KF程序可以用所有的文字编辑器编写,保存为*.dfa文件,无须编译,直接可以被UG调用程序的开始为:

#!UG/KF18.0#!UG/KF2.0

单行注释采用:“#”多行注释采用“#+”表示开始、“#-“表示结果§4-2-2KF的基础语法(1)类的基本语法

类的声明(1)DefClass

是系统保留字,它指明一个类定义的开始。在

DefClass声明后的所有规则都可看作同一个类的属性,直到另一个DefClass声明或到DFA文件的结尾。语法要求DefClass后要使用冒号。

(2)类名

在Defclass:后定义了类的名字,类名唯一标识了该类。要注意以下两点:

a)类名在整个知识熔接类库中必须唯一

b)不可使用KF的保留字在创建类时,要注意:(1)如果一个类以百分号作为类名首字母,该类将不在KF的导航器中显示。用户可以使用该特性去隐藏那些不想被手工交互实例化的类。(2)一个DFA文件可以包含多个类定义,每一个类定义都以DefClass声明标识。只有文件中第一个类在KF导航器中可见。(3)DFA文件中第一个类的名字必须与DFA文件的名字相匹配。(2)子规则的基本语法

一个子规则是一种特殊的可创建类的实例的属性

(Child)block_1:{

Class,ug_block,height,

door_height:,width,door_width:};属性类型子规则名被实例化的类参数名关键字分隔符参数值参数列表创建子规则要注意以下几点:(1)定义子规则时须将输入参数的形参和子规则相应的实参一一配对,并用大括号集合。(2)在引用类中,只有(Parameter)型的参数才可作为子实例定义时的输入形参,如果引用类中(Parameter)型参数在子实例定义时未做输入,则采用默认值(见ug_block类中的Parameter型数据)。(3)属性的基本语法

(a)属性的声明

在DFA文件中属性的通常定义格式为:(属性类型行为类型1行为类型2...)属性名:属性值;属性数据类型属性名(NumberParameter)dr_height:84;(Number)dr_width:dr_height:/2;属性行为类型属性引用属性值数据类型举例说明Any(Any)test:If(a:)Thenpoint(1,2,3)Elsepoint(2,4,6)该属性可以是任何KF数据类型Boolean(Boolean)open?:True;可以是TRUE或FALSEFrame(Frame)frm:NHA:localFrame:;KF参考坐标系Instance(Instance)inst_1:self:;类的实例Integer(Integer)num:1;可以是正整数,负整数或零(b)属性的数据类型List(List)gear_data:{ {“T1000”,0.25}, {“T1200”,0.75},};包含一系列其它类型元素的链Name(Name)class_name:ug_block;符号常量。由字母,数字,下划线,问号组成Number(Number)pi:3.14159;可以有小数点的双精度浮点型数字。是默认类型。Point(Point)pt_1:point(1,2,3);点对象String(String)str:“Makestring(Example)”;双引号括起来的一系列字符Vector(Vector)vt:vector(1,2,3);矢量对象(c)属性的行为类型行为类型举例说明Parameter(NumberParameter)height:2.5;类的参数属性,在实例化本类时可接收参数值。Lookup(ListLookup)categories:{};该属性将在KF导航器中向上索引取值直到根结点。Method(AnyMethod)add:(string$a, string$b)@{…;};一种可以接收形参的属性。Modifiable(IntegerModifiable)width:0.75;该属性值可以在外部程序或交互操作中被设置或修改。Cached(NumberCached)pi:m_pi:;该属性的值仅在实例化时计算一次。Uncached(NumberUncached)height:3;该属性将在每次被引用到时都重新计算求值。Canonical(IntegerCanonical)thick:0.05;在实例化时必需指定的参数。(d)属性的命名标准1)可以包含任何的字母,数字,下划线和问号以及一些特殊符号如百分号。2)大小写不敏感。3)首字母必须是字母或百分号。4)不可使用双百分号作首字母,这是系统属性的保留字。5)属性名后要加冒号。6)属性名以一个百分号作首字母,可以在KF导航器的属性列表中隐藏属性。(e)属性值

属性值可由代数式,公式或逻辑语句组成下边给出一些例子:12*7是一条简单规则,赋给属性DoorHeight

后,属性值为84。

(Number)DoorHeight:12*7;使用条件表达式返回字符串“Safe”给属性

Door_status。

(String)Door_status:If(DoorHeight:<72) Then"Dangerous" Else"Safe";使用了一个函数。属性Smallest_number_in_list:

的值将为1。

(Number)Smallest_number_in_list:

MinList(Number_list:);(List)Number_list:{1,4,7,9,2,3,5,1,1,4,6};(4)表达式

(a)表达式分类类型举例说明算术表达式2*3.4;操作符+,-,*,/和^。使用整数和小数作为操作数。采用标准四则运算顺序。几何表达式Point(1,2,3)*vector(3,2,1)Vector(1,2,3).vector(1,-1,1)*vector(3,2,0)点和向量可进行操作(.)表示点乘,(*)表示叉乘布尔表达式

a:=b:布尔操作符:&,|,-比较操作符:=,<,>,<=,>=,!=尽量使用圆括号字符串表达式“Thisisa”+”book”字符串由若干字符组成,双引号作为其定界符链表达式{{point(0,0,1)},“MultipleLine”,self:}元素分隔符:逗号或分号链中元素可以是任意的数据类型两个链可以使用加号联接(b)运算符及操作数运算符举例操作数1操作数2结果数据类型+5+3IntegerIntegerInteger+{1,2,{a,b},{},token}+{“a”,self:}ListListList+1.2+2.3NumberNumberNumber+Vector(1,0,0)+Vector(0,1,0)VectorVectorVector+Point(1,0,0)+Vector(0,1,0)PointVectorPoint+“Thisis”+makestring(What)StringStringString运算符举例操作数1操作数2结果数据类型-5-7IntegerIntegerInteger-2.3-2.4NumberNumberNumber-Vector(1,0,0)-Vector(0,1,0)VectorVectorVector-Point(1,0,0)-Vector(0,1,0)PointVectorPoint-Point(1,0,0)-Point(0,1,0)PointPointVector运算符举例操作数1操作数2结果数据类型*4*5IntegerIntegerInteger*3.2*4.5NumberNumberNumber*3.2*Vector(1,2,3)NumberVectorVector*Vector(1,2,3)*4.5VectorNumberVector/4/5IntegerIntegerNumber/4.5/5.5NumberNumberNumber/Vector(1,2,3)/Vector(3,2,1)VectorVectorVector/Vector(1,2,3)/3.4VectorNumberVector^(指数运算符)4.2^2.1NumberNumberNumber运算符举例操作数1操作数2结果数据类型&(与)True&falseBooleanBooleanBoolean|(或)True|falseBooleanBooleanBoolean-(非)(一元操作符)-assembly?:BooleanBoolean=(逻辑等)a_num:=b_num:AnyAnyBoolean<4.3<3.2NumberNumberBoolean<“a1b”<“a1c”StringStringBoolean>4<3IntegerIntegerBoolean>4.3<3.2NumberNumberNumber>“a1b”<“a1c”StringStringString<=3.2<=3.2NumberNumberBoolean<=“a1b”<=“a2a”StringStringBoolean>=3>=3IntegerIntegerBoolean(5)参考坐标系

我们可以使用KF中的参考坐标系统来控制在知识熔接系统中生成的对象的方位

referenceFrame: -临时参考坐标系localFrame: -实例所在的本地坐标系旋转和/或平移referenceframe将导致设计结果改变。生成坐标系FrameXY(point;X_vector;Y_vector)

point-坐标系的原点x_vector-坐标系的X轴y_vector-坐标系的Y轴例:(Vector)VtrX:Vector(Cos(45),Sin(45),0);(Vector)VtrY:Perpendicular(VtrX:);(Frame)LocalF:FrameXY(Point(1,1,0),VtrX:,VtrY:);Frame3Point(origin_point;X_point;Y_point)

origin_point-坐标系的原点x_point-坐标系X轴的正向上的点y_point-坐标系Y轴的正向上的点例:(Point)PT_Origin:Point(1,1,0);(Point)PT_Xdir:PT_Origin:+Vector(1,1,0);(Point)PT_Ydir:PT_Origin:+Vector(-1,1,0);(Frame)LocalF:Frame3Point(PT_Origin:,PT_Xdir:,PT_Ydir:);(6)表达式块

表达式块是将一系列的表达式语句按照一定的语法格式集合起来并顺序执行,最终得到计算结果的一种知识熔接编程机制。a.表达式块的语法格式

(数据类型)属性名:

@{

局部变量1<<表达式1;

...

表达式n;

};(number)returned_number:@{ $a<<2; $b<<3; $a+$b;};在上例中,属性returned_number:的值为5。b.表达式块的应用举例[例1]建立一个属性,以只读方式打开文件“c:\input.txt”,读取其中的数据。并记录这些数据。第1步:打开NX,进入到KF可视化编程环境下。第2步:点击鼠标右键,添加名为data_in_file的属性。第3步:定义属性的返回值类性为List。第4步:定义属性的规则公式为:@{$a<<openFile(“c:\input.txt";read);$b<<readSimpleDataFile($a);

closeFile($a);$b;};第5步:点击OK,查看data_in_file的值。(6)操作举例

[例1]创建一DFA文件,实例化该文件中的类,可以生成一拉伸的工字梁,工字梁的初始截面尺寸如图

第1步:使用文本编辑器新建一个***_IBeam.dfa的文件。并将之存在你的<home>\my_dfa_files路径下。这里,***为你姓名的首字母。第2步:定义类的名字:

#!UGNX/KF2.0

DefClass:***_IBeam(ug_base_part);第3步:画出上图中的用于拉伸的截面线串(从下角开始沿着顺时针方向):

(Child)line_1:{Class;ug_line;Start_Point;Point(0,0,0);End_Point;Point(50,0,0);};(Child)line_2:{Class;ug_line;

Start_Point;Point(50,0,0);

End_Point;Point(50,10,0);};第4步:保存文件。第5步:对本类进行实例化来验证截面线串能够正确生成。第6步:修改DFA文件,通过添加下列规则来拉伸截面线串,生成实体。(Child)EXTRUDE:{ Class;ug_extruded; Taper_Angle;0; Start_Limit;1;

End_Limit;6; Direction;Vector(0,0,1); Profile;{line_1:,line_2:,line_3:,line_4:,line_5:,line_6:,line_7:,line_8:,line_9:,line_10:,line_11:,line_12:}; };第7步:重载类文件来验证拉伸的操作。在KF导航器中,放置光标在根节点上,执行右键命令:ReloadAll。 你将看到一个拉伸后的工字梁。§4-3KF语言编成控制语句(1)基本概念

1.1条件控制通过判定条件的真假使程序执行对应语句的一种程序控制机制。相应的语句叫选择语句。在KF中条件控制的关键字有if,then和else。他们三者一般而言不能单独使用,必须满足一定的语法要求。1.2循环控制根据迭代要求控制程序反复执行同一段代码直到满足结束条件的程序控制机制。相应的语句叫循环结构。循环语句标识符为Loop。(2)选择语句

2.1选择语句语法

两路分支选择-if-then-else

根据判定条件的真假来执行两种操作中的一种。语法形式:

if(testExpression) then @{expression1;} Else @{expression2; };如果testExpression的值为真,那么表达式1将被执行。如果testExpression的值为假,那么expression2将被执行。If(fat?:)Then@{“Thisisafatpig!”;}Else@{“Thisisathinpig!”;};多路分支选择-if-then-elseif-then…-else

程序从上往下依次判断条件表达式,一旦某个条件满足(即布尔表达式的值为true),就执行相关的语句,然后不再判断其余的条件,直接转到后续语句去执行。语法形式:

if(testExpression1) then@{expression1;} elseif(testExpression2) then@{expression2;}

Else@{expressionn;};2.2选择语句的应用选择语句较多的应用于下面几种情形a.直接作为规则,计算属性的值(NumberParameter)PartSize:;(String)PartName:ifPartSize:=1then"W80000-1"elseifPartSize:=2then"W80000-2"elseifPartSize:=3then"W80000-3"else"W80000-NEW";

根据输入参数PartSize的值,决定PartName文件名。b.用条件语句来决定用于生成子规则的类名(child)MyGear:{ class, ifGear_needed?: thenSimpleGear

elseNullClass

};(3)循环语句

循环结构的语法形式Loop{

迭代语句;赋值语句;累加语句;终止语句;特殊语句;};其中:1.迭代语句-产生一系列的用于操作和累加的数据定义。2.赋值语句-指定循环变量的值。3.累加语句-进行运算,定义整个循环的返回值。通常,每个循环仅有一个累加语句。4.终止语句-终止循环。5.特殊语句-除迭代、赋值、累加、中止语句外的其他语句。该语句可起到一些如同执行命令行语句的作用(例如:printvalue,read等等)。(Number)LoopValue:Loop{ for$afrom0to5;#迭代语句

for$bis$a+1;#赋值语句

doprintvalue($b);#特殊语句

sum$b;#累加语句};3.1循环体内语句介绍a.迭代语句

For$变量From表达式1。For$变量From表达式1To表达式2。For$变量From表达式1To表达式2By表达式3。For$变量In表达式4。b.赋值语句

1.For$变量Is表达式。2.For$变量Is表达式Then表达式。(Number)LoopValue:Loop{ for$afrom0to5;#迭代语句

for$bis2then$a+1;#赋值语句

doprintvalue($b);#特殊语句

sum$b;#累加语句};c.累加语句

Append表达式。2.Append表达式Into$变量。3.Collect表达式。4.Collect表达式Into$变量。5.If表达式1Append表达式2。6.If表达式1Collect表达式2。7.Max_of表达式。8.Sum表达式

d.终止语句

If测试表达式Return值表达式。如果测试表达式为真,整个循环终止,并返回值表达式的值。这可用于提前终止循环。3.2循环语句的应用[例3]

使用loop循环来找出能承受指定载荷的圆形钢材的最小直径(应力<屈服应力)。其中,标准的圆钢尺寸(直径-英寸)为:0.25,0.3275,0.5,0.75,1.0,1.5,2.0,3.0载荷为560lbs,屈服压力为20,000psi.

(numberparameter) load:560;(numberparameter) yield_stress:20000;(list)standard_steel:{0.25,0.3275,0.5,0.75,1.0,1.5,2.0,3.0};(number)pi:3.1415926;(number)diameter:Loop{

For$each_itemInstandard_steel:; For$stressIs4*load:*(pi:*$each_item^2); If($stress>yield_stress:) Return$each_item; ReturnIs0;};§4-4KF与用户界面(UIStyler)的交互

(1)基本概念

a.UI

Styler

UIStyler是NX提供给用户的专门用于自定义交互界面的应用模块。其具体位置在NX

Application

UserInterfaceStyler…。b.自定义对话框

NX用户利用UIStyler设计工程中需要的对话框的过程及生成的对话框文件。c.KFApplication NX的知识熔接工程应用。其具体位置在NX

Tools

Knowledge

Fusion

Applications…。通过该工具,可以利用自定义的对话框实现交互的创建或编辑DFA类的实例。(2)对话框控键与DFA类中属性的对应关系

一般而言,用户自定义对话框与KF的关联是通过命名匹配来实现的。具体的说:一个对话框文件与一个同名的KF类相关联。如果KF类名为door_assy,那么,相关的对话框文件名为door_assy.dlg。类中的参数或规则与对话框中相应的控键相关联。(3)对话框的配置

Application->UserInterfaceStyler...打开对话框编辑器。如下图:说明:1.对话框名与提示信息可以是任意的。2.前缀字符串可以是任意的。3.对话框类型:Bottom。4.对话框激活方式:All。5.控键选择:OK,Apply和

Cancel。

为DFA的类创建一个对话框的过程与普通的对话框的创建没有什么两样。唯一要注意的是控键的标识。其用于实现KF类中的属

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论