3. 虚拟样机验证环境搭建
虚拟样机验证环境不是把几个软件装到同一台电脑上就算完成,而是要围绕“机械本体—控制系统—接口—数据—版本”五个要素建立可复现的工程化环境。本节以典型的机电液联合仿真场景为例:机械本体在 Adams 中建立多体动力学模型,控制算法在 MATLAB/Simulink 中搭建,两者通过 Adams Controls 插件与 Simulink 的 S-Function 接口进行联合仿真。选型、配置与目录管理都围绕这条主线展开。
一、三类工具的选型依据
多体动力学软件负责求解机械系统的运动学与动力学方程,输出位移、速度、加速度、约束反力与驱动扭矩。常见选择包括 Adams、RecurDyn、Simpack 与 Simscape Multibody。选型时重点看四项能力:是否支持所需的运动副与接触模型、能否导出控制联合仿真接口、求解器对刚性微分代数方程的适应性、以及是否便于参数化建模。以 Adams 为例,其 Controls 插件可把机械模型编译为供 Simulink 调用的动态库,是教学与工程中较成熟的路径。
控制仿真工具负责控制器建模、离散化、代码生成与实时测试。MATLAB/Simulink 的优势在于控制系统工具箱完整、支持 S-Function 与 FMU 导入、便于做参数扫描与自动测试。若控制算法最终要部署到实时目标机,还需确认工具链是否支持目标硬件,例如 Simulink Real-Time 或 dSPACE。选型时不要只看单机功能,要优先确认“接口是否原生支持”,因为接口适配往往比建模本身更耗时。
联合仿真接口决定两个求解器如何交换数据。常见方式有三类:一是 Adams Controls 与 Simulink 的 S-Function 接口,机械模型作为被控对象,Simulink 提供输入并接收输出;二是 FMI/FMU 标准接口,把模型封装为功能样机单元,便于跨工具复用;三是基于共享内存或 TCP/IP 的自定义接口,适合特殊采样率或分布式部署。教学场景优先选 S-Function 或 FMU,工程场景若涉及多供应商模型,FMU 的可移植性更好。
二、接口配置的关键参数
以 Adams Controls 与 Simulink 的 S-Function 联合仿真为例,配置过程分三步。第一步在 Adams 中定义输入输出变量:输入通常是 Simulink 传给机械模型的控制力或力矩,输出是机械模型反馈给控制器的位移、速度或加速度。变量命名要带方向与单位,例如 F_act_N、x_carriage_mm,避免后续接口映射时混淆。
第二步导出 Adams 模型为动态库。在 Adams/Controls 中选择 Export,指定输入输出变量集,生成 .dll(Windows)或 .so(Linux)以及对应的 .m 文件。导出时需确认求解器类型与积分步长,机械积分步长通常取通信步长的 1/5 到 1/10,例如通信步长 1 ms 时机械步长取 0.1 ms,以减小接口处的数值误差。
第三步在 Simulink 中调用 S-Function 模块,把 Adams 生成的动态库作为被控对象接入控制回路。此时需要设置通信步长、求解器类型与误差容限。通信步长决定两个求解器交换数据的频率,过大会导致控制延迟明显,过小则仿真时间成倍增加。教学示例中可取 1 ms 通信步长、0.1 ms 机械步长、GSTIFF 求解器、误差容限 1e-4,作为一组可复现的起点参数。
三、工程目录与版本管理
联合仿真涉及多类文件:Adams 模型、Simulink 模型、接口动态库、参数脚本、仿真结果与报告。若目录混乱,很容易出现“模型改了但接口库没重编译”的隐性错误。建议按职责划分目录,并用版本控制工具管理文本类文件,二进制模型与动态库则通过版本号或构建脚本管理。
project_root/
├── model/
│ ├── mechanical/ # Adams 模型与参数化脚本
│ │ ├── arm_v3.adm
│ │ └── params_arm.csv
│ └── control/ # Simulink 模型
│ ├── ctrl_pid.slx
│ └── ctrl_state_fb.slx
├── interface/
│ ├── export/ # Adams 导出的 dll/so 与 .m 文件
│ └── build/ # 编译脚本与日志
├── config/
│ ├── sim_params.yaml # 通信步长、求解器、误差容限
│ └── io_map.csv # 输入输出变量映射表
├── results/
│ ├── run_20250101_01/ # 每次仿真独立目录
│ └── report/
└── docs/
└── verification_plan.md
其中 config/sim_params.yaml 集中存放通信步长、机械步长、求解器类型与误差容限,避免在多个模型中重复填写。config/io_map.csv 记录 Adams 变量名与 Simulink 端口名的对应关系,例如:
| Adams 变量 | 方向 | 单位 | Simulink 端口 | 说明 |
|---|---|---|---|---|
| F_act_N | 输入 | N | In1 | 驱动力 |
| x_carriage_mm | 输出 | mm | Out1 | 滑台位移 |
| v_carriage_mm_s | 输出 | mm/s | Out2 | 滑台速度 |
| T_motor_Nmm | 输出 | N·mm | Out3 | 电机扭矩 |
四、环境搭建后的最小验证
环境搭好后,不要直接上复杂工况,先做三项最小验证。第一项是接口连通性:Simulink 输出常值力矩,Adams 模型应产生对应方向的运动,位移符号与坐标系定义一致。第二项是采样率合理性:把通信步长从 1 ms 改为 5 ms,观察控制效果是否明显变差,若变化剧烈说明步长偏大。第三项是重复性:同一组参数连续运行两次,结果曲线应完全重合,若不一致需检查随机种子、初始条件或文件读写冲突。
完成上述配置后,虚拟样机验证环境就具备了可复现、可追溯、可扩展的基础。后续的模型标定、工况设计与结果判读,都建立在这一环境之上。