Main Content

以编程方式运行仿真

要以编程方式运行仿真,您可以在 MATLAB® 命令行窗口中编写脚本或发出命令。有几个接口可以提供编程仿真功能。每个接口都具有不同的功能,可用于配置仿真行为以及在仿真运行时与仿真进行交互。

编程接口常规用例
sim 函数

配置和运行仿真。

Simulation 对象

配置和运行仿真,在仿真期间调节变量和参数值,并编写控制仿真执行的脚本。

具有 SimulationCommand 名称-值参量的 set_param 函数

使用 MATLAB 命令行窗口和 Simulink 编辑器与仿真进行交互。

使用 sim 函数、Simulation 对象或 set_param 函数以编程方式运行的仿真以串行方式一次运行一个仿真。要运行并行仿真或批量仿真,请使用 parsim 函数或 batchsim 函数。

决定如何运行或脚本化编程仿真

一般而言,当您不需要在仿真期间与模型进行交互时,sim 函数可以满足您运行和脚本化单个以及多个连续编程仿真的大多数需求。

当您要在仿真期间以编程方式与仿真进行交互时,请使用 Simulation 对象。使用 Simulation 对象,您可以控制仿真执行并在仿真期间调节参数和变量值。您可以编写 MATLAB 脚本,根据仿真中计算的结果和值修改参数或变量值。

虽然您可以通过编程方式与使用 Simulation 对象运行的仿真进行交互,但当仿真的状态不是 inactive 时,您无法使用 Simulink 编辑器Simulation 对象关联的模型或仿真进行交互。使用 set_param 函数发出仿真命令可让您从 MATLAB 命令提示符以编程方式以及使用 Simulink 编辑器以交互方式与模型进行以交互。通过点击 Simulink 编辑器中的运行或通过发出 start 仿真命令启动的仿真支持仿真命令。

下表总结了脚本化使用 sim 函数和 Simulation 对象的编程仿真时可用的功能。

操作或选项sim 函数Simulation 对象
配置仿真而不直接修改模型

您可以使用 Simulink.SimulationInput 对象、结构体、Simulink.ConfigSet 对象或名称-值参量来指定参数和变量值以覆盖保存在模型中的值。

您指定的覆盖值将应用于仿真,并在仿真完成后还原。

您可以通过从现有 Simulink.SimulationInput 对象创建 Simulation 对象或通过在 Simulation 对象上指定覆盖值来指定参数和变量值以覆盖保存在模型中的值。

您指定的覆盖值将应用于仿真,并在仿真完成后还原。

在仿真期间调节参数和变量值不支持。

使用 setVariablesetModelParametersetBlockParameter 函数在仿真期间调节参数值。

停止仿真

在 MATLAB 命令行窗口中,按 Ctrl+C 键。

调用 stop 函数或 terminate 函数。
暂停仿真

不支持。

调用 pause 函数。

使用 step 函数指定暂停前的仿真推进量。

在 MATLAB 命令行窗口中发出命令

不支持。

MATLAB 命令提示符在仿真期间不可用。

支持。

MATLAB 命令提示符在运行仿真时可用,除非您通过调用 step 函数来推进仿真。

使用可视化模块查看仿真结果,例如 Scope 模块

普通模式和加速模式仿真都支持。

不支持快速加速仿真。

不支持。
端口值标签不支持。不支持。
步进仿真

不支持。

要推进仿真,请使用 step 函数。

不支持后退。

信号断点

不支持。

不支持。
在指定时间或之后暂停

不支持。

使用具有 PauseTime 名称-值参量的 step 函数。
在仿真输出中捕获有关仿真错误的信息,而不是发出异常

CaptureErrors 名称-值参量指定为 "on"

使用 setModelParameterCaptureErrors 参数指定为 "on"

快速重启支持。支持。
仿真调速支持。支持。
仿真超时

使用 Timeout 名称-值参量指定允许 sim 函数运行的最长时间。

不支持。
查询仿真状态

不支持。

仿真执行会阻止 MATLAB 线程。

Simulation 对象的 Status 属性表示当前仿真状态。
使用 matlab (macOS)matlab (Linux)-nodesktop-nodisplay 选项在 MATLAB 会话中运行仿真。支持。不支持。

使用 sim 函数运行仿真并编写脚本

sim 函数有几种语法,您可以使用它们以编程方式运行和配置仿真。当您要使用所有模型配置参数值、模块参数值、变量值等的当前值对模型进行仿真时,请使用最基本的语法,只指定模型的名称作为输入参量。

out = sim("ModelName");

此语法返回单个 Simulink.SimulationOutput 对象,该对象包含所有仿真结果(单一仿真输出参数禁用时除外)。为了确保您可以为以编程方式运行的所有仿真编写一致的代码,请启用单一仿真输出参数。

例如,当您要通过指定模型配置参数值、模块参数值和变量值的值配置仿真时,请使用 Simulink.SimulationInput 对象来指定仿真配置。此命令显示使用 SimulationInput 对象的基本语法。存储在名为 simin 的变量中的 SimulationInput 对象是唯一的输入参量。仿真结果始终以单个 Simulink.SimulationOutput 对象形式返回。

out = sim(simin);

下表总结了您可以配置的选项以及每种语法的用例。

sim 语法仿真配置选项
out = sim("ModelName");

使用配置参数、模块参数和变量值的当前值仿真模型。

out = sim(simin);

使用带有以下覆盖值的 Simulink.SimulationInput 对象指定仿真配置:

  • 模型配置参数

  • 变量

  • 外部输入

  • 初始状态

  • 模块参数

使用名称-值参量配置附加选项,例如是否:

  • 使用快速重启运行仿真。

  • 在仿真输出中捕获错误或发出 MATLAB 异常。

  • 打开仿真管理器

out = sim("ModelName",Name=Value);

使用名称-值参量来配置仿真选项,例如:

  • 模型配置参数

  • 仿真调速选项

  • 是否使用快速重启进行仿真

  • 是在仿真输出中捕获错误还是发出 MATLAB 异常

out = sim("ModelName",paramstruct);

使用结构体指定模型配置参数值和仿真选项,结构体的字段名称与每个参数名称匹配,字段值指定用于每个参数的值。

例如,要将 StopTime 参数值指定为 20,请创建一个结构体,其中包含名为 StopTime 的字段,该字段的值为 "20"

paramStruct.StopTime = "20";
out = sim("ModelName",configset);

使用 Simulink.ConfigSet 对象指定模型配置参数值。

使用 Simulation 对象运行和脚本化仿真

Simulation 对象表示模型的仿真,并在仿真运行时提供控制和交互的界面。与使用 sim 函数运行的仿真不同,您可以在运行仿真时使用 MATLAB 命令提示符。使用 Simulation 对象,您可以:

  • 根据运行时可以访问的仿真结果,使用 MATLAB 代码中的逻辑编写脚本来控制仿真并与之交互。

  • 通过仿真中的主时间步步进。

  • 在仿真期间调节参数和变量值。

  • 使用 App 设计工具构建 App,以对仿真进行控制、交互和监控。

  • 使用 Simulink® Compiler™ 部署仿真脚本和 App。

下表总结了可用于控制仿真执行的 Simulation 对象函数。

函数描述详细信息
initialize

初始化仿真。

在初始化完成之前,MATLAB 命令提示符不可用。

start

开始仿真。

如果您启动未初始化的仿真,函数 start 会在它启动前初始化仿真。MATLAB 命令提示符在初始化完成之前不可用,在仿真开始时 MATLAB 命令提示符变为可用。

step

将仿真推进指定的量,然后暂停。

您可以按照单个主时间步、指定的主时间步数以及到达或超过指定的仿真时间来推进仿真。仿真在推进指定的量后暂停。

MATLAB 命令提示符在仿真推进期间不可用。

pause暂停活动仿真。

pause 函数发送暂停仿真的即时请求。仿真在完成必须无中断完成的过程后暂停。

MATLAB 命令提示符在仿真暂停时不可用。

resume继续暂停的仿真。

MATLAB 命令提示符在恢复仿真时不可用,一旦仿真开始执行,该命令提示符将更改为可用。

stop在仿真停止时间之前停止活动仿真。

stop 函数发送立即停止仿真的请求。仿真在完成必须无中断完成的过程后停止。

当仿真达到仿真停止时间时,仿真会自行停止,除非您使用 step 函数将普通或加速模式仿真推进到最后一个时间步。在这种情况下,仿真在最后一个时间步后暂停。

terminate终止仿真。

未启用快速重启的仿真将在停止时终止。快速重启仿真在停止后仍保持编译状态,因此无需初始化后续仿真。终止后运行的仿真需要初始化。

可以通过指定初始状态、外部输入、模型参数、模块参数和变量值来配置仿真。您指定的值将覆盖仿真期间保存在模型中的值,并在仿真完成时还原。您还可以在仿真期间修改可调参数的值和变量值。下表总结了可用于配置仿真的 Simulation 对象函数。

函数描述详细信息
setInitialState指定仿真的初始状态或工作点。初始状态仅在仿真之间可调,在仿真期间不可调。
setExternalInput使用顶层输入端口指定要加载的外部输入数据。外部输入数据仅在仿真之间可调,在仿真期间不可调。
setModelParameter指定要在仿真中使用的模型配置参数的值。大多数配置参数仅在仿真之间可调,在仿真期间不可调。
setVariable指定仿真中使用的变量值。您可以配置仿真中使用的初始变量值,并在仿真期间调节变量值。
setBlockParameter指定要在仿真中使用的模块参数值。

某些模块参数仅在仿真之间可调,而在仿真期间不可调。

部署的仿真不支持调节模块参数值。要在已部署的仿真中调节模块参数值,请将模块参数值指定为变量,然后调节变量值。

通过发出仿真命令与仿真进行交互

使用 set_param 函数发出仿真命令来启动仿真等效于从用户界面启动仿真,例如在 Simulink 编辑器中点击运行。仿真命令以编程方式启动的操作与您使用用户界面(如 Simulink 编辑器)启动的操作相同。如果工作流涉及在 MATLAB 命令行窗口和 Simulink 编辑器或其他用户界面之间切换,则使用仿真命令会很方便。

要发出仿真命令,请为 set_param 函数指定 SimulationCommand 名称-值参量。例如,以下命令为名为 MyModel 的模型发出 start 仿真命令。

set_param("MyModel",SimulationCommand="start")

由于发出 start 仿真命令执行的操作与从用户界面启动仿真相同,因此您可以发出仿真命令来控制从用户界面或通过发出 start 仿真命令启动的仿真并与之交互。通过发出 start 仿真命令启动的仿真提供与从用户界面启动的仿真相同的功能和支持,包括:

  • 使用用户界面或使用 set_param 函数在仿真期间调节参数值

  • 使用端口值标签和可视化模块(如 Scope 模块)在模块图中查看信号值和仿真结果

  • 使用暂停步进步退按钮暂停和步进来控制仿真执行

  • 调试工具,如信号断点

由于发出仿真命令或在通过发出 start 仿真命令启动的仿真期间发生的错误将报告给诊断查看器,但执行 update 仿真命令时发生的错误除外。

当您在仿真期间发出仿真命令时,软件不会立即执行该命令。软件仅在当前运行的不可中断的进程完成后发出命令。例如,如果您发出一个仿真命令时求解器正在确定下一时间步,则软件仅在求解器完成传播时间后才执行该仿真命令。

并非 Simulink 编辑器中的所有可用操作都有对应的仿真命令。下表描述每个仿真命令以及对应的用户界面操作和键盘快捷方式。

仿真命令 描述等效用户界面操作键盘快捷方式
set_param(mdl,SimulationCommand="start")

开始仿真。

点击运行

Ctrl+TF5

set_param(mdl,SimulationCommand="stop")

停止仿真。

点击停止

Ctrl+Shift+T

set_param(mdl,SimulationCommand="pause")

暂停仿真。

点击暂停

Ctrl+TF5

set_param(mdl,SimulationCommand="continue")

继续暂停的仿真。

点击继续

Ctrl+TF5

set_param(mdl,SimulationCommand="update")

更新图。

在 Simulink 工具条的准备部分中,点击更新模型Ctrl+D
set_param(mdl,SimulationCommand="writedatalogs")

将数据记录变量写入工作区。

不支持。不支持。

当您从用户界面或通过发出仿真命令启动仿真时,您可以使用 get_param 函数查询仿真状态。例如,此命令查询名为 MyModel 的模型的仿真状态。

simstatus = get_param("MyModel","SimulationStatus")

下表描述与 SimulationStatus 参量的每个返回值对应的仿真状态。

SimulationStatus描述
stopped仿真停止。
initializing正在执行初始化阶段。
running正在运行执行阶段。
paused在执行阶段暂停。
compiled模型已编译。
updating正在更新图。
terminating正在执行终止阶段。
external使用 Simulink Coder™ 进行仿真。

另请参阅

函数

对象

相关主题