第9章ADAMS用户子程序

上传人:z****2 文档编号:210966153 上传时间:2023-05-18 格式:DOCX 页数:26 大小:66.14KB
收藏 版权申诉 举报 下载
第9章ADAMS用户子程序_第1页
第1页 / 共26页
第9章ADAMS用户子程序_第2页
第2页 / 共26页
第9章ADAMS用户子程序_第3页
第3页 / 共26页
资源描述:

《第9章ADAMS用户子程序》由会员分享,可在线阅读,更多相关《第9章ADAMS用户子程序(26页珍藏版)》请在装配图网上搜索。

1、第 9 章 ADAMS 用户子程序本章对 ADAMS 用户子程序做了简要介绍,着重介绍了 CONSUB、 GFOSUB和REQSUB的使用方法,以及在用户子程序中两个最常用的功能 子程序SYSARY和SYSFNC的使用情况。通过本章的学习,读者将具备基 本的开发用户子程序的能力。9.1 ADAMS 用户子程序简介一般情况下, ADAMS 的大部分功能可以通过函数表达式完成,函数表 达式很容易操作,因为不必编译或连接程序,而且ADAMS/Solver还会实时 地提供函数表达式。但函数表达式提供的只是有限的编程结构,因此有些复 杂的情况,特别是涉及到一些逻辑表达,用函数表达式则很难表达出来。因 此

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

3、用户子程序。(4) 需要控制复杂仿真运行时,以及需要作决策逻辑时。 使用用户子程序时要小心,因为不正确的用户子程序会很难调试。9.1.1 用户子程序的种类根据用户子程序的功能,可以将它们分为三类:(1) Driver Subroutine驱动子程序(2) Evaluation Subroutines计算子程序(3) Restart subroutines重启子程序1.驱动子程序(Driver Subroutine)驱动子程序(Driver Subroutine ) CONSUB 用来驱动 ADAMS/Solver。这样ADAMS/Solver在仿真时可更进一步地完成对模型的 分析和修改的自动化

4、工作。CONSUB 发出 request(请求),regulate(调整),和 vary simulations(改变 仿真)的命令,并通过作出的交互式命令来修改数据,或者进行不同的分析。 大多数运行ADAMS/Solver的情况都是交互式,或者是以批处理的形式,一 次只涉及到单个的分析。使用CONSUB,可以完成对数据的动态分析,改 变前提条件,并重复动态分析。2.计算子程序(Evaluation Subroutines)计算子程序(Evaluation Subroutines)为用户自定义。ADAMS/Solver可 写子程序来对某些非标准的或复杂的计算式计算其数值。计算子程序(Evalu

5、ation Subroutine)的程序名和功能如表9-1所示。表9-1计算子程序(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

6、对MOTION计算绞点位移,速度和 加速度REQSUB对REQUEST计算输出值SENSUB对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子程序中力的系数是一个内

8、部状态变量,如果打 算将第一次调用 SFOSUB 子程序时所计算的力的系数保存以作今后使用, 若用“SAVE”和“RELOAD”时会产生数据丢失。可用SAVSUB将计算出 来的系数保存在文件中并用RELSUB重新调入它们,或者力仅仅用RELSUB 来重新计算系数。重启子程序(Restart Subroutine)的程序名和功能如表9-2 所示。表9-2重启子程序(Restart Subroutine)的程序名和功能子程序功能RELSUB加载能使用户子程序重新启动的信息SAVSUB保存以后能重新启动用户子程序的信息9.1.2 子程序的使用相对于ADAMS/View来讲,用户定义子程序有两个任务:

9、输入和输出。 输入就是在相应的命令或状态,或在表明当前系统状态的计算结果中, 提供给ADAMS/View的相关信息。输出就是从ADAMS/View中获得的相关信息。1. 声明浮点变量为了保证数值在子程序之间或者 ADAMS/Solver 和子程序之间能够正 确地传递,需要声明浮点变量,就像在ADAMS/Solver中作的声明一样。在UNIX和Windows机器上,ADAMS/Solver使用双精度浮点变量。因 为未声明的浮点变量通常都是单精度的(如REAL),所以应当明确声明所有 的浮点变量都是双精度的。2. 参数的使用ADAMS/View会从FUNCTION=USER()的表达式中提供给用户

10、子程序 参数值。例如,如果你使用FUNTION=(4.0, 5.0,6.0),ADAMS/View通过 一个包含4.0, 5.0, 6.0的PAR数组参数,以及通过一个值为3的NPAR参 数传递这些数值。通过使用这些功能使得用户子程序更加灵活。例如,如果计算需要 marker101 和 marker102 的距离,可以将这些标志符直接写进用户子程序。3. 避免不连续在运行表达式中,当使用子程序来定义运动,传感器,力,或者模型中 的状态平衡方程时,应当保证这些函数是连续的。不连续的函数很难处理,因为大多数数学理论都是假定系统方程是连续 的。如果违反了该规则, ADAMS/Solver 就会得出出

11、人意料的结果。当使用 IF 声明,将分段函数连接起来时,常常会产生不连续函数。为了保证函数 是连续的,在使用该类型的函数时,一定要小心。4. 创建用户子程序为了创建自己的用户子程序, ADAMS 提供了子程序模板并将它们放在 安装目录 install_dir/adams/solver/usersubs 中。子程序不能以C语言为模板。如果需要一个C语言的子程序,必须通 过修改FORTRAN文件来创建它,或者使用FORTRAN模板作为向导,创 建自己的 C 语言格式子程序。创建用户子程序的步骤:(1) 决定需要创建什么样的用户子程序。例如,如果有GFORCE的声 明,可以创建GFOSUB的用户子程

12、序。(2) 决定要计算什么,需要什么输入参数。(3) 将合适的用户子程序模板从安装目录拷贝到当前目录。模板目录中 包含了要使用的所有子程序模板。(4) 使用文字编辑器来察看用户子程序模板。(5) 按需要修改用户子程序。从用户子程序中调用功能子程序,或者其 他FORTRAN或C语言子程序。(6) 保存用户子程序。因为可能对不同的模型会使用相同的子程序,所 以最好给文件起一个容易区分的名字。5. 调用用户子程序可以通过使用声明或者命令来调用用户子程序。通过使用前面定义的用 户子程序的名字来让ADAMS/Solver知道调用哪一个子程序。也可以使用子 程序来定义一些模型元素。能调用用户子程序的声明或

13、命令如表9-3所示。表 9-3 调用用户子程序的声明或命令要调用的子程序使用的声明/命令CONSUBCONTROLCOUSUB, COUXX, COUXX2COUPLERCURSUBCURVEDIFSUBDIFFFIESUBFIELDGFOSUBGFORCEGSE_DERIV, GSE_UPDATE, GSE OUTPUT, GSE SAMPGSEMOTSUBMOTIONRELSUBRELOADREQSUBREQUESTSAVSUBSAVESENSUBSENSORSFOSUBSFORCETIRSUBTIREUCOSUBUCONVARSUBVARIABLEVFOSUBVFORCEVTOSUBVT

14、ORQUE可以从用户子程序中调用功能子程序。这些子程序的功能就像是在用户 的数据和用户使用的用户子程序的接口一样。例如,在 driver userwritten subroutine(驱动用户子程序)中,可以使用control, access功能子程序。从 evaluation userwritten subroutines(计算用户子程序)中,也可以调用access, function,以及某些情况下setup函数。换句话说,可以从上面任何 一个用户子程序中调用 access 和 function 函数,但用户只能从 driver subroutine 中调用 control 函数,从某个

15、evaluation subroutines 中调用 setup 函 数。6. 编译,连接和运行库 在写完定制的子程序后,必须要将它们编译并连接到 ADAMS 以创建 到ADAMS/Solver的用户库文件中去。然后,可以连同该库与ADAMS/Solver 一同运行。必须有一个FORTRAN编译器,因为ADAMS本身不提供编译器,由 用户子程序生成动态连接库的详细过程参见12.4.5节后半部分的介绍。92常用ADAMS用户子程序简介9.2.1使用GFOSUB用户子程序实例为了使读者对用户子程序有一个直观印象,本节首先给出声明和调用 GFOSUB子程序的例子,通过与GFORCE函数表达式的对比,

16、说明使用用 户子程序的必要性。有关 GFOSUB 用户子程序的更详细内容,将在 9.2.2 小节进行介绍。另外,在1244节的结尾部分提供了 GFOSUB用户子程序 的具体工程应用实例。现假定有如下一个 GFORCE 函数表达式的声明,其函数表达式定义了 小球和斜面之间的某种相互作用力关系(此处相互作用力不一定有确切的物 理含义,仅为了说明GFORCE的定义过程),包括力矢量和力矩矢量。如下 图所示,为了在GFORCE中描述这种相互作用力关系,在小球球心上定义 了标架Mark(ID为2001),在斜面上定义了标架Mark_R(ID为2003), 同时为了确定小球对斜面的反作用力点的位置,生成与

17、标架Mark时刻重 叠的标架Mark_J(ID为2002),Mark_J隶属于斜面。图 9-1 小球与斜面的坐标定义及相对关系于是可以使用GFORCE函数表达式的声明,如下面所示(该GFORCE 自身的 ID 为 100):GFORCE/,100 I=2001, JFLOAT=2002, RM=2003,FX = 10.0 * VX(2001, 2003, 2003)FY = 10.0 * VY(2001, 2003, 2003) FZ = 10.0 * VZ(2001, 2003, 2003) TX = 100.0 * WX(2001, 2003, 2003) TY = 100.0 * WY

18、(2001, 2003, 2003) TZ = 100.0 * WZ(2001, 2003, 2003)如果力和力矩的表达比较冗长,则可以使用GFOSUB用户子程序来代 替GFORCE声明。以及,用下面语句调用已创建好的GFOSUB子程序,并 向其传递参数。GFORCE/,100 I=2001, JFLOAT=2002, RM=2003,FUNCTION=USER(10.0, 100.0, 2001, 2003, 2003)GFOSUB 用户子程序的程序体创建如下:SUBROUTINE GFOSUB(ID, TIME, PAR, NPAR, DFLAG, & IFLAG, RESULT)= 定

19、义与声明 = 外部变量定义 INTEGER IDDOUBLE PRECISION TIMEDOUBLE PRECISION PAR( * )INTEGER NPARLOGICAL DFLAGLOGICAL IFLAGDOUBLE PRECISION RESULT(6)ID标志号,在内部程序中调用TIME 仿真时间PAR不定维的数组,用以向程序传递参数,本例中维数为 5,分别为:PAR (1)=10.0PAR (2)=100.0PAR (3)=2001PAR( 4)= 2002PAR( 5)= 2003NPARPAR数组的维数,本例中NPAR = 5DFLAG 积分标志位,IFLAG 初始标志位

20、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)调用SYSARY子程

21、序获得计算信息:如果变量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) = FCT * VE

22、L(3)RESULT(4) = TCR * VEL(4)RESULT(5) = TCR * VEL(5)RESULT(6) = TCR * VEL(6)RETURNEND9.2.2 常用用户定义子程序简介下面给出了几个常用用户定义子程序的简介。对每个子程序,都提供了 定义、例子、相关说明等等。1. CONSUB用户子程序定义:CONSUB驱动子程序用于驱动ADAMS/Solver。只能通过交互 式命令CONTROL激活CONSUB,而别的用户子程序则不能调用CONSUB。调用: 相应的调用命令为:CONTROL/FUNCTION=USER(r1, , r30) 中的内容表示是可选的。输入参数构

23、成: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功能子程序的目

24、的就是激活某一个ADAMS/Solver的 分析子程序。(3)调用DATOUT功能子程序的目的就是处理从ADAMS/Solver仿真的 输出。当CONSUB停止执行时,ADAMS/Solver会提醒你使用其他命令。如 果程序的控制权交给了 CONSUB,那么输出的自动生成会停止,如果想处 理输出,则要调用DATOUT功能子程序。CONSUB 子程序的结构:下面给出 CONSUB 子程序的结构,从而可以看出该子程序是怎样工作 的。SUBROUTINE CONSUB ( PAR, NPAR )= 定义与声明 = 外部变量定义 INTEGER NPARDOUBLE PRECISION PAR( *

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

26、DOUBLE PRECISION PAR( * ) 本地变量和参数定义 CHARACTER*10 ATYPECHARACTER*20 TITLELOGICAL ERRFLG, INIFLGCHARACTER*80 COMMND, MESSGEINTEGER STATUSDOUBLE PRECISION DPZEROPARAMETER (DPZERO = 0.0)=可执行代码 = 首先进行一次静力学分析 指明分析类型和此次分析的名称ATYPE = STATICTITLE = STATIC_2003INIFLG = .TRUE.调用功能子程序ANALYS进行静力学分析CALL ANALYS(ATY

27、PE, TITLE, DPZERO, 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)

28、指明分析类型和分析的名称进行动力学分析ATYPE = DYNAMIC TITLE = DYNAMIC_2003 INIFLG = .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)RETURN END2. GFOSUB用户子程序定义:GFOSUB计算子程序用于计算GF

29、ORCE声明中的变量值。在 GFORCE的函数表达式太复杂或计算流程需要作特殊控制时可以使用 GFOSUB用户子程序。调用:相应的调用命令为 GFOCE/id,I=id,JFLOAT=id,RM=idFUNCTION=USER(rl,,r30)( )中的内容表示是可选的。输入参数构成:GFOSUB用户子程序的输入参数构成为:SUBROUTINE GFOSUB(id, time, par, npar, dflag, iflag, result) 输入参数说明:dflag逻辑型变量;当ADAMS/Solver调用GFOSUB子程序求解某些 特定的偏微分方程时其值为ture,否则设为false。Id

30、整数变量;用于提供给GFORCE声明其自身的标志符。当需要 GFOSUB的信息时,ADAMS/Solver可自动识别相应的函数声明中的其他信 息(如par参数等)。Iflag逻辑型变量;当需要从GFOSUB中获得函数相关信息时, ADAMS/Solver将其设置为true ;当iflag值为false时,则计算用户定义的表 达式的值。Npar整型变量;用于指明在USER括号中使用的实参数目,也就是 GFOSUB子程序中数组pa r的维数。Par双精度的常数数组;按顺序存放USER括号中实参的数值。Time双精度变量;传递给ADAMS/Solver当前的仿真时间。子程序的返回结果:双精度数组,返

31、回GFORCE构成的六个值。GFOSUB子程序的结构:SUBROUTINE GFOSUB(ID, TIME, PAR, NPAR, DFLAG,& IFLAG, RESULT)= 定义与声明 = 外部变量定义 INTEGER IDDOUBLE PRECISION TIMEDOUBLE PRECISION PAR( * )INTEGER NPARLOGICAL DFLAGLOGICAL IFLAGDOUBLE PRECISION RESULT( 6 ) 本地变量和参数定义 =可执行代码 = 用户自己的程序代码 调用SYSFNC和/或SYSARY为后续计算获得必要信息,如果IFLAG为真, 则这些

32、实际上是在设置函数相关性。CALL SYSFNC (.)CALL ERRMES (.)IF (IFLAG) THEN 子程序初始化 ENDIF GFORCE 的相关计算代码 得到计算结果 RESULT 数组的值RESULT(1) = .RESULT(2) = .RESULT(3) = .RESULT(4) = .RESULT(5) = .RESULT(6) = .RETURN END有关GFOSUB的例子请参考921节和1244节的结尾部分。3. REQSUB用户子程序定义: REQSUB 用户子程序用于计算 REQUEST 的后处理参数的输出 值,但并不是所有的REQUEST都要求有与之对应

33、的REQSUB子程序,只有 使用非标准的 REQUEST 输出时才会使用到。调用: 相应的调用命令为REQUEST/, id FUNCTION USER( 1,. , 30) TITLE c:1, c:8 , COMMENT 中的内容表示是可选的。输入参数构成 :REQSUB用户子程序的 输入参数构成为:SUBROUTINE REQSUB (id, time, par, npar, iflag, result)。输入参数说明:Id整数变量;用于提供给REQRCE声明其自身的标志符。当需要 REQSUB的信息时,ADAMS/Solver可自动识别相应的函数声明中的其他信 息。Iflag逻辑型变量

34、;当需要从REQSUB中获得函数相关信息时, ADAMS/Solver将其设置为true ;当iflag值为false时,则计算用户定义的表 达式的值。Npar整型变量;用于指明在USER括号中使用的实参数目,也就是 REQSUB子程序中数组pa r的维数。Par双精度的常数数组;按顺序存放USER括号中实参的数值。Time双精度变量;传递给ADAMS/Solver当前的仿真时间。REQSUB 子程序的结构:下面是 REQSUB 子程序的结构:SUBROUTINE REQSUB ( ID, TIME, PAR, NPAR, IFLAG,& RESULT )= 定义与声明 = 外部变量定义 IN

35、TEGER IDDOUBLE PRECISION TIMEDOUBLE PRECISION PAR( * ) INTEGER NPARLOGICAL IFLAGDOUBLE PRECISION RESULT( 8 ) 本地变量和参数定义 =可执行代码 = IF( IFLAG ) THEN子程序初始化ENDIF创建 request 信息 用户自己的程序代码 将计算结果写入到 result 数组中RESULT(1) = .RESULT(8) = .RETURNENDREQSUB 子程序的示例下面是一个REQSUB用户子程序的例子。该例仍以图9-1所示的小球与斜 面为例,其功能是计算小球相对于斜面的

36、速度矢量在xoy平面的投影和小球 相对于斜面的角速度矢量在yoz平面的投影,参考标架为斜面上的Mark_R, 其 ID = 2003。为了比较REQSUB用户子程序和REQUEST函数表达式的区别,本例首 先给出可以实现上述功能的函数表达式形式:REQUEST/8,& F2= SQRT(VX(2001, 2003, 2003) * 2 + VY(2001, 2003, 2003) & F3= SQRT(WY(2001, 2003, 2003) * 2 + WZ(2001, 2003, 2003) & COMMENT=SHOCK ENERGY下面给出如何通过创建REQSUB用户子程序实现上述功能

37、。REQSUB用户子程序的调用语句为:REQUEST/8, FUNCTION=USER(2001, 2002, 2003) COMMENT=SHOCK ENERGY所创建的REQSUB用户子程序为:SUBROUTINE REQSUB ( ID, TIME, PAR, NPAR, IFLAG, & RESULT )= 定义与声明 = 外部变量定义 INTEGER IDDOUBLE PRECISION TIMEDOUBLE PRECISION PAR( * )INTEGER NPARLOGICAL IFLAGDOUBLE PRECISION RESULT( 8 ) 本地变量和参数定义 INTEGE

38、R IPAR(3), IM, JM,RM,NSTATES DOUBLE PRECISION DIFVAL, DERVAL,VEL(6) LOGICAL ERRFLG=可执行代码 =IM = PAR(1)JM = PAR(2)RM = PAR(3)通过调用SYSARY将标架的移动和转动速度值赋给VEL数组VEL (1)VEL (3)分别代表力的三个分量VEL (4)VEL (6)分别代表力矩的三个分量IPAR(1) = IMIPAR(2) = JMIPAR(3) = RMCALL SYSARY(VEL, IPAR, 3, VEL, NSTATES, ERRFLG) 通过ERRMES检查SYSAR

39、Y调用效果CALL RRMES(ERRFLG,Error calling SYSARY for VEL,ID,STOP)DIFVAL=SQRT(VEL (1)* 2 + VEL (2)* 2 )DERVAL=SQRT(VEL(5)* 2 + VEL(6)* 2 ) 返回计算结果 RESULT(1) = 0.0RESULT(2) = DIFVALRESULT(3) = DERVALRESULT(4) = 0.0RESULT(5) = 0.0RESULT(6) = 0.0RESULT(7) = 0.0RESULT(8) = 0.0RETURNEND9.3 功能子程序严格来讲,功能子程序(utili

40、ty subroutines)并不属于用户子程序, 但由于要实现用户子程序的功能需要经常(有时甚至是必须)调用功能子程 序,因此本节对功能子程序进行简单介绍。9.3.1 功能子程序概述功能子程序是ADAMS提供的一类特殊的子程序,它不需要用户自己编 写,其作用可以提供da tase t函数的全部功能及其它功能。通常可以利用功 能子程序完成如下工作:(1) 获取模型定义数据。(2) 获得当前状态信息。(3) 通过标准的曲线拟合技术实现数据点的插值。(4) 计算标准函数的值。功能子程序可以分为以下几类:执行控制子程序(Execution Control Subroutines )。(2) 数据获取

41、子程序( Data Access Subroutines)。自定义约束子程序(Setup Subroutine)0 调用ADAMS自带函数子程序(General Subroutines)o以上各类功能子程序所包含的子程序名和功能分别如下 执行控制子程序(Execution Control Subroutines)表9-4执行子程序名及功能子程序名功能ANALYS控制ADAMS/Solver仿真进程DATOUT从某次仿真计算中输出所有的数据MODIFY允许执行ADAMS/Solver的任何命令 数据获取子程序(Data Access Subroutines)表9-5数据获取子程序名及功能子程序名

42、功能AKISPL使用Akima二次曲线拟合方法进行数据插值CUBSPL使用传统的三次曲线拟合方法进行数据插值ERRMES输出用户子程序中的错误信息GETCPU得到当前CPU时间GETINM得到ADAMS/Solver命令输入方式的信息(交互式 还是文件驱动式)GETINT得到当前仿真积分器的类型GETMOD得到当前指定分析方式的整型变量值GETSLV得到当前求解器的名字,是HARWELL还是CALAHAN.GETSTM得到当前仿真时间GETVER得到当前ADAMS/Solver的版本号GTARAY得到ARRA Y中的双精度数值GTCMAT为ADAMS/Solver模型中的标架计算柔度矩阵GTC

43、URV调用CURVE命令计算B样条或用户自定义曲线值GTSTRG调用STRING命令得到字符串的值SYSARY为用户子程序提供系统状态值,入位移、速度等SYSFNC为用户子程序提供单个系统状态值,入位移、速度,TIMGET返回最后一次成功仿真步的仿真时间TIRARY为REQSUB和SENSUB提供轮胎状态值,如位 移、数度、加速度和力等USRMES允许用户子程序输出文本信息。自定义约束子程序(Step Subroutines)表9-6 自定义约束子程序名及功能子程序名功能UCOVAR和U COSUB 一起使用,通知ADAMS/Solver在用户 定义约束中使用哪一个惯性主轴。 调用ADAMS自

44、带函数子程序(General Subroutines)表9-7调用ADAMS自带函数子程序名及功能子程序名功能BISTOP调用BISTOP函数CHEBY计算Chebyshev多项式FORCOS计算傅里叶余弦级数FORSIN计算傅里叶正弦级数HAVSIN计算H AVSIN函数IMPACT计算模型碰撞力函数ISTRNG将整型变量转换成字符型POLY计算多项式的值RCNVRT转换旋转标架RSTRNG将一个双精度变量转换为字符串SHF计算一个简谐函数STEP用三次多项式逼近STEP函数STEP5用五次多项式逼近STEP5函数TCNVRT将移动标架从一种类型转换成另一种类型9.3.2 功能子程序 SYS

45、ARY 和 SYSFNC如前节所述,在用户子程序中调用功能子程序可以实现许多非常有用 的功能,其中SYSARY和SYSFNC功能子程序最为常用。本节将分别介绍 这两个子程序的使用情况。1. SYSARY功能子程序SYSARY 子程序可以向用户子程序提供系统的状态值,如位移和速度 等,这些 ADAMS/Solver 的系统状态值的各个分量一起被保存在特定的数组 中,并以数组的形式传递给用户子程序。SYSARY功能子程序常常被下列用户子程序调用:CONSUB、DIFSUB、 GFOSUB、REQSUB、SENSUB、SFOSUB、VARSUB、VFOSUB 和 VTOSUB 等等,其调用格式为:C

46、ALL SYSARY (fncnam, ipar, nsize, states, nstates, errflg) 参数表中各参数的含义为:fncnam字符型变量,用于SYSARY所调用的ADAMS函数的名字。 ipansize大小的整型数组,包含fncnam所对应函数的参数表。nsize整型变量,其值为fncnam所对应函数的参数个数。states个双精度数组,其大小与包含SYSARY返回值的fnanam有 关。nstates整型变量,用于返回ADAMS/Solver放入states中数值的数目。errflg逻辑型变量,当调用SYSARY时发生错误时,返回值为真。在上述参数中,ADAMS通过

47、读取fncnam来判断用户子程序需要调用 的是哪一个 ADAMS 函数, fncnam 的合法取值及其含义见下表所示:表9-8 位移函数位移函数DISP返回位移的六个分量TDISP返回位移的三个平动分量RDISP返回B313欧拉旋转角Q对于柔性体返回通用模态坐标UVX返回标架I的X轴在标架J中的方向余弦值UVY返回标架I的Y轴在标架J中的方向余弦值UVZ返回标架I的Z轴在标架J中的方向余弦值DC返回标架I的X轴、Y轴和Z轴在标架J中的方向余弦值表9-9速度函数速度函数VEL返回速度的六个分量TVEL返回平动速度的三个分量RVEL返回角速度的三个分量QDOT对于柔性体返回通用模态坐标的一阶导数表

48、9-10加速度函数加速度函数ACC返回加速度的六个分量TACC返回平动加速度的三个分量RACC返回角加速度的三个分量QDDOT对于柔性体返回通用模态坐标的一阶导数表9-11 一般力函数一般力函数FORCE返回作用在标架上合力的六个分量(力和力矩)TFORCE返回作用在标架上的三个力分量RFORCE返回作用在标架上的三个力矩分量表9-12系统元素变量系统兀素变量PINPUT返回PINPUT中所有分量的瞬时值POUTPUT返回POUTPUT中所有分量的瞬时值ARRAY返回ARRAY中所有分量的瞬时值上一小节在介绍REQSUB用户子程序的例子中,调用了 SYSARY功能 子程序,为了更清楚地说明问题

49、,将该例子出去无关部分,作为调用SYSARY 的示例如下所示:SUBROUTINE REQSUB ( ID, TIME, PAR, NPAR, IFLAG, & RESULT )INTEGER IPAR( 1 )DOUBLE PRECISION DIFVAL, DERVALLOGICAL ERRFLG通过调用SYSARY将标架的移动和转动速度值赋给VEL数组VEL (1)VEL (3)分别代表力的三个分量VEL (4)VEL (6)分别 代表力矩的三个分量在调用STSARY之前,将相关标架的ID赋给数组I PARIPAR(1) = IMIPAR(2) = JMIPAR(3) = RMCALL

50、SYSARY(VEL, IPAR,3, VEL, NSTATES, ERRFLG)RETURNEND2 SYSFNC功能子程序SYSFNC 子程序的功能与即为类似,也是向用户子程序提供系统的状态 值。不同之处在于SYSARY子程序提供的是状态值数组,如位移的六个分 量组成的数组,而SYSFNC子程序提供的是单个状态值,如沿X方向的位 移值。SYSFNC 子程序的调用格式为:CALL SYSFNC (fncnam,ipar,nsize,state,errflg )参数表中各参数的含义与SYSARY子程序相同,这里不在赘述。在上述 参数中,ADAMS通过读取fncnam来判断用户子程序需要调用的是

51、哪一个 ADAMS函数,fncnam的合法取值及其含义见下表所示:表9-13 函数变量及其字符串函数变量:字符串:位移DM, DX, DY, DZ, AX, AY, AZ, PSI, PHI,THETA, YAW, PITCH, ROLL速度VM, VR, VX, VY, VZ, WM, WX, WY, WZ加速度ACCM, ACCX, ACCY, ACCZ, WDTM, WDTX,WDTY, WDTZ力FM, FX, FY, FZ, TM, TX, TY, TZ约束反力BEAM, BUSH, FIELD, SPDP, SFORCE, VFORCE, VTORQ, GFORCE, NFORCE

52、, JOINT, JPRIM, MOTION, CVCV, PTCV系统状态变量DIF, DIF1, PINVAL, POUVAL, VARVAL,ARYVAL作为对比,将上面调用SYSARY的例子改用调用SYSFNC子程序来实现, 相应的代码如下:SUBROUTINE REQSUB ( ID, TIME, PAR, NPAR, IFLAG, & RESULT )INTEGER IPAR(3) IM, JM, RM, NSTATESDOUBLE PRECISION DIFVAL, DERVAL, VX, VY, WY, WZ LOGICAL ERRFLG通过调用SYSFNC将标架的移动和转动速度分别赋给变量VX, VY,WY, WZIPAR(1) = IMIPAR(2) = JMIPAR(3) = RMCALL SYSFNC(VX, IPAR, 3,VX, ERRFLG)CALL SYSFNC(VY, IPAR, 3,VY, ERRFLG)CALL SYSFNC(WY, IPAR, 3,WY, ERRFLG)CALL SYSFNC(WZ, IPAR, 3, WZ, ERRFLG)DIFVAL=SQRT(VX * 2 + VY * 2 )DERVAL=SQRT(WY * 2 +WZ * 2 )RETURNEND

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!