ADAMS用户子程序(23)

上传人:枫** 文档编号:511990806 上传时间:2024-02-01 格式:DOCX 页数:22 大小:66.61KB
返回 下载 相关 举报
ADAMS用户子程序(23)_第1页
第1页 / 共22页
ADAMS用户子程序(23)_第2页
第2页 / 共22页
ADAMS用户子程序(23)_第3页
第3页 / 共22页
ADAMS用户子程序(23)_第4页
第4页 / 共22页
ADAMS用户子程序(23)_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《ADAMS用户子程序(23)》由会员分享,可在线阅读,更多相关《ADAMS用户子程序(23)(22页珍藏版)》请在金锄头文库上搜索。

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.计算子程序(Evauation Subroutines)计算子程序(Evaluation Subroutines)为用户自定义。ADAMS/Solver可写子程序来对 某些非标准的或复杂的计算式计算其数值。计算子程序(Evaluation Sub

5、routine)的程序名 和功能如表 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对MOTION计

6、算绞点位移,速度和加速度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.O, 5.0,6.0),ADAMS/View 通过一个包含 4.0,5.0,6.0 的 PAR 数组参数,以及通过一个值为3的NPAR参数传递这些数值。通过使用这些功能使得用户子程序更加灵活。例如,如果计算需要 marker101 和 markerl02的距离,可以将这些标志符直接写进用户子程序。3. 避免不连续 在运行表达式中,当使用子程序来定义运动,传感器,力,或者模型中的状态平衡方程时,应当保证这些函数是连续的。不连续的函数很难处理,因为大多数数学理论都是假定系统方程是连续的。如果违反 了该规则,ADAMS/Solver就会得出出人意料的结果。当使用IF声明,将分段

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

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

13、3调用用户子程序的声明或命令要调用的子程序使用的声明/命令CONSUBCONTROLCOUSUB, COUXX, COUXX2COUPLERCURSUBCURVEDIFSUBDIFFFIESUBFIELDGFOSUBGFORCEGSE_DERIV, GSE_UPDATE, GSE OUTPUT, GSE SAMPGSEMOTSUBMOTIONRELSUBRELOADREQSUBREQUESTSAVSUBSAVESENSUBSENSORSFOSUBSFORCETIRSUBTIREUCOSUBUCONVARSUBVARIABLEVFOSUBVFORCEVTOSUBVTORQUE可以从用户子程序中调

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

15、outines 中调用 setup 函数。6. 编译,连接和运行库在写完定制的子程序后,必须要将它们编译并连接到ADAMS以创建到ADAMS/Solver 的用户库文件中去。然后,可以连同该库与ADAMS/Solver 一同运行。必须有一个FORTRAN编译器,因为ADAMS本身不提供编译器,由用户子程序生成 动态连接库的详细过程参见12.4.5 节后半部分的介绍。92常用ADAMS用户子程序简介9.2.1使用GFOSUB用户子程序实例为了使读者对用户子程序有一个直观印象,本节首先给出声明和调用GFOSUB子程序 的例子,通过与GFORCE函数表达式的对比,说明使用用户子程序的必要性。有关GFOSUB 用户子程序的更详细内容,将在9.2.2 小节进行介绍。另外,在12.4.4 节的结尾部分提供了 GFOSUB 用户子程序的具体工程应用实例。现假定有如下一个GFORCE函数表达式的声明,其函数表达式定义了小球和斜面之间 的某种相互作用力关系(此处相互作用力不一定有确切的物理含义,仅为了说明GFORCE 的定义过程),包括力矢量和力矩矢量。如下图所示,为了在GFORCE中描述这种相互作 用力关系,在小球

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号