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