如何在Matlab中程序化映射信号、运行Simulink仿真并获取输出结果
Simulink多输入端口模型自动化测试实现方案
核心执行顺序
按名称映射信号、仿真运行及结果提取的正确流程是:
- 加载目标Simulink模型
- 读取预生成的
timetable/timeseries输入序列(序列变量名与输入端口块名严格一致) - 通过
GetSlRootInportMap建立端口名称到模型端口的映射关系 - 用
Simulink.SimulationInput配置每个端口对应的输入序列 - 调用
sim(单仿真)或parsim(批量并行仿真)执行仿真 - 从仿真输出中提取结果并用于绘图
完整代码示例
1. 模型初始化与输入序列加载
% 替换为你的模型名称 model_name = 'YourTestModel'; % 加载模型(无需提前打开) load_system(model_name); % 读取保存输入序列的mat文件,变量名对应端口块名 load('generated_inputs.mat');
2. 端口映射与仿真输入配置
% 获取根输入端口的名称-索引映射 port_map = GetSlRootInportMap(model_name); % 替换为你的端口名字结构体(字段名自定义,值为端口块名称) port_names_struct = load('port_names_config.mat').port_config; % 初始化仿真输入对象 sim_input = Simulink.SimulationInput(model_name); % 遍历所有端口,绑定对应输入序列 for port_field = fieldnames(port_names_struct)' port_block_name = port_names_struct.(port_field{1}); % 查找当前端口在模型中的索引 port_index = find(strcmp({port_map.BlockName}, port_block_name)); if ~isempty(port_index) % 取出对应名称的输入序列 input_sequence = eval(port_block_name); % 将序列绑定到指定端口 sim_input = sim_input.setModelParameter('RootInport', 'Port', port_index, 'Value', input_sequence); end end
3. 运行仿真与结果提取
% 配置仿真参数(示例:设置停止时间) sim_options = simset('StopTime', '20'); % 执行仿真并获取输出 sim_output = sim(sim_input, sim_options); % 提取输出信号(以根输出端口为例,若开启信号日志可改用sim_output.LoggedSignals) output_signals = sim_output.yout;
4. 结果可视化
figure('Name', 'Simulation Results'); for idx = 1:length(output_signals) subplot(length(output_signals), 1, idx); signal_data = output_signals(idx).Values; if isa(signal_data, 'timetable') plot(signal_data.Time, signal_data.Variables); elseif isa(signal_data, 'timeseries') plot(signal_data.Time, signal_data.Data); end title(output_signals(idx).Name); xlabel('Time (s)'); ylabel('Signal Value'); grid on; end
关键优化与注意事项
- 批量测试扩展:如果需要多组测试用例,只需循环生成多个
Simulink.SimulationInput对象,传入parsim即可实现并行仿真,大幅提升效率 - 端口映射排查:若端口匹配失败,可直接打印
port_map查看所有根输入端口的BlockName和PortIndex,确认名称是否完全一致(区分大小写) - 序列兼容性:确保输入序列的时间范围覆盖仿真周期,避免因序列提前结束导致仿真报错
- 信号日志推荐:在模型配置的「Data Import/Export」中开启信号日志,可通过
sim_output.LoggedSignals灵活提取任意命名信号,无需依赖根输出端口
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

