设计仿真 | Adams变拓扑分析之回调子程序
01 文章背景
变拓扑分析的相关内容在前期文章,点击可查看《Adams变拓扑分析之传感器》中已有描述,通过Adams/Sensor可以有效地完成众多变拓扑分析的工程需求。本文将进一步挖掘Adams进行变拓扑分析的相关功能,方便大家的工程应用。子程序作为Adams一种常用的高级功能,由众多熟悉Adams的工程师展开应用,实现了很多貌似不可能完成的任务。因为,子程序作为一种更加接近Adams内核的对象,可以实现很多界面功能不易实现的应用场景。为此,针对变拓扑分析这一场景,我们在众多子程序中选择CBKSUB子程序展开说明和应用,以期为有这方面需求的工程师拓展出新的使用模式。
02 回调子程序
有关回调子程序的相关情况请参考《Adams回调函数功能解析》,这里不再赘述。本文主要描述用于实现仿真过程中不同脚本命令调用的回调函数子程序的内容。
图 1回调子程序源代码
本程序的基本逻辑是,当回调函数遇到传感器触发事件发生时,首先会进行命令字符串的构建,然后将命令传递给Modify函数,Consub可以调用Modify,在执行了Modify发出的命令后,程序控制返回到Consub,关于Consub调用Modify的机制这里不展开。但这里需要注意一个使用特点,Adams/Solver会忽略命令末尾5个空格之后的部分,因此,当使用字符功能构建命令时,需要注意将多余的空格去掉。
对于上述逻辑,如果不想对源代码有过多的认识,只需要考虑后面的使用流程就可以,核心思想是每个sensor对应一个Acf文件,在Acf文件中有相关的命令,当传感器触发事件发生后,程序会将该传感器的ID传输到Data数组中,然后,命令字符串的构建会综合这个ID,这样就形成了那个sensor触发,执行对应的Acf文件的目的。具体流程如下:
图 2回调函数与sensor联合使用流程
说明,上图中绿色框针对的sensor定义以及Acf文件之间有一定的对应关系,在同一个模型中可以有多个sensor的存在,当然需要每个sensor有对应的Acf文件存在。回调源程序按照常规编译流程生成DLL文件供Callback对象调用。仿真时不再需要写复杂的仿真脚本,通过脚本命令也实现不了本功能。
03 应用案例
应用案例的目的,实现模型中多个sensor存在情况下,不考虑触发顺序,按照实际情况,哪个sensor触发就执行对应的命令。如果触发的顺序已知,可以采用常规的仿真脚本即可实现。
基本建模,建立四个球体,从上到下分别为Part_a,Part_b,Part_c,Part_d,其中前两个与大地建立水平滑移副,后两个与大地建立固定副,并且前两个在质心处作用水平力,分别为200N,100N(后继互换),由于重力加速度竖直向下,固定副解锁后会自由落体,以表征sensor事件触发后的动作。最后分别定义两个sensor,事件函数分别为a,b两球的水平速度,比较值分别为10米每秒和15米每秒,由于这里长度采用毫米为单位注意转化。
图 3基本模型
建立的sensor,由于要和回调函数联合应用,此时要求sensor必须有一个触发后的动作,因此,sensor_2类似于sensor_1具体如下:
图 4左侧为sensor定义,右侧为触发后的动作
这里选择了最后一个动作,其实程序并不关注这个动作的数值是什么,只关注有没有这个动作。通过命令库找到Callback的定义项,完成回调对象的定义,如下所示:
图 5回调对象定义
还需完成与传感器对应的Acf文件的创建,这里有两个传感器,因此定义两个Acf文件,具体如下:
图 6Acf文件定义
定义该文件需要注意其名称以及同sensor的ID号之间的联系,这个在源程序中以有过说明。实现的目的,当sensor_1触发后将3号joint抑制,也即part_c小球之后会自由落体;当sensor_2触发后将4号joint抑制,也即part_d小球之后会自由落体。当然,将各自的sensor在触发后关闭。
提交仿真,可以使用交互式仿真也可以使用脚本计算,但是如果使用脚本计算要注意不能再有对传感器的操作,因为本案例找的就是传感器触发事件。
图 7 0时刻动画
上图展示初始状态动画,红色球上施加200N载荷,绿色球上施加100N载荷,分别沿水平方向加速运动,当红色球达到10米每秒速度时sensor_1触发,当绿色球达到15米每秒速度时sensor_2触发,可以观察右侧曲线为各自触发的时刻。
图 8 Sensor_1触发而sensor_2没有触发动画
当sensor_1触发后,黄色球体与大地之间的固定副解锁,可参考sensor_1对应的Acf命令,将Joint_3抑制,黄色球在重力作用下自由落体,可通过动画图中的白色轨迹线看到其已经在动了。
图 9 Sensor_2触发动画
同样地,等到sensor_2也触发后,靓色球体与大地之间的固定副解锁,可参考sensor_2对应的Acf命令,将Joint_4抑制,靓色球在重力作用下自由落体,其已经运动并且有轨迹,但是当前两个球的轨迹重合。
04 文章总结
通过利用回调函数子程序的功能,拾取传感器触发事件,通过编程将每个传感器触发对应的命令选择执行,实现了多个传感器存在情况下,触发次序无关的需求。通过上述流程说明和实例展示,该方法非常简单有效,适合实际工程所需。并且,可以面对交互式仿真或者脚本仿真使用,应用范围较广,可解决这类较复杂工况问题,为多体动力学的变拓扑分析提供了新的解决方法。
(海克斯康工业软件)
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,不为其版权负责。如果您发现网站上所用视频、图片、文字如涉及作品版权问题,请第一时间告知,我们将根据您提供的证明材料确认版权并按国家标准支付稿酬或立即删除内容,以保证您的权益!联系电话:010-58612588 或 Email:editor@mmsonline.com.cn。
- 暂无反馈