解鎖RecurDyn高級功能:用戶子程序USUB

解鎖RecurDyn高級功能:用戶子程序USUB的圖1

  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

解鎖RecurDyn高級功能:用戶子程序USUB的圖2

2)創建新項目(N),選擇RecurDyn 2024User SubRoutine Wizard,下一步

解鎖RecurDyn高級功能:用戶子程序USUB的圖3  

3)定義項目名、路徑以及解決方案名稱,點擊創建

解鎖RecurDyn高級功能:用戶子程序USUB的圖4

4)選擇編譯器為C/C++

解鎖RecurDyn高級功能:用戶子程序USUB的圖5

5)選擇需要的用戶子程序,Finish  

解鎖RecurDyn高級功能:用戶子程序USUB的圖6

6)打開DllFunc.cpp文件,完成用戶自定義程序代碼,選擇Debug或Release選項

解鎖RecurDyn高級功能:用戶子程序USUB的圖7

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 的路徑。

解鎖RecurDyn高級功能:用戶子程序USUB的圖8

3)設置斷點,然后進入調試模式。

4)執行 RecurDyn 后,打開調試文件夾中包含 dll 文件的模型進行調試。

5)要進入調試點,在開始仿真之前,必須在 "Simulation Setting"中設置Solver Type為 DLL(recommended) 類型。

     

3.用戶子程序模板     

RecurDyn Help中提供了一些支持用戶子程序的模板,以下是Axial force的示例模板:  

解鎖RecurDyn高級功能:用戶子程序USUB的圖9


 

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中的函數,用戶可對照文檔中的解釋和示例代碼。具體使用和參數定義,需要結合自身得算法編寫。

解鎖RecurDyn高級功能:用戶子程序USUB的圖10

例如:

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)。其他類型可見下圖:

解鎖RecurDyn高級功能:用戶子程序USUB的圖11

 2. mkid:- 這是一個整數數組參數,表示實體的標識符(Marker ID)。

 3. - 這是一個整數參數,表示所需的數據維度。一般來說,位移數據是一個三維向量(X, Y, Z),所以這里用3表示我們需要獲取的是三維位移信息。

 4. &disp:- 這是一個指向存儲結果的變量的指針。在調用這個函數后,`disp`變量將會包含指定實體的位移數據。

 5. &errflg:- 這是一個指向錯誤標志的變量的指針。如果函數調用過程中出現錯誤,`errflg`變量將被設置為一個非零值,表示發生了錯誤。  

因此該函數調用用于獲取RecurDyn仿真中指定marker的空間指定X方向上的相對位移數據。在用戶子程序中,每次調用SYSFNC 函數時,因為 SYSFNC 函數中使用的 mkid 只在最初注冊一次,因此不建議在 if 語句中使用 SYSFNC。

作者: RecurDyn中國 華成婷

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

TOP