Adams宏命令:高效添加约束的批量操作

适用情况:进行具有大量重复构件的装配体动力学仿真

宏命令添加约束的一般步骤(以X_T格式的模型为例):

1.在cad软件(建模软件)中检查部件干涉,由于Adams中的接触(contact)属于非线性计算,因此参与contact计算的模型出现干涉时,会导致计算错误等问题。这一步很重要,解决干涉问题需要一定的cad建模基础。

2.导出/导入模型时,建议选择导出/导入为X_T格式的模型文件。同时要注意,重复的零件要按照顺序选取。这样将模型导入到Adams中时,重复零件将会按照导出时选取顺序命名(PART N1至PART Nn),这为后面编写循环语句做下了铺垫。

3.编写宏命令文件。在Adams界面中,依照Tools→Macro→Edit→New...打开宏命令编写窗口。其中Edit下的modify为修改已有的宏命令文件,delete为删除已有的宏命令文件。

4.运行宏命令文件。依照Tools→Macro→Debug→单击Macro按钮→选择要调试的宏命令文件(双击或选择后单击ok)→单击Run按钮即可完成宏命令的运行。
值得注意的是,Debug这一窗口(Adams command debugger)在运行错误的宏命令时,会给出具有相当参考价值的提示,便于用户改进宏命令语句,所以在初次使用宏命令功能时应当仔细读一读软件给出的提示语句。

读会命令导航器(command navigator),利用宏命令单独创建一个约束,以接触为例。

1.正常情况下,在create contact窗口下,选取相应的两个实体,设置好接触参数,点击apply或ok即可建立一个接触。
2.打开Tools→command navigator→双击contact→双击create;在不同于前述的contact create窗口中设置对应的变量即可建立contact。
3.不难发现,在command navigator中几乎包含了adams中的所有命令与操作。因此,编写正确的宏命令语句,在极大程度上依赖于命令导航器,而命令导航器最大的作用既是帮助用户进行二次开发。
4.可以发现,需要将命令导航器下的contact create窗口中的纯白空格填补完整后才能通过该窗口建立contact。
5.又可以发现,在选择接触实体的时候,空格内语句格式为“.文件名.组件名.实体名”
6.依据操作,从导航器开始,可以得到如下句子(英文字符):

contact create contact_name = [自行命名] & i_geometry_name = (调用对象) & j_geometry_name = (调用对象) & stiffness = 1.0E+008 &
damping = 50 & exponent = 1.5 & dmax=0.1 & mu_static = 0.25  & mu_dynamic = 0.2  & stiction_transition_velocity = 0.1  & friction_transition_velocity = 10

注意!!!!!!:
这是创建一个接触约束的完整语句。

纯白空格前的名称出现空格时用下划线代替空格;语句中除了下划线以外,符号前后需要添加空格。
换行时,语句不可以符号开头。
填写数据时要注意默认单位。

那么根据命令导航器,我们可以尝试编写其他操作的宏命令:
比如创建固定约束、创建一个传感器、一个变量等:
例:创建一个固定约束
constraint create joint fixed joint_name = joint1 &
i_part_name = .shujia.PART1 &
j_part_name = .shujia.shujia &
location=0,0,0
例:创建一个传感器
executive_control create sensor sensor_name = cgq_1 &
compare = ’eq’ &
codgen = off &
bisection = off &
halt = off &
print = off &
restart = off &
return = off &
yydump = off &
error = 0.001 &
function = (eval(‘函数表达式’))
注意!!!
建立传感器时,发现只填写纯白空格的内容是不能满足用户的所有需求的,因此,填不填写灰色空格不再是可有可无的了。

关于循环语句,C语言中最为基础的便是如下几个循环结构[1]

循环结构中必不可少的既是变量,因此在编写循环结构时,首先需要创建一个变量。
基于数字的FOR/END循环:
for variable_name = ip start_value = 0 end_value = 10
 marker create marker_name = (eval('MARKER'//RTOI(ip))) &
 location = (eval(ip)),0,0
end

WHILE/END循环:
variable create variable_name = ip integer_value = 0
while condition = (ip==100)
 marker create marker_name = (eval('MARKER'//RTOI(ip))) &
 location = (eval(ip)),0,0
end!while
variable delete variable_name=ip

IF/THEN/ELSE条件结构
if condition = (ip==100)
 marker create marker_name = (eval('MARKER'//RTOI(ip))) &
 location = (eval(ip)),0,0
else
end

如何编写宏命令程序(两个例子):

例1 批量施加碰撞(contact)
假设有一书架,隔板与架体为一体,隔板上有100本书,单层摆放,需要通过动力学进行仿真。
分析:施加接触数量=所有的书与隔板接触+书与书之间接触,可以算得接触数量为100+99=199。手动添加必然繁琐且易出错,命名亦很麻烦。
假设,导入模型后,书本的部件名为PART1~PART100,对应的实体单位名称为solid2~solid101,书架部件名为shujia,书架实体名为solid102(操作时一定要注意名称大小写).
给出宏命令编写:

Defaults model model_name=.shujia(选择默认模型,为新建文件时的Model Name)
variable create variable_name=ip integer_value=1(创建变量’ip‘,初始数值为1(视情况而定),变量名自定义,while循环需要创建变量)
while condition=(ip<=100)(条件,变量小于等于98时,执行以下循环)
contact creat contact_name = (eval('CONTACT_'//ip)) & (创建接触,命名接触,一般可命名为“部件名_部件名”的样式)(该语句可参考命令导航器内相关命令)
i_geometry_name = .shujia.shujia.solid102 & (第一个实体)
j_geometry_name = (eval('.shujia.PART'//ip//'.SOLID'//ip+1)) & (第二个实体)
stiffness = 1.0E+005 & (定义必要参数,相关参数可以再进行添加)
damping = 50 &
exponent = 1.5 &
dmax=0.1 &
mu_static = 0.25  &
mu_dynamic = 0.2  &
stiction_transition_velocity = 0.1  &
friction_transition_velocity = 10
variable modify variable_name=ip integer_value=(eval(ip+1))(变量值+1,进行下一周期循环)
end!while(结束循环)
variable delete variable_name=ip(删除变量及名称)

例2批量添加固定约束
Defaults model model_name=.shujia
variable create variable_name=ip integer_value=1
while condition=(ip<=100)
constraint create joint fixed joint_name = (eval('joint_'//ip+10)) &
i_part_name = (eval('.shujia.PART'//ip)) &
j_part_name = .shujia.shujia &
location=(eval('.shujia.PART'//ip//'.cm'))(将固定副的位置放在了对应书本的质心处)
variable modify variable_name=ip integer_value=(eval(ip+1))
end!while
variable delete variable_name=ip

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空