- 积分
- 41
- 注册时间
- 2005-4-14
- 仿真币
-
- 最后登录
- 1970-1-1
|
关于使用adams用户子程序(用户自定义函数)的总结及若干问题
最近一直在学习adams用户子程序的使用,从各论坛上搜集了很多资料,自己也试着调试了两个例子,但是一直没有完全成功过。总结了一下其间遇到的问题,请大家一起讨论讨论。
由于学习adams时间很短,基础知识还不够牢固,而且对于VC也是雾里看花……还请大家不吝赐教,版砖尽管砸来,俺该补习的自己去补习。
当前使用环境:
Windows XP sp2
MS Visual C++ v6 + sp6
MSC Adams2005
===========================
流程总结(PROCESS):
P1. 使用vc_init_usr.c作模板,编写程序代码user.c;
P2. 在VC中编译user.c,生成user.obj;
P3. 使用adams命令行,由user.obj生成user.dll;
P4. 将user.dll加入到adams库中;
P5. 在Function Builder中即可使用自定义的函数。
===========================
需要注意的问题(TIPS):
T.1.1 源代码user.c中要包含头文件mdi_c.h,userPortName.h,utilCcallable.h(在adams目录中有);
T.1.2 BOOL vc_function_add(char *Name,FUNCTION Func,ArgType ArgTp,int ArgCnt,int Units);
void vc_initialize_user();
对于二者的理解……
T.2.1 编译时需要fortran的两个库文件dformd.lib,dfport.lib;
T.3.1 提示“'link.exe'不是内部或外部命令,也不是可运行的程序或批处理文件。”,将C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin加入到系统环境变量path中问题解决;
T.3.2 提示“LINK:fatal error LNK1181:connot open input file "msvcrt.lib"”,仔细查看命令行提示发现"-libpath:C:\MSC~1.SOF\MSC~1.ADA\2005\WIN32",说明link.exe只搜索..\2005\WIN32文件夹查找lib文件,将需要的lib(包括VC提供的)全部复制到C:\MSC~1.SOF\MSC~1.ADA\2005\WIN32后问题解决;
T.3.3 输入obj文件名后提示找不到obj文件,使用adams-settings,修改MSCA-Shared-Preferences-workingDirectory为user.obj所在路径后问题解决;(然后发现用户变量中增加了MSC_ADAMS_STARTIN_DIR='user.obj所在路径')
===========================
疑问点(QUESTIONS):
Q.3.1 编译命令"cl /c /G6 /Ox /MD user.c"在adams命令行中执行吗?是否必要(如果按照命令行提示进行的话似乎只需要指明user.obj和dll的名称就可以了,没有用到cl...命令)?
Q.3.2 由T.3.1,T.3.2猜想P3虽然是在adams命令行的环境下,是否依然依赖VC来生成dll?libpath在哪里进行设置?
Q.3.3 有文章提到直接用VC来生成dll文件的办法:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VC环境中设置,
1. PROJECT->SETTING->LINK CATEGORY->GENERAL->Output file name: ebug/vc_init_usr.dll
2. Object/library modules:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib DFORMD.LIB DFPORT.LIB MSVCRT.LIB WS2_32.LIB asutility_imp.lib mdiloader_imp.lib abgtire_imp.lib vpgutility_imp.lib tire_imp.lib ipgdriver_imp.lib vpgdriver_imp.lib amd_imp.lib moasmain.obj solver_load.obj
3. Category->Input Object/library modules:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib DFORMD.LIB DFPORT.LIB MSVCRT.LIB WS2_32.LIB asutility_imp.lib mdiloader_imp.lib abgtire_imp.lib vpgutility_imp.lib tire_imp.lib ipgdriver_imp.lib vpgdriver_imp.lib amd_imp.lib moasmain.obj solver_load.obj
4. Ignore libraries:
libc.lib,libcmt.lib,libcd.lib,libcmtd.lib,msvcrtd.lib
5. Tools->Options->Directiories Show directories for: Library files
增加两项:
....\ADAMS 12.0\COMMON
....\ADAMS 12.0\solver
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
是否可行?(当然此文中针对adams12.0,对于adams2005可能还需部分改动)
Q.4.1 P4的操作(1)在adams->system command中执行’adams05 aview ru-u i –n user.dll ’;
(2)Settings->Solver->Solver Executable->Solver Settings中,Executable=External,Solver Library=…..\user.dll,Choice=C++;
二者的效果是否一样?
Q.4.2 按照Q.4.1(2)操作后,在Function Builder中还是没有自定义的函数,可能是哪个环节出现问题了? |
评分
-
1
查看全部评分
-
|