经过反复查阅资料和无数次尝试,终于初步实现了adams和matlab的联合仿真,放在这里,一为备忘,二为纪念。
*:\MSC.Software\MSC.ADAMS\2005\controls\examples中的ball_beam为例,以下为详细步骤:
1、将ball_beam文件夹拷贝到任一位置,在adams/aview中以"import a file"打开"ball_beam.cmd"。
2、假定已经完成adams的建模、约束和力的添加。
3、创建输入状态变量:my_torque
build ->state elements ->state varilable ->new:在name栏内填写“my_torque”。ok退出。
在主界面中需要连接输入状态变量的力矩标示上右点选择
"Torque:*** ->modify",在function栏后点击"function builder"按钮,填写函数VARVAL(.ball_beam.my_torque),然后ok退出。
至此,完成了“从 my_torque 中获取力矩值”的关键一步,控制软件matlab到adams的输入通道构建完毕。
4、检验定义的状态变量:
build ->state elements ->state varilable ->modify中选取 my_torque,在F(time..)栏任意填写一给定,在主界面右点然后使用“measure"进行某参数值的量测,进行仿真判断输出变量设置,完成后改回零值。
5、创建输出状态变量:my_angle, my_position
build ->state elements ->state varilable ->new:在name栏内填写“my_angle”。在F(time..)栏后点击按钮,创建函数
AZ(.ball_beam.beam.cm),ok退出。
build ->state elements ->state varilable ->new:在name栏内填写“my_position”。在F(time..)栏后点击按钮,创建函数
DX(.ball_beam.ball.cm, ball_beam.beam.ref,
ball_beam.beam.ref),ok退出。
需要说明的是,在以后的实际工作中,这些函数的定义方法需要作者自行推敲研究。
至此,完成了输出函数的创建,实现了从adams中的构件量测或计算matlab需要的输出值。
6、Build->Controls Toolkit->Plant Input,创建一个Plant Input。 Plant Input Name: ****(自定义)
Name: my_torque
7.Build->Controls Toolkit->Plant Output,创建一个Plant Output。
Plant Output Name: ****(自定义)
Name: my_Angle, my_Position
8、输出被控对象,使用Controls->Plant Export
File Prefix = **** (自定义)
Plant Input = **** (6中定义)
Plant Output = **** (7中定义)
Package = MATLAB
solver choice= 可选
host= 本机名
ok退出。
至此,文件夹下应产生.m等三个文件。
9、关闭aview,打开matlab,工作路径选择1中自定义的文件夹。
10、以后步骤有关帮助说明很详细,恕不赘述,主要有三点备忘:
(1)运行.m文件(2)运行 adams_sys (3)需要观察动画时,在adams plant中设置 Animation mode为interactive。
11、执行仿真命令,自行弹出adams界面。
注意DOS窗口,提示“找不到系统文件”,有什么影响尚且不得而知。
第二篇:adams和matlab的联合仿真 手记
初步实现了adams和matlab的联合仿真。*:\MSC.Software\MSC.ADAMS\2005\controls\examples中的ball_beam为例,以下为详细步骤:1、将ball_beam文件夹拷贝到任一位置,在adams/aview中以"import a file"打开"ball_beam.cmd"。2、假定已经完成adams的建模、约束和力的添加。3、创建输入状态变量:my_torque。build ->state elements ->state varilable ->new:在name栏内填写“my_torque”。ok退出。在主界面中需要连接输入状态变量的力矩标示上右点选择"Torque:*** ->modify",在function栏后点击"function builder"按钮,填写函数VARVAL(.ball_beam.my_torque),然后ok退出。至此,完成了“从 my_torque 中获取力矩值”的关键一步,控制软件matlab到adams的输入通道构建完毕。4、检验定义的状态变量:build ->state elements ->state varilable ->modify中选取 my_torque,在F(time..)栏任意填写一给定,在主界面右点然后使用“measure"进行某参数值的量测,进行仿真判断输出变量设置,完成后改回零值。5、创建输出状态变量:my_angle, my_position。build ->state elements ->state varilable ->new:在name栏内填写“my_angle”。在F(time..)栏后点击按钮,创建函数 AZ(.ball_beam.beam.cm),ok退出。build ->state elements ->state varilable ->new:在name栏内填写“my_position”。在F(time..)栏后点击按钮,创建函数DX(.ball_beam.ball.cm, ball_beam.beam.ref, ball_beam.beam.ref),ok退出。需要说明的是,在以后的实际工作中,这些函数的定义方法需要作者自行推敲研究。至此,完成了输出函数的创建,实现了从adams中的构件量测或计算matlab需要的输出值。6、Build->Controls Toolkit->Plant Input,创建一个Plant Input。Plant Input Name: ****(自定义)Name: my_torque7.Build->Controls Toolkit->Plant Output,创建一个Plant Output。Plant Output Name: ****(自定义)Name: my_Angle, my_Position8、输出被控对象,使用Controls->Plant ExportFile Prefix = **** (自定义)Plant Input = **** (6中定义)Plant Output = **** (7中定义)Package = MATLABsolver choice= 可选host= 本机名ok退出。至此,文件夹下应产生.m等三个文件。9、关闭aview,打开matlab,工作路径选择1中自定义的文件夹。10、以后步骤有关帮助说明很详细,恕不赘述,主要有三点备忘:(1)运行.m文件(2)运行 adams_sys (3)需要观察动画时,在adams plant中设置 Animation mode为interactive。11、执行仿真命令,自行弹出adams界面。注意DOS窗口,提示“找不到系统文件”,有什么影响尚且不得而知。发文庆祝一下ADAMS/contro中的例子ball_beam通过联合仿真,个人觉得这个例子比天线的例子更加直观,更容易理解adams和simulink的联合仿真精髓。小球在一
脉冲力的作用下沿着横梁滚动,此时梁的两端受力不平衡,梁的一段倾斜,为了使得小球不掉下横梁,在横梁上施加一个绕Z轴的力矩,横梁达到一定的角度之后逆向转动,然后小球就在这个作用力矩的控制下来回滚动而不掉下横梁!其中控制力矩在整个过程中是个动态变化的,力矩Torque_In是通过位移Position 和横梁转角Beam_Angle确定,这个是在simulink中通过框图完成的。首先我申明一下我用的是adams2003和matlab6.5以下我说明一下我的操作步骤:1、把control中的ball_beam文件copy到另外一个文件夹下,同时设置adams和matlab的默认路径即为ball_beam文件夹,这样可以省略很多不必要的麻烦!2、用aview打开ball_beam.cmd文件,先试试仿真一下,可以看到小球会在脉冲的作用下滚动,仿真时间最好大于8s3、载入control模块,点击tools|plugin manager在control框选定。4、点击control|plant export在file prefix下输入你的文件名,这个可以随便的,我输入的是myball,在plant input点击右键点击guess选定tmp_MDI_PINPUT,在tmp_MDI_PINPUT中就是输入力矩Torque_In,只有一个输入参数;同样在plant output中点击右键guess选定tmp_MDI_POUTPUT,这是模型的输出变量横梁转角Beam_Angle和小球与横梁中心轴的距离position。control package选择matlab,type是non_linear,初始化分析选择no,然后按ok!此时m文件已经生成了!5、打开matalb,设置你的工作路径在ball_beam文件夹上,键入myball,马上有%%% INFO : ADAMS plant actuators names :1 Torque_In%%% INFO : ADAMS plant sensors names :1 Beam_Angle2 Position 出现6、再键入adams_sys,弹出一个控制框图,这时可以新建一个mdl文件,将adams_sub拖入你新建的mdl框图中,其实再这里有一个偷懒的办法,就是在matlab中打开ball_beam.mdl文件,然后把他的那个adams_sub用你的刚产生的这个代替,然后另存为my_ball.mdl!7、设置仿真参数,在你刚建立的my_ball.mdl框图上的simulation parameter里设置一下stop time为10s,步长为ode15s。然后双击adams_sub打开adams_pant,再双击adams_pant弹出一个设置框图,在animation mode这一栏中选择interactive这是交互的,如果选择batch的话在联合仿真中看不到adams模型的运行情况(个人这样理解的:)!最后保存一下!8、开始联合仿真start simulation,就会出现asolver,弹出dos文件,这个不管他,然后adams模型中的小球开始运动,估计会比较慢,最后会出现小球在横梁上运动而不掉下横梁!这是我在做这个模型的过程中的一些东东,写的比较杂,呵呵!如果大家觉得好的话可以顶一下,希望能给那些在adams和simulink联合仿真而徘徊的xdjm一点启示就行了!note:这个例子是adams/cotrol自带的,可以在example中找到! 关于下述
错误,我找到一个解决方法Error reported by S-function 'adams_plant' in 'my_ball/adams_sub/ADAMS Plant/S-Function':error in startup Could not connect to ADAMS server编辑myball.m文件,将第24行ADAMS_sysdir = strcat(topdir, '');替换为第29行ADAMS_sysdir = '...' ;依各人配置不同,具体路径有所区别改完之后保存即可