Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

sim

Simulink 模型进行仿真

说明

Simulink.SimulationInput 对象语法

示例

simOut = sim(simIn) 根据在一个或多个 Simulink.SimulationInput 对象上定义的属性,运行 Simulink® 模型的一个或多个仿真。

  • 如果 simIn 是标量 Simulink.SimulationInput 对象,则 simOut 是标量 Simulink.SimulationOutput 对象。

  • 如果 simInSimulink.SimulationInput 对象数组,则 simOutSimulink.SimulationOutput 对象数组。

您可以使用 SimulationInput 对象来配置仿真的选项和输入,包括:

  • 要仿真的模型

  • 外部输入数据的源变量或文件

  • 用于仿真的模块参数值

  • 用于仿真的模型配置参数值

SimulationInput 对象的属性修改模型或模块参数值时,该值将在仿真期间修改,并在仿真结束时还原。

当您使用 SimulationInput 对象配置程序化仿真时,您可以轻松地从使用 sim 函数转换为使用其他函数,如 parsimbatchsim

有关详细信息,请参阅以编程方式运行仿真

simOut = sim(simIn,Name,Value) 根据 Simulink.SimulationInput 对象 simIn 上定义的属性仿真模型,并使用由一个或多个名称-值参数指定的附加选项。

有关 Simulink.SimulationInput 语法支持的名称-值参数列表,请参阅Simulink.SimulationInput 对象语法

模型名称语法

示例

simOut = sim(modelName) 使用模型的当前配置参数和模块参数值仿真由 modelName 指定的模型。

  • 如果模型启用了单一仿真输出参数,则 simOut 是一个 Simulink.SimulationOutput 对象。

  • 如果模型未启用单一仿真输出参数,则 simOut 是一个包含仿真时间的向量。有关详细信息,请参阅不推荐返回多个输出参数

simOut = sim(modelName,Name,Value) 仿真由 modelName 指定的模型,并使用由一个或多个名称-值参数指定的选项。例如,通过将参数名称和值指定为名称-值参量,可以修改仿真的模型配置参数值。

当您通过向 sim 函数提供输入来修改模型配置参数时,这些更改将在仿真期间应用,并在仿真结束时还原。

有关模型名称语法支持的名称-值参数列表,请参阅模型名称语法

示例

simOut = sim(modelName,paramStruct) 使用由结构体 paramStruct 指定的模型配置参数值仿真由 modelName 指定的模型。

示例

simOut = sim(modelName,configSet) 使用配置集 configSet 中的模型配置参数值仿真由 modelName 指定的模型。

示例

全部折叠

您可以使用 Simulink.SimulationInput 对象来存储独立于仿真模型的仿真配置。Simulink.SimulationInput 对象中的配置将应用于仿真模型。仿真后,任何发生更改的模型设置都将还原为原始值。

打开模型 IntegrateSine。该模型使用 Integrator 模块对 Sine Wave 模块的输出进行积分。Integrator 模块的输出连接到 Outport 模块。

The model IntegrateSine.

mdl = "IntegrateSine";
open_system(mdl)

创建一个 Simulink.SimulationInput 对象来存储模型 IntegrateSine 的仿真配置。

simIn = Simulink.SimulationInput(mdl);

使用 setModelParameter 函数将 SimulationInput 对象配置为使用 ode45 求解器并将仿真停止时间设为 20 秒。

simIn = setModelParameter(simIn,"Solver","ode45",...
    "StopTime","20");

使用 setBlockParameter 函数配置 SimulationInput 对象,将 Sine Wave 模块的振幅参数设置为 2

blk = strcat(mdl,"/Sine Wave");
simIn = setBlockParameter(simIn,blk,"Amplitude","2");

使用存储在 Simulink.SimulationInput 对象 simIn 中的配置对模型进行仿真。

out = sim(simIn);

该模型对 Sine Wave 模块使用 ode45 求解器,以 2 为振幅仿真 20 秒。

A Dashboard Scope block displays the input and output of the Integrator block.

当您使用 Simulink.SimulationInput 对象数组来配置一组仿真时,只需调用一次 sim 函数即可使用快速重启运行一组仿真。快速重启通过在各次仿真运行之间保持模型编译来节省仿真时间。

打开模型 IntegrateSine。该模型使用 Integrator 模块对 Sine Wave 模块的输出进行积分。Integrator 模块的输出连接到 Outport 模块。

mdl = "IntegrateSine";
open_system(mdl)

The model IntegrateSine.

假设您要运行一组(包含六个)仿真,每个仿真对 Sine Wave 模块使用不同频率值。创建一个包含各个仿真的频率值的向量。

freqs = [0.5 1 1.5 2 2.5 3];

当您要调节模块参数时,可以使用变量定义参数值。然后,通过更改变量值来调节模块参数。

定义变量 freq,将其用作 Sine Wave 模块的频率参数的值。对于初始变量值,可以使用当前参数值。

blk = mdl + "/Sine Wave";
freq = str2double(get_param(blk,"Frequency"));

将 Sine Wave 模块的 Frequency 参数值设置为 freq

set_param(blk,"Frequency","freq")

for 循环中,创建一个包含六个 Simulink.SimulationInput 对象的数组,并使用 setVariable 函数来配置每个对象以使用频率向量中的值。

for k = length(freqs):-1:1
    simIn(k) = Simulink.SimulationInput(mdl);
    simIn(k) = setVariable(simIn(k),"freq",freqs(k));
end

使用 sim 函数运行由 SimulationInput 对象 simIn 的数组定义的仿真。使用 UseFastRestart 名称-值参数启用快速重启。仅当第一个输入参数是 Simulink.SimulationInput 对象时,才支持 UseFastRestart 名称-值参数。要在第一个参数是模型名称时使用快速重启,请使用 FastRestart 名称-值参数。

out = sim(simIn,"UseFastRestart","on");
[28-Feb-2023 11:45:06] Running simulations...
[28-Feb-2023 11:45:11] Completed 1 of 6 simulation runs
[28-Feb-2023 11:45:12] Completed 2 of 6 simulation runs
[28-Feb-2023 11:45:12] Completed 3 of 6 simulation runs
[28-Feb-2023 11:45:12] Completed 4 of 6 simulation runs
[28-Feb-2023 11:45:12] Completed 5 of 6 simulation runs
[28-Feb-2023 11:45:12] Completed 6 of 6 simulation runs

要运行同一组仿真而不显示进度消息,请将 ShowProgress 名称-值参数指定为 off

out = sim(simIn,"UseFastRestart","on","ShowProgress","off");

要使用仿真管理器监控仿真的进度,请将 ShowSimulationManager 名称-值参数指定为 on。有关仿真管理器的详细信息,请参阅Simulation Manager

out = sim(simIn,"UseFastRestart","on",...
    "ShowProgress","off","ShowSimulationManager","on");

仿真输出 out 是包含每个仿真的元数据和结果的 Simulink.SimulationOutput 对象数组。输出数组中 SimulationOutput 对象的顺序与输入数组中 SimulationInput 对象的顺序匹配。例如,索引 1 处的 SimulationOutput 对象包含使用索引 1 处的 SimulationInput 对象配置的仿真的结果。

访问第一次仿真结果记录的输出信号,第一次仿真使用的频率值为 0.5

youtPt5 = out(1).yout
youtPt5 = 
Simulink.SimulationData.Dataset 'yout' with 1 element

                         Name    BlockPath             
                         ______  _____________________ 
    1  [1x1 Signal]      output  IntegrateSine/Outport

  - Use braces { } to access, modify, or add elements using index.

打开模型 IntegrateSine。该模型使用 Integrator 模块对 Sine Wave 模块的输出进行积分。Integrator 模块的输出连接到 Outport 模块。

mdl = "IntegrateSine";
open_system(mdl);

The model IntegrateSine.

使用当前配置参数值仿真模型。

out = sim(mdl);

仿真运行 10 秒,对振幅为 1 的正弦波求积分。

A Dashboard Scope block displays the input and output of the Integrator block.

您可以使用 set_param 函数修改模型中的模型配置参数值和模块参数值。

配置模型以使用 ode45 求解器并将仿真停止时间设为 20 秒。

set_param(mdl,"Solver","ode45","StopTime","20")

将 Sine Wave 模块的振幅参数设置为 2

blk = strcat(mdl,"/Sine Wave");
set_param(blk,"Amplitude","2")

当您使用 set_param 函数修改配置参数值或模块参数值时,更改会应用于模块图并弄脏模型文件。当您再次调用 sim 函数时,即使您没有保存模型,仿真也会使用新参数值,这些参数值是当前模型配置的一部分。

out2 = sim(mdl);

仿真运行 20 秒,对振幅为 2 的正弦波求积分。

A Dashboard Scope block displays the input and output of the Integrator block.

通过将仿真的配置参数指定为 sim 函数的名称-值参量,可以将模型的仿真配置为使用不同模型配置参数值。您指定的参数值将应用于仿真,并在仿真完成时还原。

您只能将模型配置参数值指定为 sim 函数的名称-值参量,而不能将模块参数值指定为参量。要在单一输入中指定仿真的模型配置参数值、模块参数值和变量值,请改用 Simulink.SimulationInput 对象。

打开模型 IntegrateSine。该模型使用 Integrator 模块对 Sine Wave 模块的输出进行积分。Integrator 模块的输出连接到 Outport 模块。

mdl = "IntegrateSine";
open_system(mdl);

The model IntegrateSine.

假设您要使用 ode45 求解器和 20 秒的仿真停止时间对模型进行仿真。指定仿真的 SolverStopTime 值作为 sim 函数的名称-值参数。

out = sim(mdl,"Solver","ode45","StopTime","20");

该模型使用求解器 ode45 进行仿真,直到到达仿真时间 20 秒处。

A Dashboard Scope block displays the input and output of the Integrator block.

您可以使用由模型配置参数的名称和值组成的结构体来配置模型的仿真。将结构体中的配置参数值应用于模型进行仿真。仿真后,任何发生更改的模型设置都将还原为原始值。

结构体输入只能指定模型配置参数值,而无法指定要在仿真中使用的不同模块参数或变量值。要在单一输入中指定仿真的模型配置参数值、模块参数值和变量值,请改用 Simulink.SimulationInput 对象。

打开模型 IntegrateSine。该模型使用 Integrator 模块对 Sine Wave 模块的输出进行积分。Integrator 模块的输出连接到 Outport 模块。

mdl = "IntegrateSine";
open_system(mdl)

The model IntegrateSine.

创建结构体 SimConfig,该结构体将仿真配置为使用 ode45 求解器且仿真停止时间为 20 秒。对于要在仿真中修改的每个配置参数,该结构体都包含一个对应的字段。每个字段的名称与对应的参数的编程名称匹配。每个字段的值指定仿真中使用的该参数的值。

simConfig.Solver = "ode45";
simConfig.StopTime = "20";

使用结构体中的模型配置参数值仿真模型。

out = sim(mdl,simConfig);

该模型使用 ode45 求解器进行仿真,仿真时间 20 秒。

A Dashboard Scope block displays the input and output of the Integrator block.

Simulink.ConfigSet 对象存储一组模型配置参数值。您可以将 Simulink.ConfigSet 对象指定为 sim 函数的输入。该对象中的配置集将应用于要仿真的模型。在仿真后,模型中将还原原始配置集。

Simulink.Configset 对象仅存储模型配置参数值。要在单一输入中指定仿真的模型配置参数值、模块参数值和变量值,请改用 Simulink.SimulationInput 对象。

打开模型 IntegrateSine。该模型使用 Integrator 模块对 Sine Wave 模块的输出进行积分。Integrator 模块的输出连接到 Outport 模块。

mdl = "IntegrateSine";
open_system(mdl)

The model IntegrateSine.

使用 getActiveConfigSet 函数获取当前模型配置的 Simulink.ConfigSet 对象。

mdlConfig = getActiveConfigSet(mdl);

使用 copy 函数创建要修改的 Simulink.ConfigSet 对象的副本。

simConfig = copy(mdlConfig);

修改 Simulink.ConfigSet 对象 simConfig 以使用 ode45 求解器并将仿真停止时间设为 20 秒。

set_param(simConfig,"Solver","ode45","StopTime","20");

使用 Simulink.Configset 对象 simConfig 中的配置参数仿真模型。

out = sim(mdl,simConfig);

该模型使用 ode45 求解器进行仿真,仿真时间 20 秒。

A Dashboard Scope block displays the input and output of the Integrator block.

输入参数

全部折叠

仿真配置,指定为 Simulink.SimulationInput 对象。SimulationInput 对象的属性指定在仿真中使用的选项和参数值,包括:

  • 要仿真的模型

  • 外部输入数据的源变量或文件

  • 用于仿真的模块参数值

  • 用于仿真的模型配置参数值

SimulationInput 对象的属性中定义的值将应用于仿真的模型,并在仿真结束时还原。

要仿真的模型,指定为字符串或字符向量。

示例: simOut = sim("vdp") 使用模型中当前配置的参数值对名为 vdp 的模型进行仿真。

数据类型: char | string

要仿真的模型配置,指定为结构体。该结构体的字段是模型配置参数的名称。每个字段的值表示要在仿真中使用的参数值。例如,要从开始时间 5 到停止时间 10 对模型进行仿真,请创建以下结构体:

paramStruct.StartTime = "5";
paramStruct.StopTime = "10";

数据类型: struct

要仿真的模型配置,指定为 Simulink.ConfigSet 对象。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: simOut = sim(simIn,"UseFastRestart","on") 运行一组使用启用了快速重启的 Simulink.SimulationInput 对象数组配置的仿真。

示例: simOut = sim(modelName,"Solver","ode15s","StopTime","30") 配置由 modelName 指定的模型的仿真,以使用停止时间为 30 的 ode15s 求解器。

sim 函数支持不同的名称-值参数,具体取决于您是将第一个输入指定为 Simulink.SimulationInput 对象还指定为要仿真的模型的名称。除了本页列出的参量之外,您还可以使用 sim 函数的输入来指定模型配置参数的值。

  • 当第一个输入参量是 Simulink.SimulationInput 对象时,使用 setModelParameter 函数为输入对象上的仿真配置模型参数值。

  • 当第一个输入参量是模型名称时,将任何模型配置参数指定为名称-值参量。

Simulink.SimulationInput 对象语法

全部折叠

启用快速重启的选项,指定为 'off''on'。快速重启通过在适当时跳过编译和终止阶段来减少运行一组仿真所需的时间。当您运行同一模型的多个仿真时,请考虑使用快速重启。

有关详细信息,请参阅How Fast Restart Improves Iterative Simulations

仅当将 sim 函数的第一个输入参数指定为 Simulink.SimulationInput 对象时,才支持此参数。

示例: sim(simIn,"UseFastRestart","on")

数据类型: char | string

发生错误时停止启动仿真的进程的选项,指定为 'off''on'

  • 'off' - 当仿真中出现错误时,仿真停止,但启动仿真的进程会继续。例如,当您使用 Simulink.SimulationInput 对象数组运行一组仿真时,如果第一个仿真遇到错误,则该仿真会停止,而后续仿真仍会运行。

  • 'on' - 当仿真中出现错误时,该仿真和启动该仿真的进程都会停止。例如,当您使用 Simulink.SimulationInput 对象数组运行一组仿真时,如果第一个仿真遇到错误,则该仿真会停止,后续仿真也不会运行。

仅当将 sim 函数的第一个输入参数指定为 Simulink.SimulationInput 对象时,才支持此参数。

示例: sim(simIn,"StopOnError","on")

提示

  • 当您将模型的名称指定为 sim 函数的第一个输入参数时,请使用 CaptureErrors 名称-值参数配置此行为。

  • 当错误没有停止启动仿真的进程时,会在 Simulink.SimulationOutput 对象和 Simulink.SimulationMetadata 对象中捕获错误消息信息。

    • 要查看该消息,请使用 SimulationOutput 对象的 ErrorMessage 属性。

    • 有关该错误的详细信息,请使用 Simulink.SimulationMetadata 对象的 ExecutionInfo 属性。ErrorDiagnostic 字段包含有关错误的信息,包括发生错误的仿真阶段。

数据类型: char | string

指示仿真进度的选项,指定为 'off''on'

  • 'off' - 仿真运行时不显示进度消息。

  • 'on' - 仿真进行时显示进度更新。

此参数的默认值取决于第一个输入参量的大小:

  • 当第一个输入参数是标量 Simulink.SimulationInput 对象时,默认值为 'off'

  • 当第一个输入参数是 Simulink.SimulationInput 对象数组时,默认值为 'on'

仅当将 sim 函数的第一个输入参数指定为 Simulink.SimulationInput 对象时,才支持此参数。

示例: sim(simIn,"ShowProgress","on")

打开仿真管理器的选项,指定为 'off''on'。使用仿真管理器监控您运行仿真的进度。当您使用 Simulink.SimulationInput 对象数组运行多个仿真时,请考虑使用仿真管理器。

仅当将 sim 函数的第一个输入参数指定为 Simulink.SimulationInput 对象时,才支持此参数。

示例: sim(simIn,"ShowSimulationManager","on")

模型名称语法

全部折叠

发生错误时继续执行启动仿真的进程的选项,指定为 'off''on'。默认情况下,当使用 sim 函数运行仿真并将模型名称指定为第一个输入时:

  • 在 MATLAB® 命令行窗口中报告错误。

  • 出现错误时,仿真和调用仿真的进程都会停止。

  • 不会在 Simulink.SimulationOutput 对象或 Simulink.SimulationMetadata 对象中捕获错误消息。

当您将 CaptureErrors 指定为 'on' 时,只会在仿真输出中报告错误。出现错误的仿真将停止执行,但如果仿真是被另一个进程调用的,则该进程将继续执行。例如,当您使用循环方式运行多个仿真时,如果您将 CaptureErrors 指定为 'on',则随后的仿真会在出现错误的仿真后继续运行。

仅当您将 sim 函数的第一个输入参数指定为要仿真的模型的名称时,才支持此参数。

示例: sim("myModel","CaptureErrors","on")

提示

  • 软件在环 (SIL) 和处理器在环 (PIL) 仿真不支持此选项。

  • 当您将一个或多个 Simulink.SimulationInput 对象指定为 sim 函数的输入时,请使用 StopOnError 名称-值参数配置此行为。

  • 当您将 CaptureErrors 指定为 'on' 时,将在 Simulink.SimulationOutput 对象和 Simulink.SimulationMetadata 对象中捕获错误消息。

    • 要查看该消息,请使用 SimulationOutput 对象的 ErrorMessage 属性。

    • 有关该错误的详细信息,请使用 Simulink.SimulationMetadata 对象的 ExecutionInfo 属性。ErrorDiagnostic 字段包含有关错误的信息,包括发生错误的仿真阶段。

数据类型: char | string

在调试模式下启动仿真的选项,指定为 'off''on'

仅当您将 sim 函数的第一个输入参数指定为要仿真的模型的名称时,才支持此参数。

示例: sim("modelName","Debug","on")

数据类型: char | string

禁用重新编译快速加速目标的选项,指定为 'on''off'。当您将此参数指定为 'on' 时,需要重新编译快速加速目标的更改将被忽略。使用此选项时,请仅修改不需要重新编译快速加速目标的选项。

仅当您将 sim 函数的第一个输入参数指定为要仿真的模型的名称时,才支持此参数。

示例: sim("modelName","RapidAcceleratorUpToDateCheck","off")

提示

要为使用 Simulink.SimulationInput 对象配置的仿真指定此选项,请使用 setModelParameter 函数。

simIn = Simulink.SimulationInput("myModel");
simIn = setModelParameter(simIn,"RapidAcceleratorUpToDateCheck","off");

数据类型: char | string

最大仿真运行时间,指定为正标量。以秒为单位指定允许仿真运行的时间。如果仿真运行时间超出您指定的值,软件将发出警告并停止仿真。例如,如果将 TimeOut 指定为 30,则计算仿真结果所需的时间超过 30 秒时,软件将停止仿真并发出警告。

TimeOut 参数指定仿真运行的时钟时间限制。要指定仿真的最大时间值,请使用停止时间参数。

仅当您将 sim 函数的第一个输入参数指定为要仿真的模型的名称时,才支持此参数。

示例: sim("modelName","TimeOut",60) 将仿真配置为最长运行 60 秒。

提示

  • 当您连续运行多个可变步长仿真时,请考虑指定超时。如果仿真条件对步长有限制,使得求解器开始采用许多非常小的时间步,则仿真会超时,以便后续仿真能够运行。

  • 要为使用 Simulink.SimulationInput 对象配置的仿真指定此选项,请使用 setModelParameter 函数。

    simIn = Simulink.SimulationInput("modelName");
    simIn = setModelParameter(simIn,"TimeOut",60);

仿真前显示参数摘要的选项,指定为 'siminfo'

仅当您将 sim 函数的第一个输入参数指定为要仿真的模型的名称时,才支持此参数。

示例: sim("modelName","Trace","siminfo")

数据类型: char | string

输出参数

全部折叠

仿真输出,以 Simulink.SimulationOutput 对象、Simulink.SimulationOutput 对象数组或向量形式返回。Simulink.SimulationOutput 对象包含从仿真记录的所有数据以及有关仿真的元数据,包括计时信息和诊断。

如果您仅指定模型名称作为输入参量,并且您仿真的模型禁用单一仿真输出参数,则来自 sim 函数的输出是由仿真时间组成的向量。为了使 sim 函数以一致的格式返回任何语法的结果,请在启用单一仿真输出参数的情况下保存模型。

提示

  • 为了确保不管您指定哪些输入参量,sim 函数都以相同的格式返回结果,请在启用单一仿真输出参数的情况下保存您的模型。启用此选项后,仿真结果将以 Simulink.SimulationOutput 形式返回,其中包含所有记录的数据和仿真元数据,包括计时信息和诊断。当所有仿真数据和元数据都集中存储在一个对象中时,分析多个仿真的结果会更容易。

  • 要获取模型配置参数列表,请使用 getActiveConfigSet 函数和 get_param 函数。例如,要查看模型 vdp 的配置参数,请在 MATLAB 命令行窗口中输入以下命令。

    configSet = getActiveConfigSet("vdp");
    configSetNames = get_param(configSet,"ObjectParameters")

    get_param 函数的返回结果列出模型配置参数,如 StopTimeSaveTimeSaveStateSaveOutputSignalLogging

  • 在仿真模型层次结构时,以 sim 函数的输入参量形式指定的模型配置参数将应用于顶层模型。

  • 使用 sim 函数运行仿真时,仿真会一直运行,直到出现错误或仿真到达指定的停止时间。要以编程方式运行可以编程方式暂停和继续的交互式仿真,请使用带 SimulationCommand 输入参数的 set_param 函数。有关详细信息,请参阅以编程方式运行仿真

  • 当您仿真停止时间为无限长的模型时,通过按 Ctrl+C 键从 MATLAB 命令行窗口停止仿真。仿真停止,仿真结果不会保存在 MATLAB 工作区中。

  • 使用“配置参数”对话框配置时间、状态和输出的记录。在建模选项卡上的设置下,点击模型设置。然后,在“配置参数”对话框中,选择数据导入/导出

  • 要记录整个模型中的信号,请使用信号记录或记录模块,如 To Workspace 模块或 Record, XY Graph 模块。有关信号记录的详细信息,请参阅使用信号记录保存信号数据

版本历史记录

在 R2006a 之前推出

全部展开