如何在adams2003中建立用户子程序
编写子旯皱镢涛程序有以下几个步骤:
编写源程序,我使用的是vc6.0sp6版本;修改ADAMS安装目录下…/aview/user_subs中vc_init_usr.c模板文件中的C源代码或直接编写能够实现特定功能的C程序(注意严格按照模板格式编写)。
使用vc编译c文件产生obj文件
在adams中编译产生.dll文件
利用动态链接库技术,建立ADAMS/View与目标函数的链接
我就从这几个方面来说下编译子程序的问题。
1.此c程序用来产生正态分布的特殊随机数(这是借鉴网上以同志的源程序所得),源程序如下保存为myvcfun.c
#include "mdi_c.h"
#include "math.h"
#define M 8388608
#define T 2045
double MYRAND( double l )
{
doublex,r,k,y,x1,x0;
intj,i;
x0=1;
x1=1;
for(j=0;j<l;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 )函数的功能是产生符合标准正态分布的随机数,voidvc_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下产生myvcfun.obj文件。
3.生成dll文件
将生成的obj文件拷贝到adams的工作文件夹中,然后点击进入dos界面提示输入myvcfun.obj,然后回车输入你将要建立的dll文件myvcfun.dll。回车后就成功的生成文件。
4将dll文件加入adams库中。打开adams进入界面,打开systemcommand命令夹,然后输入adams03 aview ru-user i myvcfun.dll接着弹出一个dos框,又输入myvcfun.dll,回车后进ADAMS/View界面下,单击菜单Settings\Solver\Solver Executable弹出Solver Settings对话框可以看到myvc_init_user.dll已经自动添加到Solver Library中。在在ADAMS/View下,点击菜单Tools\Function Builder打开函数构造器(Function Builder)对话框,在下拉列表框选择All Functions,函数MYRAND(REAL)出现在下面的列表框里,这时就可以象对系统提供的函数一样对它进行使用,也可以在表达式中直接引用。