ADAMS二次開發(fā)及實(shí)例.doc
《ADAMS二次開發(fā)及實(shí)例.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《ADAMS二次開發(fā)及實(shí)例.doc(70頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
第11章 ADAMS二次開發(fā)及實(shí)例 ADAMS具有很強(qiáng)的二次開發(fā)功能,包括ADAMS/View界面的用戶化設(shè)計(jì),利用cmd語言實(shí)現(xiàn)自動(dòng)建模和仿真控制,通過編制用戶子程序滿足用戶的某些特定需求,甚至可以拓展ADAMS的功能。 本章主要介紹如何定制用戶化界面、宏命令的用法和條件循環(huán)命令的用法,以及綜合以上功能的應(yīng)用實(shí)例。由于用戶子程序的主要內(nèi)容已在第9章進(jìn)行了詳細(xì)介紹,因此本章只對所涉及到的用戶子程序編譯聯(lián)接操作過程進(jìn)行簡單介紹。 11.1 定制用戶界面 ADAMS/View的界面對象都是以層次結(jié)構(gòu)存儲(chǔ)在模型數(shù)據(jù)庫中,類似于零件模型的層次結(jié)構(gòu)。所有定制的界面對象都存儲(chǔ)在名為GUI的數(shù)據(jù)庫中,該數(shù)據(jù)庫可以很方便地管理所有的標(biāo)準(zhǔn)界面對象。如圖11-1所示。 圖11-1 界面對象的層次結(jié)構(gòu) 最上層的界面對象是窗口和對話框。如果主要建模窗口起名為main的話,其數(shù)據(jù)庫全名應(yīng)為.gui.main。 盡管窗口和對話框看起來很相似,但它們卻是很不相同的。窗口通常是在用戶工作的時(shí)候在屏幕上停留一段時(shí)間,而對話框通常是在用戶輸入數(shù)據(jù)或是進(jìn)行訪問控制時(shí)才會(huì)出現(xiàn)。窗口有工具條和菜單欄,窗口和對話框也包含其他的界面對象如按鈕,標(biāo)簽等等。 大多數(shù)用戶化操作涉及到創(chuàng)建對話框或者修改標(biāo)準(zhǔn)對話框。但若不用創(chuàng)建一個(gè)完整的用戶化界面時(shí),則通常只用修改菜單條和工具欄。 ADAMS所包含界面對象屬性如表11-1所示。 表11-1 ADAMS所包含界面對象屬性 界面對象: 對 象 屬 性: Window(窗口) 可包含用戶自定義的菜單條和工具條 可有一個(gè)以上的菜單條,但一次只能顯示一個(gè) 包含所有低層次的界面對象 Toolbar(工具條) 出現(xiàn)在窗口上端或下端的子區(qū)域 能包含其它的對象 Menu Bar(菜單條) 出現(xiàn)在窗口上端 可有子菜單 僅用于控制菜單 Menu(菜單) 包含三種類型:下拉式、彈出式或子菜單 可包含按鈕、開關(guān)按鈕、分割條和子菜單 Dialog box(對話框) 除菜單條和工具條之外還可包含其他對象 Container(界面對象區(qū)) 包含在對話框,窗口和工具條內(nèi)的子區(qū)域 可包含其他對象 Button stack(按鈕串) 可包含多個(gè)按鈕,而只顯示一個(gè)按鈕 僅一個(gè)按鈕被激活 可通過右鍵操作顯示所有按鈕. Lable(標(biāo)簽) 用在對話框中顯示文本和圖象 Field(數(shù)據(jù)區(qū)) 用于用戶輸入信息 Button(按鈕) 激活操作 在按鈕上顯示文本和圖象對相應(yīng)操作進(jìn)行提示 Toggle button(開關(guān)按鈕) 顯示激活狀態(tài)的按鈕 Seperator(分割線) 畫出水平線分割線 Slide(滑動(dòng)條) 通過滑動(dòng)條設(shè)置當(dāng)前范圍內(nèi)的整數(shù)值,而不用鍵入數(shù)值 Option menu(可選菜單項(xiàng)) 在多個(gè)菜單項(xiàng)中作一選擇 包含一個(gè)彈出菜單的圖框 只顯示一行選定菜單項(xiàng) Radio boa(狀態(tài)設(shè)置框) 設(shè)置狀態(tài)和模式 Tab container(標(biāo)簽界面對象) 給界面和對話框設(shè)置標(biāo)簽 Data table(數(shù)據(jù)表) 用來顯示數(shù)據(jù)的表格,你可增加欄或列 在大多數(shù)情況下,用戶定制界面是指制作用戶自己的菜單和對話框。通??墒褂貌藛尉庉嬈骱蛯υ捒蚓庉嬈鱽矶ㄖ平缑?,通過它們可以很快地訪問并改變大多數(shù)界面對象和功能。下面就這兩方面的內(nèi)容作簡單介紹。 11.1.1 定制菜單 1。菜單編輯器 通過以下菜單路徑可以調(diào)出菜單編輯器窗口: Main menu==》Tools==》Menu==》Modify…… 菜單編輯器窗口如圖11-2所示: 圖11-2 菜單編輯窗口 在菜單編輯器窗口中顯示的是ADAMS菜單文件,菜單文件是按照一定的語法書寫的解釋性程序文件,在默認(rèn)情況下,菜單編輯器窗口里顯示的是描述ADAMS標(biāo)準(zhǔn)菜單的菜單文件,通過按照一定的語法規(guī)則修改該菜單文件,就可以得到用戶化的菜單。 下面的程序段是對標(biāo)準(zhǔn)ADAMS/View菜單文件的節(jié)選,粗略顯示了標(biāo)準(zhǔn)ADAMS/View菜單文件的各個(gè)菜單項(xiàng)和File菜單項(xiàng)所包含的按鈕和分割條界面對象,以便讀者能把握菜單文件的全貌,如圖11-3所示為相應(yīng)的圖形界面。 圖11-3 ADAMS/View菜單 MENU1 &File !File菜單項(xiàng) NAME=file HELP=Read and write files, print model views, or exit ADAMS BUTTON2 &New Database::Ctrl+N !New Database按鈕 NAME=new …… BUTTON2 &Open Database::Ctrl+O !Open Database按鈕 NAME=open HELP=Open a Database File (ADAMS/View Binary File) …… BUTTON2 Save Database &As... !Save Database按鈕 …… SEPARATOR2 !分割線 …… BUTTON2 &Import !Import按鈕 ……... BUTTON2 &Export !Export按鈕 ……... SEPARATOR2 !分割線 …… BUTTON2 &Print...::Ctrl+P !Print按鈕 …… SEPARATOR2 !分割線 …… BUTTON2 &Select Directory. !Select Directory.按鈕 …….. SEPARATOR2 !分割線 …… BUTTON2 E&xit::Ctrl+Q !Exit按鈕 …… MENU1 &Edit !Edit菜單項(xiàng) …… MENU1 &View !View菜單項(xiàng) …… MENU1 &Build !Build菜單項(xiàng) …… MENU1 &Simulate !Simulate菜單項(xiàng) …… MENU1 &Review !Review菜單項(xiàng) …… MENU1 Settin&gs !Settings菜單項(xiàng) …… MENU1 &Tools !Tools菜單項(xiàng) …… MENU1 &Help ! Help菜單項(xiàng) 在菜單編輯器窗口中對菜單文件進(jìn)行用戶化修改后,點(diǎn)擊編輯器窗口上的Menu bar菜單項(xiàng)下的Export Text按鈕可將用戶化的菜單文件到用戶二次開發(fā)文件目錄中。如果要重新調(diào)入菜單,使用菜單編輯器的Import Text按鈕調(diào)入相應(yīng)的菜單文件,然后點(diǎn)擊Apply按鈕;或者直接通過以下菜單路徑來實(shí)現(xiàn): Main menu==》Tools==》Menu==》Read……. 2。菜單語法 如前所述,菜單文件實(shí)際上是用解釋性語言編制的程序段,下面介紹該解釋性語言的編程語法。 菜單對象有四種類型:菜單、按鈕或圖標(biāo)按鈕、開關(guān)按鈕和分割線,分別用關(guān)鍵詞MENUn、BUTTONn、TOGGLEn和SEPARATORn定義。如表11-2所示列出的是菜單對象類型及其參數(shù)含義。 表11-2 菜單對象類型及其參數(shù)含義 菜單對象 參數(shù)含義: MENUn Label BUTTONn Label or name of icon file TOGGLEn Lable SEPARATORn (none) 表中菜單對象的參數(shù)含義如下: (1) n是從1到10之間的整數(shù),它表示對象在菜單中出現(xiàn)的級別。例如,MENU1出現(xiàn)在菜單欄,BUTTON2出現(xiàn)在MENU1的之中。MENU菜單后面的n是必須要的,而對于其他的對象則為可選項(xiàng)。如果忽略級別,ADAMS/View將默認(rèn)該對象屬于最后一個(gè)MENU。 (2) lable是出現(xiàn)在菜單中的文本。對于圖標(biāo)按鈕,可以指定圖標(biāo)的名字,或者其他圖形格式文件。在Windows中圖標(biāo)名字為bitmap(.bmp)格式的文件名字。 創(chuàng)建每種菜單對象的語法結(jié)構(gòu)如下: 創(chuàng)建MENU 可以創(chuàng)建多級的菜單,第一級菜單為MENU1,出現(xiàn)在菜單條上,低一級的菜單如MENU2和MENU3出現(xiàn)在層疊的下拉菜單中。 語法: MENUn TITLE NAME=name HELP=Help 參數(shù): n=整數(shù)值,表明該菜單在菜單條中出現(xiàn)的層數(shù)。n=1時(shí)菜單出現(xiàn)在菜單欄上,n≥2時(shí)菜單出現(xiàn)在下拉菜單中。 TITLE=字符串,出現(xiàn)在菜單欄上,可以在表提前加一個(gè)&字符用作記憶法(如“&File”在菜單上顯示為File)。 NAME=模型數(shù)據(jù)庫中對象的名字。 HELP=出現(xiàn)在狀態(tài)欄中的文字。 創(chuàng)建BUTTON 每個(gè)按鈕對應(yīng)一個(gè)菜單命令,可以在下拉菜單或是子菜單上放置按鈕。 語法: BUTTONn LABLE ACCELERATOR NAME=name HELP=help CMD=command 參數(shù): n=整數(shù)值,表明按鈕出現(xiàn)的層數(shù)。N=2時(shí)按鈕出現(xiàn)在下拉菜單上,n≥3時(shí)按鈕出現(xiàn)在子菜單上。 LABLE=按鈕名,出現(xiàn)在下拉菜單或子菜單上。 ACCELERATOR=鍵或鍵組用來執(zhí)行菜單命令。 NAME=模型數(shù)據(jù)庫中菜單對象的名字。 HELP=出現(xiàn)在狀態(tài)條上的文字。 CMD=點(diǎn)擊按鈕時(shí)所執(zhí)行的命令,當(dāng)有:多行命令時(shí),每一行前面都要加CMD。 創(chuàng)建分隔符(SEPERATOR) 在下拉菜單和子菜單中的各項(xiàng)目之間添加分割線。 語法: SEPERATORn 參數(shù): n=整數(shù)值,表明分隔符出現(xiàn)的層數(shù),n=2時(shí)分隔符出現(xiàn)在下拉菜單中,n=3時(shí)分隔符出現(xiàn)在子菜單中。 創(chuàng)建開關(guān)按鈕TOGGLE 用于在兩種狀態(tài)之間設(shè)置切換開關(guān),開關(guān)按鈕可以在下拉菜單或是在子菜單上。 語法: TOGGLEn TITLE NAME=name HELP=help STATE=state CMD=command 其參數(shù)含義同上其他對象。 下面是一個(gè)利用菜單編輯器定制用戶化菜單的例子,該例在ADAMS/View標(biāo)準(zhǔn)菜單的Tools菜單項(xiàng)和Help菜單項(xiàng)之間定制了用戶自己的菜單項(xiàng)MyMenu2003,通過展開該菜單項(xiàng)顯示了用戶菜單各層次之間的關(guān)系,如圖11-4所示。 圖11-4 用戶菜單MyMenu2003的層次結(jié)構(gòu) 下面是本例的程序清單: …… MENU1 &Tools …… MENU1 &MyMenu2003 NAME=mymenu2003 HELP=A Menu Test BUTTON2 My Button &1 NAME=My_Button_1 HELP=Test of My Button 1 CMD=Adams Command of My Button 1 BUTTON2 My Button &2 NAME=My_Button_2 HELP=Test of My Button 2 CMD=Adams Command of My Button 2 BUTTON2 …… NAME=Some_Buttons HELP=Test of Some Button CMD=Adams Commands of Some Buttons BUTTON2 My Button &n NAME=My_Button_n HELP=Test of My Button n CMD=Adams Command of My Button n SEPARATOR2 MENU2 &Son Menu 1 BUTTON3 Son Button 1 NAME=Son_Button_1 CMD=Adams Command of Son Button 1 BUTTON3 Son Button 2 NAME=Son_Button_2 CMD=Adams Command of Son Button 2 BUTTON3 …… NAME=Some_Son_Button CMD=Adams Command of Some Son Button BUTTON3 Son Button n NAME=Son_Button_n CMD=Adams Command of Son Button n SEPARATOR3 MENU3 Sons Son Menu BUTTON4 Sons Son Button BUTTON4 …… MENU3 .…… MENU2 &Son Menu 2 MENU2 …… MENU2 &Son Menu n MENU1 &Help …… 11.1.2 定制對話框 ADAMS/View中使用的對話框包括各種界面對象,如標(biāo)簽、數(shù)據(jù)區(qū)、按鈕等等。可以使用ADAMS對話框編輯器來創(chuàng)建和修改對話框以更好地滿足用戶的需要。例如為標(biāo)準(zhǔn)對話框添加一個(gè)按鈕來包含要作的選項(xiàng),或添加一個(gè)對話框以執(zhí)行經(jīng)常運(yùn)行的步驟等等。利用對話框編輯器創(chuàng)建用戶自定義對話框的操作方法如下: 1。創(chuàng)建對話框 對話框編輯器包含了用來創(chuàng)建對話框的所有工具,創(chuàng)建對話框的步驟如下: (1) 通過如下菜單路徑:在Tools==》Dialog Box==》Create,于是出現(xiàn)對話框編輯器如圖11-5所示: 圖11-5 對話框編輯器 (2) 在Dialog Box菜單中,選擇New按鈕,出現(xiàn)新的對話框,如圖11-6所示。 圖11-6 創(chuàng)建新對話框窗口 (3) 在Name欄中輸入你的對話框的標(biāo)題,然后選擇想在對話框上添加的默認(rèn)按鈕。 (4) 選擇OK按鈕完成設(shè)置,.于是出現(xiàn)一個(gè)新對話框如圖11-7所示。 圖11-7新創(chuàng)建的對話框 2。修改對話框 可以利用對話框編輯器對創(chuàng)建好的對話框進(jìn)行修改,可以添加各種不同的界面對象到對話框中,設(shè)計(jì)布局、外觀、命令和對話框?qū)ο蟮拇笮〉?。具體做法為: (1) 選擇在Tools==》Dialog Box==》Modify,出現(xiàn)數(shù)據(jù)庫向?qū)А? (2) 選擇想修改的對話框,在從Tools菜單選擇對話框編輯器之后,通過雙擊出現(xiàn)的對話框的背景,這樣就顯示對話框編輯器并可以修改對話框了。 3。增加界面對象到用戶定制對話框 可以利用對話框編輯器為用戶定制對話框添加界面對象,ADAMS/View對話框的界面對象有以下幾種類型。 (1) Label——顯示對話框中的文字和圖象。 (2) Field——提供輸入文字和數(shù)值的空間。 (3) Button——激活操作;在按鈕上有顯示該操作的圖象,標(biāo)題或文字。 (4) Toggle button——顯示激活狀態(tài)。 (5) Seperator——?jiǎng)澮粭l水平線。 (6) Slider——設(shè)置對象的數(shù)值而不用鍵入數(shù)據(jù)。 (7) Option menu——從多個(gè)選擇中挑選一個(gè),有彈出式圖框以顯示整個(gè)菜單。 (8) Button stack——設(shè)置狀態(tài)。 (9) Button stack——包含多個(gè)按鈕,可通過右鍵彈出所有按鈕。 (10) Container——可添加信息。 利用對話框編輯器為用戶定制對話框添加界面對象的步驟為: (1) 在Create菜單中,選擇想添加的對象。 (2) 將鼠標(biāo)放在想添加對象的對話框中。 (3) 放下鼠標(biāo)左鍵,并拖動(dòng)來創(chuàng)建對象。 所有界面對象的屬性都可以通過對話框編輯器進(jìn)行修改。 4。在對話框中使用命令 在用戶定制對話框中,大多數(shù)界面對象都對應(yīng)著一個(gè)ADAMS/View可執(zhí)行命令,這些命令是為了完成用戶希望的某項(xiàng)功能,或改變模型,或改變用戶輸入數(shù)據(jù),或作出選擇。. 可以用ADAMS/View命令語言(cmd)來為對象創(chuàng)建命令。也可以通過命令向?qū)碚业剿枰拿?。一旦你找到命令,就可將它從命令窗口和log文件中拷貝,并粘貼或鍵入到命令編輯框。 (1) 察看對象的命令 可以通過如下操作查看界面對象所對應(yīng)的命令: l 雙擊你想察看命令的對象。 l 從菜單的Attribute選項(xiàng)中,選擇Commands。 (2) 將命令替換成文本 在執(zhí)行命令之前,ADAMS/View會(huì)執(zhí)行一些文本替代操作。這些替代操作就是用界面對象的屬性值來取代替換文本,并將其用在命令中。替代文本表字符為“$”,表明替代文本的位置。有四種形式的替代文本: l $object_name——其名字與界面對象的名字相同。當(dāng)ADAMS/View執(zhí)行命令時(shí),它會(huì)將當(dāng)前object_name的值替換為$object_name的值。如表11-3所示列出了不同界面對象的值。 表11-3 不同界面對象的值 對象 數(shù)值含義 Field(數(shù)據(jù)區(qū)) 當(dāng)前數(shù)據(jù)區(qū)內(nèi)容 Option-menu(可選菜單項(xiàng)) 當(dāng)前選定的數(shù)據(jù) Radio-box(狀態(tài)設(shè)置框) 當(dāng)前選定的數(shù)據(jù) Toggle-button(開關(guān)按鈕) 當(dāng)前定義的開關(guān)值 Slide(滑動(dòng)條) 當(dāng)前的滑動(dòng)整數(shù)值 例如,為將命令中的my_value值賦給參數(shù),可用以下語句: my_command my_parameter=$my_value 如果數(shù)據(jù)區(qū)內(nèi)容為123,那么在ADAMS/View中執(zhí)行命令時(shí): my_command my_parameter=123 缺省情況下,選擇菜單或狀態(tài)設(shè)置框的值為顯示或選擇按鈕的文字,也可以為ADAMS/View的替換指定別的值。在toggle button開關(guān)按鈕值的屬性中,由數(shù)據(jù)區(qū)來設(shè)置開關(guān)數(shù)值。在OptionMenu選項(xiàng)菜單和Radio Box狀態(tài)控制欄,你可以用“|”符來分割多個(gè)選擇。 l $_value——替換包含該對象命令的值。例如,如果是名字為“my_toggle”的按鈕上的命令,則$_value的含義與$_toggle是相同的。 在可能的情況下,應(yīng)該使用$_value的值來替代實(shí)際對象的值,因?yàn)檫@樣更容易理解和維護(hù)。如果在命令中看見了$_value,應(yīng)該知道它代表界面對象的值,另外,如果要改變對象的名字,也不必改變命令。這一點(diǎn)對于toggle buttons,radio box和option menu特別有用,因?yàn)檫@樣可以在相關(guān)聯(lián)的命令中改變這些對象的值。 l $_self,$_parent,$_topgui——它們可使對話框更容易理解和維護(hù)。例如,對話框能用以下命令調(diào)入它的子類的數(shù)據(jù): interface field set field=$_self.myfield strings=… 一般應(yīng)盡可能使用$_self或$_parent命令來指代對象名字,而不用真實(shí)的名字。 l $_1,$_2,$_3——用來指代窗口或?qū)υ捒蝻@示命令相關(guān)的參數(shù),窗口或?qū)υ捒蛞约八鼈兊淖宇惗伎梢栽诿钪惺褂?_1,$_2,$_3。當(dāng)ADAMS/View執(zhí)行命令時(shí),它可替代參數(shù)的當(dāng)前值。 (3) 條件命令替換 替換文本被包含在單引號內(nèi),如果在引號內(nèi)的$name或$value為空,則ADAMS/View除去單引號之間的文本。如果返回文字為空(‘’),該對象無效或不顯示,則$name為空。 條件替代更容易處理選擇或命令中的手工排除參數(shù)。例如,如果使用下列命令,而用戶不提供參數(shù),則該命令就失效了: my_command my_parameter=$my_value… 相反,如果你使用下列命令,則該命令有效: my_command ‘my_parameter=$my_value’ 在手工排除參數(shù)時(shí)可以使用相同的技巧,只要參數(shù)包含在單引號‘’內(nèi),并一次只顯示一個(gè)選項(xiàng)或只有一個(gè)選項(xiàng)有效。 (4) Windows,Dialog Boxes和Container的特殊命令 Windows(窗口),Dialog Boxes(對話框)和Container(界面對象區(qū))都有特殊命令:start(開始),execution(執(zhí)行)和finish command(完成)。當(dāng)顯示對象時(shí)ADAMS/View會(huì)自動(dòng)執(zhí)行開始命令,而且當(dāng)對象被關(guān)閉時(shí)ADAMS/View會(huì)自動(dòng)執(zhí)行完成命令,執(zhí)行命令通過interface dialog_box/window/container execute命令來執(zhí)行。 開始和完成命令有助于對話框的初始化設(shè)置,當(dāng)界面對象被顯示時(shí)將缺省值放入數(shù)據(jù)區(qū)。而完成命令使當(dāng)對象不顯示時(shí),幫助清除參數(shù)設(shè)置。 執(zhí)行命令是指在點(diǎn)擊缺省的按鈕“OK”和“Apply”是所執(zhí)行的命令。 (5) 編輯命令 在對話框編輯器的命令區(qū)按下鼠標(biāo)右鍵就會(huì)彈出選擇菜單,如表11-4所示。通過菜單可以對命令進(jìn)行編輯。 表11-4 編輯器選擇菜單 命令 功能 References 顯示和插入$xxx的對象文本 Pick 選擇對象并在命令中插入名字 Browse 顯示數(shù)據(jù)庫向?qū)Р⒃诿钪胁迦胨x的名字 Cut 出去選擇的文本并將它放在剪切版上 Copy 拷貝選擇的文字到文字緩沖區(qū) Paste 從剪切版上粘貼到光標(biāo)位置 Edit 顯示文本編輯器(缺省的,限于UNIX) 5。測試對話框 用戶在將定制好的對話框保存到數(shù)據(jù)庫以前進(jìn)行測試,具體方法為:. (1)在Option菜單中,選擇Test Box按鈕,ADAMS/View會(huì)顯示該對話框。 (2)測試想要執(zhí)行的對話框命令。 6。保存對話框 在用戶定制好自己的對話框之后,必須要對對話框進(jìn)行保存。點(diǎn)擊在Dialog Box菜單中的Export按鈕,然后選擇Command File按鈕,可以將用戶對話框保存到適當(dāng)?shù)奈恢靡员阆麓握{(diào)用。 7。加載和顯示對話框 用戶可以通過以下命令加載已經(jīng)保存好的對話框:在File菜單中,選擇import按鈕,然后讀入所需的對話框命令文件,用戶定制的對話框就被加載到數(shù)據(jù)庫中。 使用數(shù)據(jù)庫向?qū)Э梢燥@示對話框:標(biāo)準(zhǔn)的ADAMS/View對話框列在前面,以字母順序,接著是用戶定制的對話框,顯示對話框的步驟為: (1) 在Tool菜單中點(diǎn)擊Dialog Box按鈕,然后選擇Display按鈕,則會(huì)出現(xiàn)數(shù)據(jù)庫向?qū)?,其中列出了所有對話框? (2) 選擇所需對話框,并選擇OK按鈕。 11.2 宏命令的使用 宏命令實(shí)際上是一組命令集,它可以執(zhí)行一連串的ADAMS/View命令。創(chuàng)建宏命令時(shí),首先按順序列出想執(zhí)行的ADAMS/View命令的清單,然后就可以將這些命令寫成宏命令的形式。 在宏命令中,也可以使用參數(shù)。每次使用宏命令時(shí),都將通過參數(shù)將數(shù)據(jù)傳給宏。當(dāng)執(zhí)行帶有參數(shù)的宏命令時(shí),ADAMS/View將所提供的值替代到宏命令中。 ADAMS/View對宏命令與其他的ADAMS/View的命令一樣,可以在命令窗口中輸入宏命令,從命令向?qū)е羞x擇它。也可將它包含在其他的宏命令中,或者從自己的定制菜單、對話框或按鈕中執(zhí)行它。 使用宏命令可以實(shí)現(xiàn)以下功能: (1) 自動(dòng)完成重復(fù)性的工作。 (2) 為ADAMS/View建立模型數(shù)據(jù)交換功能。 (3) 自動(dòng)創(chuàng)建整個(gè)模型。 (4) 快速建立機(jī)械系統(tǒng)的多個(gè)變量。 11.2.1 創(chuàng)建宏命令 通??梢酝ㄟ^三種方式創(chuàng)建宏命令:記錄方式、使用宏編輯器來編輯和創(chuàng)建宏命令、通過導(dǎo)入文件來創(chuàng)建宏命令。 1。以記錄方式創(chuàng)建宏命令 (1) 記錄宏 a. 通過如下菜單路徑:Tools==》Macro==》Record/Replay==》Record Start,開 始記錄宏命令。 b. 執(zhí)行想在宏命令中進(jìn)行的操作。 c. 通過如下菜單路徑:Tools==》Macro==》Record/Replay==》Record Stop,可以停止記錄宏。 (2) 回放記錄的宏 通過如下菜單路徑可以回放記錄好的宏命令: Tools==》Macro==》Record/Replay==》Execute Record Maro。. (3) 保存記錄的宏 通過如下菜單路徑,Tools==》Macro==》Record/Replay==》Write Record Macro,將ADAMS/View宏命令保存為macro.cmd的命令格式。 2。使用宏編輯器來編輯和創(chuàng)建宏命令 使用宏編輯器是創(chuàng)建宏命令的另一種方式,具體創(chuàng)建步驟為: (1) 選擇如下菜單命令:Tools==》Macro==》Edit==》New或者M(jìn)odify,然后出現(xiàn)宏命令編輯器窗口,如圖11-8所示。. (2) 如果你選擇Modify,則會(huì)出現(xiàn)數(shù)據(jù)庫向?qū)А? (3) 如果在創(chuàng)建新的宏,則在Macro Name編輯框輸入宏的名字。 (4) 在Command編輯框,輸入執(zhí)行宏命令的命令串,使用宏的名字,選擇Use Macro Name選項(xiàng)。必須注意:所輸入的命令串的名字必須是唯一的,不能重新定義一個(gè)已存在的命令,但可以在已存在的命令中添加新的關(guān)鍵詞。例如,輸入“MARKER CREATE”就是無效的,因?yàn)椤癕ARKER CREATE”是早已存在的命令,但輸入“MARKER GENERATE”就是有效的。 (5) 指明整個(gè)宏命令是否能用單個(gè)的“Undo”命令撤銷。對于非常大的宏命令,單個(gè)的“Undo”會(huì)消耗大量的內(nèi)存,甚至沒有使用撤銷操作都會(huì)顯著地減慢宏命令的執(zhí)行速度。一般情況下是在初始化創(chuàng)建和調(diào)試階段采用“Undo=yes”,當(dāng)確定宏命令可以正常工作之后,切換到“Undo=no”來提高運(yùn)行速度。 圖11-8 宏命令編輯器 (6) 在命令文字區(qū)域,輸入要執(zhí)行的命令,然后選擇OK按鈕。 3。通過導(dǎo)入文件來創(chuàng)建宏命令 通過導(dǎo)入文件來創(chuàng)建宏命令是創(chuàng)建宏命令的第三種方式。具體步驟如下: (1) 選擇如下菜單路徑顯示導(dǎo)入宏對話框:Tools==》Macro==》Read,導(dǎo)入宏對話框如圖11-9 所示。 (2) 在Macro Name編輯框中輸入ADAMS/View將在當(dāng)前數(shù)據(jù)庫中保存宏的名字。 (3) 在File Name編輯框中輸入包含要執(zhí)行命令的文件。 (4) 在User Entered Command編輯框中指明將要執(zhí)行宏命令的命令串,如果不輸入命令串的名字,則缺省為宏命令的名字。 (5) 指明整個(gè)宏命令能否被單個(gè)的“Undo”命令撤銷,對于大的宏命令,單個(gè)的“Undo”命令會(huì)消耗大量的內(nèi)存或者顯著地減慢宏命令執(zhí)行的速度。 (6) 指明包含宏命令幫助文件或者輸入字符串來描敘宏。 (7) 確信你沒有創(chuàng)建過期的對話框,從Create Panel選擇菜單中選擇“no”。 (8) 選擇“OK”。. 圖11-9 導(dǎo)入宏對話框 11.2.2 在宏命令中使用參數(shù) 宏命令的參數(shù)是在實(shí)際執(zhí)行宏命令時(shí)提供給系統(tǒng)信息的占位符,參數(shù)通常以”$”開頭,后面跟著參數(shù)的名字??梢远x多個(gè)參數(shù),也可以將一個(gè)參數(shù)定義多次。 當(dāng)創(chuàng)建宏命令時(shí),ADAMS/View掃描命令文本以確定所有的參數(shù)。當(dāng)執(zhí)行宏命令時(shí),必須為參數(shù)提供值,或者它們有缺省值,ADAMS/View將數(shù)值替代命令中參數(shù)的位置,然后執(zhí)行命令。如果在命令中多次使用相同的參數(shù),ADAMS/View將用同一個(gè)值替代每一個(gè)參數(shù)出現(xiàn)的地方。 1。帶參數(shù)宏命令的例子 下面是一個(gè)宏命令的例子,用它可以解釋如何用宏命令改變力的大小和模型中約束圖標(biāo),宏中的命令名為“icon_size”,約束名為“size”。 constraint attributes constraint_name=.*size_of_icon=$size force attributes force_name=.*size_of_icon=$size 當(dāng)輸入命令: icon_size=25 ADAMS/View執(zhí)行命令為: constraint attributes constraint_name=.*size_of_icon=25 force attributes force_name=.*size_of_icon=25 2。擴(kuò)展參數(shù)值 在某些情況下,ADAMS/View在將參數(shù)替代到命令中之前,可以重新定義和擴(kuò)展參數(shù)值,但ADAMS/View不會(huì)改變數(shù)值。在宏命令中替換時(shí),ADAMS/View不會(huì)轉(zhuǎn)換單位,它會(huì)直接將數(shù)值輸入到命令中,命令本身會(huì)轉(zhuǎn)換單位。 ADAMS/View在將參數(shù)替換到宏命令中時(shí),會(huì)將數(shù)據(jù)庫名擴(kuò)展為全名,擴(kuò)展名使用“.”來分割名字。使用“.”可以讓程序直接訪問數(shù)據(jù)庫值。 例如:下面例子是包含參數(shù)“name”的宏命令“Ipart” list_info part part_name=$name 當(dāng)輸入下列命令時(shí): Ipart name=left_wheel ADAMS/View將全名left_wheel替換$name,并執(zhí)行命令: List_info part part_name=.mod1.left_wheel 3。通用參數(shù)格式 通用參數(shù)格式為$‘name:q1:q2:q3:…’其中: name為參數(shù)的名字,q1,q2,q3…是說明參數(shù)特征的一個(gè)或多個(gè)限定詞。單引號和限定詞是可選擇性的,下面是可能的四種格式: $name; $‘name’; $name::q1:q2:q3:…; $‘name:q1:q2:q3:…’; 4。參數(shù)命名規(guī)則 參數(shù)名必須以字母開頭,余下的名字可為字母(a-z,A-Z),數(shù)值或者下劃線,結(jié)尾字母可為字母,數(shù)字,不能是下劃線。因而,$P、$P1和$PART_1是合法的,而$PART#1和$1P是不合法的。 5。參數(shù)限定詞及其格式 限定詞出現(xiàn)在參數(shù)第一次出現(xiàn)的時(shí)候,以對其屬性進(jìn)行控制。限定詞是可選的也只能在參數(shù)第一次出現(xiàn)時(shí)使用。 參數(shù)的限定詞為: Type(類型) Range(范圍) Count(值) Default(缺省) (1) Type Qualifier Type qualifier是用戶必須輸入的類型,其格式為: T=type T=type(additional data) 其中:type是basic type、database object type或者database object classtype,Additional data是可選的或者需要由數(shù)據(jù)類型決定。 BasicType包括:real、integer、location、orientation、string、function、list(str1,str2,str3,…)和file(path wildcard)。 指明Database Object Type意味著用戶必須輸入已存在該類型對象的名字,其前綴必須為new_來指明該類型的新對象的名字。例如,t=marker為已存在的marker點(diǎn)的名字,新marker點(diǎn)的名字寫為t=new_marker。 下面是另外一些例子: $stiffness:t=real $counter:t=integer $end_point:t=location $attitude:t=orientation $mat:t=marker 可以通過下列步驟在ADAMS/View中察看database object types類型: l 在Tools菜單中,選擇Function Builder。. l 從選擇菜單中,選擇Misc.function。 l 從選擇菜單的列表中,選擇SELECT_TYPE。 l 選擇Assist。 l 在Assist對話框中,輸入all,然后選擇OK。 l 選擇Evaluate。 然后出現(xiàn)所有對象類型的列表。 Database Object-Class Type包括下面一些: (2) Range Qualifiers 一個(gè)range qualifier指明參數(shù)的取值范圍,它僅僅適用于數(shù)值類型,其格式如表11-5所示: 表11-5 range qualifier參數(shù)格式 格式 含義 GT=r 大于r GE=r 大于等于r LT=r 小于r LE=r 小于等于r (3) Count Qualifiers Count Qualifiers指明數(shù)據(jù)的個(gè)數(shù),其格式如表11-6所示: 表11-6 Count Qualifiers參數(shù)格式 格式 含義 C=0 大于或等于1 C=n 等于n C=n,0 大于或等于n C=n,m 從n到m (4) Default Qualifiers Default Qualifiers為可選限定詞,如果參數(shù)沒有缺省的話,用戶必須輸入一個(gè)值來執(zhí)行宏命令。有三種類型的缺省限定詞: Constant——為可選的,如果用戶沒有提供參數(shù)值時(shí),ADAMS/View使用的缺省值。 格式為:D=value Update——為可選的,如果用戶沒有提供參數(shù)值時(shí),ADAMS/View將使用最后一次使用的值。 格式為:U=value Database object——自動(dòng)產(chǎn)生并應(yīng)用缺省的database objects。 格式為:A 6。缺省參數(shù)特性 在命令文本的第一次出現(xiàn)的參數(shù)定義了參數(shù)的特性。如果首次出現(xiàn)時(shí)有限定詞,則該限定詞將決定參數(shù)的特性,如果沒有限定詞,而參數(shù)出現(xiàn)在“=”后,則該參數(shù)從前面的命令參數(shù)繼承了type,count和default,如果參數(shù)既沒有限定詞,也沒有出現(xiàn)在“=”后,則缺省為字符串。 在下面的例子中,參數(shù)“$text”缺省為字符串,因?yàn)樗鼪]有限定詞,也沒有出現(xiàn)在命令中。參數(shù)“$numbers”有限定詞,指明了它一個(gè)或多個(gè)是大于零的整數(shù)。參數(shù)“$part_1”是一個(gè)“par”,因?yàn)樗霈F(xiàn)在“=”后,繼承了前面參數(shù)“part_name”的類型。參數(shù)“$part_2”缺省為字符串,因?yàn)樗鼪]有出現(xiàn)在“=”后,參數(shù)“$part_3”和“$part_4”有都是part。 !Parameter $text is a string !$numbers:t=integer:c=0:gt=0 list_info part part_name=$part_1,$part2 list_info part part_name=$part_3:t=part,$part_4:t=part 11.3 循環(huán)命令和條件命令 ADAMS/View命令語言包含有條件與循環(huán)結(jié)構(gòu)語句,可以用它實(shí)現(xiàn)邏輯判斷和循環(huán)功能。它們可以用在菜單命令、對話框命令和用戶自己編寫的宏命令程序文件中。 11.3.1 循環(huán)命令 循環(huán)命令的主要形式有以下兩種: FOR/END WHILE/END 1。FOR/END循環(huán)結(jié)構(gòu) FOR/END循環(huán)結(jié)構(gòu)的一般格式有兩種,分別如下: (1) 對參數(shù)數(shù)值的循環(huán)操作: FOR VARIABLE_NAME=var START_VALUE=REAL & INCREMENT_VALUE=REAL & END_VALUE=REAL … END 格式中:START_VALUE,INCREMENT_VALUE和END_VALUE可以是值為實(shí)數(shù)的表達(dá)式。INCREMENT_VALUE可以是正數(shù),也可以是負(fù)數(shù),缺省值為1。在循環(huán)體內(nèi)的命令可以調(diào)用循環(huán)變量作為其可用的任何實(shí)數(shù)變量。 格式應(yīng)用實(shí)例如下: variable set variable_name=$_self.num integer=1 for variable_name=i start=1 end=6 part create rigid_body name_and_position part_name & =(eval("ball_"http://$_self.num)) & location=(LOC_RELATIVE_TO({0,0,100*i},.my_model.ground)) & orientation=0,0,0 & relative_to=.my_model.ground variable set variable_name=$_self.num integer=(eval($_self.num+1)) … end variable delete variable_name=$_self.num 在上例中,變量i從1循環(huán)到6,一次建立了ball_1到ball_6共6個(gè)part,其分別相對于ground的位置為(0,0,100)到(0,0,600),在循環(huán)體中,變量$_self.num進(jìn)行了自加。 (2) 對一組模型對象進(jìn)行循環(huán)操作: FOR VARIABLE_NAME=var OBJECT_NAMES=object & TYPE=database_object_type & … END 格式中:循環(huán)變量var為database_object_type類型的變量,它是對OBJECT_NAMES內(nèi)所有database_object_type類型的對象一個(gè)個(gè)地進(jìn)行操作或賦值。 程序?qū)嵗缦拢? variable set variable_name=temp_num integer=1 for variable_name=my_part object_names=.my_model.* type=part part modify part_name=(eval(my_part)) adams_id=(eval(temp_num)) variable set variable_name=temp_num integer=(eval(temp_num+1)) end variable delete variable_name=temp_num 在上例中,ADAMS/View對my_model中的所有part的ID號進(jìn)行重新編碼,從1開始,直至編碼完成。 2。WHILE/END循環(huán)結(jié)構(gòu) WHILE/END循環(huán)結(jié)構(gòu)的一般格式為: WHILE CONDITION=(expression) … END WHILE/END循環(huán)結(jié)構(gòu)的功能是:循環(huán)執(zhí)行WHILE和END之間的命令,直到條件不成立或?yàn)椤?”時(shí)退出循環(huán)。 前述FOR/END的例子也可以用WHILE/END來編程: variable set variable_name=$_self.num integer=1 variable set variable_name=temp_num integer=1 while condition=(temp_num<=6) part create rigid_body name_and_position part_name & =(eval("ball_"http://$_self.num)) & location=(LOC_RELATIVE_TO({0,0,100*i},.my_model.ground)) & orientation=0,0,0 & relative_to=.my_model.ground variable set variable_name=$_self.num integer=(eval($_self.num+1)) … end variable delete variable_name=$_self.num variable delete variable_name=temp_num 11.3.2 條件命令 條件命令的主要形式有以下三種: IF/ELSEIF/ELSE/END BREAK CONTINUE 1。IF/ELSEIF/ELSE/END命令 IF/ELSEIF/ELSE/END命令的功能為:可以用IF、ELSEIF、ELSE和END命令有條件地執(zhí)行一組命令,用來實(shí)現(xiàn)邏輯判斷功能。該組命令包含在IF和END內(nèi)。該條件值取決于表達(dá)式(expression)的邏輯值。在IF/END內(nèi),如果表達(dá)式邏輯值為1,則符合條件而執(zhí)行內(nèi)部命令。如果表達(dá)式邏輯值為0,則不符合條件而執(zhí)行ELSE/END中的命令。該命令可以用在命令語言、宏命令和命令文件中。 IF/ELSEIF/ELSE/END命令的一般格式為: (1) IF CONDITION=(expression) … END (2) IF CONDITION=(expression) … ELSE … END (3) IF CONDITION=(expression) … ELSEIF … ELSE … END 下面是IF/ELSEIF/ELSE/END命令使用的一個(gè)例子: if condition=(db_exists(".my_model.move")) constraint modify motion motion_name=.my_model.rotate adams_id=1 typ=rot & joint_name=.my_model.gibell_rev function="0.0" constraint modify motion motion_name=.my_model.move adams_id=2 typ=rot & joint_name=.my_model.dummy1_rev function="0.0" else gimovement constraint create motion motion_name=.my_model.rotate adams_id=1 typ=rot & joint_name=.my_model.gibell_rev function="0.0" constraint create motion motion_name=.my_model.move adams_id=2 typ=rot & joint_name=.my_model.dummy1_rev function="0.0" end 在上例中,如果數(shù)據(jù)庫中存在.my_model.move,則對其進(jìn)行修改,如果不存在.my_model.move,則調(diào)用命令文件gimovemen創(chuàng)建它。 2。BREAK命令 BREAK命令用在循環(huán)體內(nèi),用于中斷命令并無條件退出循環(huán)命令的執(zhí)行。 格式為: BREAK 下面是一段程序例子: variable creat variable_name=temp_num integer_value=1 while condition=(temp_num<=5) if condition=(eval(DB_EXISTS(“MAR”//temp_num))) break end marker creat marker_name=(eval(“MAR”//temp_num)) & location=(eval(temp_num)),0,0 variable set variable_name=temp_num integer=(eval(temp_num +1)) end variable delete variable_name=temp_num 上述命令創(chuàng)建了名稱為MAR1、MAR2、MAR3、MAR4和MAR5的5個(gè)Markers,但如果某個(gè)Markers存在,則ADAMS/View就退出循環(huán),停止創(chuàng)建Markers。 3。CONTINUE命令 CONTINUE命令也是用在循環(huán)體內(nèi),用于中斷命令并檢查循環(huán)條件,如果不符合循環(huán)命令退出條件則從循環(huán)體的開頭重新執(zhí)行命令;如果符合循環(huán)命令退出條件則退出循環(huán)命令的執(zhí)行。 格式為: CONTINUE 程序例子: variable creat variable_name=temp_num integer_value=1 while condition=(temp_num<=5) if condition=(temp_num==3) continue end marker creat marker_name=(eval(“MAR”//temp_num)) & location=(eval(temp_num)),0,0 variable set variable_name=temp_num integer=(eval(temp_num +1)) end variable delete variable_name=temp_num 上述命令創(chuàng)建了名稱為MAR1、MAR2、MAR4和MAR5的4個(gè)Markers,而錯(cuò)過了MAR3,這是因?yàn)楫?dāng)temp_num的值為3時(shí),ADAMS/View就會(huì)執(zhí)行CONTINUE命令,程序跳到WHILE- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- ADAMS 二次開發(fā) 實(shí)例
鏈接地址:http://m.jqnhouse.com/p-6592525.html