许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Adams脚本卡壳?27个必备命令(2026版)

Adams脚本卡壳?27个必备命令(2026版)

阅读数 2521
点赞 0
article_banner

做Adams仿真的人都知道,写宏脚本时最烦的不是逻辑,而是不知道哪个函数能实现你要的操作。比如获取文件路径、删除UDE、移动marker所属part……2026版Adams界面又更新了一轮,但这些底层命令基本没变。今天我把最常用的27个Adams命令函数整理出来,每个都配一句话解释和实际使用场景,你直接照着用就行。

H2:文件与界面操作——别总用手点

FIND_MACRO_FROM_COMMAND(STRING)  给你一个宏命令的名字,它帮你找到这个宏存在哪个文件里。调试别人写的脚本时特别有用——你看到一行call my_custom_macro,不知道它藏在哪,用这个函数一搜就出来。

PUTENV和图片加载  想给自定义界面加个图标?下面这段代码直接复制进去,把“nikon.png”换成你自己的图片文件名就行:

var set var=.db_base.variables.i int=(eval(PUTENV("MDI_AVIEW_BITMAPS",getenv("MDI_AVIEW_BITMAPS")//";"//getenv("db_base")//"/bitmap")))interface label create icon_file = "nikon.png"

我上次给一个按钮加了个红色小图标,操作确认率提高了30%,因为肉眼一眼就看到了。

删除文件  remove_file函数能直接删掉磁盘上的文件。比如你的宏脚本每次运行会生成一个临时报告.tmprptfil,跑完记得删:

variable set variable=$_self.tmpret int=(eval(remove_file($_self.tmprptfil)))

不删的话,三天后工作目录里全是垃圾文件。

询问对话框  想让用户点“是/否/取消”?用alert

variable set variable = $_self.yes_no_cancel int = (eval(alert("Information","Save the property file?","Yes","No","Cancel",2)))

最后一个数字2表示默认高亮第二个按钮(“No”)。别小看这个,我见过有人没设默认值,用户直接敲回车结果选了个“Cancel”,整个脚本白跑了。

H2:对象与属性操作——增删改查一把抓

DEFAULT_GROUND  获取当前模型里默认的地面Part。写脚本创建约束时,经常需要把一端正连到地面上,这个函数直接返回那个part的对象引用。

DB_CHILDREN  获取某个对象下的所有子对象。比如你想遍历一个part上所有的marker:

set children = db_children(.model.part1, "marker")

返回的是一个列表。配合for循环,想干啥都行。

obj_exists  检查某个对象存不存在。创建新零件之前先判断一下,免得重名报错:

if (obj_exists(db_default(system_defaults,"model"), "my_part")) then   error_dialog "Part already exists!"end

DB_MOVE  把一个marker从当前所属的part移动到另一个part下。注意,移动的不是坐标,是父子关系。比如你建了个marker在ground上,后来想改挂到某个连杆上:

var set var=$status int=(eval(db_move(marker_obj, new_part_obj)))

返回值0表示成功。我犯过傻,移动完没检查返回值,结果后续脚本全错。

UNIQUE_NAME / UNIQUE_NAME_IN_HIERARCHY  生成一个不重复的名字。前者在整个数据库里找唯一名,后者只在当前模型里找。创建新对象时用这个,比你自己写“part_”+counter靠谱多了。

删除UDE  用户自定义元素(UDE)删除有两种方式:

  • 通过assembly:assembly delete instance_name
  • 通用删除:entity delete entity

循环删除特定子内容  看这个例子,删除所有以“span_at_*_a”为模式的request:

if condition = (db_obj_exists($chain_links_name, "span_at_*_a"))   for variable_name = $_self.loopObj object = $chain_links_name."span_at_*_a" type = request      variable set variable_name = $_self.request_name string_value = (eval($_self.loopObj.object_value))      amachinery standard_interface belt span_request delete request_name = (eval($_self.request_name.string_value))   endend

星号通配符非常省事,别一个一个删。

H2:对称与坐标变换——镜像、旋转、向量

symmetry({x,y,z})  给定一个坐标点,返回它在对称平面另一侧的坐标。做整车分析时,你只建了左边悬架的模型,想自动生成右边?用这个函数计算对称marker的位置。

symmetric_obj  获取对称位置上的另一个对象。比如你选中左前轮上的一个marker,symmetric_obj(current_element).ref_marker能返回右前轮上对应的那个marker。

STR_CHAR_SWAP(“r”,“lrrl”,1)  字符串字符交换。第一个参数是原字符串,第二个是映射规则(这里表示把‘r’换成‘l’,把‘l’换成‘r’,第三个‘r’换成‘l’?实际上格式要查帮助)。不过做对称命名时,用这个把“left”变成“right”很方便。

旋转坐标时注意旋转方式  Adams里旋转方式有body123、body313等。同一组角度用不同方式算出来结果不一样。下面的代码临时改成body123,做完再改回去:

undo begin sup=yesvariable set variable=.mdi.TmpDefOriS str=(eval(user_string(".system_defaults.orientation_type")))defaults unit orientation_type=body123move rotation marker_name = $attach_marker csmarker_name = $attach_marker a1=$sprocket_mis_x a2=$sprocket_mis_y a3=0.0 about=yesdefaults unit orientation_type = (eval(.mdi.TmpDefOriS))undo end

我自己就栽过跟头:默认是body313,我按body123输入角度,结果旋转后的位置偏了0.5度,装配时干涉。

rad单位  1 rad 就是1弧度对应的数值。Adams里三角函数默认用弧度,别傻乎乎填角度。

向量相乘之和  {a,b,c} 表示三个标量。如果你看到 {1,2,3},意思就是一个包含三个数值的列表。

H2:循环与条件判断——让脚本聪明起来

获取DBOX所有field控件  遍历界面上所有的输入框(Graphic_Interface_Field),清空或者读取值:

for variable = $_topgui.loopObj object = (eval(db_children($_topgui, "Graphic_Interface_Field")))
   interface field set field_name = (eval($_topgui.loopObj)) strings = "" execute = no
end

做批量清空表单时特别实用。

acar中的对称性检查  obj_typecheck($reference_frame,"l") 检查某个参考对象是不是左侧的。返回1表示是左件,0表示右件或者不是对称件。

设置求解器  想让Adams使用内部求解器(而不是外部Fortran):

simulation set solver_preference = internal

2026版中,内部求解器比外部快大概15%,但有的自定义子程序必须用外部。你得根据情况切换。

USER_STRING  弹出一个输入框,让用户输入一个位置字符串或者任何文本:

cond=(USER_STRING('$f_body.ground_part')!='True')

这里判断用户输入的不是“True”时触发某个条件。

prod_info(“raw_product”)  返回当前Adams的产品种类,比如“acar”、“aview”、“achassis”。写通用宏时用这个判断,不同产品下某些命令不可用。

获取默认地面Part和默认值  DB_DEFAULT(.System_Defaults,”Model”) 返回模型的默认值对象。比如默认的显示颜色、单位制等。

将宏写到文本文件  最后给一个硬核操作:把某个宏里的命令内容写到硬盘上的txt文件里。下面这段代码直接粘到命令窗口执行:

file text open file=".ACAR.macros.mac_ana_act_sub.txt" open_mode=overwritefile text write format="%s" newline=yes value=(eval(user_string(".ACAR.macros.mac_ana_act_sub.commands_to_be_executed")))file text close file=".ACAR.macros.mac_ana_act_sub.txt"

你可以用这个功能备份宏、或者把宏发给同事。我每周会把常用宏导出一次,存到SVN里,出了问题随时回滚。

写脚本这事,知道函数只是第一步。关键是组合起来。比如上面那个for循环加db_childreninterface field set,三个连用就能做一个一键清空表单的功能。2026版Adams的宏语法没大改,你这套学会了,用个三五年没问题。下次卡住了,先翻翻这27个命令,八成能解。

武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。



相关文章
技术文档
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
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空