主要内容

以编程方式运行仿真

你可以用两种方式编程地模拟一个模型:

  • 通过sim卡命令。

  • 通过运行按钮

在执行模拟时sim卡命令,使用命令行对模拟执行操作。执行模拟运行按钮意味着您可以使用Simulink与仿真进行交互金宝app®UI来执行任何其他附加操作。下表详细说明了这两种方法之间的区别。

行动 非交互式仿真sim卡命令模拟) 交互仿真(运行按钮模拟)
允许的互动水平
开始模拟 sim卡命令 运行/set_param (mdl‘SimulationCommand’,‘开始’)
停止模拟 ctrl - c在命令行上

set_param (mdl“SimulationCommand”,“停止”)/停止

暂停模拟 没有 是的。set_param (mdl“SimulationCommand”、“暂停”)/暂停
仿真运行时提供MATLAB提示符 没有 是的
作用域在模拟运行时更新 是的,除了快速加速模式 是的
模拟步进 没有 是的,除了快速加速模式
有条件的停顿 没有 是的,除了快速加速器模型
端口值显示可用,而模拟运行? 没有 是的
金宝app支持模拟起搏 是的 是的
金宝app支持超时选项 是的 没有
错误处理 MATLAB例外,除非CaptureErrors是在 报告给诊断查看器

sim卡命令模拟

方法以编程方式模拟模型sim卡函数通过使用指定的技术来指定参数值。除了模拟模型之外,还可以使用sim卡命令,以启用模拟超时、捕获模拟错误以及在模拟完成时访问模拟元数据。

指定参数名称-值对

这个示例展示了如何以编程方式模拟模型,将模型参数指定为名称-值对。

模拟vdp将参数值指定为连续的名称-值对的模型。

simOut = sim(“vdp”“SimulationMode”“正常”“SaveState”“上”“StateSaveName”“xout”“SaveOutput”“上”“OutputSaveName”“你”“SaveFormat”“数据集”);输出= simOut.yout
= Simulink金宝app. simulationdata . dataset Package: Simulink。模拟Data Characteristics: Name: 'yout' Total Elements: 2 Elements: 1 : 'x1' 2 : 'x2' -Use get or getElement to access elements by index or name. -Use addElement or setElement to add or modify elements.

你在正常的模式,指定求解器错误的绝对容限。的sim卡函数返回SimOut,一个人金宝app仿真软件。SimulationOutput对象,该对象包含所有模拟输出:记录的时间、状态和信号。

根据时间绘制输出信号值。

X1 = (output .get)x1的) . values);X2 =(输出。“x2”) . values);情节(x1);持有;情节(x2);标题(“VDP州”)包含(“时间”);传奇(x1的“x2”

vdp仿真图

启用模拟超时

如果您在一个循环中运行多个模拟,并且正在使用变步长求解器,请考虑使用sim卡超时参数。如果由于某种原因,模拟挂起或开始采取意外的小时间步长,它将超时。然后,可以运行下一个模拟。

N = 100;simOut = repmat(金宝appSimulink.)SimulationOutput, N, 1);i = 1:N simOut(i) = sim(“vdp”“超时”, 1000);结束

捕获仿真错误

如果错误导致模拟停止,则可以在模拟元数据中看到该错误。在这种情况下,sim卡捕获仿真输出对象中的仿真数据,直到遇到错误时为止,使您能够对仿真进行一些调试,而无需重新运行它。要启用此特性,请使用CaptureErrors参数。sim卡函数。

这种方法的另一个优点是不会引起模拟误差sim卡停止。因此,如果您正在使用sim卡在一个以循环为例,循环的后续迭代仍将运行。

simOut = sim(“my_model”“CaptureErrors”“上”);simOut.getSimulationMetadata.ExecutionInfo
ans = struct with fields: StopEvent: 'DiagnosticError' StopEventSource: [] StopEventDescription: 'my_model/Divide中除零' ErrorDiagnostic: [1×1 struct] WarningDiagnostics: [0×1 struct]

接入仿真元数据

此示例向您展示了在模拟完成后如何访问模拟元数据。您可以运行任何类型的模拟并访问其元数据。

这个例子模拟了将参数值指定为名称-值对的模型。运行模拟。

simOut = sim(“vdp”“SimulationMode”“正常”“AbsTol”“1 e-5”“SaveState”“上”“StateSaveName”“xoutNew”“SaveOutput”“上”“OutputSaveName”“youtNew”“SaveFormat”“StructureWithTime”);

访问ModelInfo属性,其中包含关于模型和求解器的基本信息。

simOut.getSimulationMetadata.ModelInfo
ans = struct与字段:ModelName: 'vdp' ModelVersion: '1.6' ModelFilePath: 'C:\MyWork' UserID: 'User' MachineName: 'MyMachine'平台:'PCWIN64' ModelStructuralChecksum: [4×1 uint32] SimulationMode: 'normal' StartTime: 0 StopTime: 20 SolverInfo: [1×1 struct] SimulinkVersion: [金宝app1×1 struct] loginginfo: [1×1 struct]

检查求解器信息。

simOut.getSimulationMetadata.ModelInfo.SolverInfo
ans = struct with fields: Type: 'Variable-Step'求解器:'ode45' MaxStepSize: 0.4000

查看模拟的计时信息,例如模拟何时开始和结束,以及模拟初始化、执行和终止所花费的时间。

simOut.getSimulationMetadata.TimingInfo
ans = struct with fields: WallClockTimestampStart: '2016-06-17 10:26:58.433686' WallClockTimestampStop: '2016-06-17 10:26:58.620687' InitializationElapsedWallTime: 0.1830 ExecutionElapsedWallTime: 1.0000e-03 TerminationElapsedWallTime: 0.0030 TotalElapsedWallTime: 0.1870 .

在模拟中添加注释。

simOut = simOut.setUserString ("模拟结果1 / 10 ");simOut.getSimulationMetadata
ans = SimulationMetadata with properties: ModelInfo: [1×1 struct] TimingInfo: [1×1 struct] ExecutionInfo: [1×1 struct] UserString: 'Results from simulation 1 of 10' UserData: []

控件添加自己的自定义数据用户数据财产。

运行按钮模拟

对于交互式模拟,您可以使用set_paramget_param.与set_paramget_param,您可以检查正在运行的模拟的状态,并通过使用块回调来控制模拟的工作方式。

仿真控制与检查状态

这个例子展示了如何使用set_param来控制模拟的状态。set_param允许您动态更新变量以及将数据记录变量写入工作区。

启动模拟。

set_param (“vdp”“SimulationCommand”“开始”

开始模拟时使用set_param“开始”参数时,必须使用“停止”来阻止它。不使用“停止”参数导致模拟只在完成后停止。

暂停、继续和停止模拟。

set_param (“vdp”“SimulationCommand”“暂停”) set_param (“vdp”“SimulationCommand”“继续”) set_param (“vdp”“SimulationCommand”“停止”

当你使用set_param要暂停或停止模拟,模拟不会立即执行命令。你可以用set_param启动模拟后停止命令,并在暂停命令后继续模拟。金宝appSimulink首先完成不可中断的工作,如求解器步骤和在程序之前的其他命令set_param命令。方法指定的开始、暂停、继续或停止模拟set_param命令。

查看模拟状态。

get_param (“vdp”“SimulationStatus”

软件返回“停止”“初始化”“奔跑”“暂停”“编译”“更新”“终止”,或“外部”(与the连用)金宝app仿真软件编码器™产品)。

要在运行模拟时动态更新已更改的工作空间变量,请使用更新命令。

set_param (“vdp”“SimulationCommand”“更新”

将所有数据记录变量写入基本工作区。

set_param (“vdp”“SimulationCommand”“WriteDataLogs”

使用回调自动模拟任务

当您在模型上执行各种操作时,例如启动、暂停或停止模拟,则会执行回调。您可以使用回调来执行MATLAB®脚本或其他MATLAB命令。有关更多信息,请参见自定义模型行为的回调块回调参数

这个例子展示了如何使用这个模型StartFcn回调,在仿真开始前自动执行MATLAB代码。

编写一个MATLAB脚本,查找范围块,并在模拟模型时在前景打开它们。将脚本保存在当前文件夹中。

% openscopes.m%在模拟开始时将范围带到最前沿。Blocks = find_system(broot,“BlockType”“范围”);对象的顶层中的所有作用域块%的模型。要在子系统中查找作用域,请提供子系统%的名字。输入help find_system获取有关该命令的更多信息。1:length(blocks) set_param(blocks{I},“开放”“上”结束%循环遍历所有作用域块并获取它们%走在最前列。

设置StartFcn参数,以便模型调用openscopes脚本。

set_param (“my_model”“StartFcn”“openscopes”

另请参阅

||||

相关的话题