关于 simulating-simulink-models
simulating-simulink-models 是用于配置和运行 Simulink 仿真的技能,面向需要参数覆盖、自定义输入或批量运行的模型使用者。它支持读取仿真输出中的日志信号。
主要功能
- 01非破坏性覆盖仿真参数
- 02传入自定义输入信号
- 03运行批量或并行仿真
- 04使用 Fast Restart 加速迭代
- 05读取日志信号数据
适用场景
- 01比较不同参数值下的模型输出
- 02向模型输入自定义信号
- 03批量运行参数扫描
- 04提取日志信号供后续分析
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ matlab/ simulink-agentic-toolkit --skill simulating-simulink-models安装后在 Claude Code 中输入/simulating-simulink-models确认已加载。
附带文件manifest.yaml
详细介绍
使用 sim 命令仿真 Simulink 模型
当你需要以非破坏性方式配置仿真时,请使用此技能——例如覆盖参数、自定义输入、批量执行或访问结构化输出。对于持久、可复用的通过/失败行为测试(尤其是针对单个子系统的测试),请改用 testing-simulink-models。对于无需配置的简单一次性仿真,直接调用 sim() 即可,无需使用此技能。
适用场景
- 以非破坏性方式覆盖模型或模块参数(setVariable、setBlockParameter、setModelParameter),而不修改 .slx 文件
- 使用 Dataset 通过 setExternalInput 向根级 Inport 模块传递自定义输入信号
- 运行参数扫描或批量仿真(SimulationInput 数组、parsim、Fast Restart)
- 访问记录的信号数据(logsout),以便在仿真后进行分析
不适用场景
- 无需覆盖参数或自定义输入的简单一次性仿真——直接调用
sim('ModelName')即可,无需使用此技能 - 编写基于 Gherkin 的声明式测试 → 使用
testing-simulink-models - 测试单个子系统或组件 → 使用
testing-simulink-models(需要 Simulink Test;会自动创建测试框架,且只编译子系统——比sim()快得多,因为sim()总是编译整个模型) - 添加、连接或删除模块 → 使用
building-simulink-models - 检查模型结构中是否存在未连接的端口 → 直接使用
model_check工具 - 根据模型行为生成需求 → 使用
generate-requirement-drafts
最简工作模式
始终使用 Simulink.SimulationInput 和 Simulink.SimulationOutput 进行仿真:
in = Simulink.SimulationInput('MyModel');
in = in.setModelParameter('StopTime', '10');
out = sim(in);
设置参数
使用 SimulationInput 方法配置仿真:
% Model-level parameters (StopTime, SolverType, SimulationMode, etc.)
in = in.setModelParameter('StopTime', '10', 'SolverType', 'Fixed-step');
% Block parameters — resolve path from blk_X ID (never type block names manually)
blkPath = Simulink.ID.getFullName('MyModel:5');
in = in.setBlockParameter(blkPath, 'Gain', '5');
% MATLAB workspace variables used by the model
in = in.setVariable('Kp', 1.2);
输入信号
使用 Simulink.SimulationData.Dataset 通过 Inport 模块传递输入信号。元素按索引位置与 Inport 模块匹配——第一个元素对应端口号为 1 的 Inport,第二个元素对应端口号为 2 的 Inport,以此类推。
dt = 0.01;
N = 1000;
t = dt*(0:N)';
u = sin(2*pi*t);
ts = timeseries(u, t);
ds = Simulink.SimulationData.Dataset;
ds{1} = ts;
in = in.setExternalInput(ds);
out = sim(in);
也可以使用 timetable 作为输入格式:
secs = seconds(t);
tt = timetable(secs, u);
ds = Simulink.SimulationData.Dataset;
ds{1} = tt;
in = in.setExternalInput(ds);
探索记录的数据
首先使用 who 确定模型会生成哪些类型的记录数据,然后检查 logsout 中的信号名称:
in = Simulink.SimulationInput('MyModel');
out = sim(in);
% See what logging properties exist (logsout, yout, tout, etc.)
who(out)
% List individual signal names within logsout
disp(out.logsout.getElementNames);
访问记录的数据
记录的信号可通过 out.logsout 访问。按名称直接访问:
% Plot a logged signal
plot(out.logsout.get('signalName').Values)
% Get time and data separately
sig = out.logsout.get('signalName').Values;
plot(sig.Time, sig.Data)
多次仿真
运行多次仿真时,请创建一个 Simulink.SimulationInput 对象数组:
in = repmat(Simulink.SimulationInput('MyModel'),N,1);
for k = 1:N
in(k) = Simulink.SimulationInput('MyModel');
in(k) = in(k).setVariable('gain', gains(k));
end
out = sim(in);
若要在迭代扫描中启用快速重启(只编译模型一次):
out = sim(in, 'UseFastRestart', 'on');
并行仿真(parsim)
若要并行运行多次仿真,请使用 parsim,而不要循环调用 sim:
for k = 1:N
in(k) = Simulink.SimulationInput('MyModel');
in(k) = in(k).setVariable('gain', gains(k));
end
out = parsim(in);
parsim 也支持 'UseFastRestart','on',可加快批量运行速度。
注意事项
- 切勿使用
set_param、load_system或open_system来驱动仿真——SimulationInput可替代它们。 - 切勿使用
try-catch或isfield包装对SimulationOutput的访问——sim要么返回有效对象,要么抛出错误。SimulationOutput没有isfield方法。 - 切勿为记录的数据创建不必要的中间变量——直接通过
out.logsout.get('name').Values访问。 - 始终将
in/out用作SimulationInput/SimulationOutput的变量名。 - 始终将
setExternalInput与Dataset配合使用——不要传递以逗号分隔的变量列表。
版权所有 2026 The MathWorks, Inc.