首页/文章/ 详情

Adams技术技巧 | 变质量子程序

2年前浏览4587

 

 1   概述

前来说,热能动力机械依然是主流的驱动源,如火箭/导弹发动机、航空发动机、冲压发动机、各种喷射型动力等,伴随着运动进行,各驱动源的质量会逐渐减少,会对系统的运动状况与姿态控制产生巨大影响,因此变质量系统的运动学仿真方案将在国防、航空航天领域具有较大的运用价值。
图片 图片

 

图1 火箭发射质量变化

在Adams 2020之前的版本中,针对变质量问题多采用等效方案(力、力矩等效),这种方案一是建模比较复杂,二是不能很好解决转动惯量的问题,三是对无法改变质心的位置与方向。因此,等效方案未能解决客户的深层次需求,需要Adams给出更完整、成熟的变质量系统的运动学仿真方案,Adams 2020FP1版本在Adams原来强大功能的基础上,升级求解器、子程序以及动态链接库,使得完善的变质量系统运动学仿真方案成为现实。


   方法

 

在Adams中,由于质量、转动惯量、质心位置属于设计变量,不属于状态变量,在一次仿真,部件的质量是无法产生改变的,因此需要将一次完整的仿真离散化为多段短时间仿真,此段仿真完成后,保存仿真结果,调整部件质量,再将上段仿真的结果载入,进行新一段仿真,如此循环,直至仿真结束。方法思路如下所示:

 


图片

图2 变质量方案逻辑流程

在Adams中,consub.f或consub.c子程序,具有分段仿真并调整模型的功能,下面以consub.c为例,阐述变质量方案的子程序逻辑。


 3   子程序详解
注:在使用consub.c子程序时,需要同时调用slv_c_utils.h头文件,因为所有的c语言命令转化为fortran语言命令都在slv_c_utils.h头文件中定义。

 

程序内容分为两部分:

a)对slv_c_utils.h头文件的调用;
b)对consub.c子程序主体的定义。

 

下面详细介绍consub.c程序主体。

(1)子程序输入参数定义

 

图片

第一个输入参数PAR[0]为双精度,赋给变量end_time;第二个输入参数PAR[1]为整型,赋给变量steps。

PAR[0]、PAR[1]来源于仿真脚本中User函数定义的参数,0、1表示参数顺序。见第4章说明。

(2)定义离散化仿真时长

 

图片

一段时长为“end_time”的完整仿真,被离散化为数量为“steps”的小段仿真,每小段仿真的时长为“stepsize”。

(3)子程序内部参数定义

 

图片

iniflg:定义为整型,此为一个逻辑参数,在仿真调用(c_analys)中会引用,确定Adams Solver每次开始仿真时是否重新生成运动方程,在仿真启动时进行模型装配。1表示是,0表示否。

status:定义为整型,此为一个逻辑参数,在仿真调用(c_modify、c_analys)中会引用,表明此调用是否成功。

time:定义为双精度,用来存储仿真时间。

mass:定义为双精度,用来存储部件质量。

cmd:定义为字符串,长度为100,用来存储solver命令。

(4)每段仿真循环体

图片

将一整段仿真离散为“steps”个小段,每小段仿真的定义与赋值都类似,因此,进入循环定义。

  • c_getstm(&time)

获取当前仿真时间,该命令在已在头文件slv_c_utils.h中定义,对标Fortran语言中的getstm命令,将获取到的当前仿真时间存储到time变量中,用指针的方式赋值。

  • mass = 100-0.5*time

获取当前仿真时刻部件的质量,100是初始质量(可以自定义),0.5是质量减少速率(可以自定义),此速率可以为变量,直接从Adams中调用。

  • sprint(cmd, “PART/2, MASS = %f”, mass)

定义cmd字符串,并将mass双精度数值转换为字符串,存储到cmd字符串中。

  • c_modify(cmd, &status)

调用Fortran中的modify命令,该调用在已在头文件slv_c_utils.h中定义。执行cmd所存储的命令语句,将执行状态存储到status变量中,用指针的方式赋值。status赋值为0,表明执行成功。通过该行命令,在每次仿真开始前,先调整好部件的质量。

  • c_analys("TRANSIEN", "DYN", i*stepsize, (i 1)*stepsize, iniflg, &status)

调用Fortran中的analys命令,该调用在已在头文件slv_c_utils.h中定义。执行“TRANSIEN”瞬态仿真,仿真结果存储于“DYN”文件中,仿真开始时间为“i*stepsize”,仿真结束时间为“(i 1)*stepsize”,iniflg含义见前述,将仿真执行状态存储到status变量中,用指针的方式赋值。status赋值为0,表明执行成功。
图片

 

图3 status赋值含义

  • if(status)

c_errmes(status, "Error calling ANALYS for DYN.",status, "STOP");

调用Fortran中的errmes命令,该调用在已在头文件slv_c_utils.h中定义。如果仿真执行不成功,status赋值不为0,则弹出报错信息窗口,并停止仿真。

  • c_datout(&status)

调用Fortran中的datout命令,该调用在已在头文件slv_c_utils.h中定义。输出由analys命令子程序发起的仿真的所有数据(注:该数据存储于“DYN”文件所在内存中)。并在下一步仿真开始时,自动将此输出的数据作为模型的初态,赋到模型中去。

当子程序编辑完成后,对consub.c或consub.f子程序进行编译,生成动态链接库dll文件(Adams子程序编译过程在此不赘述):

图片

 

图4 编译生成动态链接库

dll文件引用方式如下:

图片

 

图5 动态链接库调用


 4   仿真脚本编辑
consub.c或consub.f子程序通过脚本调用,仿真脚本如下:

 

CONTROL/FUN=USER(100,1000)

其中PAR[0]=100,PAR[1]=1000,即将100s的仿真分成1000段。


 5   总结
按如上流程,可以完成变质量系统的运动学仿真。

 

软件版本要求:Adams 2020FP1及更新版本。


 

仿真体系核能Adams科普理论代码&命令
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-01-06
最近编辑:2年前
MSC软件
模拟现实 交付确信
获赞 115粉丝 372文章 145课程 2
点赞
收藏
作者推荐
未登录
3条评论
仿真秀0403092704
签名征集中
1年前
图怎么加载不出来啊,可以帮我看看怎么修改cnfsub吗?价格私聊
回复
石寒ColdStone
让制造业从业者过上舒适的生活
2年前
图都加载不出来了,想看一下图片内容
回复
MBDyn
签名征集中
2年前
想了解变质量相关的子程序,能否加个联系方式,价格私聊
回复 1条回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈