导读:大家好,我是女工程师孙小刀。先前我在仿真秀APP公众号投稿多篇技术文章,主要集中在ADAMS软件模块及二次开发应用。如揭开Adams/Insight优化设计的神秘面纱、3个步骤 !轻松搞定ADAMS进行刚柔耦合仿真分析、活学活用ADAMS振动模块!减速器和卫星试验台仿真分析和零基础进阶Adams建模二次开发技能等,引发了读者朋友共鸣。
本文我想和读者朋友聊聊Hypermesh二次开发技术应用。看完此文,你也可以着手完成属于自己的小插件了。总之,善于使用二次开发工具可以帮助我们极大提高工作效率,减少大量重复性的工作。比起漫无目的的进行资料查找和整合,这篇文章可以帮助大家轻松入门,快速上手。学习每个二次开发的软件都是这样,一旦明白软件二次开发的构成,知晓二次开发的基础操作,剩下的语法代码就是百度的事情了。
如果你有ADAMS/HyperMesh等相关软件的二次开发需求,也可以到仿真秀官网上搜索“孙小刀”进行一对一咨询,下图是我整理的一些常用代码示例,供大家进行学习。以下是正文:
提问:如果你需要新建20个component,且这20个component都具有不同的厚度,需要赋予不同的属性,这个时候,你是不是就开始依次新建component,新建property,并依次把property赋予给component呢?这种方法虽然可以实现效果但是却显得建模效率有点低。
对于我来说,如果一个重复性的工作超过5次,我往往会失去耐心并开始寻找提高效率的方法,而二次开发在仿真工程师的眼里来说是必不可少的技能,每一个软件都有二次开发的手段和方法,虽然仿真工程师并不是程序员,但是学会一些二次开发技巧,不仅会提高个人能力,还会使我们的工作事半功倍,极大提高工作效率。
这篇文章主要针对二次开发小白,在这里,你不需要擅长编程语法,也不需要熟读语法规则,就可以直接上手,跟着文章的步骤依次进行,就可以实现一个完整的代码片段,缩短你的工作时间,提高建模效率。
比起枯燥的语法结构,我更喜欢直接上手操作。本篇文章会先介绍hypermesh二次开发的工具以及简单的语法知识,并不需要读者掌握,只做简单的科普。紧接着,将正式介绍二次开发的使用过程,会分成三个部分,分别是获取—书写—运行代码段,手把手教你从无到有编写hypermesh二次开发代码。
第一部分:工具及语法介绍
1、TCL程序语言
hypermesh最常见的是通过TCL程序设计来实现二次开发,当然,hypermesh也支持Python和C++二次开发,这两种就比较适用于更为复杂的模型建模了。为了使读者更容易上手操作,本文主要是通过TCL程序设计来实现二次开发。
TCL(Tool Command Language)是一种高级的、动态的脚本语言,相比于其它的程序设计语言,它更加灵活和简洁,同时也支持和C/C++以及Python进行联动。TCL既可以作为独立应用程序使用,也能嵌入到其它应用软件中。对于仅仅想开发一个简单小工具的初学者来说,最便捷的是,你无需下载任何软件包,仅用“记事本”工具,就可以完成代码敲写和调试过程。
2、Hypermesh语法结构
TCL命令为“面向对象”的程序设计语言,所以一句完整的代码离不开一个可应用该命令的对象。Hypermesh二次开发的TCL语法结构如下所示:
{object_handle_name} {command} {command parameter(s)}
下面对Hypermesh的命令类型做简单介绍,方便读者后续自己辨识代码。
Hypermesh的Tcl命令可以分为四类,这些命令主要用于调取Hypermesh的数据库。
(1)Handle Commands:句柄命令主要是为了获得对象的访问权限,通常以“Get”为前缀,“Handle”为后缀。
hwi GetSessionHandle sess1
(2)Operation Commands:执行操作命令主要是对hypermesh下达某项指令
sess1 CaptureScreen “jpeg” “myimage jpg”
(3)Property Commands Query operations:获取对象属性命令,通常是以“get”为前缀返回模型的属性,以“set”为前缀修改对象的属性。
page1 GetTitle
page1 SetTitle "my page"
(4)List Commands:列表命令,返回一个值列表,命令中通常包含“get”和“list”两个字段。
这些是软件常用的一些语法结构,如果提前了解,有助于我们看懂代码并灵活应用。
第二部分:着手行动
1、获取代码段
(1)一个重要的文件:command.tcl
command.tcl文件记录了你的所有操作,无论是旋转还是平移,或者是你的每一步建模操作,都会被记录在这个文件里面。也就意味着这个文件包含了“现成”的代码段,如果只是简单的实现某些特定功能,直接复 制粘贴上面的代码段就可以。
command.tcl文件的打开方式是:Edit—Command File,本人使用的是Hypermnesh的2019版本,如果你使用的是不同的版本,那么代码段会有少许差别,不过整体代码书写思路是一样的。
(2)使用command.tcl文件
由于这个文件属于“记录型”文件,所以在使用过程中,我们需要先新建一个component,让软件学会并记录下用户的操作。之后打开command.tcl文件,就可以根据简单的英文,识别到对应的代码含义。
如下所示,为截取到的创建component的代码片段
*createentity comps name=component1
*retainmarkselections 1
*startnotehistorystate {Renamed component from "component1" to "my_comp"}
*renamecollector components "component1" "my_comp"
*retainmarkselections 0
*endnotehistorystate {Renamed component from "component1" to "my_comp"}
(3)如何辨认代码段
其实辨认tcl代码段还是比较简单的,比如第一句话就代表了用户需要创建一个component,并且component的名字自动设置成component1;第二句话中包含了“mark”“selection”它的意思是将用户的选择进行标记;第三句话中的“renamed”代表了将component进行重新命名,而“startnotehistorystate”和“endnotehistorystate”则代表了重命名component的过程,并以start和end为开始和结束。大家可以试着把创建材料、属性、为component赋属性等代码段进行截取并尝试解读。
2、书写代码段
(1)改编代码段
以新建component为例,其实聪明的小伙伴已经发现了,如果使用command.tcl自带的代码段虽然可以实现特定功能,但是这段代码会略显冗长,因为我们想实现的功能仅仅只是新建component,但是代码段却包含了新建、重命名两个过程。如果我们将代码段进行精简,是不是可以直接写成:
*createentity comps name=”my_comp”
仅仅这一句话就可以实现新建component的目的了,这个就是在现有的代码片段基础上进行改编,使你的代码更加精简。更深层次的说,由于hypermesh在每次创建特定的对象时,都包含自己独有的自动命名方式,如果我们的代码通篇都是繁琐的语句,会造成代码的不流畅以及hypermesh无法识别并报错,所以简化代码段也是一个重要的过程。
(2)完善代码段
我们按照同样的方式,改编并生成其它步骤的代码段,大家可以亲自尝试一下,会发现其中的乐趣。
①以下这段代码是创建材料并设置材料参数:
*createentity mats cardimage=MAT1 name="comp_mat"
*setvalue mats id=1 STATUS=1 1=210000
*setvalue mats id=1 STATUS=1 3=0.3
*setvalue mats id=1 STATUS=1 4=7.85e-009
②以下这段代码为创建属性,类型为PSHELL,片体厚度为1mm:
*createentity props cardimage=PSHELL name="comp_prop"
*setvalue props id=1 materialid={mats 1}
*setvalue props id=1 STATUS=1 95=1
③以下这段代码是将属性赋予到component上:
*setvalue comps id=1 propertyid={props 1}
说明:
①setvalue相当于属性参数设置的一个标题,这个关键字告诉软件,我们要开始设置对象属性了。
②hypermesh的每个对象都有一个ID号,这个ID号就像一个身份证,即使hypermesh并不知道他的名字,也不知道他的颜色等等情况,就可以一一对应到该对象。值得注意的是ID号是根据建模顺序创建的,即使用户在后期更改了ID号,软件也会按照原先的ID进行识别。
③TCL的语法的注释是“#”,如果你拿到一段代码,不知道某句话是否是有用的,你可以将这句话直接进行注释并运行,如果没有报错,证明这句话仅仅只是说明、更新或者鼠标操作等。
(3)循环语句的应用
通过上面内容的介绍,想必大家已经可以实现一套完整的创建comp并赋材料属性的过程了。但回归文章一开始的问题,如果想要创建20个comp并赋予不同的属性,那又该如何操作呢?
在学习每个程序语言的过程中,条件语句和循环语句是最重要的两个内容,因为我们的目的是为了提高效率,减少重复性的工作,学会巧妙的使用这些语法就显得很重要了。
现在我们要实现20个component的创建,所以需要把创建component的过程实现20次,可以用到循环语句,循环语句的框架如下:
for {set i 1} {$i<=20} {incr i} {……}
注释:i是整个循环过程中的变量,使用set来创建该变量,如果需要引用变量,则要使用符号“$”,”incr i”代表变量的递增。下面我们把循环创建20个component的方法进行补充:
for {set i 1} {$i<=20} {incr i} {
*createentity comps name="my_comp$i"}
可以看到软件会根据我们的命名自动创建20个component。
接下来我们依次创建20个材料属性,每一个属性的厚度依次递增,这里需要注意的是,我把属性厚度变成了一个有规律可循的值,所以才可以用到循环语句,如果各个component的厚度并没有特定的规律,则不能使用循环语句赋厚度,但是可以简单的创建property。同样根据上节讲到的属性创建方法进行改编,下面的代码段为创建材料属性,并将材料厚度从1开始依次叠加:
for {set i 1} {$i<=20} {incr i} {
*createentity props cardimage=PSHELL name="comp_prop$i"
*setvalue props id=$i materialid={mats 1}
*setvalue props id=$i STATUS=1 95=$i}
接下来,我们需要将不同的材料属性赋予对应的component上面,同样道理,我们将代码段进行编写如下所示:
for {set i 1} {$i<=20} {incr i} {
*setvalue comps id=$i propertyid={props $i}}
3、运行代码段
根据前面的学习,我们已经可以编写出自己需要的简单小代码了,那么我们改如何运行已经写好的代码,让hypermesh听我们的命令呢?
运行代码的小按钮从View—toolbars—scripting调取,这样就会在我们的工具栏上方出现一系列的小图标,选择“Run Tcl/Tk Script”按钮,之后选择我们的代码文件就可以运行了。如果中途遇到报错,可以直接关闭报错的窗口并检查代码段。
第三部分:完整代码展示
for {set i 1} {$i<=20} {incr i} {
*createentity comps name="my_comp$i"}
*createentity mats cardimage=MAT1 name="comp_mat"
*setvalue mats id=1 STATUS=1 1=210000
*setvalue mats id=1 STATUS=1 3=0.3
*setvalue mats id=1 STATUS=1 4=7.85e-009
for {set i 1} {$i<=20} {incr i} {
*createentity props cardimage=PSHELL name="comp_prop$i"
*setvalue props id=$i materialid={mats 1}
*setvalue props id=$i STATUS=1 95=$i}
for {set i 1} {$i<=20} {incr i} {
*setvalue comps id=$i propertyid={props $i}}
电子产品跌落全流程二次开发
扫码查看完整课程
来源:仿真秀App