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 指定的模型。

示例

全部折叠

使用 SimulationInput 对象修改模型中模块的参数值。

打开模型。

openExample("simulink_general/sldemo_househeatExample")

为此模型创建 SimulationInput 对象。

mdl = "sldemo_househeat";
simIn = Simulink.SimulationInput(mdl);

通过修改 Set Point 模块的参数,将调温器的设定值更改为 300

simIn = setBlockParameter(simIn,"sldemo_househeat/Set Point",...
	"Value","300");

对模型进行仿真。

out = sim(simIn);

对处于现有状态的模型 vdp 进行仿真,不考虑它是尚未加载还是已加载但有尚未保存的更改。

simOut = sim("vdp");

使用在结构体中指定的模型配置参数值仿真模型 vdp

创建结构体 paramStruct。将模型配置为使用变量名称 xoutNew 记录状态。

paramStruct.SaveState      = 'on';
paramStruct.StateSaveName  = 'xoutNew';

向结构体中添加更多字段,以将模型配置为使用变量名称 youtNew 记录输出。

paramStruct.SaveOutput     = 'on';
paramStruct.OutputSaveName = 'youtNew';

使用在结构体中指定的选项仿真模型。

simOut = sim('vdp',paramStruct)
simOut = 
  Simulink.SimulationOutput:

                xoutNew: [64x2 double] 
                youtNew: [64x2 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

打开模型 vdp 并获取活动配置的 Simulink.ConfigSet 对象。

mdl = "vdp";
open_system(mdl)
cs = getActiveConfigSet(mdl);

创建 Simulink.ConfigSet 对象的一个副本。然后,使用 set_param 函数修改配置集中的参数值。将 ConfigSet 对象中的参数配置为:

  • 使用绝对容差 1e-5

  • 使用变量名称 xoutNew 记录状态

  • 使用变量名称 youtNew 记录输出

csNew = copy(cs);
set_param(csNew,"AbsTol","1e-5",...
         "SaveState","on","StateSaveName","xoutNew",...
         "SaveOutput","on","OutputSaveName","youtNew")

使用修改后的 Simulink.ConfigSet 对象仿真模型。

simOut = sim(mdl,csNew)
simOut = 
  Simulink.SimulationOutput:

                xoutNew: [65x2 double] 
                youtNew: [65x2 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

输入参数

全部折叠

仿真配置,指定为 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 对象数组运行多个仿真时,此选项非常有用。

    仅当将 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 之前推出

全部展开