Adams Action Only详解:单向力定义、工程场景与联合仿真避坑指南

发布时间:2026/10/9 16:03:56
Adams Action Only详解:单向力定义、工程场景与联合仿真避坑指南
前阵子调一个动力总成悬置模型碰上一件怪事我明明只在发动机侧加了激励力结果副车架那边也跟着剧烈振动整个模型的响应曲线怎么看都不对。排查了大半天最后发现问题出在力的定义方式上——Adams默认给受力物体和施力物体成对施加作用力与反作用力而我想要的那个激励在实际台架测试里压根不会“反扑”回激振器。把力改成Action Only之后模型瞬间就贴合理工科直觉了。这个场景在Adams的日常应用里其实很常见。很多人一上来就用默认的力定义直到后处理曲线出现诡异的串扰才回头去查帮助文档。今天这篇文章我就围绕Adams里的Action Only函数/力定义聊清楚它到底改了物理模型里的什么、适合哪些工程场景、函数怎么写、联合仿真里怎么用以及我实测过程中踩过的几个隐蔽的坑。1. 先搞清楚Action Only到底改了物理模型里的什么1.1 默认力定义里的“看不见的对手”在Adams里创建一个力元Force Element或者施加一个外部力时默认的物理模型是符合牛顿第三定律的你对某一个物体施加力F系统会自动在另一个物体上生成一个大小相等、方向相反的力-F。这个“另一个物体”可以是明确的施力物体也可以是Ground地面。举个例子你用两物体之间的力元把发动机和副车架连起来让发动机有一个向上的激励力副车架端会自动收到一个向下的反作用力。这种处理在绝大多数结构动力学问题里是对的因为现实中的力确实是这样成对出现的。但在某些场景里反作用力反而会制造麻烦比如你想模拟一个“理想的激振器”它只负责对结构施加激励本身不参与动力学响应。你想让基础Ground或大刚度结构只传递载荷、不产生反馈默认的双向力会把基础结构也拉进动力学耦合里。你明明是单向约束只能拉不能压、只能推不能扯结果默认力元在压缩方向上也生成了一个反向的力让模型出现了物理上不存在的“黏连”。这就是我为建议每个做Adams仿真的人都好好理解一下Action Only的原因——它是你从“理想的成对力世界”走向“工程近似单边力世界”的那把钥匙。1.2 Action Only的底层语义力是单向的勾选Action Only之后力元的物理语义就变成只在Action物体上施加这个力Reaction物体上不再自动生成反作用力。在Adams/View中创建力时你会看到对话框里有一个“Action Only”的复选项。它的含义用白话说就是我指定的I Marker所在的那个物体Action Body承担这个力至于J Marker所在的物体只是用来确定力的方向和作用位置它不会收到伴随的反作用力。从数学上看这相当于把力矩阵里“成对项”的另一半直接置零。在求解器层面这意味着该力不再满足动量守恒定律——因为外部输入的力没有产生等大反向的力来“平衡”。所以Adams官方文档里也特别提醒这是个有意的工程近似使用时要清楚自己的模型边界。1.3 什么时候允许自己“违反”牛顿第三定律这么说听起来有点吓人仿佛一用Action Only模型就违反物理定律了。实际上这种单向力在工程控制论和结构动力学里大量存在激振器、作动器、气缸、伺服电机输出力它们在物理系统中有一端固定在基础上那一端的基础响应远小于被激励结构的响应可以忽略不计。你要分析的子结构只是整个大系统的一小块外部环境对它的反作用力被边界条件“吸收”掉了。你建模的目的是算结构内部某个点的响应并不关心力源端的反馈路径。所以Action Only的适用判断标准其实就三条反作用力是否会被边界条件吸收基础结构刚度是否远大于作用对象你是否只关心局部动力学响应。如果答案是“是”用Action Only就是合理的工程化处理。2. 三个适合Action Only的工程场景2.1 悬置与衬套把试验台架装进模型我做动力总成悬置分析时最喜欢用Action Only的地方就是模拟台架激励。试验台架上激振器通过顶杆把力传给发动机顶杆本身刚度很大、质量很小它的响应几乎不影响发动机的运动。如果我用默认力元在Adams里建模给物体A一个力物体B也会被拉进动力学方程里一起抖这跟台架实际完全不一致。正确做法一端固定在Ground上另一端作用在发动机悬置点上力方向按台架布置定义勾选Action Only。这样激励力就是“单向输入”发动机在该点受到的力完全等于你设定的激励函数不会混入基础结构的反作用。在具体操作上我一般还会配合Spline曲线把台架实测的激励数据导进来用AKISPL(time, 0, spline_load, 0)去驱动这个Action Only力。这样得到的模型响应曲线可以直接跟台架实测的振动加速度做对比趋势通常非常接近。2.2 等效载荷输入用试验数据驱动模型很多情况下我们手头没有物理激振器只有之前采集到的载荷谱比如某悬置点在典型工况下的力-时间曲线。这时候建模目标不是“把实际连接关系模拟出来”而是“把已知载荷施加到模型上考察结构响应”。这类等效载荷输入如果使用默认双向力潜在风险是当你把力加到悬置点上时反作用力会设法影响你采集载荷时的那个基准结构——但那个基准结构往往已经被你从模型里省略了于是反作用力只能作用到Ground或者某个残余节点上造成能量泄漏或局部应力集中。Action Only可以直接解决这个矛盾模型里只有一个力源没有成对的“影子结构”载荷谱读取出来后完整施加在目标节点上干净的。配合函数表达式还可以做载荷的平滑加载、渐变加载避免突然的阶跃力把模型冲飞。2.3 碰撞与接触的单向约束近似提到碰撞检测函数很多新手第一反应就是直接上Impact或Restitution接触。接触力本身是双向的——两个物体压在一起那必然内部有等大反向的内力。但工程里有很多“跟随-分离”型结构比如离合器分离轴承、锁止机构、间隙铰链它们只在特定方向传力另一方向完全不产生力。处理这类问题我经常先用Action Only配合IF函数做一个“单边力等效”当接触距离小于零时产生一个与侵入深度挂钩的压力距离大于零时力为零。这样模型跑起来之后的运动趋势和接触检测时的趋势基本一致可用于前期快速参数扫略。当然等模型收敛到一定精度要求后还是要换回正规的Contact算法来精确计接触刚度、阻尼和摩擦力。Action Only在这个阶段的作用是从“有无碰撞”的定性判断过渡到“碰撞力多大”的定量计算不至于一上来就被接触参数调试折磨。3. 在Adams里把Action Only配成函数驱动的完整操作3.1 创建Action Only力的入口和关键选项以Adams/View为例2020及以上版本界面略有差异但逻辑一致进入主界面点击顶部菜单Forces→Applied Force→Create。Adams会自动弹出创建力的对话框。在“Direction”区域选择“On One Body”或“Between Two Bodies”。这里的语义区别是On One Body你在某个物体上选一点创建作用于该物体的力默认采用Action Only逻辑。Between Two Bodies两端各选一个物体创建成对作用的力元也可以在对话框里勾选“Action Only”这样可以借用J物体的位置和方向但力只落在A物体上。设置力的作用点、参考坐标系、力方向类型Body Fixed 还是 Space Fixed。在力大小区域选择“Function”模式输入函数表达式或者选择Constant并用数值框赋值。关键一步确认对话框中的“Action Only”处于勾选状态如果没勾选默认是双向力。有朋友问我“在Between Two Bodies模式下勾选Action Only到底哪个物体是Action”正常情况下你先选的物体就是Action Body后选的是Reaction Body也就是只负责提供位置和方向的参考物体。操作顺序影响很大别选反了。创建完之后可以在左侧模型树中定位到该力元右键查看其属性确认Action Marker与Reaction Marker的位置、方向以及函数表达式是否和预期一致。这一步对排查“力的方向怎么跟我想的不一样”特别有用。3.2 用函数表达非线性力IF、STEP、AKISPLAction Only配合函数使用才是工程应用的正确打开方式。我给几个自己经常用的函数模板大家可以直接抄IF函数做阶跃加载模拟瞬间施加的载荷但数值上会有跳变容易引起初始冲击。IF(time-0.1:0, 0, 10000)意思是在0.1秒前力为00.1秒时变为10000 N。如果直接用于仿真求解器初始步长会被强行压小建议配合积分容差使用。STEP函数做平滑加载推荐避免数值冲击。STEP(time, 0, 0, 0.05, 10000)这是在0到0.05秒内力从0平滑过渡到10000 N。对多体动力学来说平滑加载不仅能稳定积分器还能避免柔性体里出现虚假的高频应力波。AKISPL函数读试验数据把外部测到的载荷谱导成Spline再用AKISPL插值。设Spline名为spline_load则AKISPL(time, 0, spline_load, 0)AKISPL用的是Akima插值曲线不会出现大的过冲适合载荷谱类数据。IF嵌套做单边约束模拟单向“只受压不受拉”的约束。IF(DX(marker_i, marker_j): 1e5*ABS(DX(...)), 0, 0)当两个Marker的相对位移为负时产生压力否则力为0。这种表达式写起来稍繁琐但比直接用Contact高效很多适合前期的趋势性分析。3.3 Action Only与Sforce、Vforce、Gforce的选择逻辑Adams里有几个容易混淆的“力”对象Sforce单点力、Vforce单点力矩、Gforce广义六分力以及常规的单元力元如Spring、Bushing。Action Only选项在这些对象上的表现形式不太一样选型逻辑也有讲究。对象类型作用Action Only适用性典型场景Sforce单点作用力适用勾选Action Only后仅施加力于一个物体激振器、作动器推力Vforce单点作用力矩适用勾选Action Only后仅施加力矩于一个物体电机驱动力矩输入Gforce广义六分力3力3力矩适用勾选Action Only后六分量全部单向复杂载荷边界条件输入Spring弹簧力元默认双向无Action Only概念但有单边可选线性弹性连接首选BushingBushing衬套力元6向刚度和阻尼不适用Action Only但可以用单向衬套近似悬置、隔振器、橡胶减振元件如果你想施加一个力矩来驱动某个轴转动用Vforce并勾选Action Only的效果是只对这个轴施加力矩不反作用到电机壳体上。这在分析电机内部转子响应时特别省心。4. 联合仿真场景下的Action Only接口力与反馈的坑4.1 联合仿真中为什么经常用Action Only热词里出现“adams联合仿真问题”这里我必须多说几句。Adams和Simulink、或者Adams和自编控制程序联合仿真时最常见的接口就是“控制系统算出力多体模型吃下这个力反馈给控制系统的则是运动学或动力学状态量”。问题在于如果你在Adams这边用默认双向力控制端的力输入与机械端反作用力会形成一个闭合回路。如果控制器的初值没设好、或者控制律对干扰敏感这个双向往返很容易让联合仿真发散。我个人的实操习惯是联合仿真里凡是“外部输入力”一律用Action Only。理由有二控制系统模型里往往没有对应的机械结构来承受反作用力强行反向只会让状态量突变。Action Only把力源看作理想源不会因为机械响应而改变输出力这让联合仿真的收敛性和鲁棒性显著提升。4.2 力方向由谁定义Body-Fixed和Space-Fixed的选择联合仿真里比“是不是Action Only”更隐蔽的问题是力的方向参考。Adams创建力时有一个Direction选项Body Fixed力始终相对于Action物体坐标系的方向设定。物体旋转时力的方向也跟着转。Space Fixed力保持世界坐标系的方向不随物体转动变化。Two Bodies力的方向由I Marker和J Marker的相对位置确定常用于弹簧、阻尼类力元。如果联合仿真里你输入的是一个轴向力而该轴本身在空间里旋转选Body Fixed才正确。如果你输入的是“水平方向恒定推力”那必须选Space Fixed。我见过很多联合仿真的异常结果最后发现不是控制律写错而是力的参考方向跟着物体转了几十度输出当然对不上。4.3 反馈量取力的什么形式联合仿真中很多工程师想把“力”作为反馈量比如监测悬置点受力。要注意如果这个力是Action Only施加的那么你在Adams后处理中直接读取的是该力的定义值如果你想看结构内部反力需要另外在Marker上定义Request或Sensor来测量。单位也经常坑人。Adams里面N和N·mm很容易混淆尤其是从CAD导入几何模型后单位设置不对力数量级差出1000倍。我建议在联合仿真接口处对力、力矩、位移、速度分别做一次单位换算和量级检查省得后续对着不合理的曲线浪费半天。5. 实测踩坑Action Only带来的三个隐蔽问题5.1 动量不守恒模型可能越跑越飘Action Only把反作用力“扔掉”之后系统总动量不再守恒。这在稳态分析或短时间冲击响应里没问题但在长时间仿真、或者是带柔性体的模型里误差会一点点累积模型表现为“越跑越飘”。我之前做某机械臂的力矩输入分析任务要求仿真10秒的动态过程。用Action Only施加电机驱动力矩跑了3秒后机械臂末端的位移曲线就开始缓慢上漂。换成Vforce默认双向力之后漂移消失。这里的关键是Action Only适用于激励时间远小于结构特征响应时间的场景长时间仿真要慎用。5.2 与Contact并用的力突变有的模型里Action Only力同时又参与了接触检测比如一个气缸杆端冲击挡块这时候会碰到力突变的问题。Action Only力是突然加上去的接触力是按穿透深度和速度计算的两者叠加后可能造成节点加速度跳变严重时直接导致求解器报错“Error: singularity in equations of motion”。我的处理办法是让Action Only力作用阶段和接触阶段在时间上错开或者用STEP函数给Action Only力增加一个微小斜率。如果必须同时存在就在接触参数里增加一个很小的阻尼帮助吸收突变能量。5.3 后处理里看不到反作用力的“直觉陷阱”用Action Only建模之后很多人会在后处理里查看J Marker上的反作用力结果发现归零第一反应是“模型是不是出故障了”。实际上这恰恰是Action Only的正常表现——J Marker上的力本来就不存在。我建议在后处理之前先在模型检查里确认两件事一是该力元的Action Markers是否是你想作用的物体二是力的方向定义是否和实际载荷一致。这两点确认没问题后处理曲线就算反作用力为零结果也是有效的。6. 最后聊两句经验Action Only在Adams里不算什么尖端功能但我个人觉得它是“区分仿真新手和老手”的一个典型设置。新手默认用双向力模型也算得动、曲线也出得来但一旦跟试验对标就会发现奇奇怪怪的误差找不到来源。老手在建模初期就会把力的物理路径画清楚谁受力、谁不受力、反作用力去哪了全都在脑子里过一遍。如果你也碰到“模型看起来没问题但结果老是对不上”的情况不妨回头看一眼你的力定义里有没有Action Only选项。多数时候问题就藏在这个不起眼的小勾选里。