找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 17616|回复: 1
打印 上一主题 下一主题

[求助] 请教关于在Adams/Rail模块中使用用户自定义子程序的问题

[复制链接]
跳转到指定楼层
1
发表于 2011-7-18 12:39:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我想要在一个Adams/Rail的模型中使用用户自定义子程序,并solver方式运行
非template模块中这个目标我能够实现,现在的问题是想在Adams/Rail模块中实现,并且是用C语言编写的子程序,而不是fortran编写的。

       我的环境是Adams2005.0.0,还安装了Visual C++6.0(SP6)和Compaq Visual Fortran6.6B

       我查了帮助文档,需要在MDI_ACAR_PRIVATE_DIR环境变量定义的路径下,默认是C:\Documents and Settings\用户名\arail_private路径下,我将userPortName.h,utilCcallable.h,DFORMD.LIB,DFPORT.LIB以及C语言编写的用户自定义子程序都放在这个目录下,并且按照Adams帮助文档,把C语言编写的用户自定义子程序用户名改为req123.c  ,内容为:   (这里为了试验能否通过,函数里面没有加任何内容)

#define   port2pcnt
#include "userPortName.h"
#include "utilCcallable.h"
VOID_FUNCTION req123(int *id, double *time, double *par, int *nPar, BOOL *iflag, double *results)
{
}

并把列车车辆模型中生成了一个REQUEST,并选择Define Using Subroutine,参数写123,1
用file_only模式进行Dynamic Analysis
生成d1_dyn.adm文件和d1_dyn.acf文件
确认adm文件中有
!                            adams_view_name='REQ_1'
REQUEST/272, FUNCTION = USER(123,1)

acf文件的内容为

d1_dyn.adm
d1_dyn
preferences/solver=cxx
simulate/static
array/3, numbers = 2, 1, 20.000000
simulate/static
control/function=user(917,6,20.000000)
control/function=user(300,20.000000,248)
simulate/dynamic, end=5.0, steps=500
STOP
!


在命令行窗口中,将路径调到C:\Documents and Settings\用户名\arail_private路径下
运行  
C:\Documents and Settings\用户名\arail_private>adams05 arail cr-solverprivate n 回车
req123.c回车
回车

出现的错误如下图所示


虽然有错误,但是在该路径下adams生成的dispatch.f文件中添加了对应req子程序第一个参数为123的一段:
      subroutine reqsub( ID,
     &                   TIME,
     &                   PAR,
     &                   NPAR,
     &                   IFLAG,
     &                   RESULT )
C    This is a dispatcher routine written by gendisp.exe
      INTEGER  ID
      DOUBLE PRECISION  TIME
      DOUBLE PRECISION  PAR(*)
      INTEGER  NPAR
      LOGICAL  IFLAG
      DOUBLE PRECISION  RESULT(8)
C Local variables
      character*(80)     errmsg
......
      ELSE IF ( INT(PAR(1)).EQ.123 ) THEN
         CALL req123 ( ID,
     &                   TIME,
     &                   PAR,
     &                   NPAR,
     &                   IFLAG,
     &                   RESULT )
      ELSE
......

如将用户自定义子程序名字改为reqsub123.c,则运行
C:\Documents and Settings\用户名\arail_private>adams05 arail cr-solverprivate n req123.f  回车回车
能通过,但是查看dispatch.f,其中没有添加reqsub子程序对应处理第一个参数为123的一段程序,下面再运行
C:\Documents and Settings\用户名\arail_private>adams05 arail ru-solver d1_dyn.acf会报错,无法正常仿真模型,错误如下图:


我按照上述完全相同的方法,改为采用fortran编写用户自定义子程序req123.f,内容为
      subroutine req123( id, time, par, npar, iflag, result )
      integer            id, npar
      double precision   time, par(*), result(8)
      logical            iflag
      return
      end
则C:\Documents and Settings\用户名\arail_private>adams05 arail cr-solverprivate n req123.f 回车回车
能通过
再运行C:\Documents and Settings\用户名\arail_private>adams05 arail ru-solver d1_dyn.acf
也能一切正常的运行

我现在的疑问是,是Adams/Rail模块中使用用户自定义子程序只能用fortran编程吗?还是我文件名,函数名或者哪里写的有问题,因为我fortran不熟,而且子程序内容比较复杂,还涉及到内存映射文件什么的,所以还是希望尽量能够实现用C语言编程,不知道有没有大侠做过类似的工作或者知道该怎么做,能不能指导一下,非常感谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
 楼主| 发表于 2011-7-20 12:35:28 | 只看该作者

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-11-28 14:48 , Processed in 0.027696 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表