做Adams仿真的人都知道,写宏脚本时最烦的不是逻辑,而是不知道哪个函数能实现你要的操作。比如获取文件路径、删除UDE、移动marker所属part……2026版Adams界面又更新了一轮,但这些底层命令基本没变。今天我把最常用的27个Adams命令函数整理出来,每个都配一句话解释和实际使用场景,你直接照着用就行。
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”,整个脚本白跑了。
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!"endDB_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)删除有两种方式:
循环删除特定子内容 看这个例子,删除所有以“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星号通配符非常省事,别一个一个删。
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},意思就是一个包含三个数值的列表。
获取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 = internal2026版中,内部求解器比外部快大概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_children加interface field set,三个连用就能做一个一键清空表单的功能。2026版Adams的宏语法没大改,你这套学会了,用个三五年没问题。下次卡住了,先翻翻这27个命令,八成能解。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。