You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中程序化映射信号、运行Simulink仿真并获取输出结果

Simulink多输入端口模型自动化测试实现方案

核心执行顺序

按名称映射信号、仿真运行及结果提取的正确流程是:

  1. 加载目标Simulink模型
  2. 读取预生成的timetable/timeseries输入序列(序列变量名与输入端口块名严格一致)
  3. 通过GetSlRootInportMap建立端口名称到模型端口的映射关系
  4. 用Simulink.SimulationInput配置每个端口对应的输入序列
  5. 调用sim(单仿真)或parsim(批量并行仿真)执行仿真
  6. 从仿真输出中提取结果并用于绘图

完整代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:02:50