首先确保Adams/Car和Matlab都是32位或都是64位,否则会出错误,以下我以64位为例。然后确保两者工作路径一致,这里可以直接在两个程序的桌面快捷方式右键->属性->起始位置中定义。程序打开后的保存路径就默认为你设置的工作路径了。把Adams安装目录下Controls\win64\adams_plant.mexw64复制到你之前设置的工作路径中,防止后面出错。
在启动Adams/Car之前,你需要先到C:\User(用户)\xxx(你的用户名)\.acar,在最上面Desired user mode中输入如下:
!----------------------------------------------------------------------!! Desired user mode (standard/expert)ENVIRONMENT MDI_ACAR_USERMODE standardENVIRONMENT MDI_ACAR_USERMODE expertENVIRONMENT MDI_ACAR_PLUS_AVIEW yes!!----------------------------------------------------------------------!这样你才能在Adams/Car中打开View界面。
然后我这必须先启动一个License Server(没细究为什么),然后启动Adams/Car,File->Open->Assembly,在Assembly Name白框中右键->Search-><acar_shared>/assemblies.tbl打开MDI_Demo_Vehicle.asy官方例车。
随后开始进行联合仿真设置:
正常来说,自己新建的模型中需要自定义变量。但是例车上已有了相应变量,因此只需将其指定为输入输出变量即可。这里以输出body_velocity_x为例,按照需求自行调整。注意:加粗部分很关键!!!
首先,Tools->Plugin Manager中Adams/Controls的两个框打钩。
然后,Tools->Adams/View Interface打开另一视图,确保此时左偏上的下拉菜单显示的是MDI_Demo_Vehicle.testrig。
稍微解释下上面的原因,我的理解是整车装配会把包括SDI和车体各个部分的变量全部从整车模型的接口中引出,所以控制器中的变量你都可以在MDI_Deno_Vehicle.testrig中找到。而如果你输出变量直接从SDI中定义,你会发现输出的.m文件中接口号都是0,即无法连接到对应接口。所有输入输出变量都必须从MDI_Demo_Vehicle下的变量定义。
点击上方标签栏Elements左侧的Pout定义输出变量,Plant Output Name改为.MDI_Demo_Vehicle.testrig.POUTPUT_speed(这里随便起),Id按自动生成的,Comment不用填,Variable Name框里右键->Variable Class->Browse,选择MDI_Demo_Vehicle->testrig->body_velocity_x,OK确定。
同样,点击上方标签栏Elements左侧的Pin定义输入变量。右侧边栏Browse->Elements->Data Elements中能够看到四个例车中定义的输出变量,其中包括driver_demands一项。双击打开,能够看到Variable Name中包括
.MDI_Demo_Vehicle.testrig.vas_steering_demand.variable,.MDI_Demo_Vehicle.testrig.vas_throttle_demand.variable,.MDI_Demo_Vehicle.testrig.vas_brake_demand.variable,.MDI_Demo_Vehicle.testrig.vas_gear_demand.variable,.MDI_Demo_Vehicle.testrig.vas_clutch_demand.variable这五项。而这五项则是仿真激励输出中各控制策略的5个输入。这5个变量将在第三节中详细介绍,这里仅给出结论:
通过实际测试,发现只有当输入变量是例车中的这5个输入时,才会对输出产生影响,即在生成的Simulink文件中改变输入,在输出端看到了变化。而将其他一些量作为输入,发现仿真的输出并没有改变。这里仅是我个人的尝试结果,如果有其他见解请务必留言交流,非常感谢!
Plant Output Name改为.MDI_Demo_Vehicle.testrig.PINPUT_brake,Id按自动生成的,Comment不用填,Variable Name框里右键->Variable Class->Browse,选择MDI_Demo_Vehicle->testrig->vas_brake_demand->variable,OK确定。
标签栏切换到Plugins,点击Controls->Plant Export,弹出窗口中修改File Prefix为car_1(随便写,后面匹配即可),点击Input_Signal处From Pinput,添加MDI_Demo_Vehicle中的PINPUT_torque,确保变量在下面框中第一行(我的默认出现在第二行,会报错)。同样步骤操作右侧框,添加MDI_Demo_Vehicle中的PINPUT_angle。然后修改Target Software为MATLAB,Adams/Solver Choice改成Fortran(C++没试过),确定。此时你的工作路径中应该出现了acar.txt(操作记录),car_1.m文件和adams_plant.mexw64。
左上Tools->Select Mode->Switch to A/Car Standard Interface切换回界面,Simulate->Full-Vehicle Analysis->File Driven Events,设置Output Prefix为speed,Simulation Mode设为files_only,Driver Control Files中右键<acar_shared>/driver_controls.tbl,你可以看到弹出的文件夹中包含很多.dcf文件,这些就是例车的驾驶控制文件。请按照此路径打开文件夹,复制其中的一个.dcf并重命名为test.dcf,用记事本打开,参照这篇教程中第8章驾驶机器部分对文件进行修改。读完教程后,你应当就对上面的5个输入变量有了一定认识,这里我的理解是整辆车只有这5个变量是自变量,其他所有变量都是因变量,故而你对其他变量输入的数值会被计算数值所覆盖,而这5个变量则是可以输入的接口。这里我简单的将所有5个输入改成开环控制,完整文本如下:
$---------------------------------------------------------------------MDI_HEADER[MDI_HEADER] FILE_TYPE = 'dcf' FILE_VERSION = 2.0 FILE_FORMAT = 'ASCII'(COMMENTS){comment_string}'DCF file for cosimulation'$--------------------------------------------------------------------------UNITS[UNITS] LENGTH = 'meter' FORCE = 'newton' ANGLE = 'deg' MASS = 'kg' TIME = 'sec'$---------------------------------------------------------------------EXPERIMENT[EXPERIMENT]EXPERIMENT_NAME = 'COSIMULATION'STATIC_SETUP = 'STRAIGHT'INITIAL_SPEED = 16.667INITIAL_GEAR = 3INITIAL_CLUTCH = 0 (MINI_MANEUVERS){mini_manuever abort_time step_size}'COSIMULATION' 12.0 0.1$--------------------------------------------------------------------COSIMULATION[COSIMULATION](STEERING) ACTUATOR_TYPE = 'ROTATION' METHOD = 'OPEN' MODE = 'ABSOLUTE' CONTROL_TYPE = 'CONSTANT' CONTROL_VALUE = 0(THROTTLE) METHOD = 'OPEN' MODE = 'ABSOLUTE' CONTROL_TYPE = 'CONSTANT' CONTROL_VALUE = 0(BRAKING) METHOD = 'OPEN' MODE = 'ABSOLUTE' CONTROL_TYPE = 'CONSTANT' CONTROL_VALUE = 0(GEAR) METHOD = 'OPEN' MODE = 'ABSOLUTE' CONTROL_TYPE = 'CONSTANT' CONTROL_VALUE = 3(CLUTCH) METHOD = 'OPEN' MODE = 'ABSOLUTE' CONTROL_TYPE = 'CONSTANT' CONTROL_VALUE = 0(END_CONDITIONS){measure test value allowed_error filter_time delay_time group}'VELOCITY' '<<' 1 0.1 0.0 0.0
这里推荐在修改完成后,先把上文的Simulation Mode设为interactive,执行后用Review->Animation Controls进行仿真,观察自己的设置是否正确(也可以在Review->PostProcessing Window中显示变量变化曲线),以确定.dcf文件修改正确。然后删除掉除工作路径中除步骤2中提到的文件外的其他文件,重新执行仿真激励输出,Simulation Mode设为files_only,继续下面的步骤。
files_only输出后,你在Message Windows中应该看不到任何Error并提示written successfully,如果有请重复输出一遍,还有就请检查你的变量设置。检查你的工作路径,这时应当出现了名为speed_test(即以test为.dcf文件的名为speed的文件)的6个文件(包括.acf和.m文件)和名为speed_test_controls的.acf文件。
打开Matlab,打开工作路径中的car_1.m文件,ADAMS_prefix = 'car_1' 修改为ADAMS_prefix = 'speed_test' ,ADAMS_init = 'file/command=car_1_controls.acf' 修改为ADAMS_init = 'file/command=speed_test_controls.acf' ,保存文件。
在Matlab命令行窗口中输入car_1,此时应当显示
%%% INFO : ADAMS plant actuators names :1 xxxxxxxx%%% INFO : ADAMS plant sensors names :1 xxxxxxxx
并且在右侧加载了很多变量。在命令行中继续输入adams_sys,应当弹出Simulink窗口,包括两个红色框和一个名为adams_sub的橙色框。左上角新建模型,将adams_sub(橙色框)复制进去,添加阶跃输入,输出接示波器,然后点击运行。模型底部一开始会显示compiling,当显示running后表面模型编译成功,此时就可以打开示波器查看参数了。推荐输入用一个阶跃输入,输入数值要大(因为默认单位较小,比如速度单位是mm/s,力矩单位N·mm),我的例子中设置为了10000,看到了明显变化。
以上就是联合仿真的全部步骤,下面就可能遇到的问题给出说明。
Adams中问题报错:
ERROR: Invalid operand in expressionERROR: ( <<,>>.__MDI_SDI_TESTRIG.steering_wheel_torque )
并且没有输出curve_crc.m和curve_crc_controls.acf,打开car_1.m文件后,ADAMS_uy_ids的两个量都是0。
解决方法:输入输出变量设置部分,应当选择MDI_Demo_Vehicle->testrig下的变量。
Simulink中问题报错:
Error reported by S-function 'adams_plant':S-Function 'adams_plant' does not exist
解决方法:将Adams安装路径下controls->win64下的adams_plant.mexw64拷贝到工作路径中
Simulink中问题报错:
Error reported by S-function 'adams_plant' in xxxxx:Error in Adams(server) simulation startup.
解决方法:仍然应该是输入输出变量的定义部分出现错误,请仔细按照教程检查。
Simulink中问题报错:
Error reported by S-function 'adams_plant' in 'untitled/adams_sub/ADAMS Plant/S-Function':AEI_Outputs: Adams output evaluation failure at time 0.005000解决方法:这里是由于你在第三步中设置的参数出现错误所导致的。具体原理我不太懂,估计是车做不到按你设置的参数运动。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删