• 回答数

    0

  • 浏览数

    1352

  • 收藏数

    0

作者:启幕 发表于 2022-1-14 16:13:22
跳转到指定楼层
ADAMS和Simulink的联合,构建了工程中机电一体化建模、仿真和分析的强大平台。有些教程讲到了用Control模块实现联合仿真的一些内容,我没有实际做过,因为我主要面对的是实时仿真,可惜Simulink和ADAMS并无实时仿真的能力,Simulink还好些,有第三方厂商的支持,基本上可以算是具备了硬件在回路实时仿真的能力,而ADAMS好像就没有考虑这方面的问题。于是,只能靠自己从底层做起了。现在的工程软件大都提供了外部编程的接口,以满足千奇百怪的用户需求。Simulink和ADAMS也不例外,它们都有支持C语言的接口,这就为他们之间的实时数据交换提供了可能。我想,针对类似的需求大概不在少数,顺便插些闲话,以前我为此专门学习了ADAMS的SDK,发现它并非能够很好地解决这个问题,SDK基本上可以帮助你在脱离ADAMS软件环境的情况下(1)建模,用代码创建简单的模型(相对于专业建模工具而言,支持的模元种类有限,当然你也可以实现很复杂的建模);(2)仿真,这可能是SDK的主要功能了,SDK拥有了对求解器的完全调度,可以说,有了SDK,再加上你自己的操作界面,你甚至自己都几乎可以开发出一个ADAMS来,为什么不敢说百分之百呢,因为我也没试过,不知道SDK是否被限制了一些功能,况且新版中现在也不包含SDK模块了。因为,我是要用ADAMS的,包括它的界面,建模和仿真,所以除非有领导支持我搞开发,自己实现3D建模,动画,再加上SDK的仿真引擎......,否则是不考虑SDK的。好在还有ADAMS的用户函数,或者有说用户子程序的这颗稻草。ADAMs的用户函数分设计时函数和运行时函数两类,也有的叫做view函数和solver函数,这是因为设计时函数用在建模过程中,被view调用,运行时函数用在仿真过程中被solver调用,它们的实质都是dll,即动态链接库,因为用途不同,所以代码编写上也有所不同。要在实时仿真过程中实现数据的动态交换,当然只能用运行时用户函数了。最终的目的要实现位于两台机子上的ADAMS和Simulink之间的联合仿真,网络编程还好解决,但问题的关键是对Simulink和ADAMS的求解器所知太少,不知道还有别人做过这样的试验没有,我编写了一个GFORCE的用户函数,用于从外部定义物体所受的力,本指望在仿真的每一步被slover回调一次,但实际测试发现ADAMS的求解器在仿真的每一步调用用户函数很多次,可能和求解算法有关,这里是13次。Smulink也存在这样的问题,大家注意到没有,用那个好像什么Prime的算法,每个模块在仿真步需计算6次,4阶龙格库塔法4次,3阶3次,依此类推。这个对于学过算法的应该可以理解,但问题是我在实时仿真同步交换数据的时候,如何判断:现在是第几步仿真的开始了,请发送和接收数据吧?

分享:
回复

使用道具

成为第一个回答人

高级模式 评论
您需要登录后才可以回帖 登录 | 立即注册 微信登录