解鎖RecurDyn高級功能:用戶子程序USUB
USUB(User-Defined Subroutine)是RecurDyn提供的一個強大工具,允許用戶通過自定義子程序擴展仿真功能。USUB提供了在RecurDyn環境中實現復雜仿真任務的靈活性,使用戶能夠編寫自定義代碼來模擬特定的物理現象或控制策略。USUB主要采用C++語言編寫,并通過RecurDyn的API與仿真系統進行交互。
USUB的使用場景有哪些:
復雜力學模型的實現:在標準的RecurDyn庫中,有些復雜的力學現象可能無法直接模擬。通過USUB,用戶可以編寫自己的子程序,定義特殊的力學關系和行為。例如,模擬非線性彈簧阻尼系統、特定材料的應力應變關系等。
控制系統的集成:對于包含控制系統的機械系統仿真,通過USUB,用戶可以將自己的控制算法嵌入到仿真模型中。這對于研究控制策略對系統動態行為的影響非常有用。
自定義約束和力:在多體動力學仿真中,某些特定的約束條件或作用力可能無法通過標準工具實現。USUB允許用戶定義這些自定義的約束和力,使得仿真更加貼近實際情況。
USUB向導及安裝注意事項:
本文將介紹如何在Microsoft? Developer Studio中使用用戶子程序向導,輕松創建并集成RecurDyn用戶子程序,幫助用戶實現復雜的仿真任務。
用戶子程序向導可在 MicrosoftTM Developer Studio 中使用,可輕松創建用戶子程序。向導首先創建類似模板的源文件,然后創建 RecurDyn 用戶子程序的動態鏈接庫 (dll),在執行過程中與 Solver.dll 鏈接。
注:
-建議安裝Visual Studio 和RecurDyn,否則需要手動安裝向導。
-將RecurDyn中的源代碼拷貝到VS安裝的目標路徑下:
源代碼:<install dir>\Bin\Addin\USUB\User SubRoutine Wizard Files\VS2005(or VS2008 or VS2010 or VS2012 or VS2015 or VS2017)\
目標:<Visual Studio install dir>\VC\
-要使用 x64 版Build,必須安裝完整版 Visual Studio。
USUB如何使用:
1.創建DLL
1)打開Visual studio
2)創建新項目(N),選擇RecurDyn 2024User SubRoutine Wizard,下一步
3)定義項目名、路徑以及解決方案名稱,點擊創建
4)選擇編譯器為C/C++
5)選擇需要的用戶子程序,Finish
6)打開DllFunc.cpp文件,完成用戶自定義程序代碼,選擇Debug或Release選項
7)通過生成Build或Rebuild創建DLL文件。
注:
DllFunc.h, DllFunc.cpp
這些文件包含函數定義。在 DllFunc.cpp 文件中完成 user代碼。
DllMain.h, DllMain.cpp
這些文件是主 DLL 頭文件和源文件,包含由 windows 管理的 DllMain 的定義。用戶不可修改和刪除該程序。
StdAfx.h, StdAfx.cpp
這些文件用于生成由 MFC 管理的預編譯頭文件和 StdAfx.obj 文件。用戶不可修改和刪除該程序。
2.如何Debug
1)在項目名稱上單擊鼠標右鍵后選擇 "屬性"。
2)在調試部分,在命令中輸入 RecurDyn.exe 的路徑。
3)設置斷點,然后進入調試模式。
4)執行 RecurDyn 后,打開調試文件夾中包含 dll 文件的模型進行調試。
5)要進入調試點,在開始仿真之前,必須在 "Simulation Setting"中設置Solver Type為 DLL(recommended) 類型。
3.用戶子程序模板
RecurDyn Help中提供了一些支持用戶子程序的模板,以下是Axial force的示例模板:
RecurDyn提供了其他模板,供用戶測試或參考使用:
Contact force,Diffenrential_Equation,
matrix force, RFlex Modal Force,
MODAL FORCE EXT(Nodal Force),
motion,Nodal_Force,Nodal_Force_EXT,
Request,Rotational_Force,srew force,
Tire_Force,GTire_Force,Track_SOIL_Force,
Translational_Force,Variable_Equation
4.Auxiliary Subroutines
RecurDyn提供了一些可供用戶調用的方法Auxiliary Subroutines,用法類似于Expression中的函數,用戶可對照文檔中的解釋和示例代碼。具體使用和參數定義,需要結合自身得算法編寫。
例如:
sysfnc(what, mkid, nid, & result , &errflg)
‘sysfnc’函數用于獲取和設置與多體系統仿真相關的各種數據,其中what是SYSFNC子例程的類型,mkid和nid必須定義為整數數組和整數。力x必須定義為雙精度。在C/C++語言中,errflg必須定義為整數。
例如上文axial force中,程序中的sysfnc("DX", mkid, 3, &disp, &errflg);
1."DX":- 這是一個字符串參數,用于指定所需的數據類型。在這里,"DX"表示獲取實體的位移(Displacement)。其他類型可見下圖:
2. mkid:- 這是一個整數數組參數,表示實體的標識符(Marker ID)。
3. - 這是一個整數參數,表示所需的數據維度。一般來說,位移數據是一個三維向量(X, Y, Z),所以這里用3表示我們需要獲取的是三維位移信息。
4. &disp:- 這是一個指向存儲結果的變量的指針。在調用這個函數后,`disp`變量將會包含指定實體的位移數據。
5. &errflg:- 這是一個指向錯誤標志的變量的指針。如果函數調用過程中出現錯誤,`errflg`變量將被設置為一個非零值,表示發生了錯誤。
因此該函數調用用于獲取RecurDyn仿真中指定marker的空間指定X方向上的相對位移數據。在用戶子程序中,每次調用SYSFNC 函數時,因為 SYSFNC 函數中使用的 mkid 只在最初注冊一次,因此不建議在 if 語句中使用 SYSFNC。
作者: RecurDyn中國 華成婷
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















