solidworks导入adams联合仿真
solidworks导入adams联合仿真
定义
本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
我在做课设、大作业的时候经常要做机电联合仿真,这个过程中遇到了许多不同的困难,现在将这些问题记录下来,以备不时之需,也能和同志们分享学习。
后来的补充:强烈建议没有强制要求的同志不要用 ADAMS 仿真了,在这篇文章里你会看到我从各个角度吐槽这个软件难用,但是当时的课程设计要求我们使用 ADAMS 进行仿真。现在我本人已经转用 Recurdyn 进行机电联合仿真了,Recurdyn 的仿真性能更强,人机交互也更加优秀,还支持柔性零部件的有限元分析,有机电联合仿真需求的同志都可以尝试。我还犹豫过要不要把这个文章写完,但是转念一想还是得有始有终,因此把怎么使用 ADAMS 进行机电联合仿真补完。
note
经过确认,Adams确实还存在计算的能量发散的问题。一个单摆为例,5s 100点能量为:
总能量:
势能:
确实存在能量不守恒;
如果加到1000点,还是存在能量不守恒:
方案
将 Solidworks 模型导入 ADAMS
第一种方法是 Solidworks 模型直接另存为 Parasolid(.x_t) 文件,然后在 ADAMS 中 File -> Import...。但是这样导入的装配体没有装配关系,需要在 ADAMS 中重新添加,很繁琐。
第二种方法是在 Solidworks 插件中选择 Solidworks Motion,然后在下面 Motion Study 中选择 Motion 分析,稍微拖动一下时间轴,点击计算,随后右键装配体选择输出到 ADAMS,这样会生成一个. adm 文件,在 ADAMS 中直接 Open 即可。这样导入的装配体装配关系已经设置完成了,直接进行下一步仿真即可。
从 Solidworks Motion 中导出的步骤
在 ADAMS 中建立机械系统和接口
在用了一段时间 ADAMS 之后,我只能说 ADAMS 非常难用,它的许多设计是违反用户的使用习惯的,界面的冗余太多,而真正有用的功能却往往藏在看不见的地方,更不必说匮乏又模糊的错误提示了。所以在使用 ADAMS 中,要特别小心,不然可能就得从导入模型开始重做。(这也是为什么我要从 Solidworks 中导入带装配关系的模型,仿真也要用 Simulink 联合仿真,就是为了避开 ADAMS 这个折磨人的东西)
第一步自然是打开 ADAMS。在 ADAMS 的使用过程中务必注意 ADAMS 的工作路径,一般来说 ADAMS 的默认工作路径都是 C 盘的 Users 文件夹,而 Files->Open Database 不会 自动切换工作路径。如果工作路径不对,输出的所有控制框图和算例结果都不会出现在 ADAMS 模型文件夹内,所以设置好工作路径非常非常重要。除了开始界面能选择工作路径以外,Files->Select Directory 也能变更 ADAMS 的工作路径。
为什么是 Users?简直莫名其妙
在开始界面修改工作路径
值得一提的是,ADAMS 在根目录 / controls/examples 中提供了几个例子,可以用来演示和熟悉 ADAMS 的各个功能。(就连例程都是藏的严严实实的)
我们这里不使用例程,使用 Solidworks 中导入的模型。
打开模型就能看到模型的线框图,右下角可以将线框图变为实体图。
要实现视角的旋转、平移和缩放,要按下 R、T、Z 键后拖动鼠标。鼠标右键菜单能看到视角控制选项和显示选项以及对应功能的快捷键。
现在我们来看左边的大纲,Bodies 是从 Solidworks 中导入的零件,Connectors 是从 Solidworks 中导入的配合,可以看到他们的名字都很混乱。在大纲中右键点击,模型中对应的部分就会高亮显示,选择 Rename 改名。
注意,改名只能修改划出的部分,两个点中间的部分不能改!
双击可以显示零件或配合的详细信息, 在关节的详细信息中,我们可以看到这个关节连接了哪两个零件,和这个关节的类型。
现在我们回到大纲,可以看到 Motions、Forces、Elements、Measures 底下都是空的,这也正是我们进行机电联合仿真要设置的。选择 Elements 选项卡 System Elements 中的创建变量。
最上面的文本框可以给变量命名,变量的值是将来 Simulink 输入的,这里留着 0 就好。
我在这里设置了两个输入量,现在我们双击要设置运动的关节。
选择 Impose Motion(s)。
在弹出的对话框里,根据关节类型的不同,可以设置下面的六个自由度,我们这里要设置的是一个回转关节的速度,在 Rot Z" 里选择 velo(time) = ,点击表达式后的...。注意这里最上面的 Name 文本框不能用来改名字,你需要在设置完整个运动后重新 Rename。(什么天才交互...)
在弹出的函数构建器里,选择 Data Element 类型的函数。
随后选择 Algebraic Variable Value,即左下角的 VARVAL 函数,随后选择 Assist...
在弹出的对话框的文本框中右键点击,选择 ADAMS_Variable->Guesses,然后选择你刚刚创建的变量。_(这个时候你点左边大纲是没用的,__ 选择变量真的是非常离谱 _)
点击 OK,确认一下函数表达式框里是正确的,这里对话框很多,一路 OK 点掉所有的对话框,注意 不要 点叉或者 Cancel 关闭对话框,否则你就得重来一遍了。这个时候我们可以重命名一下刚刚创建好的运动。我设置了两个变量,因此再创建好另一个关节的运动。
选择 Forces 选项卡,可以添加需要的力,这里我们以添加一个扭矩为例。
一般来说,需要的扭矩都应该这样设置:Run-time Direction 设置成 Body Fixed(不然力不会跟着机体动),Construction 选择 Pick Feature(不然指定不了力的方向)。然后选择要施加力的点和方向即可。(就不能把更常用的选项放在默认选项上吗)
要修改这个力,也是在大纲中双击这个力,然后和添加运动时一样修改函数表达式即可。这里我们在仿真时不使用力,也就不进行修改了,直接把力删掉。
现在我们已经设置好了输入了,我建议你检查一下输入量是否都设置准确了,因为 ADAMS 会直接无视错误的函数表达式,而不会有任何报错。(到底是怎么设计的人机交互啊)
现在我们来设置输出量。我的这个模型要输出的是末端的位置,因此要首先在末端建立一个坐标点。选择 Bodies 选项卡,在 Construction 中选择建立一个坐标点。
同样要修改设置,一般应当选择 Add to Part,Orientation 选项我选择了 X-Axis,可以根据需要调整。然后选择坐标点所在的零件、位置和方向。 这里有个技巧,在选择方向的时候,可以点击左边大纲中的 cm(Center of Mass,质心) 来高亮质心,然后就能指向质心啦。
在创建坐标点的时候,没有选项让我们自己命名名字,创建好后需要我们自己去找它叫什么,然后我们可以给他改名。(这里我发现他叫 MARKER_10010,到底为什么连名字都这么奇怪啊)
接下来再创建变量来测量坐标点的位置。和建立输入量时一样,选择 Elements 选项卡,新建一个变量。但是作为输出量,我们要修改其函数表达式,选择 Displaments->Distance along X,再选择 Assist...。
这里我发现 Guesses 里并没有我要找的坐标点。我们可以选择 Pick,在模型中点击要用的坐标点;或者选择 Browse,在数据库里找到要用的坐标点。
一路 OK 点掉所有的对话框,现在我们完成了输出变量的创建,是时候把 ADAMS 里的模型导入 Simulink 了。选择 Plugins 选项卡,点击 Controls,选择 Plant Export。
在弹出的对话框中,右键点击 Input Signal(s) 文本框,选择 ADAMS_Variable->Guesses,选择需要的变量,用相同方法设置好输出变量。
在 Target Software 中选择 MATLAB。
现在打开我们保存 ADAMS 文件的目录,可以看到有一个. m 文件生成了。(还记得我最开始强调的选择好工作目录吗?如果没设置好,在这一步你就找不到. m 文件了,我当时就是一直做到这一步才发现的)
在 Simulink 中进行联合仿真
打开 MATLAB,运行这个. m 文件,可以看到工作区里多了一大堆东西。然后我们在命令行输入 adams_sys,ADAMS 创建的 Simulink 框图就会出现了。右边这个 adams_sub 环节就是刚刚建立完成的机械系统,可以看到他有两个输入一个输出,正如我们在 ADAMS 中所设置的。
我们可以把这个框图复制到一张新建的框图里,然后我们要对 simulink 和 adams 之间的通信进行设置。双击 adams_sub,然后双击 ADAMS Plant(就是中间那个红的)。
弹出一个对话框,Animation mode 里如果选择 interactive,那么 Simulink 开始仿真的时候 ADAMS 就会播放机械系统的运动动画,可以在调试完成后选上;另外,也需要适当降低 Communication interval,这样可以提高精确度;Simulation mode 也可以根据需要更改。
然后你就可以绘制你的电气系统框图,进行机电联合仿真啦。