版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章ADAMS二次开发及实例ADAMS具有很强的二次开发功能,包括ADAMS/View界面的用户化设计,利用cmd语言实现自动建模和仿真控制,通过编制用户子程序满足用户的某些特定需求,甚至可以拓展ADAMS的功能。本章主要介绍如何定制用户化界面、宏命令的用法和条件循环命令的用法,以及综合以上功能的应用实例。由于用户子程序的主要内容已在第9章进行了详细介绍,因此本章只对所涉及到的用户子程序编译联接操作过程进行简单介绍。定制用户界面ADAMS/View的界面对象都是以层次结构存储在模型数据库中,类似于零件模型的层次结构。所有定制的界面对象都存储在名为GUI的数据库中,该数据库可以很方便地管理所有的标准界面对象。如图11-1所示。图11-1界面对象的层次结构最上层的界面对象是窗口和对话框。如果主要建模窗口起名为main的话,其数据库全名应为.。尽管窗口和对话框看起来很相似,但它们却是很不相同的。窗口通常是在用户工作的时候在屏幕上停留一段时间,而对话框通常是在用户输入数据或是进行访问控制时才会出现。窗口有工具条和菜单栏,窗口和对话框也包含其他的界面对象如按钮,标签等等。大多数用户化操作涉及到创建对话框或者修改标准对话框。但若不用创建一个完整的用户化界面时,则通常只用修改菜单条和工具栏。ADAMS所包含界面对象属性如表11-1所示。表11-1ADAMS所包含界面对象属性界面对象:对象属性:Window(窗口)可包含用户自定义的菜单条和工具条可有一个以上的菜单条,但一次只能显示一个包含所有低层次的界面对象Toolbar(工具条)出现在窗口上端或下端的子区域能包含其它的对象MenuBar(菜单条)出现在窗口上端可有子菜单仅用于控制菜单Menu(菜单)包含三种类型:下拉式、弹出式或子菜单可包含按钮、开关按钮、分割条和子菜单Dialogbox(对话框)除菜单条和工具条之外还可包含其他对象Container(界面对象区)包含在对话框,窗口和工具条内的子区域可包含其他对象Buttonstack(按钮串)可包含多个按钮,而只显示一个按钮仅一个按钮被激活可通过右键操作显示所有按钮.Lable(标签)用在对话框中显示文本和图象Field(数据区)用于用户输入信息Button(按钮)激活操作在按钮上显示文本和图象对相应操作进行提示Togglebutton(开关按钮)显示激活状态的按钮Seperator(分割线)画出水平线分割线Slide(滑动条)通过滑动条设置当前范围内的整数值,而不用键入数值Optionmenu(可选菜单项)在多个菜单项中作一选择包含一个弹出菜单的图框只显示一行选定菜单项Radioboa(状态设置框)设置状态和模式Tabcontainer(标签界面对象)给界面和对话框设置标签Datatable(数据表)用来显示数据的表格,你可增加栏或列在大多数情况下,用户定制界面是指制作用户自己的菜单和对话框。通常可使用菜单编辑器和对话框编辑器来定制界面,通过它们可以很快地访问并改变大多数界面对象和功能。下面就这两方面的内容作简单介绍。定制菜单1。菜单编辑器通过以下菜单路径可以调出菜单编辑器窗口:Mainmenu==》Tools==》Menu==》Modify……菜单编辑器窗口如图11-2所示:图11-2菜单编辑窗口在菜单编辑器窗口中显示的是ADAMS菜单文件,菜单文件是按照一定的语法书写的解释性程序文件,在默认情况下,菜单编辑器窗口里显示的是描述ADAMS标准菜单的菜单文件,通过按照一定的语法规则修改该菜单文件,就可以得到用户化的菜单。下面的程序段是对标准ADAMS/View菜单文件的节选,粗略显示了标准ADAMS/View菜单文件的各个菜单项和File菜单项所包含的按钮和分割条界面对象,以便读者能把握菜单文件的全貌,如图11-3所示为相应的图形界面。图11-3ADAMS/View菜单MENU1&File!File菜单项NAME=fileHELP=Readandwritefiles,printmodelviews,orexitADAMSBUTTON2&NewDatabase::Ctrl+N!NewDatabase按钮NAME=new……BUTTON2&OpenDatabase::Ctrl+O!OpenDatabase按钮NAME=openHELP=OpenaDatabaseFile(ADAMS/ViewBinaryFile)……BUTTON2SaveDatabase&As...!SaveDatabase按钮……SEPARATOR2!分割线……BUTTON2&Import!Import按钮……...BUTTON2&Export!Export按钮……...SEPARATOR2!分割线……BUTTON2&Print...::Ctrl+P!Print按钮……SEPARATOR2!分割线……BUTTON2&SelectDirectory.!SelectDirectory.按钮……..SEPARATOR2!分割线……BUTTON2E&xit::Ctrl+Q!Exit按钮……MENU1&Edit!Edit菜单项……MENU1&View!View菜单项……MENU1&Build!Build菜单项……MENU1&Simulate!Simulate菜单项……MENU1&Review!Review菜单项……MENU1Settin&gs!Settings菜单项……MENU1&Tools!Tools菜单项……MENU1&Help!Help菜单项在菜单编辑器窗口中对菜单文件进行用户化修改后,点击编辑器窗口上的Menubar菜单项下的ExportText按钮可将用户化的菜单文件到用户二次开发文件目录中。如果要重新调入菜单,使用菜单编辑器的ImportText按钮调入相应的菜单文件,然后点击Apply按钮;或者直接通过以下菜单路径来实现:Mainmenu==》Tools==》Menu==》Read…….2。菜单语法如前所述,菜单文件实际上是用解释性语言编制的程序段,下面介绍该解释性语言的编程语法。菜单对象有四种类型:菜单、按钮或图标按钮、开关按钮和分割线,分别用关键词MENUn、BUTTONn、TOGGLEn和SEPARATORn定义。如表11-2所示列出的是菜单对象类型及其参数含义。表11-2菜单对象类型及其参数含义菜单对象参数含义:MENUnLabelBUTTONnLabelornameoficonfileTOGGLEnLableSEPARATORn(none)表中菜单对象的参数含义如下:(1)n是从1到10之间的整数,它表示对象在菜单中出现的级别。例如,MENU1出现在菜单栏,BUTTON2出现在MENU1的之中。MENU菜单后面的n是必须要的,而对于其他的对象则为可选项。如果忽略级别,ADAMS/View将默认该对象属于最后一个MENU。(2)lable是出现在菜单中的文本。对于图标按钮,可以指定图标的名字,或者其他图形格式文件。在Windows中图标名字为bitmap(.bmp)格式的文件名字。创建每种菜单对象的语法结构如下:创建MENU可以创建多级的菜单,第一级菜单为MENU1,出现在菜单条上,低一级的菜单如MENU2和MENU3出现在层叠的下拉菜单中。语法:MENUnTITLENAME=nameHELP=Help参数:n=整数值,表明该菜单在菜单条中出现的层数。n=1时菜单出现在菜单栏上,n≥2时菜单出现在下拉菜单中。TITLE=字符串,出现在菜单栏上,可以在表提前加一个&字符用作记忆法(如“&File”在菜单上显示为File)。NAME=模型数据库中对象的名字。HELP=出现在状态栏中的文字。创建BUTTON每个按钮对应一个菜单命令,可以在下拉菜单或是子菜单上放置按钮。语法:BUTTONnLABLEACCELERATORNAME=nameHELP=helpCMD=command参数:n=整数值,表明按钮出现的层数。N=2时按钮出现在下拉菜单上,n≥3时按钮出现在子菜单上。LABLE=按钮名,出现在下拉菜单或子菜单上。ACCELERATOR=键或键组用来执行菜单命令。NAME=模型数据库中菜单对象的名字。HELP=出现在状态条上的文字。CMD=点击按钮时所执行的命令,当有:多行命令时,每一行前面都要加CMD。创建分隔符(SEPERATOR)在下拉菜单和子菜单中的各项目之间添加分割线。语法:SEPERATORn参数:n=整数值,表明分隔符出现的层数,n=2时分隔符出现在下拉菜单中,n=3时分隔符出现在子菜单中。创建开关按钮TOGGLE用于在两种状态之间设置切换开关,开关按钮可以在下拉菜单或是在子菜单上。语法:TOGGLEnTITLENAME=nameHELP=helpSTATE=stateCMD=command其参数含义同上其他对象。下面是一个利用菜单编辑器定制用户化菜单的例子,该例在ADAMS/View标准菜单的Tools菜单项和Help菜单项之间定制了用户自己的菜单项MyMenu2003,通过展开该菜单项显示了用户菜单各层次之间的关系,如图11-4所示。图11-4用户菜单MyMenu2003的层次结构下面是本例的程序清单:……MENU1&Tools……MENU1&MyMenu2003NAME=mymenu2003HELP=AMenuTestBUTTON2MyButton&1NAME=My_Button_1HELP=TestofMyButton1CMD=AdamsCommandofMyButton1BUTTON2MyButton&2NAME=My_Button_2HELP=TestofMyButton2CMD=AdamsCommandofMyButton2BUTTON2……NAME=Some_ButtonsHELP=TestofSomeButtonCMD=AdamsCommandsofSomeButtonsBUTTON2MyButton&nNAME=My_Button_nHELP=TestofMyButtonnCMD=AdamsCommandofMyButtonnSEPARATOR2MENU2&SonMenu1BUTTON3SonButton1NAME=Son_Button_1CMD=AdamsCommandofSonButton1BUTTON3SonButton2NAME=Son_Button_2CMD=AdamsCommandofSonButton2BUTTON3……NAME=Some_Son_ButtonCMD=AdamsCommandofSomeSonButtonBUTTON3SonButtonnNAME=Son_Button_nCMD=AdamsCommandofSonButtonnSEPARATOR3MENU3Son'sSonMenuBUTTON4Son'sSonButtonBUTTON4……MENU3.……MENU2&SonMenu2MENU2……MENU2&SonMenunMENU1&Help……定制对话框ADAMS/View中使用的对话框包括各种界面对象,如标签、数据区、按钮等等。可以使用ADAMS对话框编辑器来创建和修改对话框以更好地满足用户的需要。例如为标准对话框添加一个按钮来包含要作的选项,或添加一个对话框以执行经常运行的步骤等等。利用对话框编辑器创建用户自定义对话框的操作方法如下:1。创建对话框对话框编辑器包含了用来创建对话框的所有工具,创建对话框的步骤如下:(1)通过如下菜单路径:在Tools==》DialogBox==》Create,于是出现对话框编辑器如图11-5所示:图11-5对话框编辑器(2)在DialogBox菜单中,选择New按钮,出现新的对话框,如图11-6所示。图11-6创建新对话框窗口(3)在Name栏中输入你的对话框的标题,然后选择想在对话框上添加的默认按钮。(4)选择OK按钮完成设置,.于是出现一个新对话框如图11-7所示。图11-7新创建的对话框2。修改对话框可以利用对话框编辑器对创建好的对话框进行修改,可以添加各种不同的界面对象到对话框中,设计布局、外观、命令和对话框对象的大小等。具体做法为:(1)选择在Tools==》DialogBox==》Modify,出现数据库向导。(2)选择想修改的对话框,在从Tools菜单选择对话框编辑器之后,通过双击出现的对话框的背景,这样就显示对话框编辑器并可以修改对话框了。3。增加界面对象到用户定制对话框可以利用对话框编辑器为用户定制对话框添加界面对象,ADAMS/View对话框的界面对象有以下几种类型。(1)Label——显示对话框中的文字和图象。(2)Field——提供输入文字和数值的空间。(3)Button——激活操作;在按钮上有显示该操作的图象,标题或文字。(4)Togglebutton——显示激活状态。(5)Seperator——划一条水平线。(6)Slider——设置对象的数值而不用键入数据。(7)Optionmenu——从多个选择中挑选一个,有弹出式图框以显示整个菜单。(8)Buttonstack——设置状态。(9)Buttonstack——包含多个按钮,可通过右键弹出所有按钮。(10)Container——可添加信息。利用对话框编辑器为用户定制对话框添加界面对象的步骤为:(1)在Create菜单中,选择想添加的对象。(2)将鼠标放在想添加对象的对话框中。(3)放下鼠标左键,并拖动来创建对象。所有界面对象的属性都可以通过对话框编辑器进行修改。4。在对话框中使用命令在用户定制对话框中,大多数界面对象都对应着一个ADAMS/View可执行命令,这些命令是为了完成用户希望的某项功能,或改变模型,或改变用户输入数据,或作出选择。.可以用ADAMS/View命令语言(cmd)来为对象创建命令。也可以通过命令向导来找到所需要的命令。一旦你找到命令,就可将它从命令窗口和log文件中拷贝,并粘贴或键入到命令编辑框。(1)察看对象的命令可以通过如下操作查看界面对象所对应的命令:双击你想察看命令的对象。从菜单的Attribute选项中,选择Commands。(2)将命令替换成文本在执行命令之前,ADAMS/View会执行一些文本替代操作。这些替代操作就是用界面对象的属性值来取代替换文本,并将其用在命令中。替代文本表字符为“$”,表明替代文本的位置。有四种形式的替代文本:$object_name——其名字与界面对象的名字相同。当ADAMS/View执行命令时,它会将当前object_name的值替换为$object_name的值。如表11-3所示列出了不同界面对象的值。表11-3不同界面对象的值对象数值含义Field(数据区)当前数据区内容Option-menu(可选菜单项)当前选定的数据Radio-box(状态设置框)当前选定的数据Toggle-button(开关按钮)当前定义的开关值Slide(滑动条)当前的滑动整数值例如,为将命令中的my_value值赋给参数,可用以下语句:my_commandmy_parameter=$my_value如果数据区内容为123,那么在ADAMS/View中执行命令时:my_commandmy_parameter=123缺省情况下,选择菜单或状态设置框的值为显示或选择按钮的文字,也可以为ADAMS/View的替换指定别的值。在togglebutton开关按钮值的属性中,由数据区来设置开关数值。在OptionMenu选项菜单和RadioBox状态控制栏,你可以用“|”符来分割多个选择。$_value——替换包含该对象命令的值。例如,如果是名字为“my_toggle”的按钮上的命令,则$_value的含义与$_toggle是相同的。在可能的情况下,应该使用$_value的值来替代实际对象的值,因为这样更容易理解和维护。如果在命令中看见了$_value,应该知道它代表界面对象的值,另外,如果要改变对象的名字,也不必改变命令。这一点对于togglebuttons,radiobox和optionmenu特别有用,因为这样可以在相关联的命令中改变这些对象的值。$_self,$_parent,$_topgui——它们可使对话框更容易理解和维护。例如,对话框能用以下命令调入它的子类的数据:interfacefieldsetfield=$strings=…一般应尽可能使用$_self或$_parent命令来指代对象名字,而不用真实的名字。$_1,$_2,$_3——用来指代窗口或对话框显示命令相关的参数,窗口或对话框以及它们的子类都可以在命令中使用$_1,$_2,$_3。当ADAMS/View执行命令时,它可替代参数的当前值。(3)条件命令替换替换文本被包含在单引号内,如果在引号内的$name或$value为空,则ADAMS/View除去单引号之间的文本。如果返回文字为空(‘’),该对象无效或不显示,则$name为空。条件替代更容易处理选择或命令中的手工排除参数。例如,如果使用下列命令,而用户不提供参数,则该命令就失效了:my_commandmy_parameter=$my_value…相反,如果你使用下列命令,则该命令有效:my_command‘my_parameter=$my_value’在手工排除参数时可以使用相同的技巧,只要参数包含在单引号‘’内,并一次只显示一个选项或只有一个选项有效。(4)Windows,DialogBoxes和Container的特殊命令Windows(窗口),DialogBoxes(对话框)和Container(界面对象区)都有特殊命令:start(开始),execution(执行)和finishcommand(完成)。当显示对象时ADAMS/View会自动执行开始命令,而且当对象被关闭时ADAMS/View会自动执行完成命令,执行命令通过interfacedialog_box/window/containerexecute命令来执行。开始和完成命令有助于对话框的初始化设置,当界面对象被显示时将缺省值放入数据区。而完成命令使当对象不显示时,帮助清除参数设置。执行命令是指在点击缺省的按钮“OK”和“Apply”是所执行的命令。(5)编辑命令在对话框编辑器的命令区按下鼠标右键就会弹出选择菜单,如表11-4所示。通过菜单可以对命令进行编辑。表11-4编辑器选择菜单命令功能References显示和插入$xxx的对象文本Pick选择对象并在命令中插入名字Browse显示数据库向导并在命令中插入所选的名字Cut出去选择的文本并将它放在剪切版上Copy拷贝选择的文字到文字缓冲区Paste从剪切版上粘贴到光标位置Edit显示文本编辑器(缺省的,限于UNIX)5。测试对话框用户在将定制好的对话框保存到数据库以前进行测试,具体方法为:.(1)在Option菜单中,选择TestBox按钮,ADAMS/View会显示该对话框。(2)测试想要执行的对话框命令。6。保存对话框在用户定制好自己的对话框之后,必须要对对话框进行保存。点击在DialogBox菜单中的Export按钮,然后选择CommandFile按钮,可以将用户对话框保存到适当的位置以便下次调用。7。加载和显示对话框用户可以通过以下命令加载已经保存好的对话框:在File菜单中,选择import按钮,然后读入所需的对话框命令文件,用户定制的对话框就被加载到数据库中。使用数据库向导可以显示对话框:标准的ADAMS/View对话框列在前面,以字母顺序,接着是用户定制的对话框,显示对话框的步骤为:(1)在Tool菜单中点击DialogBox按钮,然后选择Display按钮,则会出现数据库向导,其中列出了所有对话框。(2)选择所需对话框,并选择OK按钮。宏命令的使用宏命令实际上是一组命令集,它可以执行一连串的ADAMS/View命令。创建宏命令时,首先按顺序列出想执行的ADAMS/View命令的清单,然后就可以将这些命令写成宏命令的形式。在宏命令中,也可以使用参数。每次使用宏命令时,都将通过参数将数据传给宏。当执行带有参数的宏命令时,ADAMS/View将所提供的值替代到宏命令中。ADAMS/View对宏命令与其他的ADAMS/View的命令一样,可以在命令窗口中输入宏命令,从命令向导中选择它。也可将它包含在其他的宏命令中,或者从自己的定制菜单、对话框或按钮中执行它。使用宏命令可以实现以下功能:(1)自动完成重复性的工作。(2)为ADAMS/View建立模型数据交换功能。(3)自动创建整个模型。(4)快速建立机械系统的多个变量。创建宏命令通常可以通过三种方式创建宏命令:记录方式、使用宏编辑器来编辑和创建宏命令、通过导入文件来创建宏命令。1。以记录方式创建宏命令(1)记录宏a.通过如下菜单路径:Tools==》Macro==》Record/Replay==》RecordStart,开始记录宏命令。b.执行想在宏命令中进行的操作。c.通过如下菜单路径:Tools==》Macro==》Record/Replay==》RecordStop,可以停止记录宏。(2)回放记录的宏通过如下菜单路径可以回放记录好的宏命令:Tools==》Macro==》Record/Replay==》ExecuteRecordMaro。.(3)保存记录的宏通过如下菜单路径,Tools==》Macro==》Record/Replay==》WriteRecordMacro,将ADAMS/View宏命令保存为的命令格式。2。使用宏编辑器来编辑和创建宏命令使用宏编辑器是创建宏命令的另一种方式,具体创建步骤为:(1)选择如下菜单命令:Tools==》Macro==》Edit==》New或者Modify,然后出现宏命令编辑器窗口,如图11-8所示。.(2)如果你选择Modify,则会出现数据库向导。(3)如果在创建新的宏,则在MacroName编辑框输入宏的名字。(4)在Command编辑框,输入执行宏命令的命令串,使用宏的名字,选择UseMacroName选项。必须注意:所输入的命令串的名字必须是唯一的,不能重新定义一个已存在的命令,但可以在已存在的命令中添加新的关键词。例如,输入“MARKERCREATE”就是无效的,因为“MARKERCREATE”是早已存在的命令,但输入“MARKERGENERATE”就是有效的。(5)指明整个宏命令是否能用单个的“Undo”命令撤销。对于非常大的宏命令,单个的“Undo”会消耗大量的内存,甚至没有使用撤销操作都会显著地减慢宏命令的执行速度。一般情况下是在初始化创建和调试阶段采用“Undo=yes”,当确定宏命令可以正常工作之后,切换到“Undo=no”来提高运行速度。图11-8宏命令编辑器图11-8宏命令编辑器3。通过导入文件来创建宏命令通过导入文件来创建宏命令是创建宏命令的第三种方式。具体步骤如下:(1)选择如下菜单路径显示导入宏对话框:Tools==》Macro==》Read,导入宏对话框如图11-9所示。(2)在MacroName编辑框中输入ADAMS/View将在当前数据库中保存宏的名字。(3)在FileName编辑框中输入包含要执行命令的文件。(4)在UserEnteredCommand编辑框中指明将要执行宏命令的命令串,如果不输入命令串的名字,则缺省为宏命令的名字。(5)指明整个宏命令能否被单个的“Undo”命令撤销,对于大的宏命令,单个的“Undo”命令会消耗大量的内存或者显著地减慢宏命令执行的速度。(6)指明包含宏命令帮助文件或者输入字符串来描叙宏。(7)确信你没有创建过期的对话框,从CreatePanel选择菜单中选择“no”。(8)选择“OK”。.图11图11-9导入宏对话框在宏命令中使用参数宏命令的参数是在实际执行宏命令时提供给系统信息的占位符,参数通常以”$”开头,后面跟着参数的名字。可以定义多个参数,也可以将一个参数定义多次。当创建宏命令时,ADAMS/View扫描命令文本以确定所有的参数。当执行宏命令时,必须为参数提供值,或者它们有缺省值,ADAMS/View将数值替代命令中参数的位置,然后执行命令。如果在命令中多次使用相同的参数,ADAMS/View将用同一个值替代每一个参数出现的地方。1。带参数宏命令的例子下面是一个宏命令的例子,用它可以解释如何用宏命令改变力的大小和模型中约束图标,宏中的命令名为“icon_size”,约束名为“size”。constraintattributesconstraint_name=.*size_of_icon=$sizeforceattributesforce_name=.*size_of_icon=$size当输入命令:icon_size=25ADAMS/View执行命令为:constraintattributesconstraint_name=.*size_of_icon=25forceattributesforce_name=.*size_of_icon=252。扩展参数值在某些情况下,ADAMS/View在将参数替代到命令中之前,可以重新定义和扩展参数值,但ADAMS/View不会改变数值。在宏命令中替换时,ADAMS/View不会转换单位,它会直接将数值输入到命令中,命令本身会转换单位。ADAMS/View在将参数替换到宏命令中时,会将数据库名扩展为全名,扩展名使用“.”来分割名字。使用“.”可以让程序直接访问数据库值。例如:下面例子是包含参数“name”的宏命令“Ipart”list_infopartpart_name=$name当输入下列命令时:Ipartname=left_wheelADAMS/View将全名left_wheel替换$name,并执行命令:List_infopartpart_name=.3。通用参数格式通用参数格式为$‘name:q1:q2:q3:…’其中:name为参数的名字,q1,q2,q3…是说明参数特征的一个或多个限定词。单引号和限定词是可选择性的,下面是可能的四种格式:$name;$‘name’;$name::q1:q2:q3:…;$‘name:q1:q2:q3:…’;4。参数命名规则参数名必须以字母开头,余下的名字可为字母(a-z,A-Z),数值或者下划线,结尾字母可为字母,数字,不能是下划线。因而,$P、$P1和$PART_1是合法的,而$PART#1和$1P是不合法的。5。参数限定词及其格式限定词出现在参数第一次出现的时候,以对其属性进行控制。限定词是可选的也只能在参数第一次出现时使用。参数的限定词为:Type(类型)Range(范围)Count(值)Default(缺省)(1)TypeQualifierTypequalifier是用户必须输入的类型,其格式为:T=typeT=type(additionaldata)其中:type是basictype、databaseobjecttype或者databaseobjectclasstype,Additionaldata是可选的或者需要由数据类型决定。BasicType包括:real、integer、location、orientation、string、function、list(str1,str2,str3,…)和file(pathwildcard)。指明DatabaseObjectType意味着用户必须输入已存在该类型对象的名字,其前缀必须为new_来指明该类型的新对象的名字。例如,t=marker为已存在的marker点的名字,新marker点的名字写为t=new_marker。下面是另外一些例子:$stiffness:t=real$counter:t=integer$end_point:t=location$attitude:t=orientation$mat:t=marker可以通过下列步骤在ADAMS/View中察看databaseobjecttypes类型:在Tools菜单中,选择FunctionBuilder。.从选择菜单中,选择。从选择菜单的列表中,选择SELECT_TYPE。选择Assist。在Assist对话框中,输入all,然后选择OK。选择Evaluate。然后出现所有对象类型的列表。DatabaseObject-ClassType包括下面一些:(2)RangeQualifiers一个rangequalifier指明参数的取值范围,它仅仅适用于数值类型,其格式如表11-5所示:表11-5rangequalifier参数格式格式含义GT=r大于rGE=r大于等于rLT=r小于rLE=r小于等于r(3)CountQualifiersCountQualifiers指明数据的个数,其格式如表11-6所示:表11-6CountQualifiers参数格式格式含义C=0大于或等于1C=n等于nC=n,0大于或等于nC=n,m从n到m(4)DefaultQualifiersDefaultQualifiers为可选限定词,如果参数没有缺省的话,用户必须输入一个值来执行宏命令。有三种类型的缺省限定词:Constant——为可选的,如果用户没有提供参数值时,ADAMS/View使用的缺省值。格式为:D=valueUpdate——为可选的,如果用户没有提供参数值时,ADAMS/View将使用最后一次使用的值。格式为:U=valueDatabaseobject——自动产生并应用缺省的databaseobjects。格式为:A6。缺省参数特性在命令文本的第一次出现的参数定义了参数的特性。如果首次出现时有限定词,则该限定词将决定参数的特性,如果没有限定词,而参数出现在“=”后,则该参数从前面的命令参数继承了type,count和default,如果参数既没有限定词,也没有出现在“=”后,则缺省为字符串。在下面的例子中,参数“$text”缺省为字符串,因为它没有限定词,也没有出现在命令中。参数“$numbers”有限定词,指明了它一个或多个是大于零的整数。参数“$part_1”是一个“par”,因为它出现在“=”后,继承了前面参数“part_name”的类型。参数“$part_2”缺省为字符串,因为它没有出现在“=”后,参数“$part_3”和“$part_4”有都是part。!Parameter$textisastring!$numbers:t=integer:c=0:gt=0list_infopartpart_name=$part_1,$part2list_infopartpart_name=$part_3:t=part,$part_4:t=part循环命令和条件命令ADAMS/View命令语言包含有条件与循环结构语句,可以用它实现逻辑判断和循环功能。它们可以用在菜单命令、对话框命令和用户自己编写的宏命令程序文件中。循环命令循环命令的主要形式有以下两种:FOR/ENDWHILE/END1。FOR/END循环结构FOR/END循环结构的一般格式有两种,分别如下:(1)对参数数值的循环操作:FORVARIABLE_NAME=varSTART_VALUE=REAL&INCREMENT_VALUE=REAL&END_VALUE=REAL…END格式中:START_VALUE,INCREMENT_VALUE和END_VALUE可以是值为实数的表达式。INCREMENT_VALUE可以是正数,也可以是负数,缺省值为1。在循环体内的命令可以调用循环变量作为其可用的任何实数变量。格式应用实例如下:variablesetvariable_name=$integer=1forvariable_name=istart=1end=6partcreaterigid_bodyname_and_positionpart_name&=(eval("ball_"&orientation=0,0,0&relative_to=.variablesetvariable_name=$integer=(eval($+1))…endvariabledeletevariable_name=$在上例中,变量i从1循环到6,一次建立了ball_1到ball_6共6个part,其分别相对于ground的位置为(0,0,100)到(0,0,600),在循环体中,变量$进行了自加。(2)对一组模型对象进行循环操作:FORVARIABLE_NAME=varOBJECT_NAMES=object&TYPE=database_object_type&…END格式中:循环变量var为database_object_type类型的变量,它是对OBJECT_NAMES内所有database_object_type类型的对象一个个地进行操作或赋值。程序实例如下:variablesetvariable_name=temp_numinteger=1forvariable_name=my_partobject_names=.my_model.*type=partpartmodifypart_name=(eval(my_part))adams_id=(eval(temp_num))variablesetvariable_name=temp_numinteger=(eval(temp_num+1))endvariabledeletevariable_name=temp_num在上例中,ADAMS/View对my_model中的所有part的ID号进行重新编码,从1开始,直至编码完成。2。WHILE/END循环结构WHILE/END循环结构的一般格式为:WHILECONDITION=(expression)…ENDWHILE/END循环结构的功能是:循环执行WHILE和END之间的命令,直到条件不成立或为“0”时退出循环。前述FOR/END的例子也可以用WHILE/END来编程:variablesetvariable_name=$integer=1variablesetvariable_name=temp_numinteger=1whilecondition=(temp_num<=6)partcreaterigid_bodyname_and_positionpart_name&=(eval("ball_"&orientation=0,0,0&relative_to=.variablesetvariable_name=$integer=(eval($+1))…endvariabledeletevariable_name=$variabledeletevariable_name=temp_num条件命令条件命令的主要形式有以下三种:IF/ELSEIF/ELSE/ENDBREAKCONTINUE1。IF/ELSEIF/ELSE/END命令IF/ELSEIF/ELSE/END命令的功能为:可以用IF、ELSEIF、ELSE和END命令有条件地执行一组命令,用来实现逻辑判断功能。该组命令包含在IF和END内。该条件值取决于表达式(expression)的逻辑值。在IF/END内,如果表达式逻辑值为1,则符合条件而执行内部命令。如果表达式逻辑值为0,则不符合条件而执行ELSE/END中的命令。该命令可以用在命令语言、宏命令和命令文件中。IF/ELSEIF/ELSE/END命令的一般格式为:(1)IFCONDITION=(expression)…END(2)IFCONDITION=(expression)…ELSE…END(3)IFCONDITION=(expression)…ELSEIF…ELSE…END下面是IF/ELSEIF/ELSE/END命令使用的一个例子:ifcondition=(db_exists("."))constraintmodifymotionmotion_name=.adams_id=1typ=rot&joint_name=.function=""constraintmodifymotionmotion_name=.adams_id=2typ=rot&joint_name=.function=""elsegimovementconstraintcreatemotionmotion_name=.adams_id=1typ=rot&joint_name=.function=""constraintcreatemotionmotion_name=.adams_id=2typ=rot&joint_name=.function=""end在上例中,如果数据库中存在.,则对其进行修改,如果不存在.,则调用命令文件gimovemen创建它。2。BREAK命令BREAK命令用在循环体内,用于中断命令并无条件退出循环命令的执行。格式为:BREAK下面是一段程序例子:variablecreatvariable_name=temp_numinteger_value=1whilecondition=(temp_num<=5)ifcondition=(eval(DB_EXISTS(“MAR”del)!如果数据库中不存在路径变量cvj_dir!定义路径变量variablecreatevariable=.string=(eval("d:"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"file&=(eval((.&file=(eval((./"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"/"\\"modeldisplaymodel_name=cvj为了以后叙述方便,特将本例的某些内容进行说明:三球销式等速万向节由圆柱槽壳、三销架和球环三部分组成,本例所涉及到的用于该万向节建模、分析和结果后处理的对话框文件和命令文件如表11-7所示:表11-7万向节建模、分析和结果后处理的对话框文件和命令文件文件类型调用阶段对话框文件命令文件万向节建模圆柱槽壳三销架球环万向节分析结果后处理菜单文件及菜单的初始化在上一节中,通过调用文件对ADAMS环境进行了与二次开发相关的初始化工作,这其中包括通过读入文件和分别定制主界面用户菜单和分析曲线后处理界面用户菜单,以及调用文件对用户菜单进行初始化。在本例中,主界面用户菜单是在ADAMS/View主界面菜单条上插入的WX-CVJoint用户菜单项及其相应下拉菜单。主界面用户菜单的建模部分和分析计算部分的菜单项分别如图11-12和图11-13所示。图11-12主界面用户菜单的建模部分的菜单项图11-13主界面用户菜单的分析计算部分的菜单项上述用户菜单的定制是通过读取CVJ文件夹下的menus文件夹里的文件来实现的,文件的内容是在ADAMS/View的原始菜单文件中加入如下程序段:MENU1WX-CVJointNAME=wx_cvjoint_menuHELP=CreateormodifyCV-JointmodelMENU2ModelCreate/Modify!相应的下拉菜单用于万向节建模NAME=cv_model_menuBUTTON3GeneralConfiguration...NAME=general_configHELP=DisplaythebasicConfigurationDB!此菜单项的命令是调用万向节选型对话框.CMD=interfacedialog_boxdisplaydialog_box=.SEPARATOR3!分割条SEPARATOR3!分割条!有关用于ACJoint型万向节建模的各菜单项(省略)…SEPARATOR3!分割条!有关用于GIJoint型万向节建模的各菜单项BUTTON3GIBellShell...!用于圆柱槽壳建模NAME=gi_bell_shellHELP=DisplaythedefinitionDBoftheGIJointBellShellCMD=interfacedialog_boxdisplay&dialog_box=.BUTTON3Tripode...!用于三销架建模NAME=mytripodeHELP=DisplaythedefinitionDBoftheTripodeCMD=interfacedialog_boxdisplay&dialog_box=.BUTTON3BallLoop...!用于球环建模NAME=ball_loopHELP=DisplaythedefinitionDBoftheBallLoopCMD=interfacedialog_boxdisplay&dialog_box=.SEPARATOR2!分割条!有关用于万向节分析计算的各菜单项MENU2StandardAnalysisNAME=analysis_controleBUTTON3DynamicAnalysis...!动力学分析NAME=dynamic_analysisCMD=ifcond=(db_exists(\".\"))CMD=intdiadisdia=.CMD=endCMD=ifcond=(db_exists(\".\"))CMD=intdiadisdia=.CMD=end!其它分析项目菜单项BUTTON3StaticAnalysis...NAME=static_analysisCMD=ifcond=(db_exists(\".\"))CMD=intdiadispdia=.CMD=endCMD=ifcond=(db_exists(\".\"))CMD=intdiadispdia=.CMD=endBUTTON3LashAnalysis...NAME=lash_analysisCMD=ifcond=(db_exists(\".\"))CMD=intdiadispdia=.CMD=endCMD=ifcond=(db_exists(\".\"))CMD=intdiadispdia=.CMD=endSEPARATOR2!分割条!有关用于显示各种分析结果的菜单项MENU2ResultsNAME=resultsHELP=Showresults...BUTTON3Animation...!用于显示分析动画NAME=animationCMD=intdiadispdia=animate_full_panelparam&=(eval(db_default(.system_defaults,"analysis")))BUTTON3Plots...!用于显示分析分析曲线NAME=plots!显示ADAMS/PostProcessor界面CMD=interfaceplotwindowopen!关闭ADAMS/View界面CMD=interfacewindowundisplaywindow=.!设置默认曲线线宽为1CMD=defaultsplottingcurve_thickness=1…!如果对万向节进行了静力学分析,则激活相应后处理菜单项CMD=ifcond&=(db_exists(\"\"))CMD=interfacemenumodifymenu_name&=.&enabled=yesCMD=end!如果对万向节进行了动力学分析,则激活相应后处理菜单项CMD=ifcond&=(db_exists(\"\"))CMD=interfacemenumodifymenu_name&=.enabled=yesCMD=end!如果对万向节进行了静态间隙分析,则激活相应后处理菜单项CMD=ifcond=(db_exists(\"\"))CMD=interfacepush_buttonmodifypush_button_name&=.&enabled=yesCMD=end…SEPARATOR2BUTTON2ModelRead...NAME=model_readHELP=ReadexistingmodelfrommodeldatabaseCMD=interfacedialogdisplaydialog=.BUTTON2ModelWrite...NAME=model_writeHELP=WritemodelinmodeldatabaseCMD=interfacedialogdisplaydialog=.分析曲线后处理用户菜单是在ADAMS/PostProcessor界面菜单条上插入的WX-CVJoint用户菜单项及其相应下拉菜单。分析曲线后处理用户菜单如图11-14所示:图11-14分析曲线后处理用户菜单上述用户菜单的定制是通过读取CVJ文件夹下的menus文件夹里的文件来实现的,文件的内容是在ADAMS/PostProcessor的原始菜单文件中加入如下程序段:MENU1WX-CVJointNAME=wx_cvjointBUTTON2Createplots...NAME=create_new_plotsSEPARATOR2BUTTON2PlotForLash...NAME=plot_for_lashCMD=ifcond=(db_exists(\".\"))CMD=interfacedialogdisplaydialog=.CMD=endCMD=ifcond=(db_exists(\".\"))CMD=interfacedialogdisplaydialog=.CMD=endMENU2PlotForStat_Dyn!与动力学分析相关的各菜单项NAME=plot_for_stat_dynBUTTON3Displacement...!显示构件位移的各菜单项NAME=plot_for_displacementCMD=ifcond=(db_exists(\".\"))CMD=interfacedialogdisplaydialog=.CMD=endCMD=ifcond=(db_exists(\".\"))CMD=interfacedialogdisplaydialog=.CMD=endBUTTON3Force...!显示构件受力的各菜单项NAME=plot_for_forceCMD=ifcond=(db_exists(\".\"))CMD=interfacedialogdisplaydialog=.CMD=endCMD=ifcond=(db_exists(\".\"))CMD=interfacedialogdisplaydialog=.CMD=end!其它曲线项目的菜单项(省略)…SEPARATOR2BUTTON2ResultManagerNAME=result_managerCMD=interfacedialogdisplaydialog=.在图11-12到图11-14中,许多菜单项处于未被激活状态,这是因为程序所需,如果菜单在不适当的时候处于激活状态,则可能由于错误地点击了某个菜单命令而使程序出错。因此,本例在对用户菜单初始化时,强制性使一些菜单处于未被激活状态,这一功能的实现是通过调用CVJ文件夹下的menus文件夹里的文件来完成的。文件的内容如下:interfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name=&.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacepush_buttonmodifypush_button_name&=.&enabled=nointerfacemenumodifymenu&=.&enabled=no对话框文件和命令文件在建模(前处理)中的应用上一节介绍了菜单文件在构建整个二次开发模块程序流程框架中的应用,从本节开始,将陆续介绍对话框文件和ADAMS命令文件在具体建模、分析和结果曲线后处理方面的应用。本节先介绍以上文件在建模中的应用。为了便于叙述,特将本例万向节的建模过程如图11-15:图11-15万向节的建模过程1.对话框文件在万向节选型时的应用当软件刚启动时,见上一节的图11-12所示,ADAMS/View主界面用户菜单WX-CVJoint下的菜单项中的建模部分,菜单项GeneralConfiguration是唯一被激活的项,在相应的菜单文件中,其对应的菜单命令是:CMD=interfacedialog_boxdisplaydialog_box=.此命令的作用是调用万向节选型对话框.。对话框.见图11-16所示:图11-16对话框.此对话框的作用是用来选择是建立ACJoint型万向节的模型还是建立GIJoint型万向节,如果是对ACJoint型万向节进行模型,则继续对进一步细节进行设定。此对话框可以用ADAMS的对话框编辑器来建立,具体建立过程可以参见第12章的相关内容,这里不再赘述,本节只介绍一些技巧性的细节。对话框是人机交互的重要形式,因此建立对话框后的首要任务是建立对话框可编辑控件和程序变量之间的关系。为此,须在对话框的execution_commands中加入如下命令:execution_commands=!创建变量.从下拉列表框中读取万向节类型"`varsetvar=.string=\"$f_type\"`",&!创建变量.从编辑框f_or_track中读取数据"`varsetvar=.string=\"$f_or_track\"`",&!创建变量.从编辑框f_ir_track中读取数据"`varsetvar=.string=\"$f_ir_track\"`",&!创建变量.从编辑框f_bn中读取数据"`varsetvar=.integer=$f_bn`"&由于本对话框是用来对万向节进行选型的,它确定了建模的最基本参数,因此,一旦选型完成,该对话框的各个可编辑控件必须失效,如图11-17所示,否则可能在建模过程中出现选型参数的改变,从而造成程序的混乱。图11-17对话框.的各可编辑控件失效状态同时,该对话框还必须具有根据不同的万向节选型,激活不同的建模菜单项的功能。如图11-18所示,当选型为ACJoint时,激活ACBellShell菜单项;当选型为GIJoint时,激活GIBellShell菜单项。图11-18根据不同的万向节选型,对话框.激活不同的菜单项要实现上述功能,则需要在对话框.相应的对话框文件中的“确定”按钮命令中加入如下代码:commands=!以下命令使对话框自身被隐藏"interfacedialogexecutedialog=$_parentundisplay=yes",&!如果选型为ACJoint型万向节,则激活菜单ac_bell_shell"ifcon=((.==\"ACJoint\")",&"interfacepush_buttonmodify&",&"push_button_name=&",&“.&",&"enabled=yes",&!使对话框各可编辑控件失效"interfacefieldmodifyfield_name=.enabled=no",&"interfacefieldmodifyfield_name=.enabled=no",&"interfaceoption_menumodifyoption_menu_name&”,&“=.enabled=no",&"interfaceoption_menumodifyoption_menu_name&”,&“=.enabled=no",&"interfaceoption_menumodifyoption_menu_name&”,&“=.enabled=no",&"else",&!如果选型为GIJoint型万向节,则激活菜单gi_bell_shell"ifcon=((.==\"ACJoint\")",&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理行业安全生产工作总结
- 门诊导医服务总结
- 传媒行业营销实践总结
- 娱乐行业客服岗位总结
- 《眼贴体验思路》课件
- 《罗兰贝格品牌战略》课件
- 2024年广东省东莞市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2023年陕西省渭南市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2023年福建省莆田市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2021年四川省资阳市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 形势任务教育宣讲材料第一讲——讲上情
- 物业安全员考核实施细则
- 中国地质大学(武汉)教育发展基金会筹备成立情况报告
- 第四章破产法(破产法)教学课件
- PE拖拉管施工方案标准版
- 7725i进样阀说明书
- 铁路建设项目施工企业信用评价办法(铁总建设〔2018〕124号)
- 时光科技主轴S系列伺服控制器说明书
- 无机非金属材料专业 毕业设计论文 年产240万平方米釉面地砖陶瓷工厂设计
- 社会组织绩效考核管理办法
- 密封固化剂配方分析
评论
0/150
提交评论