许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  adams宏命令批量加约束,重复操作自动化

adams宏命令批量加约束,重复操作自动化

阅读数 4
点赞 0
article_banner


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

工程师要求:

(1)具有一定的C语言能力(入门即可),能读懂一般的循环语句;

(2)具有相当的cad建模能力

宏命令添加约束的一般步骤(以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&#​39;//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&#​39;//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&#​39;//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(&#39;CONTACT_&#​39;//ip)) & (创建接触,命名接触,一般可命名为“部件名_部件名”的样式)(该语句可参考命令导航器内相关命令) i_geometry_name = .shujia.shujia.solid102 & (第一个实体) j_geometry_name = (eval(&#39;.shujia.PART&#​39;//ip//&#39;.SOLID&#​39;//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(&#39;joint_&#​39;//ip+10)) &  i_part_name = (eval(&#39;.shujia.PART&#​39;//ip)) &  j_part_name = .shujia.shujia &  location=(eval(&#39;.shujia.PART&#​39;//ip//&#39;.cm&#​39;))(将固定副的位置放在了对应书本的质心处) variable modify variable_name=ip integer_value=(eval(ip+1)) end!while variable delete variable_name=ip

adams宏命令

小技巧:编写过程中,可以打开debug调试窗口,然后在前端窗口进行一次添加约束的操作,这样在debug中将会出现相关语句,进行选择性复制,有助于宏命令语句改正。

关于eval函数:

参考文献[1]中对eval函数做出了解释,其实它是一种通用写法,目的是让计算机识别其括弧内的内容,例如j_geometry_name = (eval(&#39;.shujia.PART&#​39;//ip//&#39;.SOLID&#​39;//ip+1)) 在分号内的属于字符串,在//内的属于变量,需要计算机识别并加以变化,

当然这个通用写法,还有很多其他用途,限于笔者水平,不再过多讲述。

参考文献: [1].MSC.Software著,邢俊文,陶永忠MSC.ADAMS/View高级培训教程,清华大学出版社


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

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

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

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空