ADAMS二次開發(fā)及實例.doc
《ADAMS二次開發(fā)及實例.doc》由會員分享,可在線閱讀,更多相關《ADAMS二次開發(fā)及實例.doc(70頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第11章 ADAMS二次開發(fā)及實例 ADAMS具有很強的二次開發(fā)功能,包括ADAMS/View界面的用戶化設計,利用cmd語言實現(xiàn)自動建模和仿真控制,通過編制用戶子程序滿足用戶的某些特定需求,甚至可以拓展ADAMS的功能。 本章主要介紹如何定制用戶化界面、宏命令的用法和條件循環(huán)命令的用法,以及綜合以上功能的應用實例。由于用戶子程序的主要內(nèi)容已在第9章進行了詳細介紹,因此本章只對所涉及到的用戶子程序編譯聯(lián)接操作過程進行簡單介紹。 11.1 定制用戶界面 ADAMS/View的界面對象都是以層次結(jié)構(gòu)存儲在模型數(shù)據(jù)庫中,類似于零件模型的層次結(jié)構(gòu)。所有定制的界面對象都存儲在名為GUI的數(shù)據(jù)庫中,該數(shù)據(jù)庫可以很方便地管理所有的標準界面對象。如圖11-1所示。 圖11-1 界面對象的層次結(jié)構(gòu) 最上層的界面對象是窗口和對話框。如果主要建模窗口起名為main的話,其數(shù)據(jù)庫全名應為.gui.main。 盡管窗口和對話框看起來很相似,但它們卻是很不相同的。窗口通常是在用戶工作的時候在屏幕上停留一段時間,而對話框通常是在用戶輸入數(shù)據(jù)或是進行訪問控制時才會出現(xiàn)。窗口有工具條和菜單欄,窗口和對話框也包含其他的界面對象如按鈕,標簽等等。 大多數(shù)用戶化操作涉及到創(chuàng)建對話框或者修改標準對話框。但若不用創(chuàng)建一個完整的用戶化界面時,則通常只用修改菜單條和工具欄。 ADAMS所包含界面對象屬性如表11-1所示。 表11-1 ADAMS所包含界面對象屬性 界面對象: 對 象 屬 性: Window(窗口) 可包含用戶自定義的菜單條和工具條 可有一個以上的菜單條,但一次只能顯示一個 包含所有低層次的界面對象 Toolbar(工具條) 出現(xiàn)在窗口上端或下端的子區(qū)域 能包含其它的對象 Menu Bar(菜單條) 出現(xiàn)在窗口上端 可有子菜單 僅用于控制菜單 Menu(菜單) 包含三種類型:下拉式、彈出式或子菜單 可包含按鈕、開關按鈕、分割條和子菜單 Dialog box(對話框) 除菜單條和工具條之外還可包含其他對象 Container(界面對象區(qū)) 包含在對話框,窗口和工具條內(nèi)的子區(qū)域 可包含其他對象 Button stack(按鈕串) 可包含多個按鈕,而只顯示一個按鈕 僅一個按鈕被激活 可通過右鍵操作顯示所有按鈕. Lable(標簽) 用在對話框中顯示文本和圖象 Field(數(shù)據(jù)區(qū)) 用于用戶輸入信息 Button(按鈕) 激活操作 在按鈕上顯示文本和圖象對相應操作進行提示 Toggle button(開關按鈕) 顯示激活狀態(tài)的按鈕 Seperator(分割線) 畫出水平線分割線 Slide(滑動條) 通過滑動條設置當前范圍內(nèi)的整數(shù)值,而不用鍵入數(shù)值 Option menu(可選菜單項) 在多個菜單項中作一選擇 包含一個彈出菜單的圖框 只顯示一行選定菜單項 Radio boa(狀態(tài)設置框) 設置狀態(tài)和模式 Tab container(標簽界面對象) 給界面和對話框設置標簽 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菜單文件,菜單文件是按照一定的語法書寫的解釋性程序文件,在默認情況下,菜單編輯器窗口里顯示的是描述ADAMS標準菜單的菜單文件,通過按照一定的語法規(guī)則修改該菜單文件,就可以得到用戶化的菜單。 下面的程序段是對標準ADAMS/View菜單文件的節(jié)選,粗略顯示了標準ADAMS/View菜單文件的各個菜單項和File菜單項所包含的按鈕和分割條界面對象,以便讀者能把握菜單文件的全貌,如圖11-3所示為相應的圖形界面。 圖11-3 ADAMS/View菜單 MENU1 &File !File菜單項 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菜單項 …… MENU1 &View !View菜單項 …… MENU1 &Build !Build菜單項 …… MENU1 &Simulate !Simulate菜單項 …… MENU1 &Review !Review菜單項 …… MENU1 Settin&gs !Settings菜單項 …… MENU1 &Tools !Tools菜單項 …… MENU1 &Help ! Help菜單項 在菜單編輯器窗口中對菜單文件進行用戶化修改后,點擊編輯器窗口上的Menu bar菜單項下的Export Text按鈕可將用戶化的菜單文件到用戶二次開發(fā)文件目錄中。如果要重新調(diào)入菜單,使用菜單編輯器的Import Text按鈕調(diào)入相應的菜單文件,然后點擊Apply按鈕;或者直接通過以下菜單路徑來實現(xiàn): Main menu==》Tools==》Menu==》Read……. 2。菜單語法 如前所述,菜單文件實際上是用解釋性語言編制的程序段,下面介紹該解釋性語言的編程語法。 菜單對象有四種類型:菜單、按鈕或圖標按鈕、開關按鈕和分割線,分別用關鍵詞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是必須要的,而對于其他的對象則為可選項。如果忽略級別,ADAMS/View將默認該對象屬于最后一個MENU。 (2) lable是出現(xiàn)在菜單中的文本。對于圖標按鈕,可以指定圖標的名字,或者其他圖形格式文件。在Windows中圖標名字為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時菜單出現(xiàn)在菜單欄上,n≥2時菜單出現(xiàn)在下拉菜單中。 TITLE=字符串,出現(xiàn)在菜單欄上,可以在表提前加一個&字符用作記憶法(如“&File”在菜單上顯示為File)。 NAME=模型數(shù)據(jù)庫中對象的名字。 HELP=出現(xiàn)在狀態(tài)欄中的文字。 創(chuàng)建BUTTON 每個按鈕對應一個菜單命令,可以在下拉菜單或是子菜單上放置按鈕。 語法: BUTTONn LABLE ACCELERATOR NAME=name HELP=help CMD=command 參數(shù): n=整數(shù)值,表明按鈕出現(xiàn)的層數(shù)。N=2時按鈕出現(xiàn)在下拉菜單上,n≥3時按鈕出現(xiàn)在子菜單上。 LABLE=按鈕名,出現(xiàn)在下拉菜單或子菜單上。 ACCELERATOR=鍵或鍵組用來執(zhí)行菜單命令。 NAME=模型數(shù)據(jù)庫中菜單對象的名字。 HELP=出現(xiàn)在狀態(tài)條上的文字。 CMD=點擊按鈕時所執(zhí)行的命令,當有:多行命令時,每一行前面都要加CMD。 創(chuàng)建分隔符(SEPERATOR) 在下拉菜單和子菜單中的各項目之間添加分割線。 語法: SEPERATORn 參數(shù): n=整數(shù)值,表明分隔符出現(xiàn)的層數(shù),n=2時分隔符出現(xiàn)在下拉菜單中,n=3時分隔符出現(xiàn)在子菜單中。 創(chuàng)建開關按鈕TOGGLE 用于在兩種狀態(tài)之間設置切換開關,開關按鈕可以在下拉菜單或是在子菜單上。 語法: TOGGLEn TITLE NAME=name HELP=help STATE=state CMD=command 其參數(shù)含義同上其他對象。 下面是一個利用菜單編輯器定制用戶化菜單的例子,該例在ADAMS/View標準菜單的Tools菜單項和Help菜單項之間定制了用戶自己的菜單項MyMenu2003,通過展開該菜單項顯示了用戶菜單各層次之間的關系,如圖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中使用的對話框包括各種界面對象,如標簽、數(shù)據(jù)區(qū)、按鈕等等。可以使用ADAMS對話框編輯器來創(chuàng)建和修改對話框以更好地滿足用戶的需要。例如為標準對話框添加一個按鈕來包含要作的選項,或添加一個對話框以執(zhí)行經(jīng)常運行的步驟等等。利用對話框編輯器創(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欄中輸入你的對話框的標題,然后選擇想在對話框上添加的默認按鈕。 (4) 選擇OK按鈕完成設置,.于是出現(xiàn)一個新對話框如圖11-7所示。 圖11-7新創(chuàng)建的對話框 2。修改對話框 可以利用對話框編輯器對創(chuàng)建好的對話框進行修改,可以添加各種不同的界面對象到對話框中,設計布局、外觀、命令和對話框?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——激活操作;在按鈕上有顯示該操作的圖象,標題或文字。 (4) Toggle button——顯示激活狀態(tài)。 (5) Seperator——劃一條水平線。 (6) Slider——設置對象的數(shù)值而不用鍵入數(shù)據(jù)。 (7) Option menu——從多個選擇中挑選一個,有彈出式圖框以顯示整個菜單。 (8) Button stack——設置狀態(tài)。 (9) Button stack——包含多個按鈕,可通過右鍵彈出所有按鈕。 (10) Container——可添加信息。 利用對話框編輯器為用戶定制對話框添加界面對象的步驟為: (1) 在Create菜單中,選擇想添加的對象。 (2) 將鼠標放在想添加對象的對話框中。 (3) 放下鼠標左鍵,并拖動來創(chuàng)建對象。 所有界面對象的屬性都可以通過對話框編輯器進行修改。 4。在對話框中使用命令 在用戶定制對話框中,大多數(shù)界面對象都對應著一個ADAMS/View可執(zhí)行命令,這些命令是為了完成用戶希望的某項功能,或改變模型,或改變用戶輸入數(shù)據(jù),或作出選擇。. 可以用ADAMS/View命令語言(cmd)來為對象創(chuàng)建命令。也可以通過命令向?qū)碚业剿枰拿睢R坏┠阏业矫?,就可將它從命令窗口和log文件中拷貝,并粘貼或鍵入到命令編輯框。 (1) 察看對象的命令 可以通過如下操作查看界面對象所對應的命令: l 雙擊你想察看命令的對象。 l 從菜單的Attribute選項中,選擇Commands。 (2) 將命令替換成文本 在執(zhí)行命令之前,ADAMS/View會執(zhí)行一些文本替代操作。這些替代操作就是用界面對象的屬性值來取代替換文本,并將其用在命令中。替代文本表字符為“$”,表明替代文本的位置。有四種形式的替代文本: l $object_name——其名字與界面對象的名字相同。當ADAMS/View執(zhí)行命令時,它會將當前object_name的值替換為$object_name的值。如表11-3所示列出了不同界面對象的值。 表11-3 不同界面對象的值 對象 數(shù)值含義 Field(數(shù)據(jù)區(qū)) 當前數(shù)據(jù)區(qū)內(nèi)容 Option-menu(可選菜單項) 當前選定的數(shù)據(jù) Radio-box(狀態(tài)設置框) 當前選定的數(shù)據(jù) Toggle-button(開關按鈕) 當前定義的開關值 Slide(滑動條) 當前的滑動整數(shù)值 例如,為將命令中的my_value值賦給參數(shù),可用以下語句: my_command my_parameter=$my_value 如果數(shù)據(jù)區(qū)內(nèi)容為123,那么在ADAMS/View中執(zhí)行命令時: my_command my_parameter=123 缺省情況下,選擇菜單或狀態(tài)設置框的值為顯示或選擇按鈕的文字,也可以為ADAMS/View的替換指定別的值。在toggle button開關按鈕值的屬性中,由數(shù)據(jù)區(qū)來設置開關數(shù)值。在OptionMenu選項菜單和Radio Box狀態(tài)控制欄,你可以用“|”符來分割多個選擇。 l $_value——替換包含該對象命令的值。例如,如果是名字為“my_toggle”的按鈕上的命令,則$_value的含義與$_toggle是相同的。 在可能的情況下,應該使用$_value的值來替代實際對象的值,因為這樣更容易理解和維護。如果在命令中看見了$_value,應該知道它代表界面對象的值,另外,如果要改變對象的名字,也不必改變命令。這一點對于toggle buttons,radio box和option menu特別有用,因為這樣可以在相關聯(lián)的命令中改變這些對象的值。 l $_self,$_parent,$_topgui——它們可使對話框更容易理解和維護。例如,對話框能用以下命令調(diào)入它的子類的數(shù)據(jù): interface field set field=$_self.myfield strings=… 一般應盡可能使用$_self或$_parent命令來指代對象名字,而不用真實的名字。 l $_1,$_2,$_3——用來指代窗口或?qū)υ捒蝻@示命令相關的參數(shù),窗口或?qū)υ捒蛞约八鼈兊淖宇惗伎梢栽诿钪惺褂?_1,$_2,$_3。當ADAMS/View執(zhí)行命令時,它可替代參數(shù)的當前值。 (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ù)包含在單引號‘’內(nèi),并一次只顯示一個選項或只有一個選項有效。 (4) Windows,Dialog Boxes和Container的特殊命令 Windows(窗口),Dialog Boxes(對話框)和Container(界面對象區(qū))都有特殊命令:start(開始),execution(執(zhí)行)和finish command(完成)。當顯示對象時ADAMS/View會自動執(zhí)行開始命令,而且當對象被關閉時ADAMS/View會自動執(zhí)行完成命令,執(zhí)行命令通過interface dialog_box/window/container execute命令來執(zhí)行。 開始和完成命令有助于對話框的初始化設置,當界面對象被顯示時將缺省值放入數(shù)據(jù)區(qū)。而完成命令使當對象不顯示時,幫助清除參數(shù)設置。 執(zhí)行命令是指在點擊缺省的按鈕“OK”和“Apply”是所執(zhí)行的命令。 (5) 編輯命令 在對話框編輯器的命令區(qū)按下鼠標右鍵就會彈出選擇菜單,如表11-4所示。通過菜單可以對命令進行編輯。 表11-4 編輯器選擇菜單 命令 功能 References 顯示和插入$xxx的對象文本 Pick 選擇對象并在命令中插入名字 Browse 顯示數(shù)據(jù)庫向?qū)Р⒃诿钪胁迦胨x的名字 Cut 出去選擇的文本并將它放在剪切版上 Copy 拷貝選擇的文字到文字緩沖區(qū) Paste 從剪切版上粘貼到光標位置 Edit 顯示文本編輯器(缺省的,限于UNIX) 5。測試對話框 用戶在將定制好的對話框保存到數(shù)據(jù)庫以前進行測試,具體方法為:. (1)在Option菜單中,選擇Test Box按鈕,ADAMS/View會顯示該對話框。 (2)測試想要執(zhí)行的對話框命令。 6。保存對話框 在用戶定制好自己的對話框之后,必須要對對話框進行保存。點擊在Dialog Box菜單中的Export按鈕,然后選擇Command File按鈕,可以將用戶對話框保存到適當?shù)奈恢靡员阆麓握{(diào)用。 7。加載和顯示對話框 用戶可以通過以下命令加載已經(jīng)保存好的對話框:在File菜單中,選擇import按鈕,然后讀入所需的對話框命令文件,用戶定制的對話框就被加載到數(shù)據(jù)庫中。 使用數(shù)據(jù)庫向?qū)Э梢燥@示對話框:標準的ADAMS/View對話框列在前面,以字母順序,接著是用戶定制的對話框,顯示對話框的步驟為: (1) 在Tool菜單中點擊Dialog Box按鈕,然后選擇Display按鈕,則會出現(xiàn)數(shù)據(jù)庫向?qū)?,其中列出了所有對話框? (2) 選擇所需對話框,并選擇OK按鈕。 11.2 宏命令的使用 宏命令實際上是一組命令集,它可以執(zhí)行一連串的ADAMS/View命令。創(chuàng)建宏命令時,首先按順序列出想執(zhí)行的ADAMS/View命令的清單,然后就可以將這些命令寫成宏命令的形式。 在宏命令中,也可以使用參數(shù)。每次使用宏命令時,都將通過參數(shù)將數(shù)據(jù)傳給宏。當執(zhí)行帶有參數(shù)的宏命令時,ADAMS/View將所提供的值替代到宏命令中。 ADAMS/View對宏命令與其他的ADAMS/View的命令一樣,可以在命令窗口中輸入宏命令,從命令向?qū)е羞x擇它。也可將它包含在其他的宏命令中,或者從自己的定制菜單、對話框或按鈕中執(zhí)行它。 使用宏命令可以實現(xiàn)以下功能: (1) 自動完成重復性的工作。 (2) 為ADAMS/View建立模型數(shù)據(jù)交換功能。 (3) 自動創(chuàng)建整個模型。 (4) 快速建立機械系統(tǒng)的多個變量。 11.2.1 創(chuàng)建宏命令 通常可以通過三種方式創(chuàng)建宏命令:記錄方式、使用宏編輯器來編輯和創(chuàng)建宏命令、通過導入文件來創(chuàng)建宏命令。 1。以記錄方式創(chuàng)建宏命令 (1) 記錄宏 a. 通過如下菜單路徑:Tools==》Macro==》Record/Replay==》Record Start,開 始記錄宏命令。 b. 執(zhí)行想在宏命令中進行的操作。 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或者Modify,然后出現(xiàn)宏命令編輯器窗口,如圖11-8所示。. (2) 如果你選擇Modify,則會出現(xiàn)數(shù)據(jù)庫向?qū)А? (3) 如果在創(chuàng)建新的宏,則在Macro Name編輯框輸入宏的名字。 (4) 在Command編輯框,輸入執(zhí)行宏命令的命令串,使用宏的名字,選擇Use Macro Name選項。必須注意:所輸入的命令串的名字必須是唯一的,不能重新定義一個已存在的命令,但可以在已存在的命令中添加新的關鍵詞。例如,輸入“MARKER CREATE”就是無效的,因為“MARKER CREATE”是早已存在的命令,但輸入“MARKER GENERATE”就是有效的。 (5) 指明整個宏命令是否能用單個的“Undo”命令撤銷。對于非常大的宏命令,單個的“Undo”會消耗大量的內(nèi)存,甚至沒有使用撤銷操作都會顯著地減慢宏命令的執(zhí)行速度。一般情況下是在初始化創(chuàng)建和調(diào)試階段采用“Undo=yes”,當確定宏命令可以正常工作之后,切換到“Undo=no”來提高運行速度。 圖11-8 宏命令編輯器 (6) 在命令文字區(qū)域,輸入要執(zhí)行的命令,然后選擇OK按鈕。 3。通過導入文件來創(chuàng)建宏命令 通過導入文件來創(chuàng)建宏命令是創(chuàng)建宏命令的第三種方式。具體步驟如下: (1) 選擇如下菜單路徑顯示導入宏對話框:Tools==》Macro==》Read,導入宏對話框如圖11-9 所示。 (2) 在Macro Name編輯框中輸入ADAMS/View將在當前數(shù)據(jù)庫中保存宏的名字。 (3) 在File Name編輯框中輸入包含要執(zhí)行命令的文件。 (4) 在User Entered Command編輯框中指明將要執(zhí)行宏命令的命令串,如果不輸入命令串的名字,則缺省為宏命令的名字。 (5) 指明整個宏命令能否被單個的“Undo”命令撤銷,對于大的宏命令,單個的“Undo”命令會消耗大量的內(nèi)存或者顯著地減慢宏命令執(zhí)行的速度。 (6) 指明包含宏命令幫助文件或者輸入字符串來描敘宏。 (7) 確信你沒有創(chuàng)建過期的對話框,從Create Panel選擇菜單中選擇“no”。 (8) 選擇“OK”。. 圖11-9 導入宏對話框 11.2.2 在宏命令中使用參數(shù) 宏命令的參數(shù)是在實際執(zhí)行宏命令時提供給系統(tǒng)信息的占位符,參數(shù)通常以”$”開頭,后面跟著參數(shù)的名字??梢远x多個參數(shù),也可以將一個參數(shù)定義多次。 當創(chuàng)建宏命令時,ADAMS/View掃描命令文本以確定所有的參數(shù)。當執(zhí)行宏命令時,必須為參數(shù)提供值,或者它們有缺省值,ADAMS/View將數(shù)值替代命令中參數(shù)的位置,然后執(zhí)行命令。如果在命令中多次使用相同的參數(shù),ADAMS/View將用同一個值替代每一個參數(shù)出現(xiàn)的地方。 1。帶參數(shù)宏命令的例子 下面是一個宏命令的例子,用它可以解釋如何用宏命令改變力的大小和模型中約束圖標,宏中的命令名為“icon_size”,約束名為“size”。 constraint attributes constraint_name=.*size_of_icon=$size force attributes force_name=.*size_of_icon=$size 當輸入命令: icon_size=25 ADAMS/View執(zhí)行命令為: constraint attributes constraint_name=.*size_of_icon=25 force attributes force_name=.*size_of_icon=25 2。擴展參數(shù)值 在某些情況下,ADAMS/View在將參數(shù)替代到命令中之前,可以重新定義和擴展參數(shù)值,但ADAMS/View不會改變數(shù)值。在宏命令中替換時,ADAMS/View不會轉(zhuǎn)換單位,它會直接將數(shù)值輸入到命令中,命令本身會轉(zhuǎn)換單位。 ADAMS/View在將參數(shù)替換到宏命令中時,會將數(shù)據(jù)庫名擴展為全名,擴展名使用“.”來分割名字。使用“.”可以讓程序直接訪問數(shù)據(jù)庫值。 例如:下面例子是包含參數(shù)“name”的宏命令“Ipart” list_info part part_name=$name 當輸入下列命令時: 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ù)特征的一個或多個限定詞。單引號和限定詞是可選擇性的,下面是可能的四種格式: $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ù)第一次出現(xiàn)時使用。 參數(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點的名字,新marker點的名字寫為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 一個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ù)的個數(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ù)沒有缺省的話,用戶必須輸入一個值來執(zhí)行宏命令。有三種類型的缺省限定詞: Constant——為可選的,如果用戶沒有提供參數(shù)值時,ADAMS/View使用的缺省值。 格式為:D=value Update——為可選的,如果用戶沒有提供參數(shù)值時,ADAMS/View將使用最后一次使用的值。 格式為:U=value Database object——自動產(chǎn)生并應用缺省的database objects。 格式為:A 6。缺省參數(shù)特性 在命令文本的第一次出現(xiàn)的參數(shù)定義了參數(shù)的特性。如果首次出現(xiàn)時有限定詞,則該限定詞將決定參數(shù)的特性,如果沒有限定詞,而參數(shù)出現(xiàn)在“=”后,則該參數(shù)從前面的命令參數(shù)繼承了type,count和default,如果參數(shù)既沒有限定詞,也沒有出現(xiàn)在“=”后,則缺省為字符串。 在下面的例子中,參數(shù)“$text”缺省為字符串,因為它沒有限定詞,也沒有出現(xiàn)在命令中。參數(shù)“$numbers”有限定詞,指明了它一個或多個是大于零的整數(shù)。參數(shù)“$part_1”是一個“par”,因為它出現(xiàn)在“=”后,繼承了前面參數(shù)“part_name”的類型。參數(shù)“$part_2”缺省為字符串,因為它沒有出現(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)語句,可以用它實現(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ù)的表達式。INCREMENT_VALUE可以是正數(shù),也可以是負數(shù),缺省值為1。在循環(huán)體內(nèi)的命令可以調(diào)用循環(huán)變量作為其可用的任何實數(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個part,其分別相對于ground的位置為(0,0,100)到(0,0,600),在循環(huán)體中,變量$_self.num進行了自加。 (2) 對一組模型對象進行循環(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類型的對象一個個地進行操作或賦值。 程序?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號進行重新編碼,從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之間的命令,直到條件不成立或為“0”時退出循環(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í)行一組命令,用來實現(xiàn)邏輯判斷功能。該組命令包含在IF和END內(nèi)。該條件值取決于表達式(expression)的邏輯值。在IF/END內(nèi),如果表達式邏輯值為1,則符合條件而執(zhí)行內(nèi)部命令。如果表達式邏輯值為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命令使用的一個例子: 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,則對其進行修改,如果不存在.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個Markers,但如果某個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個Markers,而錯過了MAR3,這是因為當temp_num的值為3時,ADAMS/View就會執(zhí)行CONTINUE命令,程序跳到WHILE- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關 鍵 詞:
- ADAMS 二次開發(fā) 實例
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權(quán),請勿作他用。
鏈接地址:http://www.820124.com/p-6592525.html