Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

sim

Simulink 模型进行仿真

说明

Simulink® 模型表示动态系统。通过模型仿真,您可以了解系统随时间的行为变化。sim 命令使用指定的模型,并将参数应用于模型。在仿真结束时,sim 命令将还原它应用的所有参数。

simOut = sim(model) 使用现有模型配置参数对指定模型进行仿真,并将结果返回为 Simulink.SimulationOutput 对象(单输出格式)。

要返回使用向后兼容格式(时间向量)的仿真结果,请参阅向后兼容语法

simOut = sim(model,Name,Value) 使用参数名称-值对组对指定模型进行仿真。

simOut = sim(simIn) 使用 Simulink.SimulationInput 对象 simIn 中指定的输入对模型进行仿真。sim 命令可用于 SimulationInput 对象数组,以运行一个系列中的多个仿真。如果 simInSimulink.SimulationInput 对象的数组,输出将以 Simulink.SimulationOutput 对象数组形式返回。

示例

simOut = sim(model,ParameterStruct) 使用结构体 ParameterStruct 中指定的参数值对指定模型进行仿真。

示例

simOut = sim(model,ConfigSet) 使用模型配置集 ConfigSet 中指定的配置设置对指定模型进行仿真。

示例

使用 Simulink.SimulationInput 对象的数组设置模块参数

此示例通过 SimulationInput 对象修改模型的模块参数。

打开模型。

openExample('simulink/OpenTheModelExample');
open_system('ex_sldemo_househeat');
load_system('ex_sldemo_househeat')

为此模型创建 SimulationInput 对象。

mdl = 'sldemo_househeat';
in = Simulink.SimulationInput(mdl);

修改模块参数。

in = in.setBlockParameter('sldemo_househeat/Set Point','Value','300');

对模型进行仿真。

out = sim(in)

使用默认参数设置对模型进行仿真

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

默认情况下,Configuration Parameters 对话框的 Data Import/Export 窗格上的 Single simulation output 处于选中状态,因此 sim 返回使用单输出格式(仿真对象)的仿真结果。此选择会覆盖用于信号记录的 Dataset 格式。

simOut = sim('vdp')

使用结构体形式的 sim 命令行选项对模型进行仿真

仿真模型 vdp 并将状态保存在 xoutNew 中,将输出保存在 youtNew 中。

使用名称-值对组结构体 paramNameValStructsim 命令指定参数:

paramNameValStruct.SaveState      = 'on';
paramNameValStruct.StateSaveName  = 'xoutNew';
paramNameValStruct.SaveOutput     = 'on';
paramNameValStruct.OutputSaveName = 'youtNew';
simOut = sim('vdp',paramNameValStruct)
simOut = 
  Simulink.SimulationOutput:

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

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

使用配置集形式的 sim 命令行选项对模型进行仿真

在绝对容差为 1e-5 的条件下对模型 vdp 进行仿真,并将状态保存在 xoutNew 中,将输出保存在 youtNew 中。

在配置集 mdl_cs 中为 sim 命令指定名称-值对组形式的参数:

mdl = 'vdp';
load_system(mdl)
cs = getActiveConfigSet(mdl);
mdl_cs = cs.copy;
set_param(mdl_cs,'AbsTol','1e-5',...
         'SaveState','on','StateSaveName','xoutNew',...
         'SaveOutput','on','OutputSaveName','youtNew')
simOut = sim(mdl, mdl_cs)
simOut = 
  Simulink.SimulationOutput:

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

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

输入参数

全部折叠

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

示例: simOut = sim('vdp')

结构体,其中包含指定为结构体的仿真的参数设置。结构体中的字段是配置参数的名称,对应的值是参数值。

模型的配置参数集,指定为 Simulink.Configset 对象。有关详细信息,请参阅 Simulink.ConfigSet

模型的仿真输入对象,指定为通过指定模型名称创建的 Simulink.SimulationInput 对象。有关详细信息,请参阅 Simulink.SimulationInput

使用 SimulationInput 对象为仿真指定模块参数、模型参数、变量和外部输入。

示例: simIn = Simulink.SimulationInput('vdp')

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须显示在引号内。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN

示例: 'Solver','ode15s','TimeOut','30' 指定使用 ode15s 求解器仿真模型,当 SIimulationTime 达到 30 时发生超时。

您可以将任何模型参数及其值传递给 sim 命令。

此外,sim 命令还接受以下不被 Configsetset_param 支持的参数。

指示是否将错误保存到 SimulationMetadata 对象的选项,指定为 'off' 或 'on'。默认情况下,如果在仿真期间发生错误,sim 命令会停止,并在 MATLAB® 命令行窗口中报告该错误。如果指定 'CaptureErrors','on',则 sim 命令会将所有错误均保存到 SimulationMetadata 对象中的 ErrorDiagnostic 结构体。错误消息保存在 SimulationOutput 对象的 ErrorMessage 属性中。

在循环中运行多个仿真时,此选项非常有用,这样一个仿真错误不会阻止脚本或函数继续执行。

如果您指定输入对象数组,sim 命令将在 CaptureErrors 处于启用状态的模式下运行。如果发生错误,错误消息以及出现故障之前的仿真数据将包含在仿真的 Simulink.SimulationMetadata 对象中。

此选项不适用于 SIL 和 PIL 模式下的仿真。

示例: 'CaptureErrors','on'

仿真的调试模式选项,指定为 'off' 或 'on'。将 'Debug' 参数的值设置为 'on' 将在调试模式下开始仿真(有关详细信息,请参阅Debugger Graphical User Interface)。此选项的值可以是 Debugger 启动后要发送给它的命令元胞数组。

示例: 'Debug','on'

此选项仅在 Rapid Accelerator 模式下可用。仿真之前的最新检查,指定为 'off' 或 'on'。如果您将此值设置为 'off',Simulink 将不执行最新检查。它会跳过模块中的 start/stop 回调。如果您从 parfor 中调用 sim 命令,请将此值设置为 'off'

将此选项设置为 'off' 时,您对模型中的模块参数值所做的更改(例如,通过模块对话框、通过 set_param 函数或通过更改 MATLAB 变量的值所做的更改)不会影响仿真。使用 RapidAcceleratorParameterSets 可将新参数值直接传递给仿真。

示例: 'RapidAcceleratorUpToDateCheck','off'

最大仿真运行时间,指定为正标量。以秒为单位指定允许仿真运行的时间。如果您运行模型的时间超过 TimeOut 的值,软件将发出警告并停止仿真。TimeOut 指仿真所花费的时间。

示例: 'TimeOut',60

仿真追踪工具,指定为:

  • 'minstep' 指定当解突然变化而导致可变步长求解器无法执行且无法满足误差容限时停止仿真。

  • 'siminfo' 提供仿真开始时有效仿真参数的简短摘要。

示例: 'Trace','minstep','Trace','siminfo'

输出参数

全部折叠

包含记录的仿真结果的仿真对象,以包含所有记录的仿真结果的 Simulink.SimulationOutput 对象形式返回。

在单个 Simulink.SimulationOutput 对象中返回所有仿真输出(记录的时间、状态和信号)。您可以使用 Model Configuration Parameters 对话框的 Data Import/Export 窗格来选择要记录的数据,例如模型时间、状态以及输出。您可以使用 To WorkspaceScope 等模块记录信号。有关信号记录的详细信息,请参阅信号记录

详细信息

全部折叠

向后兼容语法

从 R2009b 开始,增强了 sim 命令,以便更好地兼容并行计算。改进的单输出格式将所有仿真结果保存到单个对象中,从而简化输出变量的管理。

为了与 R2009a 或更早版本兼容,请使用以下语法:

[T,X,Y] = sim('model',Timespan, Options, UT)
[T,X,Y1,...,Yn] = sim('model',Timespan, Options, UT)

如果仅指定 model 参数,Simulink 会自动将时间、状态和输出保存到指定的输出参数。

如果不指定任何输出参数,Simulink 将基于 Configuration Parameters > Data Import/Export 窗格中的设置来确定记录哪些数据。Simulink 将基于 Save simulation output as a single object 参数的设置,将仿真输出保存到当前工作区或变量 ans 中。

向后兼容语法的输入和输出参数
参数说明
T

返回的时间向量。

X

以矩阵或结构体格式返回的状态。状态矩阵中包含连续状态,后跟离散状态。

Y

以矩阵或结构体格式返回的输出。对于模块图模型,此变量包含所有根级模块。

Y1,...,Yn

输出端口,只能为块图模型指定。这里的 n 必须是根级模块的数量。每个输出端口在 Y1,...,Yn 变量中返回。

'model'

要仿真的模型的名称。

Timespan

时间范围可以是 TFinal[TStart TFinal][TStart OutputTimes TFinal]。输出时间是在 T 中返回的时间点,但一般情况下 T 还包括其他时间点。

Options

结构体形式的可选仿真参数,由 simset 命令使用名称-值对组创建。

UT

可选的外部输入。要了解支持哪些表达式,请参阅将数据加载到根级输入端口

Simulink 只需要 model 参数。Simulink 从模块图获得所有默认值,包括未指定的选项。如果您指定了任何可选参数,您指定的设置将覆盖模块图中的设置。

sim 的输入参数指定为空矩阵 [ ] 将使得 Simulink 使用该参数的默认值。

提示

  • 使用 sim 命令指定的参数将覆盖 Model Configuration Parameters 对话框中定义的值。软件将在仿真结束时恢复原始配置值。

  • 如果一个模型中包含 model reference 模块,参数设定将应用于顶层模型。

  • 当仿真模型的停止时间为无限长时,要停止仿真,必须按 Ctrl+CCtrl+C 会中断仿真,并且仿真结果不会保存在 MATLAB 工作区中。

  • 要指定仿真的时间跨度,必须指定 StartTimeStopTime 参数。

  • 要记录模型时间、状态或输出,请使用 Model Configuration Parameters 对话框的 Data Import/Export 窗格。

  • 要记录信号,请使用 To Workspace 模块(如 To Workspace 模块或 Scope 模块),或使用信号记录。有关详细信息,请参阅 使用信号记录导出信号数据

  • 要获取模型 vdp 的仿真参数列表,请在 MATLAB 命令行窗口中输入:

    configSet = getActiveConfigSet('vdp')
    configSetNames = get_param(configSet, 'ObjectParameters')  

    此命令列出多个对象参数,包括仿真参数,如 'StopTime''SaveTime''SaveState''SaveOutput''SignalLogging'

在 R2006a 之前推出