UG二次开发的自动装配技术.doc_第1页
UG二次开发的自动装配技术.doc_第2页
UG二次开发的自动装配技术.doc_第3页
UG二次开发的自动装配技术.doc_第4页
全文预览已结束

下载本文档

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

文档简介

利用UG/OPEN API开发具体产品的应用系统时,常常遇到如何建立零件间装配约束关系的问题。如何实现零件间自动装配,是开发应用系统的难点之一。 1 装配约束关系的简化 / z. l. X: w5 E6 d3 H- j0 m 在实际应用中,装配约束的配合类型有贴合、对准、角度、平行、正交、对中等多种类型,用于装配约束的对象类型有面、边、基准面、基准轴、点、线、曲线、坐标系等多种形式。为了便于数据描述,可将组件间的装配关系做了适当的简化,如图1、2所示,该例中,将零件间的装配约束关系简化为两组件间三个基准面的贴合或对准的装配约束类系。其中,图2中X,Y,Z为对应部件中的基准面名。* Y% x& ?9 Y0 K) V 图1 简化前的装配约束关系 ?图2 简化后的装配约束关系 简化组件装配约束关系后,将主动组件的部件名、组件名与对象名,从动组件的部件名、组件名与对象名,以及装配约束类型等信息保存在ODBC数据库中。在系统加载部件时,可根据数据库中的装配信息,实现组件的自动装配。 2自动装配的实现3 w9 , x+ % N0 p1 H# r7 p6 P5 M2 M# ( 9 U8 t O! q F$ U/ l9 e2.1主动组件的加载8 y9 L: s: Y w5 Z& g1 p0 7 a8 O 使用UF_ASSEM_add_part_to_assembly函数即可将部件加载到装配体。下段程序用于加载部件的,其中,parent_tag为父部件的部件标识,part_name为加载部件的部件名,inst_name为加载部件的组件名,inst_tag返回加载部件的实例标识。 2 K5 E5 4 i0 w r/ q; F4 Y4 Q/ mvoid UG_OPEN_add_part_to_assem(tag_t parent_tag,char *part_name,?char *inst_name,tag_t *inst_tag) y3 E& JW6 A _2 t2 U% J& M! & Z- f! Jdouble origin3 = 0,0,0; L( 4 K! M i; tdouble csys_matrix6 = 1,0,0,0,1,0;) r j* i. M- f2 nint layer = -1;4 M. % # o: b. l2 NUF_PART_load_status_t load_status;6 V Y c k( N* Y- i zUF_ASSEM_add_part_to_assembly(parent_tag, part_name, NULL,inst_name, origin, csys_matrix, layer, inst_tag, &load_status);3 T; ?* o& c/ Q! k3 V( _if ( load_status.file_names != NULL )& Q( S$ J- r2 m. Y& - 4 t, AUF_free_string_array( load_status.n_parts, load_status.file_names );! / L# k+ l# : W* u+ Xif ( load_status.statuses != NULL )/ k9 ! p; X7 d x - CUF_free(load_status.statuses );+ % O6 9 b2 5 Z6 5 H c! B2 O8 f, T& n. v a0 R22 主动、从动组件事例标识的获取 7 * a+ O6 t3 O) z7 x9 B* J6 O 主动组件的事例标识可以通过UF_ASSEM_ask_part_occ_of_inst函数直接获取。从动组件事例标识的获取较为繁琐,其步骤为:(1) 确定从动组件的部件标识;(2)获取从动组件的所有事例标识;(3)匹配事例标识对应的组件名与从动组件组件名,确定从动组件的事例标识。需要注意的是,在同一装配中,部件名相同的其组件名不能相同,组件名相同的其部件名不能相同。 9 T; + k4 / U, u& H 下段程序代码用于获取从动组件事例标识,其中,part_name 为部件文件文件名,inst_name为部件文件组件名,occ_tag返回部件文件事例标识。 6 7 H: i X8 1 U$ P M5 ?. Wvoid UG_OPEN_ask_part_occ_by_name(char *part_name, char *inst_name,tag_t *occ_tag )( s4 b( S; + v; O : W1 J, 9 W3 t V( E: N+ Jtag_t *part_occs; I- N! h2 S3 btag_t temp_tag;0 + X* m& O Q( T6 / wint i;- 8 d1 v; G5 7 Ochar part_n133, refset_name31,instance_name31;?3 F* TA9 n2 Y2 s J2 l Udouble origin 3 ,csys_matrix 9 ,transform 4 4 ;?1 p! z* T% e2 0 i2 Btemp_tag = UF_PART_ask_part_tag(part_name);o. K q9 e F% wif(temp_tag != NULL_TAG)$ v* F1 J1 # ! K8 . D/ k9 r( Q9 d+ rUF_ASSEM_ask_occs_of_part (NULL_TAG, temp_tag, &part_occs ); Z7 a( d) G8 Q$ ti = 0;/ y_6 ; Y! h& h r4 j2 W k( Uwhile(part_occs != NULL_TAG)9 y1 T6 Q1 x3 + L H, m1 q2 n g5 BUF_ASSEM_ask_component_data(part_occs, part_n, refset_name,? e9 N2 D2 f: % M; zinstance_name, origin, csys_matrix, transform); u& F9 R, ?+ b% o! E! y6 w& Zif(strcmp(strlwr(instance_name),strlwr(inst_name) =0 ) break;5 F7 N8 z6 k! z( * T9 i7 k8 Vi+;8 - q/ t3 B* Y& e& J1 u2 C/ N+ ?ts9 I. Z6 P! bif(part_occs != NULL_TAG)?, y G* 2 p8 y/ ?* x% D3 R! U% B. 6 l*occ_tag = part_occs; e( Y7 z e: d% Qelse- j7 j* _$ O* m- u# q2 k8 *occ_tag = NULL_TAG;! D1 n, Z: H3 r3 P2 c fKUF_free(part_occs);2 $ n( W# v# qN s, w; j1 S3 v+ l+ else. G3 + T! W( Y8 b: ; f4 ! V*occ_tag = NULL_TAG;* K1 N3 m8 b9 l 0 _% L- M) a# Z) e/ z% p( f- J2.3 约束对象标识的获取4 D$ H+ 9 e4 z0 # n( l* 5 U+ d. Y W1 h4 p* K 获取用于建立装配约束关系的对象标识的步骤为:(1)将对象所在部件设置为工作部件;(2)利用UF_OBJ_cycle_by_name 获取对象标识。同样需要注意的是,在同一部件中,对象名应唯一。 8 I. 9 S. y V: n8 e2 i 下段程序代码用于获取对象标识,其中part_tag为对象所在部件的部件标识,obj_name为对象名,obj_tag返回约束对象的标识。 ) / ( G$ o0 M2 b* Avoid UG_OPEN_ask_obj_tag_by_name(tag_t part_tag, char *obj_name, tag_t *obj_tag) / M/ 5 ) s; p& n* ?, ?: B6 w z 9 0 r6 V2 d: P( Qtag_t work_part, object_tag = NULL_TAG;?4 S8 v: F) b4 Y; F* | wwork_part = UF_ASSEM_ask_work_part();0 c; I/ F( y* O7 J E% Yif(part_tag != NULL_TAG)+ R3 y% ! A6 d3 t: I( e4 B4 t; X7 _ M. W- h! S2 b* x7 UF_ASSEM_set_work_part(part_tag);6 U( O& v$ r9 / MUF_OBJ_cycle_by_name (obj_name, &object_tag);?7 |5 N6 E. C) # e6 wif (object_tag != NULL_TAG)3 r6 S5 J; $ v+ G/ 1 g | *obj_tag = object_tag;/ O A5 |1 S4 h( e- o& _else- a* X/ Sv F8 H5 c1 l1 R0 E/ o*obj_tag = NULL_TAG; c% k0 y) d; D6 Q) b. G9 y. E. h* else7 |1 P: F6 v1 h- L5 _9 s8 M4 C1 c+ 7 N*obj_tag = NULL_TAG; & i; B0 v6 |9 i, J# # n% o) 0 f1 + X0 y+ d3 P m) yUF_ASSEM_set_work_part(work_part); A2 d( vW; * w/ R/ m + - L* P6 y* u1 d. q e B- 24装配约束关系的建立5 L) g0 a f4 C 建立组件间的装配约束的步骤为:(1) 定义装配约束,即填充结构UF_ASSEM_constraint_s;(2)利用函数UF_ASSEM_solve_mc求解约束;(3) 利用函数UF_ASSEM_apply_mc_data将约束应用到装配体上;(4) 利用函数UF_MODl_update更新模型,以反映模型变化。 % 6 y2 z2 m1 i7 c7 T+ s 下段程序代码用于两组件间的装配约束关系的建立,其中, from_part_ins为主动组件实例标识,from_obj_tag为主动组件中的对象标识,from_part_occ为主动组件的事例标识,to_obj_tag为从动组件的对象标识,to_part_occ为从动组件的事例标识,mate_type为装配类型。 % S+ r- F% E F/ n, |) t1 z7 gvoid UG_OPEN_atuo_mate_by_datum(tag_t from_part_ins,tag_t *from_obj_tag, W& e8 . X8 3 R3 V* itag_t from_part_occ,tag_t *to_obj_tag,+ s# C; G- u+ |! a* n. t1 mtag_t to_part_occ,char *mate_type )! c: e( k s9 j0 % E2 Z/ t% c$ - y, s5 O3 B E9 WUF_ASSEM_mating_condition_t? ftf;* P, U) u3 n4 AO: 3 dUF_ASSEM_mc_status_t? status;$ v, Z5 F7 x+ j2 E9 hUF_ASSEM_mc_structure_state_t struct_status;! h$ x7 b& ?! T- U; l( m4 B: B6 _. YUF_ASSEM_dof_t? dof;7 i& a5 d n0 e8 Ddouble transform44;, p& P1 K9 D- 0 y; Mint ret,i;, l% 9 B j, x1 , rUF_ASSEM_init_mc (&ftf);! X$ t8 s( l2 d) E1 n Vftf.mated_object = from_part_ins;, ; C7 j! p1 v# z1 = NULL;. C/ I! GP# 7 i1 _ftf.user_name = false; Yh F. j2 U& C9 Ra kfor(i=0; i3; i+), . d2 ?. A6 6 c% k7 S7 : L1 f4 Q* m. A$ F% s7 Sftf.constraints.from_status = UF_ASSEM_ok;3 P- A7 % x2 x# Q. pftf.constraints.to_status = UF_ASSEM_ok;8 f T8 6 c- b) D* y* z Fif(strcmp(strlwr(mate_type),m) = 0) H% q/ Y! e g- # l/ xftf.constraints.mate_type = UF_ASSEM_v16_mate;3 X% / q# 0 r, L, Xelse9 R$ A9 l) & R. % V7 b+ S1 Uftf.constraints.mate_type = UF_ASSEM_v16_align ;+ c- q; K3 R( Q5 O8 gftf.constraints.from_type = UF_ASSEM_datum_plane;, R* g5 I4 w) o1 ?- kftf.constraints.to_type = UF_ASSEM_datum_plane;3 K/ z; ; n. YO4 z* ftf.constraints.from = from_obj_tag; Y& _# n2 _* q5 Uftf.constraints.from_part_occ = from_part_occ; h mc: n9 e# a5 wftf.constraints.to = to_obj_tag;- B7 O3 d5 e B) z5 3 cq* Wftf.constraints.to_part_occ = to_part_occ;* P& S$ P- i+ ) Hftf.constraints.offset = NULL_TAG;8 oS7 u-

温馨提示

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

评论

0/150

提交评论