2023年12月16日发(作者:)

如何在adams2003中建立用户子程序

首先我要说明的是我这个例子是设计阶段的自定义函数而不是运行阶段的函数,如果大家有什么疑问可以参考adams的参考文档。

Design-time functions allow you to parametrically configure your model for optimization and

sensitivity studies. ADAMS/View evaluates design-time functions only during the design process,

and not during a simulation, except for optimization and design studies.

Run-time functions allow you to specify mathematical relationships between simulation states that

directly define the behavior of your model. updates the run-time functions only

during a simulation.

编写子程序有以下几个步骤 :

1. 编写源程序,我使用的是vc6.0sp6版本;修改ADAMS安装目录下…/aview/user_subs中vc_init_usr.c模板文件中的C源代码或直接编写能够实现特定功能的C程序(注意严格按照模板格式编写)。

2. 使用vc编译c文件产生obj文件

3. 在adams中编译产生.dll文件

4. 利用动态链接库技术,建立ADAMS/View与目标函数的链接

我就从这几个方面来说下编译子程序的问题。

1.此c程序用来产生正态分布的特殊随机数(这是借鉴网上以同志的源程序所得),源程序如下保存为myvcfun.c

#include "mdi_c.h"

#include "math.h"

#define M 8388608

#define T 2045

double MYRAND( double l )

{

double x,r,k,y,x1,x0;

int j,i;

x0=1;

x1=1;

for(j=0;j

{

k=0;

for( i=0;i<12;i++)

{

x=fmod(T*x0,M);

r=x/M;

x0=x;

k=r+k;

}

y=fmod(T*x1,M);

x1=y;

x0=x1;

}

return(k-6);

}

void vc_initialize_user()

{

vc_function_add("MYRAND", (FUNCTION)MYRAND, fn_R_R,1,0);

}

在这里提醒大家去看一下c程序的模版,在安装目录…/aview/user_subs下有。其中MYRAND( double l )函数的功能是产生符合标准正态分布的随机数,void vc_initialize_user()函数的功能是用来注册用户自定义函数(通过vc_function_add()函数来实现),使其在ASAMS中可用。"MYRAND"是即将显示在ADAMS/View中函数构造器(Function Builder)中的用户自定义函数名,fn_R_R为枚举类型常量,表示函数的返回值类型为实型(double),并带一个实型的主参数。第四个参数由函数的主参数个数决定,最后一个参数表示单位的类型,一般取0。(更详尽的说明请参考mdi_c.h头文件,ADAMS安装目录下…/aview/user_subs中)

2.将mdi_c.h和myvcfun.c拷贝到同一个文件夹,然后用vc打开myvcfun.c文件

点击compile按钮,如果没有错误会在debug下产生文件。

3.生成dll文件

将生成的obj文件拷贝到adams的工作文件夹中,然后点击

进入dos界面提示输入

然后回车输入你将要建立的dll文件

回车后就成功的生成文件。

4将dll文件加入adams库中。

打开adams进入界面,打开system command命令夹,然后输入

adams03 aview ru-user i 接着弹出一个dos框 ,又输入,回车后进入ADAMS/View界面下,单击菜单SettingsSolverSolver Executable弹出Solver Settings 对话框可以看到myvc_init_已经自动添加到Solver Library中。

在在ADAMS/View下,点击菜单ToolsFunction Builder打开函数构造器(Function Builder)对话框,在下拉列表框选择All Functions,函数MYRAND( REAL)出现在下面的列表框里,这时就可以象对系统提供的函数一样对它进行使用,也可以在表达式中直接引用。

欢迎大家跟贴讨论,我也是在看了一些资料之后才编译出来的,其中有些地方确实需要细心,祝你好运!

2006.1.4