ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:38.68KB ,
资源ID:2866192      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2866192.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ADAMS用户子程序23.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

ADAMS用户子程序23.docx

1、ADAMS用户子程序23第9章ADAMS用户子程序本章对ADAMS用户子程序做了简要介绍,着重介绍了CONSUB、GFOSUB和REQSUB的利用方式,和在用户子程序中两个最经常使用的功能子程序SYSARY和SYSFNC的利用情形。通过本章的学习,读者将具有大体的开发用户子程序的能力。 ADAMS用户子程序简介一样情形下,ADAMS的大部份功能能够通过函数表达式完成,函数表达式很容易操作,因为没必要编译或连接程序,而且ADAMS/Solver还会实时地提供函数表达式。但函数表达式提供的只是有限的编程结构,因此有些复杂的情形,专门是涉及到一些逻辑表达,用函数表达式那么很难表达出来。因此在需要采纳

2、一些ADAMS没有提供的特殊函数时,能够采纳用户子程序。用户子程序更具有通用性,能够利用编程语言来概念模型元素或特定的输出。用户能够将函数表达式写成子程序的形式并将其与ADAMS/View连接,它具有函数表达式所没有的通用性和灵活性。子程序利用通用程序设计语言(FORTRAN或C)的功能来概念ADAMS/View不能提供的函数,并使之依照需要而量身设计。通过连接用户子程序,可不能失去ADAMS/View的任何功效,也可不能降低仿真速度。当显现以下情形时,通常会利用到用户子程序:(1)数学函数很难表达。(2)需要概念多用户利用的函数。(3)GSE和UCON声明时,需要用户子程序。(4)需要操纵复

3、杂仿真运行时,和需要作决策逻辑时。利用用户子程序时要警惕,因为不正确的用户子程序会很难调试。用户子程序的种类依照用户子程序的功能,能够将它们分为三类:(1)Driver Subroutine驱动子程序(2)Evaluation Subroutines计算子程序(3)Restart subroutines重启子程序1驱动子程序(Driver Subroutine)驱动子程序(Driver Subroutine)CONSUB用来驱动ADAMS/Solver。如此ADAMS/Solver在仿真时可更进一步地完成对模型的分析和修改的自动化工作。CONSUB发出request(请求),regulate(

4、调整),和vary simulations(改变仿真)的命令,并通过作出的交互式命令来修改数据,或进行不同的分析。大多数运行ADAMS/Solver的情形都是交互式,或是以批处置的形式,一次只涉及到单个的分析。利用CONSUB,能够完成对数据的动态分析,改变前提条件,并重复动态分析。2计算子程序(Evaluation Subroutines)计算子程序(Evaluation Subroutines)为用户自概念。ADAMS/Solver可写子程序来对某些非标准的或复杂的计算式计算其数值。计算子程序(Evaluation Subroutine)的程序名和功能如表9-1所示。表9-1 计算子程序(

5、Evaluation Subroutine)的程序名和功能子 程 序功 能COUSUB,CONXX,COUXX2定义用户自定义的COUPLERCURSUB计算曲线坐标以及CURVE的导数DIFSUB计算DIFF的微分方程值DMPSUB计算FLEX_BODY的模型的阻尼比FIESUB对FIELD计算力和力矩以及它们的导数GFOSUB对GFORCE计算数值GSE_DERIVGSE_UPDATEGSE_OUTPUTGSE_SAMP用GSE来计算当前状态和输出的偏导数值MFOSUB对MFORCE计算模型值MOTSUB对MOTION计算绞点位移,速度和加速度REQSUB对REQUEST计算输出值SENS

6、UB对SENSOR计算感应值SFOSUB对SFORCE计算力的大小TIRSUB对于轮胎接触,定义三个力和三个力矩UCOSUB对UCON计算约束值和其导数VARSUB对VARIABLE计算其代数值VFOSUB对VFOSUB计算力的分量VTOSUB对VTORUE计算力矩的分量3重启子程序(Restart Subroutines)重启子程序(Restart subroutines)由一对子程序组成,SAVESUB和RELSUB。它们能够保留和从头加载子程序运行进程中的某些状态变量,这些状态变量是那些相关的用户子程序在从头启动或进行某些变量初始化时所必需的数据。若是在用户子程序之间彼此调历时,需要利用

7、它们在子程序内部保留数据。若是没有利用RELSUB和SAVSUB,在保留仿真文件时,内部数据就会丢失。尽管SAVE命令可将模型和仿真数据保留到文件中去,而且能够通过利用RELOAD命令从头调入保留文件,并能够从该保留点从头启动仿真。但SAVE和RELOAD不可能对用户子程序的内部数据进行特殊操作,在RELOAD命令以后,ADAMS/Solver会从仿真流程中断点继续挪用用户子程序,但用户子程序中某些感爱好的内部变量却没有取得保留。例如,假设SFOSUB子程序中力的系数是一个内部状态变量,若是打算将第一次挪用SFOSUB子程序时所计算的力的系数保留以作尔后利用,假设用“SAVE”和“RELOAD

8、”时会产生数据丢失。可用SAVSUB将计算出来的系数保留在文件中并用RELSUB从头调入它们,或力仅仅用RELSUB来从头计算系数。重启子程序(Restart Subroutine)的程序名和功能如表9-2所示。表9-2 重启子程序(Restart Subroutine)的程序名和功能子 程 序功 能RELSUB加载能使用户子程序重新启动的信息SAVSUB保存以后能重新启动用户子程序的信息 子程序的利用相关于ADAMS/View来讲,用户概念子程序有两个任务:输入和输出。输入确实是在相应的命令或状态,或在说明当前系统状态的计算结果中,提供给ADAMS/View的相关信息。输出确实是从ADAMS

9、/View中取得的相关信息。1. 声明浮点变量为了保证数值在子程序之间或ADAMS/Solver和子程序之间能够正确地传递,需要声明浮点变量,就像在ADAMS/Solver中作的声明一样。在UNIX和Windows机械上,ADAMS/Solver利用双精度浮点变量。因为未声明的浮点变量通常都是单精度的(如REAL),因此应当明确声明所有的浮点变量都是双精度的。2. 参数的利用ADAMS/View会从FUNCTION=USER()的表达式中提供给用户子程序参数值。例如,若是你利用FUNTION=,ADAMS/View通过一个包括,的PAR数组参数,和通过一个值为3的NPAR参数传递这些数值。通过

10、利用这些功能使得用户子程序加倍灵活。例如,若是计算需要marker101和marker102的距离,能够将这些标志符直接写进用户子程序。3. 幸免不持续在运行表达式中,当利用子程序来概念运动,传感器,力,或模型中的状态平稳方程时,应当保证这些函数是持续的。不持续的函数很难处置,因为大多数数学理论都是假定系统方程是持续的。若是违背了该规那么,ADAMS/Solver就会得出出人意料的结果。当利用IF声明,将分段函数连接起来时,常常会产生不持续函数。为了保证函数是持续的,在利用该类型的函数时,必然要警惕。4. 创建用户子程序为了创建自己的用户子程序,ADAMS提供了子程序模板并将它们放在安装目录i

11、nstall_dir/adams/solver/usersubs中。子程序不能以C语言为模板。若是需要一个C语言的子程序,必需通过修改FORTRAN文件来创建它,或利用FORTRAN模板作为向导,创建自己的C语言格式子程序。创建用户子程序的步骤:(1) 决定需要创建什么样的用户子程序。例如,若是有GFORCE的声明,能够创建GFOSUB的用户子程序。(2) 决定要计算什么,需要什么输入参数。(3) 将适合的用户子程序模板从安装目录拷贝到当前目录。模板目录中包括了要利用的所有子程序模板。(4) 利用文字编辑器来观察用户子程序模板。(5) 按需要修改用户子程序。从用户子程序中挪用功能子程序,或其他

12、FORTRAN或C语言子程序。(6) 保留用户子程序。因为可能对不同的模型会利用相同的子程序,因此最好给文件起一个容易区分的名字。5. 挪用用户子程序能够通过利用声明或命令来挪用用户子程序。通过利用前面概念的用户子程序的名字来让ADAMS/Solver明白挪用哪个子程序。也能够利用子程序来概念一些模型元素。能挪用用户子程序的声明或命令如表9-3所示。表9-3 挪用用户子程序的声明或命令要调用的子程序使用的声明/命令CONSUBCONTROLCOUSUB,COUXX,COUXX2COUPLERCURSUBCURVEDIFSUBDIFFFIESUBFIELDGFOSUBGFORCEGSE_DERI

13、V,GSE_UPDATE,GSE_OUTPUT,GSE_SAMPGSEMOTSUBMOTIONRELSUBRELOADREQSUBREQUESTSAVSUBSAVESENSUBSENSORSFOSUBSFORCETIRSUBTIREUCOSUBUCONVARSUBVARIABLEVFOSUBVFORCEVTOSUBVTORQUE能够从用户子程序中挪用功能子程序。这些子程序的功能就像是在用户的数据和用户利用的用户子程序的接口一样。例如,在driver userwritten subroutine(驱动用户子程序)中,能够利用control,access功能子程序。从evaluation user

14、written subroutines(计算用户子程序)中,也能够挪用access,function,和某些情形下setup 函数。换句话说,能够从上面任何一个用户子程序中挪用access和function函数,但用户只能从driver subroutine中挪用control函数,从某个evaluation subroutines中挪用setup函数。6. 编译,连接和运行库在写完定制的子程序后,必需要将它们编译并连接到ADAMS以创建到ADAMS/Solver的用户库文件中去。然后,能够连同该库与ADAMS/Solver一同运行。必需有一个FORTRAN编译器,因为ADAMS本身不提供编译

15、器,由用户子程序生成动态连接库的详细进程参见节后半部份的介绍。92 经常使用ADAMS用户子程序简介 利用GFOSUB用户子程序实例为了使读者对用户子程序有一个直观印象,本节第一给作声明和挪用GFOSUB子程序的例子,通过与GFORCE函数表达式的对照,说明利用用户子程序的必要性。有关GFOSUB用户子程序的更详细内容,将在末节进行介绍。另外,在节的结尾部份提供了GFOSUB用户子程序的具体工程应用实例。现假定有如下一个GFORCE函数表达式的声明,其函数表达式概念了小球和斜面之间的某种彼此作使劲关系(此处彼此作使劲不必然有确切的物理含义,仅为了说明GFORCE的概念进程),包括力矢量和力矩矢

16、量。如以下图所示,为了在GFORCE中描述这种彼此作使劲关系,在小球球心上概念了标架Mark_I(ID为2001),在斜面上概念了标架Mark_R(ID为2003),同时为了确信小球对斜面的反作使劲点的位置,生成与标架Mark_I时刻重叠的标架Mark_J(ID为2002),Mark_J隶属于斜面。于是能够利用GFORCE函数表达式的声明,如下面所示(该GFORCE自身的ID为100):GFORCE/,100 I=2001, JFLOAT=2002, RM=2003,FX = * VX(2001,2003,2003)FY = * VY(2001,2003,2003)FZ = * VZ(2001

17、,2003,2003)TX = * WX(2001,2003,2003) TY = * WY(2001,2003,2003)TZ = * WZ(2001,2003,2003) 若是力和力矩的表达比较冗长,那么能够利用GFOSUB用户子程序来代替GFORCE声明。和,用下面语句挪用已创建好的GFOSUB子程序,并向其传递参数。GFORCE/,100 I=2001, JFLOAT=2002, RM=2003,FUNCTION=USER, , 2001, 2003, 2003)GFOSUB用户子程序的程序体创建如下:SUBROUTINE GFOSUB(ID, TIME, PAR, NPAR, DFL

18、AG,& IFLAG, RESULT)= 概念与声明 = 外部变量概念 INTEGER IDDOUBLE PRECISION TIMEDOUBLE PRECISION PAR( * )INTEGER NPARLOGICAL DFLAGLOGICAL IFLAGDOUBLE PRECISION RESULT(6) ID 标志号,在内部程序中挪用 TIME 仿真时刻 PAR 不定维的数组,用以向程序传递参数,本例中维数为5,别离为: PAR(1) PAR(2) PAR(3)2001 PAR(4)2002 PAR(5)2003 NPAR PAR数组的维数,本例中NPAR 5 DFLAG 积分标志位,

19、 IFLAG 初始标志位 RESULT 返回的程序值,每一次挪用能够返回六个值,本例中: RESULT(1)为FX的值 RESULT(2)为FY的值 RESULT(3)为FZ的值 RESULT(4)为TX的值 RESULT(5)为TY的值 RESULT(6)为TZ的值 本地变量和参数概念 DOUBLE PRECISION FCT, TCR, VEL(6)INTEGER IPAR(3), IM, JM,RM,NSTATESLOGICAL ERRFLG =可执行代码 =FCT = PAR(1)TCR = PAR(2)IM = PAR(3)JM = PAR(4)RM = PAR(5) 挪用SYSAR

20、Y子程序取得计算信息:若是变量IFLAG的值为true,那么将子程序初始化。.将标架的移动和转动速度值赋给 VEL 数组IPAR(1) = IMIPAR(2) = JMIPAR(3) = RMCALL SYSARY(VEL, IPAR, 3, VEL, NSTATES, ERRFLG) 通过ERRMES 检查SYSARY挪用成效 CALL ERRMES(ERRFLG, Error calling SYSARY for VEL, ID, STOP) 返回GFORCE 的计算结果 RESULT(1) = FCT * VEL(1)RESULT(2) = FCT * VEL(2)RESULT(3) =

21、 FCT * VEL(3)RESULT(4) = TCR * VEL(4)RESULT(5) = TCR * VEL(5)RESULT(6) = TCR * VEL(6)RETURNEND 经常使用用户概念子程序简介下面给出了几个经常使用用户概念子程序的简介。对每一个子程序,都提供了概念、例子、相关说明等等。1. CONSUB用户子程序概念: CONSUB驱动子程序用于驱动ADAMS/Solver。只能通过交互式命令CONTROL激活CONSUB,而别的用户子程序那么不能挪用CONSUB。挪用: 相应的挪用命令为:CONTROL/FUNCTION=USER(r1,r30) 中的内容表示是可选的

22、。输入参数组成: CONSUB用户子程序的 输入参数组成为:SUBROUTINE CONSUB(par,npar)输入参数说明: npar整型变量,其值为par数组的维数。par双精度常数数组,按顺序匹配CONTROL命令中的USER括号内的参数值。要紧功能: ADAMS/Solver将CONTROL中的常数以实数数组的形式传递给FUNCTION=USER()。从CONSUB中,会挪用一些功能子程序,如SYSARY,SYSFNC或AKISPL等,可实现以下要紧功能:(1)MODIFY功能子程序以交互式的方式挪用,用来改变ADAMS/Solver的声明。(2)挪用ANALYS功能子程序的目的确实

23、是激活某一个ADAMS/Solver的分析子程序。(3)挪用DATOUT功能子程序的目的确实是处置从ADAMS/Solver仿真的输出。当CONSUB停止执行时,ADAMS/Solver会提示你利用其他命令。若是程序的操纵权交给了CONSUB,那么输出的自动生成会停止,若是想处置输出,那么要挪用DATOUT功能子程序。CONSUB子程序的结构:下面给出CONSUB子程序的结构,从而能够看出该子程序是如何工作的。SUBROUTINE CONSUB ( PAR, NPAR )= 概念与声明 = 外部变量概念 INTEGER NPARDOUBLE PRECISION PAR( * ) 本地变量和参数

24、概念 =可执行代码 = 用户自己的程序代码 RETURNENDCONSUB子程序例如:下面给出一个CONSUB子程序应用的例子,在该例中,第一对模型进行了一次静力学仿真(Static Simulation),然后改变Part 1 的质量后,进行一次动力学仿真(Dynamic Simulation),并输出每次仿真的结果。第一,用交互式的命令激活CONSUB:CONTROL/ FUNCTION=USER(r1,.,r30)相应的CONSUB 用户子程序为:SUBROUTINE CONSUB(PAR, NPAR)= 概念与声明 = 外部变量概念 INTEGER NPARDOUBLE PRECISI

25、ON PAR( * ) 本地变量和参数概念 CHARACTER*10 ATYPECHARACTER*20 TITLELOGICAL ERRFLG, INIFLGCHARACTER*80 COMMND, MESSGEINTEGER STATUS DOUBLE PRECISION DPZEROPARAMETER (DPZERO = =可执行代码 = 第一进行一次静力学分析 指明分析类型和这次分析的名称ATYPE = STATICTITLE = STATIC_2003INIFLG = .TRUE.挪用功能子程序ANALYS进行静力学分析CALL ANALYS(ATYPE, TITLE, DPZERO

26、, DPZERO, INIFLG,& STATUS)若是仿真中显现错误,那么挪用ERRMES功能子程序返回错误信息并终止仿真ERRFLG = STATUS .NE. 0MESSGE = Error calling ANALYS for STATIC_1.CALL ERRMES(ERRFLG, MESSGE, STATUS, STOP) 挪用DATOUT功能子程序输出分析数据CALL DATOUT(STATUS)挪用MODIFY功能子程序改变 PART/1 的质量COMMND = PART/1, MASS = 100CALL MODIFY(COMMND, STATUS)指明分析类型和分析的名称进

27、行动力学分析ATYPE = DYNAMICTITLE = DYNAMIC_2003INIFLG = .TURE.CALL ANALYS(ATYPE, TITLE, DPZERO, DPZERO, INIFLG,& STATUS)ERRFLG = STATUS .NE. 0MESSGE = Error calling ANALYS for STATIC_2.CALL ERRMES(ERRFLG, MESSGE, STATUS, STOP)CALL DATOUT(STATUS)RETURNEND2. GFOSUB用户子程序概念:GFOSUB计算子程序用于计算GFORCE声明中的变量值。在GFORC

28、E的函数表达式太复杂或计算流程需要作特殊操纵时能够利用GFOSUB用户子程序。挪用:相应的挪用命令为GFOCE/id,I=id,JFLOAT=id,RM=idFUNCTION=USER(r1,r30)( )中的内容表示是可选的。输入参数组成:GFOSUB用户子程序的 输入参数组成为:SUBROUTINE GFOSUB(id, time, par, npar, dflag, iflag, result)输入参数说明:dflag逻辑型变量;当ADAMS/Solver挪用GFOSUB子程序求解某些特定的偏微分方程时其值为ture,不然设为false。Id整数变量;用于提供给GFORCE声明其自身的标

29、志符。当需要GFOSUB的信息时,ADAMS/Solver可自动识别相应的函数声明中的其他信息(如par参数等)。Iflag逻辑型变量;当需要从GFOSUB中取得函数相关信息时,ADAMS/Solver将其设置为true;当iflag值为false时,那么计算用户概念的表达式的值。Npar整型变量;用于指明在USER括号中利用的实参数量,也确实是GFOSUB子程序中数组par的维数。Par双精度的常数数组;按顺序寄存USER括号中实参的数值。Time双精度变量;传递给ADAMS/Solver当前的仿真时刻。子程序的返回结果:双精度数组,返回GFORCE组成的六个值。GFOSUB子程序的结构: SUBROUTINE

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2