仿真软件 二次开发目前着手解决,标准化,重复性工作,时间成本,经验固化在软件上等几方面,学习仿真软件的二次开发,可以节约仿真的时间及人力成本,并且不容易触犯低级错误。
目前Hyperworks旗下具有多款产品,可进行前处理,求解计算,数据处理 ,在电子电器,机械汽车,航空航天 ,医疗器械等各行各业仿真均有使用。
我目前使用的前处理软件为hypermesh 和simlab ,均属于hyperworks旗下的产品,
后处理软件使用hypergraph 或数据处理软件(如Origin,matlab等)或者使用python制图。
Hypermesh二次开发语言使用tcl/tk, simlab二次开发语言使用python。
1、手工知道如何在hypermesh中操作;
2、获取操作的hypermesh中的核心代码API
3、通过tcl 语法将数据及api在hypermesh环境下运行
1) 在hypermesh下方编辑:Vier --->Tcl Console
2) compose编辑环境
Compose是hyperworks旗下的一款软件\可以运行tcl、python,支持tcl关键字,支持Python(包括numpy等包),建议安装此软件进行练习
Hypermesh中API分为四类
1、Tcl GUI Commands
2、Tcl Modify Commands : 在command文件中可以实时查看
3、Tcl Query Commands :只能在help文件中查看
4、Utility Menu Commands
在hypermesh中进行二次开发,并不需要特别精通Tcl/Tk语法,只需学习基础内容就可以进行二次开发。
1)命令:
set a 12 ;
每条命令包含一个或多个单词,第一个单词是命令名,其他单词是参数,
2)命令替换
第一种形式使用$,将tcl 中的变量值a插入到单词中
set a 10
puts $a
第二种形式,使用[]将整个表达式 替换
set a 10
set b [expr {$a+1}]
puts $b
第三种替换是\替换
在插入特殊字符时,使用\进行替换,如\$,\n,\t,\\
最后一个,反斜杠加空格,会替换为一个空格字符,当写到很长的语句时,可以使用
set x "Tom is a boy , \
Lily is a girl"
>> Tom is a boy , Lily is a girl
3) 引用:双引号引用和花括号引用
一个是双引号引用
set a 10
set c "hyperwoks $a"
>> hyperwoks $10
一个是{}引用,在{}中的字符全部不会转义
set a 10
set c {hyperwoks $a}
>> hyperwoks $a
1)参数展开
file delete [glob *.o] 会因为找不到glob *.o而报错,
需要写成file delete {*} [glob *.o] 等同于 file delete a.o b.o c.o
参数展开在后续的二次开发中会使用的到。
如果一个单词以字符串{*}开头,之后紧接着非空白字符,Tc1 会移除开头的{*},把该单词的剩余部分作为含有单词分隔符的语句进行解析与替换。
也可以使用eval进行二次解释
eval file delete [glob *.o]
变量分为两种,简单变量和数组变量
1)简单变量,使用set定义
set a {Four score and seven years ago}
>>Four score and seven years ago
set b 12.6
>>12.6
2) unset varname 删除set指定的变量
3)append Varname ?value? 在字符串中增加值
set a "hello"
append a "world"
>>helloworld
4) incr varname ?increment? 增加数值,可以指定增加值,默认为1
set b 10
set c [incr b]
>>11
第二种变量类型为数组
set month(one) "January"
set month(two) "February"
set month(three) "March"
puts $month(one)
>> January
5) array exists arrayName
返回一个布尔型值,反映名为arravName 的数组是否存在
6)array get month 返回包含数组内容的字典
>> three March two February one January
7)array names month 返回包含数字的元素名列表
>> three two one
8) array size month 查询数组的个数
>>3
9) set dict1 [array get month]
# puts $dict1
array set arr1 $dict1
puts [array names arr1]
数组和字典的相互转化
10)array unset varname
移除数组变量
表达式命令 expr args ?args?
set a 10
set b 5
set c [expr {$a+$b+3}]
下列的字符串操作有比较多的命令,就不举例说明了,
后续使用中就会理解,比较简单
1)string compare ?-nocase? ?-lengthnum? string1 string2
返回1,0,1,两个字符串相等返回0,如果string1在字典中先于string2,返回-1,
2)string equal ?-nocase? ?-length num? string1 string2
返回1和0,两个字符串相同返回1,不相等返回0
3)string first string1 string2 ?startIndex?
在string2中第一次出现与string1完全相同的子字符串的开头字符的索引
4)string index string charIndex
按照索引取出字符串
5)string last string1 string2 ?lastIndex?
在string2中最右边出现与string1完全相同的子字符串的开头字符的索引
6)string length string
返回字符串的长度
7)string map ?-nocase? mapping string
按照mapping 规则,改变string中的值
8)string match ?-nocase? pattern string
按照pattern中的匹配规则,匹配字符串
9)string range string first last
按照范围取出字符串
10)string repeat string count
返回重复count次数的字符串
11)string replace string first last ?newstring?
将string中first到last的字符串替换为newstring
12)string tolower string ?first? ?last?
返回string字符串,将所有的大写字母替换为小些字母
13)string toupper string ?first? ?last?
返回string字符串,将所有的小写字母替换为大些字母
14)string trim string ?chars?
去除首尾的指定字符
15)string trimleft string ?chars?
去除开头的指定字符
16)string trimright string ?chars?
去除结尾的指定字符
17)string wordend string charIndex
返回string中包含charindex字符的词的结尾字符索引加1
18)string wordstart string charIndex
返回string中包含charindex字符的词的开头字符索引值
还有两种比较常用的命令
Format命令与regexp命令,下期详细介绍
format format ?value calue?
regexp ?option? exp string ?matchvar? ?subvar?
regsub ?option? exp string subvar ?varname?