应用C语言编写ADAMS用户自定义函数的研究_纪玉杰
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
+ 引言
’(’)*( ’6HFP=H8M (K>=P8M ’>=CKI8I FL )9MB=>8M=C *KIH9P) 是由美国 )(4 公司研制的集建模,求解,可视化技术于一体的 虚拟样机软件,是世界上应用最广泛的、最具权威性的机械系 统动力学仿真分析软件 , 目前已经被广泛应用到航空航天、兵 器、 汽车制造等各个行业。 作为一种优秀的虚拟样机软件, ’(’)* 具有很强的二次开 发功能,包括 ’(’)* Y V89Z 界面的用户化设计,利用语言实现 自动建模和仿真功能,通过编制用户自定义函数或子程序 ( 满足用户的某些特定需求, 甚至可以 @I9G $ ]G8HH9> *6^GF6H8>9) 拓展 ’(’)* 的功能,为用户开发出具有特定功能的仿真分析 软件。 V8IH6=C & W W 是当今最流行的面向对象的程序设计语言, 可视化与面向对象设计是当今最流行的编程技术,而 ’(’)* 提供的子程序模板文件是以 _‘aRa’: 语言编写的, 文献 b + , !c 使用 _‘aRa’: 语言编写用户自定义函数。广大用户一直在积 极探索如何应用 & 语言编制用户自定义函数或子程序,这一问 题已经成为应用 ’(’)* 进行二次开发的焦点 b - c 。 这里主要介
)))))))))))))))))))))))))* )))))))))))))))))))))))))))))))))))))))))))))))))))))))))* )))))))))))))))))))))))))*
【 摘要】应用 & 语言编制用户自定义函数或子程序的问题,是应用 ’(’)* 进行二次开发的焦 点。 利用 ’(’)* 提供的模板编写 & 语言函数, 在 V& W W 0X " 环境下编译生成目标文件, 利用动态连 生成 ’(’)* 用户自定义函数, 可以满足用户特殊要求。 通 接库技术实现其与 ’(’)* Y V89Z 的链接, 过编制产生服从正态分布的伪随机数的用户自定义函数的实例, 详细介绍了上述技术的实现过程。 关键词:’(’)*;& 语言;用户自定义函数 【 !"#$%&’$】 !" #$ % &’( ") *’+’,’-). ’(’)* )/ 0*#"#12 3$’* 4 5*#""’1 678*)7"#1’ #1 9 :*)2*%;;#12 <%127%2’= !1 ">#$ .%.’*? % 3$’* 4 5*#""’1 678*)7"#1’ #$ $.’@#/#’+ ") $%"#$/( 7$’* A $ .%*"#@7-%* 1’’+$ 8( 0*#"#12 9 $78*)7"#1’ *’/’**#12 ") ">’ "’;.-%"’ )//’*’+ 8( ’(’)*[ @);.#-#12 ">’ 9 $78*)7"#1’ ") @*’%"’ )8B’@" #1 C#$7%- & W W 0X "[ %1+ -#1 ">’ )8B’@" ") ’(’)* Y V89Z 7$#12 (DD D +(1%;#@ -#1& -#8*%*#’$ E = F#G 1%--(? ">’ .*)@’$$ %8),’ #$ +’;)1$"*%"’+ 0#"> %1 ’H%;.-’ )/ 0*#"#12 % 3$’* 4 5*#""’1 678*)7"#1’ /)* @*’%"#12 % $’*#’$ )/ .$’7+) 4 *%1+); ,%-7’$ 0>#@> %@@)*+$ 0#"> ">’ 1)*;%- +#$"*#87"#)1= ()* +,%-#. !/!01;2 3&456&5);7#)% 8 9%:$$)4 16"%,6$:4) 中图分类号:R\-2 文献标识码:’
编辑 7KO06*/*16.?+4" 0 文件如下:
V*/0L.W+ “ 7W*60" XI V*/0L.W+ “ 751X" XI VW+3*/+ & YNYYRSY VW+3*/+ ; !STZ W2.PL+ &[U$C% F W2.PL+ L H \ W2.PL+ =G 4G MG KG =#G =S] */1 ^G *] =S 8 #] =# 8 #] 324 F ^ 8 S] ^ _L] ^ Q Q H
生成目标文件 N" #" ! 编译上述 B 程序,
利用 )B Q Q R" S 调试器编译 ( 027>*L+)7KO06*/*16.?+4" 0 程 序, 生成 7KO06*/*16.?+4" 2P^ 文件。将 7KO06*/*16.?+4" 0 和 7W*60" X 拷贝到同一个文件夹下, 双击 7KO06*/*16.?+4" 0 在 )B Q Q R" S 下 打开, 在工具栏中单击编译 ( 按钮, 系统提示是否建立默 027>*L+) 按钮, 在相同目录下 %+P.J 文件夹下自 认工作区, 点击是 ( K+?) 动生成 7KO06*/*16.?+4" 2P^ 文件。
其中 &[U$C% F W2.PL+ L H 函数的功能是产生符合标准正态 分布的伪随机数, O2*W O06*/*1*5L*b+6.?+4 F H 函数的功能是用来注册 )函数来实现 ) ,使其在 用户自定义函数 ( 通过 O063./01*2/65WW( $%$&’ 中可用。 I &[U$C%I 是即将显示在 $%$&’ ( )*+, 中函 数构造器 ( -./01*2/ d.*LW+4)中的用户自定义函数名,3/6U6U 为 , 并带一 枚举类型常量, 表示函数的返回值类型为实型 ( W2.PL+) 个实型的主参数。第四个参数由函数的主参数个数决定,最后 一个参数表示单位的类型,一般取 S 。 ( 更详尽的说明请参考 7W*60" X 头文件, $%$&’ 安装目录下… ( 5O*+, ( .?+46?.P? 中 )
!X + 用户自定义函数
’(’)* 用户自定义函数分两类:解释性函数 ( 4>H9GSG9H9O 和编译性函数 ( 。 _6>MH8F>I) &FPSC89O _6>MH8F>I)
a #S! ! !" #" # 解释性函数
纪玉杰等: 应用 B 语言编写 $%$&’ 用户自定义函数的研究
\ M 8 S] 324 F * 8 S] * _#!] * Q Q H \ = 8 372W F ; % =SG & H ] 4 8 = ( &] =S 8 =] M 8 4 Q M] ‘ K 8 372W F ;% =#G & H ] =# 8 K] =S 8 =#] ‘ 4+1.4/ F M a R H ] ‘ O2*W O06*/*1*5L*b+6.?+4 F H \
第#期
解释性函数由插入在表达式中的文本构成,这些表达式在 $%$&’ ( )*+, 中可以进行计算求值,并且可以在命令窗口下使 用 -./01*2/ 命令创建自定义函数。创建函数时必须定义函数的 文本内容和参数名称。 例如:3./01*2/ 04+51+ 3./01*2/6/57+ 8 &9%6:;< 1+=16236+=>4+??*2/ 8 “ @AB6$@ACD6@9CE F :#G :!G %& F :#G :! H ( ! H I <
!" ! 定制由 B 语言编写的用户自定义函数
编写基于 B 语言的用户自定义函数的步骤: F # H 拷贝并修改 $%$&’ 安装目录下… ( 5O*+, ( .?+46?.P? 中 O06*/*16.?4" 0 模板文件中的 B 源代码或直接编写能够实现特定 注意严格按照模板格式编写 ) 。 功能的 B 程序 ( F ! H 在 )B Q Q R" S 环境下,编译上述 B 程序,生成目标文 件。 F N H 利用动态链接库技术,建立 $%$&’ ( )*+, 与目标函数 的链接。 F T H 在 $%$&’ ( )*+, 中使用自定义的子函数。
54J.7+/16/57+? 8 “ :# I G “ :! I < 1K>+ 8 L2051*2/624*151*2/
其中,:# , :! 为函数 &9%6:; 的参数, 1+=16236+=>4+??*2/ 为文 本内容, 54J.7+/16/57+? 为参数名称。以下语句中将用到函数 &9%6:; 在两个 75M+4 点的中点创建一个新的 75M+4 点: 75M+4 04+51+ 75M+46/57+ 8 F 75M+46#G 75M+46! H H 75M+46N L2051*2/ 8 F &9%6:;
!" #" ! 编译性函数
编译性函数是由 B 或 -24145/ 语言编写,并被编译连接到 $%$&’ ( )*+, 中。它具有和系统提供的库函数一样的功能,用 户可以用同样的方式使用这些函数。
O063./01*2/65WW F I &[U$C% I G F -cCB;9AC H &[U$C%G 3/6U6UG #G S H ] ‘
!"# $#%#&$’" () *$+,+)- .%#$ / *$+,,#) %.0$(.,+)# (1 23245 +) 6 7$(-$&88+)- 9&)-.&-#
34 56 $ 789+, ! 5’:; <8=>?+ , *@: AB8 $ C8+ , D4 D8=>? $ E8=F. + :FGHB9=IH9G> @>8J9GI8HK &FCC9?9 FL )9MB=>8M=C N>?8>99G8>? =>O ’6HFP=H8F>, *B9>K=>? ++"""%, &B8>= / . ! *B9>K=>? @>8J9GI8HK FL *M89>M9 Q R9MB>FCF?K, *B9>K=>? ++"+01, &B8>= / . - &B8>= :FGHB 4>O6IHGK ;GF6S *KIH9P N>?8>99G8>? 4>IH8H6H9, T9878>? +"""12,&B8>= /
N 实例
在机构运动可靠性的研究过程中,因考虑构件尺寸误差对 机构运动输出的影响, 根据构件尺寸服从正态分布, 就需应用蒙 特卡洛法产生正态分布的伪随机数。 由于 $%$&’ 提供的 U$C% F H 函数无法满足要求, 故需要编制产生服从正态分布的伪随机 数的用户自定义函数。
N" # 编制用户自定义函数 N" #" # 编写 B 程序
第+期 !""0 年 + 月
文章编号: +""+ $ -22U . !""0 / "+ $ "+"+ $ "!
)=MB8>9GK
机械设计与制造 (9I8?> Q )=>6L=MH6G9
$ +"+ $
应用 & 语言编Hale Waihona Puke Baidu ’(’)* 用户自定义函数的研究
纪玉杰 +, ! 杨 强+ 孙志礼 + 李良巧 . + 东北大学 机械工程与自动化学院,沈阳 ++"""% / . ! 沈阳理工大学,沈阳 ++"+01 / . - 中国兵器工业系统总体部,北京 +"""12 /
% 来稿日期: !""# $ "# $ !%
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))*
绍如何在 ’(’)* Y V89Z 中调用由 & 语言编制的用户自定义函 数, 为 ’(’)* 二次开发提供参考。
! 用户自定义函数
在 ’(’)* Y V89Z 中 有 两 种 类 型 的 函 数 : 设 计 阶 段 函 数 ( (9I8?> $ H8P9 L6>MH8F>I) 和 运 行 阶 段 函 数 . a6> $ H8P9 L6>Md 设计阶段函数用于优化和敏感性研究中构造参数化的样 H8F>I / 。 机模型,’(’)* Y V89Z 仅在样机的建模设计阶段才计算设计阶 段函数的值。除优化和设计研究以外,设计阶段函数的值在仿 真过程中是不变的。运行阶段函数用于定义仿真状态之间的数 学关系, 可以影响样机在仿真过程中的表现。’(’)* 仅在仿真 分析中更新运行阶段函数值。 虽然 ’(’)* 软件本身包含了内容丰富的函数库,可以满 足一般要求下的调用。但是对特定用户而言,可能需要根据实 际需要定义特殊的系统参数。这就需要用户以特殊函数的形式 来定义系统参数, 这时就要用到 ’(’)* 用户自定义函数。