設(shè)計仿真 | Adams變拓?fù)浞治鲋卣{(diào)子程序

01

文章背景

變拓?fù)浞治龅南嚓P(guān)內(nèi)容在前期文章,點擊可查看《Adams變拓?fù)浞治鲋畟鞲衅?/a>》中已有描述,通過Adams/Sensor可以有效地完成眾多變拓?fù)浞治龅墓こ绦枨蟆1疚膶⑦M(jìn)一步挖掘Adams進(jìn)行變拓?fù)浞治龅南嚓P(guān)功能,方便大家的工程應(yīng)用。子程序作為Adams一種常用的高級功能,由眾多熟悉Adams的工程師展開應(yīng)用,實現(xiàn)了很多貌似不可能完成的任務(wù)。因為,子程序作為一種更加接近Adams內(nèi)核的對象,可以實現(xiàn)很多界面功能不易實現(xiàn)的應(yīng)用場景。為此,針對變拓?fù)浞治鲞@一場景,我們在眾多子程序中選擇CBKSUB子程序展開說明和應(yīng)用,以期為有這方面需求的工程師拓展出新的使用模式。

02

回調(diào)子程序

有關(guān)回調(diào)子程序的相關(guān)情況請參考《Adams回調(diào)函數(shù)功能解析》,這里不再贅述。本文主要描述用于實現(xiàn)仿真過程中不同腳本命令調(diào)用的回調(diào)函數(shù)子程序的內(nèi)容。

image.png

圖 1回調(diào)子程序源代碼

本程序的基本邏輯是,當(dāng)回調(diào)函數(shù)遇到傳感器觸發(fā)事件發(fā)生時,首先會進(jìn)行命令字符串的構(gòu)建,然后將命令傳遞給Modify函數(shù),Consub可以調(diào)用Modify,在執(zhí)行了Modify發(fā)出的命令后,程序控制返回到Consub,關(guān)于Consub調(diào)用Modify的機(jī)制這里不展開。但這里需要注意一個使用特點,Adams/Solver會忽略命令末尾5個空格之后的部分,因此,當(dāng)使用字符功能構(gòu)建命令時,需要注意將多余的空格去掉。

對于上述邏輯,如果不想對源代碼有過多的認(rèn)識,只需要考慮后面的使用流程就可以,核心思想是每個sensor對應(yīng)一個Acf文件,在Acf文件中有相關(guān)的命令,當(dāng)傳感器觸發(fā)事件發(fā)生后,程序會將該傳感器的ID傳輸?shù)紻ata數(shù)組中,然后,命令字符串的構(gòu)建會綜合這個ID,這樣就形成了那個sensor觸發(fā),執(zhí)行對應(yīng)的Acf文件的目的。具體流程如下:

dd0e47daf7f7b39a94faa10d109d95f.png

圖 2回調(diào)函數(shù)與sensor聯(lián)合使用流程

說明,上圖中綠色框針對的sensor定義以及Acf文件之間有一定的對應(yīng)關(guān)系,在同一個模型中可以有多個sensor的存在,當(dāng)然需要每個sensor有對應(yīng)的Acf文件存在。回調(diào)源程序按照常規(guī)編譯流程生成DLL文件供Callback對象調(diào)用。仿真時不再需要寫復(fù)雜的仿真腳本,通過腳本命令也實現(xiàn)不了本功能。

03

應(yīng)用案例

應(yīng)用案例的目的,實現(xiàn)模型中多個sensor存在情況下,不考慮觸發(fā)順序,按照實際情況,哪個sensor觸發(fā)就執(zhí)行對應(yīng)的命令。如果觸發(fā)的順序已知,可以采用常規(guī)的仿真腳本即可實現(xiàn)。

基本建模,建立四個球體,從上到下分別為Part_a,Part_b,Part_c,Part_d,其中前兩個與大地建立水平滑移副,后兩個與大地建立固定副,并且前兩個在質(zhì)心處作用水平力,分別為200N,100N(后繼互換),由于重力加速度豎直向下,固定副解鎖后會自由落體,以表征sensor事件觸發(fā)后的動作。最后分別定義兩個sensor,事件函數(shù)分別為a,b兩球的水平速度,比較值分別為10米每秒和15米每秒,由于這里長度采用毫米為單位注意轉(zhuǎn)化。

image.png

圖 3基本模型

建立的sensor,由于要和回調(diào)函數(shù)聯(lián)合應(yīng)用,此時要求sensor必須有一個觸發(fā)后的動作,因此,sensor_2類似于sensor_1具體如下:

image.png

圖 4左側(cè)為sensor定義,右側(cè)為觸發(fā)后的動作

這里選擇了最后一個動作,其實程序并不關(guān)注這個動作的數(shù)值是什么,只關(guān)注有沒有這個動作。通過命令庫找到Callback的定義項,完成回調(diào)對象的定義,如下所示:

image.png

圖 5回調(diào)對象定義

還需完成與傳感器對應(yīng)的Acf文件的創(chuàng)建,這里有兩個傳感器,因此定義兩個Acf文件,具體如下:

image.png

圖 6Acf文件定義

定義該文件需要注意其名稱以及同sensor的ID號之間的聯(lián)系,這個在源程序中以有過說明。實現(xiàn)的目的,當(dāng)sensor_1觸發(fā)后將3號joint抑制,也即part_c小球之后會自由落體;當(dāng)sensor_2觸發(fā)后將4號joint抑制,也即part_d小球之后會自由落體。當(dāng)然,將各自的sensor在觸發(fā)后關(guān)閉。

提交仿真,可以使用交互式仿真也可以使用腳本計算,但是如果使用腳本計算要注意不能再有對傳感器的操作,因為本案例找的就是傳感器觸發(fā)事件。

image.png

圖 7 0時刻動畫

上圖展示初始狀態(tài)動畫,紅色球上施加200N載荷,綠色球上施加100N載荷,分別沿水平方向加速運動,當(dāng)紅色球達(dá)到10米每秒速度時sensor_1觸發(fā),當(dāng)綠色球達(dá)到15米每秒速度時sensor_2觸發(fā),可以觀察右側(cè)曲線為各自觸發(fā)的時刻。

image.png圖 8 Sensor_1觸發(fā)而sensor_2沒有觸發(fā)動畫

當(dāng)sensor_1觸發(fā)后,黃色球體與大地之間的固定副解鎖,可參考sensor_1對應(yīng)的Acf命令,將Joint_3抑制,黃色球在重力作用下自由落體,可通過動畫圖中的白色軌跡線看到其已經(jīng)在動了。

image.png

圖 9 Sensor_2觸發(fā)動畫

同樣地,等到sensor_2也觸發(fā)后,靚色球體與大地之間的固定副解鎖,可參考sensor_2對應(yīng)的Acf命令,將Joint_4抑制,靚色球在重力作用下自由落體,其已經(jīng)運動并且有軌跡,但是當(dāng)前兩個球的軌跡重合。

04

文章總結(jié)

通過利用回調(diào)函數(shù)子程序的功能,拾取傳感器觸發(fā)事件,通過編程將每個傳感器觸發(fā)對應(yīng)的命令選擇執(zhí)行,實現(xiàn)了多個傳感器存在情況下,觸發(fā)次序無關(guān)的需求。通過上述流程說明和實例展示,該方法非常簡單有效,適合實際工程所需。并且,可以面對交互式仿真或者腳本仿真使用,應(yīng)用范圍較廣,可解決這類較復(fù)雜工況問題,為多體動力學(xué)的變拓?fù)浞治鎏峁┝诵碌慕鉀Q方法。

登錄后免費查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

1