搞Adams/Car和Matlab联合仿真,最让人崩溃的不是原理难,是步骤多、坑更多。我第一次跑的时候,光环境配置就卡了3天,报错信息看了20多条,最后发现是一个路径没对齐。2026年了,Adams和Matlab的版本都更新了好几轮,但联合仿真的核心流程没变,坑还是那些坑。下面这7步是我反复跑通后整理的,照着做,基本不会再踩我踩过的那些雷。
很多人上来就开Adams,结果一跑联合仿真就报错。问题出在哪?环境没配好。
Adams/Car和Matlab必须同是32位或同是64位,我现在全用64位。工作路径也必须一致——Adams快捷方式右键→属性→起始位置,Matlab也设成同一个文件夹。
有个细节容易忽略:把Adams安装目录下Controls\win64\adams_plant.mexw64复制到工作路径里。我之前没做这一步,Simulink里直接报"S-Function does not exist",排查了2小时才找到原因。
还有,启动Adams/Car之前,要改用户配置文件。路径是C:\Users\你的用户名.acar,在Desired user mode里加这几行:
ENVIRONMENT MDI_ACAR_USERMODE expert
ENVIRONMENT MDI_ACAR_PLUS_AVIEW yes
不加这个,Adams/Car里打不开View界面,后面的变量定义全做不了。
打开Adams/Car,File→Open→Assembly,搜索MDI_Demo_Vehicle.asy打开官方例车。然后Tools→Plugin Manager,把Adams/Controls的两个框打钩。
接下来定义输入输出变量,这步最关键。
点Tools→Adams/View Interface打开另一个视图,确认左上角下拉菜单显示的是MDI_Demo_Vehicle.testrig。为什么要看这个?因为整车装配把SDI和车体各部分的变量全从整车模型接口引出来了,控制器里用的变量都在MDI_Demo_Vehicle.testrig里能找到。你要是直接从SDI里定义输出变量,生成的.m文件里接口号全是0,根本连不上。
输出变量这样设:点Elements左侧的Pout,Plant Output Name填.MDI_Demo_Vehicle.testrig.POUTPUT_speed,Variable Name里右键→Variable Class→Browse,选MDI_Demo_Vehicle→testrig→body_velocity_x。
输入变量点Elements左侧的Pin,在Browse→Elements→Data Elements里找driver_demands,里面有5个关键变量:vas_steering_demand、vas_throttle_demand、vas_brake_demand、vas_gear_demand、vas_clutch_demand。我测试过,只有这5个变量作为输入时,Simulink端改数值,Adams端才会有响应。其他变量输进去,输出端完全没变化。
输入变量Plant Output Name填.MDI_Demo_Vehicle.testrig.PINPUT_brake,Variable Name选vas_brake_demand→variable。
切到Plugins标签,点Controls→Plant Export。File Prefix改成car_1,Input_Signal处From Pinput添加PINPUT_torque和PINPUT_angle,确保变量在列表第一行——我默认出现在第二行,直接报错。Target Software选MATLAB,Adams/Solver Choice改成Fortran,点确定。
工作路径里会生成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先设成interactive测试一下。Driver Control Files里打开<acar_shared>/driver_controls.tbl,复制一个.dcf文件重命名为test.dcf,用记事本打开修改。
我直接用开环控制,把5个输入都设成常数:
(STEERING) CONTROL_VALUE = 0
(THROTTLE) CONTROL_VALUE = 0
(BRAKING) CONTROL_VALUE = 0
(GEAR) CONTROL_VALUE = 3
(CLUTCH) CONTROL_VALUE = 0
INITIAL_SPEED设成16.667 m/s,INITIAL_GEAR设成3。改完先用interactive模式跑一遍,Review→Animation Controls看动画对不对,或者Review→PostProcessing Window看曲线。确认没问题后,删掉工作路径里除了car_1.m和adams_plant.mexw64之外的文件,重新输出,Simulation Mode改成files_only。
输出成功后,工作路径里会出现speed_test相关的6个文件和speed_test_controls.acf。
打开Matlab,打开car_1.m,把ADAMS_prefix = 'car_1'改成ADAMS_prefix = 'speed_test',ADAMS_init改成'file/command=speed_test_controls.acf',保存。
命令行输入car_1,会显示actuators和sensors的信息。再输入adams_sys,弹出Simulink窗口,有两个红色框和一个橙色的adams_sub框。新建模型,把adams_sub复制进去,加阶跃输入,输出接示波器,点运行。
底部先显示compiling,变成running后就编译成功了。阶跃输入数值要设大一点,默认单位很小,速度是mm/s,力矩是N·mm,我设的10000,能看到明显变化。

跑通了也别高兴太早,这4个坑我全踩过:
坑1:仿真激励输出报错"Invalid operand in expression"
没有生成curve_crc.m和.acf文件,car_1.m里ADAMS_uy_ids两个量都是0。原因是输入输出变量选错了,必须选MDI_Demo_Vehicle→testrig下的变量,不能从SDI里选。
坑2:Simulink报"S-Function 'adams_plant' does not exist"
adams_plant.mexw64没拷到工作路径。把Adams安装目录Controls\win64下的文件复制过去就行。
坑3:S-function启动失败
还是输入输出变量定义的问题,回头逐行检查。
坑4:编译成功但运行中终止,报"Adams output evaluation failure at time 0.005000"
.dcf文件里的参数设置不合理,车根本做不到你设定的运动。把初始速度、档位这些参数调回合理范围就好了。
我第一次跑通Adams/Car和Matlab联合仿真花了整整5天,但把这套流程跑顺之后,后面每个新项目半天就能搭好环境。你现在卡在哪一步了?
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。