解锁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
