找回密码
 注册
Simdroid-非首页
查看: 1085|回复: 24

【分享】如何使用Macro

[复制链接]
发表于 2004-4-1 10:33:49 | 显示全部楼层 |阅读模式 来自 西安交通大学
您可以使用宏(Macro)自动完成一些重复性的过程,您可以记录、编辑、存储或执行宏。本节将解释如何生成并管理宏,包括:
☆ ADAMS/View宏介绍
☆ 在宏中如何使用参数
☆ 如何生成宏
☆ 如何删除宏
☆ 如何存储宏
☆ 如何调试宏
☆ 如何执行宏
☆ 宏的几个练习
☆ 编辑宏的要点
  
☆ ADAMS/View宏介绍
宏,简单说来,是您生成的一个命令,它可以完成ADAMS/View一系列的命令。您按照ADAMS/View的命令格式来编写宏,ADAMS/View像处理其它命令一样处理宏,您可在命令窗口中执行宏,也可以在宏中使用其它的宏或在您自己的用户化菜单、对话窗和按钮下调用宏。
在宏中您可以使用参数。这有助于您在每次调用宏时加上数据,宏在执行时自动进行替换。
使用宏您可以:
自动完成重复性的过程;
开发并扩展ADAMS/View的基本功能;
自动生成整个模型;
迅速的建立一个机构的多种变形。
为方便您使用宏,ADAMS/View提供一套工具,可以帮助您记录、执行和测试宏和命令文件。
  
☆ 在宏中如何使用参数
宏在执行时将您提供的信息进行参数替换。您可在宏执行的命令文字中加入参数。参数用$加上参数的名字定义(具体格式将在后面详细介绍)。一个宏中您包含很多参数,也可以一个参数多次使用。
当您生成宏时,ADAMS/View扫描全部命令行,标识出所有的参数。执行宏时,您需要提供所有的参数的值,否则将用缺省值替换。下面先看一个宏的例子。
在这个例子中,生成了一个名为icon_size的宏,宏中包含一个参数size,其相应命令如下:
constraint attributes constraint_name=.* size_of_icons = $size
force attributes force_name=.* size_of_icons = $size
这样当您输入命令:
icon_size size=1.5
ADAMS/View则执行如下命令:
    constraint attributes constraint_name=.* size_of_icons = 1.5
force attributes force_name=.* size_of_icons = 1.5
  
参数值的扩展
在某种情况下,ADAMS/View执行命令行进行参数替换时首先进行其格式的修改或扩展。特别的是,ADAMS/View执行宏时不进行单位的转换。它将您输入的值直接传给命令行,通常在命令行中进行单位的转换。
ADAMS/View在执行宏时,将数据库对象的名字扩展为全名,使用“。”分割开来,使用“。”也可以使您直接访问表达式中数据对象的值。例如:下面为包含参数name的宏lpart.。
    List_info part part_name=$name
当您输入如下命令:lpart name=left_wheel
ADAMS/View用part 的全名.model_1.left_wheel而不是left_wheel替换参数$name,并执行:
    List_info part part_name=.model_1.left_wheel
参数的一般格式
参数的一般格式为:$’name:q1:q2:q3…’,其中:
name:参数的名称;
q1、q2、q3:该参数的一个或几个特性;
单引号和特性是可选的,因此参数的格式可能有如下几种形式:
$name
$’name’
$name:q1:q2:q3…
$’name:q1:q2:q3…’。
参数的命名规则
参数的名字必须以字母开头,其后可以是字母、数字或下划线(_),参数的名称与大小写无关,是大小写不敏感的。在参数的定义中,单引号的作用是将参数与ADAMS/View的命令行明确分开。正常情况下,您用空格、逗号、冒号或其他的字符表示参数结束,但有时您可能想加字符串在参数的后面,如您想加”_1”在参数$part的后面,那么您应写作$’part’_1,而不是$part_1,因为$part_1为定义另外新的参数了。
参数的特性及格式
在宏中参数第一次出现时定义其特性,特性是可选的并且在参数首次出现时使用。定义参数有如下四种特性可以定义:
Type(类型)
Range(范围)
Count(数量)
Defaults(缺省值)
您可以任意定义参数的特性,进行任意组合,也可以按任何顺序,您不必定义所有的特性,如果您重复定义的话,ADAMS/View会按最后一次定义的为准。定义特性没有大小写区分。下表为定义特性的几个例子。
表6 定义特性的示例
特性(qualifiers)  特性的含义
$parts:t=part:c=2  两个已存在可动部件的名字
$NSpokes:T=INTEGER:GE=3E=8=3  界于3和8之间缺省值为3的整数
$infile:t=file(*.dat)  (输入)文件的名字,搜索时只列出以.dat为后缀的相关文件
  
下面分别介绍四种特性:
Type
Type指定参数的类型,用户在调用宏时必须按相应的类型输入其数值。定义Type的格式如下:
T = type
T = type (additional data)
其中:
type可以是基本类型(Basic type),也可以是数据库对象(database object type)或数据库对象分类(database object class type);
Additional data是可选的,对某些类型而言,则是必须的,如List。
基本类型(Basic type)包括:
real、integer、location、orientation、string、function、list(str1,str2,str3…)、file(path wildcard)
其中:list类型必须包括允许值的列表;而file类型后面可以加通配符,也可以加路径,如果您不指定的话,文件搜索则列出所有文件供选择。
数据库对象(database object type)包括:
指定参数为某个数据库对象类型意味着用户必须输入已存在的对象的名字,但您可以在对象类型前加上前缀“new_“,表示用户必须输入该类型一个新的名字。
与file参数类型相似,在数据库对象类型后面也可以加上缺省的通配符,如marker(left_*)。数据库导航器会将此通配符做为该参数的搜索模式,若不指定则列出所有适合的对象。您可以使用ADAMS/View函数发生器观察一下ADAMS/View中所支持的数据库对象的种类。其过程如下:   
1、  在Tools菜单下选择Function Builder;
2、  从可选的菜单中选择Misc. Functions;
3、  从可选的菜单列表中选择SELECT_TYPE;
4、  选择Assist;
5、  在Assist dialog box中输入all并选择OK;
6、  选择Evaluate,即出现所有数据库对象的列表了。
数据库对象分类(database object class type)包括:
ADAMS_Output_Files                      Body
Constraint                                 Data_Element
Equation                                  Expression_primitive
Feature                                   Force
Frame_Display                             Function_Container
Geometry l                                 Graphic_User_Interface
Higher_Pair_Contact                        Measure
Measure_Vector                            Modeling
Old_Graphic_User_Interface                 Optimization_Function
Plotting                                    Point_to_Point_Force
Position                                    Reference_Frame
Runtime_Measure                           Solid_Geometry
Triad                                       Variable_Class
Wire_Geometry
  
Range
特性Range指定参数允许的最大或最小值。Range只适合于数值型参数,其格式如表7 所示。
表7 参数范围特性的格式
格式  格式的含义
GT=r  大于r
GE=r  大于等于r
LT=r  小于r
LE=r  小于等于r
  
Count
Count特性指定参数所需数据的个数,其格式如表8 所示。
表8 参数个数特性的格式
格式  格式的含义
C=0  一个或多个
C=n  N个
C=n,0  N个或多个
C=n,m  N到M之间的数
  
Default
参数的缺省值是可选的。如果参数没有指定缺省值,用户在执行宏时则必须输入一个值。定义参数的缺省值有三种方式:
Constant:参数可选,调用宏时,用户如不提供数据,则用其缺省值;
Updated:参数可选,调用宏时,用户如不提供数据,则用最近一次使用的值;如没有,则用其缺省值;
Database object:对于数据库对象而言,其缺省值是自动匹配的。如其类型是已存在数据库对象,则其缺省值为当前缺省对象,如是新的数据库对象,则会自动生成那种类型的数据库对象。其格式如表9 所示。
表9 缺省特性的格式
格式  含义
D=value  缺省值恒定
U=value  缺省值更新
A  新的或已存在数据库对象
  
参数的缺省设置
在命令行中参数的第一次出现即定义该参数,即使它出现在注释行中;如果第一次出现时,参数后有特性的设置,即直接确定该参数的特性;如没有,参数的特性则由其是否在合法的命令行中”=”号的后面决定,若是,则直接继承等号后面参数所需要的参数的特性,包括类型、范围、个数及缺省值,否则的话,ADAMS/View则假定其为字符串型参数。
注:虽然ADAMS/View可以自动确定参数的特性,但推荐您在建立宏时,先在宏的起始部分的注释行中明确定义每个参数。
下面是定义宏的一个例子,注意其中参数的特性。
! Parameter $text is a string.
! $numbers:t=integer:c=0:gt=0
list_info part part_name=$part_1, $part_2
list_info part part_name=$part_3:t=part, $part_4:t=part
  
☆ 如何生成宏
有四种方式生成宏:
1、  交互式记录方式;
2、  在宏编辑器直接输入宏要执行的命令。使用宏编辑器也可以修改已存在的宏;
3、  读入一个包含宏要执行的命令的ADAMS/View命令文件;
4、  使用命令导航器或命令窗口直接输入要生成宏的命令。
对于简单的宏而言,交互式记录方式最好;而对于复杂的宏而言,读入一个包含宏要执行的命令的ADAMS/View命令文件的方式最好,因为这样的话还可以指定与该宏相关的帮助文件或帮助性的字符串;对于已有的宏,则使用宏编辑器较好,若使用宏编辑器生成宏,则必须输入要执行宏所用的命令。
您如果通过命令导航器执行宏时,ADAMS/View自动生成一个对话窗,方便您输入参数等。
☆ 交互式记录宏
1、  在Tools菜单下选择Macro然后选择Record/Replay,然后选择Record Start;
2、  执行您想加在该宏中的操作;
3、  要停止记录宏,从Tools菜单下选择Macro,然后选择Record/Replay,在选择Record Stop;
4、  要回放您刚才所记录的宏,在Tools菜单下选择Macro,然后选择Record/Replay,再选择Execute Recorded Macro;
5、  要存储所记录的宏,在Tools菜单下选择Macro然后选择Record/Replay,再选择Write Recorded Macro即可。ADAMS/View将该宏存储为macro.cmd,如果该文件存在,ADAMS/View则询问是否覆盖等。
☆ 使用宏编辑器编辑或生成宏
您可使用宏编辑器编辑您记录的或通过文件读进来的宏,您也可以使用宏编辑器生成一个宏。
1、  在Tools菜单下,选择Macro,然后选择Edit,然后选择New或Modify;
2、  如果您选择Modify,则数据库导航器出现,选择一个您要编辑修改的宏,则宏编辑器出现,如下图所示,如果您选择的是修改宏,那麽在宏的名字项会出现该宏的名字。
   
3、  如果您要生成宏,则在宏编辑器中宏的名称项输入您要生成的宏的名字;
4、  在命令项输入您要执行该宏所使用的命令,如要用该宏的名字,则选择Use Macro Name
注:您输入的命令在ADAMS/View中必须是唯一的,您不能重新定义已有的命令,例如:您可以输入MARKER GENERATE,但不能输入MARKER CREATE,因为marker create已经存在,故是非法的。
5、  指定该宏是否可以包含在一个Undo命令中,注意如果使用的话,意味着很方便Undo,但同时要消耗部分内存,还要减慢宏执行的速度;
6、  在命令行窗口输入宏要执行的命令,然后选择OK即可。
  
从包含宏要执行的命令的文件中生成宏
您可以读入一个包含宏要执行的命令的ADAMS/View命令文件生成宏,同时加上与宏有关的帮助文件或字符串。您要读的CMD文件可以包含标准的ADAMS/View的命令行,也可以包含镶嵌在命令行中的参数和在文件的起始部分的特殊的注释行,文件中有特殊含义的注释行的涵义为这些注释行可以通过Keyword的方式为Read命令所识别,这些Keyword在宏读入对话窗中可以发现,如执行宏所用的命令等等。注意:这些注释行必须放在命令文件的起始部分,并且必须包含下面的保留参数中的一个,包括:
USER_ENTERED_COMMAND,WRAP_IN_UNDO,HELP_STRING,HELP_FILE等再接上相应的合适的值。这些Keyword必须紧接着!的后面且为大写的;输入的值不用等号或引号,ADAMS/View会按缺省方式自动处理,下面是一个使用Keyword的示例。
  
!USER_ENTERED_COMMAND lmark
!HELP_STRING This command lists information on all markers in your database.
list_info marker marker_name=.*
  
如果您在宏读入的对话窗再一次指定这些特定参数,ADAMS/View以对话窗为准。
要读入一个命令文件生成宏:
1、  在Tools菜单下选择Macro,然后选择Read,宏读入菜单显示;
2、  在Macro Name项内输入ADAMS/View存储在当前数据库中宏的名字;
3、  在File Name项输入您要读入的文件的名字;
4、  在User Entered Command项内,输入执行该宏的命令;
5、  指定是否可以用一个Undo命令undo全部宏的命令;
6、  指定帮助文件的名字或帮助字符串的内容;
7、  确定是否生成相应的对话窗;
8、  选择OK。
  
如何删除宏?
要删除宏,可以:
1、  首先清除所有的选择,在ADAMS/View的视窗区双击;
2、  在Edit菜单下,选择Delete;数据库导航器出现。
3、  选择您要删除的宏;
4、  选择OK。
  
如何调试宏
ADAMS/View提供一个工具,帮助您对宏进行调试,您可以用来:
1、  查看宏及其输出;
2、  单步执行每一个命令;
3、  打印宏
启动宏调试程序:
在Tools菜单下,选择Macro,然后再选择Debug即可。
  
如何执行宏
您生成宏后,可以执行此宏了。您可在:
1、  在命令窗口中输入;
2、  通过命令导航器执行宏,直接在弹出的对话窗中输入需要的参数;
3、  通过用户化的对话窗执行宏。
ADAMS/View对宏像其他的命令一样。
  
如何存储宏
当您存储数据文件时,ADAMS/View将您所编写的宏都存储在该文件中。同时您也可以将宏存储成CMD文件,并与他人共享。要存储宏,您可以:
1、  在Tools菜单下,选择Macro,然后选择Write;对话窗Macro Write出现。
2、  输入宏的名字;
3、  输入生成文件的名字
4、  选择OK即可。
宏的几个练习
下面是使用ADAMS/View宏的几个简单的例子
例1:
下面的例子为自动建立一个MARKER,其位置在已经存在的两个MARKER连线的中间位置上,其方向与绝对坐标系的方向一致。
! $FIRST_MARKER: T=marker
! $SECOND_MARKER: T=marker
! $NEW_MARKER_NAME: T=new_marker
!.
marker create marker_name=$NEW_MARKER_NAME &
location = (( ($FIRST_MARKER.loc_x)+($SECOND_MARKER.loc_x) )/2 ), &
(( ($FIRST_MARKER.loc_y)+($SECOND_MARKER.loc_y) )/2 ), &
(( ($FIRST_MARKER.loc_z)+($SECOND_MARKER.loc_z) )/2 ) &
orientation = 0,0,0 &
relative_to = ground
  
例2:
下面的例子为自动建立一个MARKER,其位置在已经存在的两个MARKER连线的中间位置上,其Z轴方向与MARKER1到MARKER2的连线方向一致。
!$FIRST_MARKER: T=marker
!$SECOND_MARKER: T=marker
! $NEW_MARKER_NAME: T=new_marker
!
defaults orient_axis_and_plane axis_and_plane_setting=z_axis_zx_plane
!
marker create marker_name=$NEW_MARKER_NAME &
location = ((($FIRST_MARKER.loc_x)+($SECOND_MARKER.loc_x))/2), &
((($FIRST_MARKER.loc_y)+($SECOND_MARKER.loc_y))/2), &
((($FIRST_MARKER.loc_z)+($SECOND_MARKER.loc_z))/2) &
along_axis = $FIRST_MARKER, $SECOND_MARKER &
relative_to = ground
  
例3:
下面宏的例子为从您指定的已存在的曲线上生成一拉伸体,执行宏时,您须给定一个实数值作为拉伸体的长度,同时还要指定一个已存在的MARKER,其Z轴方向为将要拉伸的方向。该宏自动将该拉伸体定义为曲线所属的PART上,因此使用函数UNIQUE_NAME(“EXT”)使其名字唯一,如EXT_1、EXT_2等。
! $curve_to_extrude: T=geometry
! $extrusion_length: T=real
! $along_Z_axis_of_marker: T=marker
defaults model part_name=($curve_to_extrude.parent)
!
geometry create shape extrusion &
extrusion_name=(UNIQUE_NAME("EXT")) &
profile_curve=$curve_to_extrude &
length_along_z_axis=$extrusion_length &
reference_marker=$along_Z_axis_of_marker &
relative_to=ground
  
例4:
与例3的区别在于:该宏在执行时所生成的拉伸体拉伸的方向与曲线的参考MARKER的Z轴方向一致。
! $curve_to_extrude: T=geometry
! $extrusion_length: T=real
!
defaults model part_name=($curve_to_extrude.parent)
!
geometry create shape extrusion &
extrusion_name=(UNIQUE_NAME("EXT")) &
profile_curve=$curve_to_extrude &
length_along_z_axis=$extrusion_length &
reference_marker=($curve_to_extrude.ref_marker_names) &
relative_to=ground
  
编辑宏的要点
宏是ADAMS软件中非常有用的一个工具,要定义宏可注意以下几点:
1、  命令执行时的响应及屏幕刷新:
当ADAMS/View执行宏,每次都更新模型窗口。如果您是在命令窗口中执行宏,缺省的方式为:将执行宏的信息显示在命令信息窗口内,这一点对于调试宏非常有用。但是这将导致命令执行变慢,因此当您编辑的宏正确工作后,您可以在宏的前面加上下面的命令将其关掉。
defaults command_file echo=off update=off
然后再其后面加上:
defaults command_file echo=off update=on
如果您从对话窗或菜单中执行宏,ADAMS/View,缺省的方式为:只更新屏幕,而不更新命令窗口。
2、  使用判断和循环:
ADAMS/View命令语言中包含生成条件判断和循环的命令,您会发现再写宏时非常有用。其格式为:
FOR/END
WHILE/END
CONTINUE
BREAK
IF/ELSE/ELSEIF/END
RETURN
具体内容请查阅ADAMS手册<<Customizing ADAMS/View>> P81。
3、  输出文本文件:
在生成的宏中要输出ASCII码文件,可以使用下面的命令:
file text write=……
该命令从ADAMS/View中输出信息到文本文件中。您可以控制输出的格式,使用数据库表达式,您可以从ADAMS/View中写出任何模型或仿真的数据。
4、  执行系统命令:  
您可以使用ADAMS/View命令System执行系统命令,其格式为:
system command_text=……
这可以在生成的宏中调用外部应用程序。
5、  保证在ADAMS的模型中名字和ID号唯一:
如果您的宏生成新的实体对象,您必须特别注意使其名字和ID号唯一,否着的话,当您再次执行该宏时就会报错,因为您模型中已经存在该名字的实体了。要避免这种问题,一种方法是:生成字符串参数,并用它生成其他所有的名字。例如:要生成三张曲线图,用字符串参数$pname以生成$’pname’_1、$’pname’_2、$’pname’_3,每次您执行该宏时,输入一个新的字符串,即可保证名字唯一。
您也可以直接赋一个数字作为ADAMS的ID号,但通常的方式是将该项置空,由ADAMS自动赋值。如果您不指定ID号,ADAMS缺省设置为0,下次ADAMS在写ADAMS/Solver文件时,ADAMS/View自动将0替换为唯一的非零的值。
6、在宏中包含“$“
通常来讲,ADAMS/View将在参数前的”$”当作参数的标识,您可以在$的前面加上反斜线”\”,ADAMS/View删除”\”,并将“$”作为宏中的文本的一部分了。
7、  提高表达式中对象的识别速度
当ADAMS/View执行宏中命令的表达式时,需要在整个数据库中进行搜索,这将大大降低执行的速度,因此建议使用全名,如.MOD1.DV1,而不是DV1。

评分

1

查看全部评分

发表于 2004-4-5 19:39:27 | 显示全部楼层 来自 吉林吉林

回复: 【分享】如何使用Macro

Simdroid开发平台
好东西啊,怎么没人顶啊!!!
发表于 2004-4-7 14:58:41 | 显示全部楼层 来自 湖南长沙

回复: 【分享】如何使用Macro

redland 的介绍真好,很适用我这种对宏命令一知半解的人.
发表于 2004-4-7 15:25:57 | 显示全部楼层 来自 山西太原

回复: 【分享】如何使用Macro

这是ADAMS12中的help的MACRO英文翻译,请问redland又其他的MACRO帮助文档吗?有的话请共享,谢谢!!
发表于 2004-4-7 17:51:21 | 显示全部楼层 来自 内蒙古呼和浩特

回复: 【分享】如何使用Macro

非常感谢redland建议班主给加分,同时也希望大家有好东东多多上传
发表于 2004-4-21 17:08:22 | 显示全部楼层 来自 北京化工大学

回复: 【分享】如何使用Macro

good
发表于 2007-10-27 13:46:07 | 显示全部楼层 来自 浙江温州
回复 不支持

使用道具 举报

发表于 2007-10-27 13:47:14 | 显示全部楼层 来自 浙江温州
原帖由 xiaotie 于 2007-10-27 13:46 发表
http://www.simwe.com/forum/thread-799883-1-1.html

帮帮忙???
回复 不支持

使用道具 举报

发表于 2007-10-30 09:50:02 | 显示全部楼层 来自 浙江温州
原帖由 xiaotie 于 2007-10-27 13:46 发表
http://www.simwe.com/forum/thread-799883-1-1.html

帮帮忙???
回复 不支持

使用道具 举报

发表于 2007-10-30 12:31:04 | 显示全部楼层 来自 LAN
很不错!!!!
回复 不支持

使用道具 举报

发表于 2008-10-14 07:52:21 | 显示全部楼层 来自 江苏徐州
duoxiele
回复 不支持

使用道具 举报

发表于 2009-7-8 21:56:04 | 显示全部楼层 来自 陕西西安
好东东,谢了,楼主,狂顶!!!
回复 不支持

使用道具 举报

发表于 2009-8-9 18:04:12 | 显示全部楼层 来自 辽宁沈阳
请问楼主,第一个例子运行后提示enter a marker,我在adams中已经建立了两个marker,一选择就出现这样的错误:
ERROR:  No Marker was found because 'MACRO_1' does not exist beneath '.model_1.ground'.
ERROR:  -> MACRO_1
回复 不支持

使用道具 举报

发表于 2010-1-27 23:45:24 | 显示全部楼层 来自 北京
顶,好东西啊
回复 不支持

使用道具 举报

发表于 2010-3-10 01:35:09 | 显示全部楼层 来自 湖南长沙
好,谢谢,建议加分
回复 不支持

使用道具 举报

发表于 2010-3-15 18:43:51 | 显示全部楼层 来自 北京海淀
好东西啊 谢了
回复 不支持

使用道具 举报

发表于 2010-3-17 10:41:33 | 显示全部楼层 来自 北京海淀
谢谢楼主。
回复 不支持

使用道具 举报

发表于 2011-3-23 16:20:18 | 显示全部楼层 来自 辽宁沈阳
强悍!
回复 不支持

使用道具 举报

发表于 2011-5-25 09:18:21 | 显示全部楼层 来自 韩国
谢谢 分享!!  对第一次接触宏的人 很有用。
回复 不支持

使用道具 举报

发表于 2012-6-7 19:18:39 | 显示全部楼层 来自 安徽合肥
非常感谢.
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-18 22:00 , Processed in 0.083132 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表