主要内容

以编程方式运行模拟

您可以通过两种方式编程模拟模型:

  • 通过模拟命令。

  • 通过运行按钮

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

行动 非交互式仿真模拟命令模拟) 交互式仿真(运行按钮模拟)
允许的互动水平 低的
开始模拟 模拟命令 运行/设置参数(mdl、'SimulationCommand'、'Start')
停止一个模拟 Ctrl-C在命令行上

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

暂停一个模拟 没有 是的。设置参数(mdl、'SimulationCommand'、'Pause')/暂停
MATLAB提示符在仿真运行时可用 没有
在模拟运行时更新作用域 可以,除了在快速加速模式
模拟步进机 没有 可以,除了在快速加速模式
有条件的停顿 没有 是的,除了快速加速器型号
模拟运行时端口值显示是否可用? 没有
金宝app支持模拟踱来踱去
金宝app支持超时选项 没有
错误处理 MATLAB例外,除非CaptureErrors正在播放 报告给诊断查看器

模拟命令模拟

您可以使用模拟函数,使用指定的技术指定参数值。除了模拟模型外,还可以使用模拟命令,以在模拟完成时启用模拟超时、捕获模拟错误和访问模拟元数据。

指定参数名称-值对

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

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

simOut=sim(“vdp”“SimulationMode”“正常”...“SaveState”“上”“StateSaveName”“xout”...“保存输出”“上”“OutputSaveName”“yout”...“SaveFormat”“数据集”);输出=simOut.yout
outputs=Si金宝appmulink.SimulationData.Dataset包:Simulink.SimulationData特性:名称:“yout”总计元素:2个元素:1:“x1”2:“x2”-使用get或getElement按索引或名称访问元素-使用addElement或setElement添加或修改元素。

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

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

x1=(outputs.get)(“x1”)(价值观);x2=(outputs.get)(“x2”).值);绘图(x1);保持;情节(x2);标题(“VDP状态”)包含(“时间”);传奇(“x1”“x2”

vdp仿真图

使模拟超时

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

N = 100;simOut = repmat(金宝app仿真软件。SimulationOutput N 1);对于i=1:N模拟输出(i)=模拟(“vdp”“超时”, 1000);终止

捕获仿真错误

如果一个错误导致您的模拟停止,您可以在模拟元数据中看到错误。在这种情况下,模拟捕获模拟输出对象中直到遇到错误为止的模拟数据,使您能够在不重新运行模拟的情况下对模拟执行某些调试。若要启用此功能,请使用CaptureErrors参数与模拟作用

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

simOut=sim(“my_model”“CaptureErrors”“上”);simOut.getSimulationMetadata.ExecutionInfo
ans=带字段的结构:StopEvent:'DiagnosticeError'StopEventSource:[]StopEventDescription:'my_model/Divide'中的除零错误诊断:[1×1结构]警告诊断:[0×1结构]

模拟访问元数据

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

此示例使用名称-值对指定的参数值来模拟模型。运行仿真。

simOut=sim(“vdp”“SimulationMode”“正常”“Absol”“1e-5”...“SaveState”“上”“StateSaveName”“xoutNew”...“保存输出”“上”“OutputSaveName”“youtNew”...“SaveFormat”“StructureWithTime”);

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

simOut.getSimulationMetadata.ModelInfo
ans=struct带字段:ModelName:'vdp'ModelVersion:'1.6'ModelFilePath:'C:\MyWork'UserID:'User'MachineName:'MyMachine'平台:'PCWIN64'modelstructurechecksum:[4×1 uint32]模拟模式:'normal'启动时间:0停止时间:20 SolverInfo:[1×1 struct]SimulinkVersion:[1×1 struct]日志信息:[×1 struct]金宝app

检查解算器信息。

simOut.getSimulationMetadata.ModelInfo.SolverInfo
ans = struct with fields: Type: 'Variable-Step' Solver: '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 (‘10次模拟1的结果’);simOut.getSimulationMetadata
ans=具有以下属性的SimulationMetadata:ModelInfo:[1×1 struct]TimingInfo:[1×1 struct]ExecutionInfo:[1×1 struct]UserString:'来自模拟1的结果,共10个'UserData:[]

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

运行按钮模拟

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

仿真控制和检查状态

此示例演示如何使用设置参数来控制模拟的状态。设置参数允许动态更新变量以及将数据日志变量写入工作空间。

开始模拟。

设置参数(“vdp”“模拟命令”“开始”

当您使用启动模拟时设置参数“开始”参数,则必须使用“停下来”争论来阻止它。不使用的“停下来”参数仅在模拟完成后停止模拟。

暂停、继续和停止模拟。

设置参数(“vdp”“模拟命令”“暂停”) set_param (“vdp”“模拟命令”“继续”) set_param (“vdp”“模拟命令”“停下来”

当你使用设置参数要暂停或停止模拟,模拟不会立即执行命令。您可以使用设置参数启动模拟后停止命令,并在暂停命令之后继续模拟。金宝appSimulink首先完成不可中断的工作,如求解器步骤和之前的其他命令设置参数命令。然后,模拟启动、暂停、继续或停止设置参数命令。

检查模拟的状态。

获取参数(“vdp”“SimulationStatus”

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

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

设置参数(“vdp”“模拟命令”“更新”

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

设置参数(“vdp”“模拟命令”“WriteDataLogs”

使用回调自动化模拟任务

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

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

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

%openscopes.m%在模拟开始时将范围放在最重要的位置。块= find_system (bdroot,“BlockType”“范围”);在你的文件的顶层找到所有范围块%的模型。要查找子系统中的作用域,请提供子系统%的名字。输入help find_system获取关于此命令的更多信息。对于i=1:length(blocks)set_param(blocks{i},“开放”“上”终止%循环遍历所有的作用域块并带来它们名列前茅。

设定StartFcn参数用于调用的模型开放式示波器脚本。

设置参数(“my_model”“StartFcn”“openscopes”

另请参阅

||||

相关的话题