主要内容

以编程方式运行模拟

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

  • 通过SIM命令。

  • 通过运行按钮

与之执行模拟时SIM命令,您可以使用命令行对您的模拟执行操作。使用运行按钮表示您可以使用Simulink与仿真进行交互万博1manbetx®UI执行任何其他其他操作。下表阐述了这两种方法之间的差异。

行动 SIM命令模拟 运行按钮模拟
允许的互动水平 低的 高的
开始模拟 SIM命令 set_param(mdl,'simulationcommand','start')/运行
停止一个模拟 Ctrl-C.在命令行上

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

暂停模拟 是的。set_param(mdl,'simulationcommand','pause')/暂停
MATLAB提示在模拟运行时可用 是的
在模拟运行时更新范围 是的,除了在快速加速器模式 是的
仿真步进 是的,除了在快速加速器模型)
有条件的暂停 是的,除了在快速加速器模型)
仿真运行时可用的端口值显示? 是的
万博1manbetx支持模拟起搏 是的 是的
万博1manbetx支持超时选项 是的
误差处理 matlab例外,除非CaptureErrors是的 报告给诊断查看器

SIM命令模拟

您可以以编程方式模拟模型SIM使用指定的技术指定参数值的功能。除了模拟模型之外,您还可以使用SIM命令启用仿真超时,捕获仿真错误和仿真完成时的访问仿真元数据。

指定参数名称-值对

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

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

simout = sim('vdp',“SimulationMode”,“正常”,'ABSTOL','1E-5',“SaveState”,“上”,'soligyavename',“xout”,'saptoutput',“上”,'outputsavename','你',“SaveFormat”,'dataset');输出= simout.get('你')
outputs = 万博1manbetxsimulink.simulationdata.dataset包:simulink.simulationdata特征:名称:'yout'总要素:2个元素:1:'x1'2:'x2'-USE获取或GetEment按索引或名称访问元素。- 使用Addelement或SetElement添加或修改元素。

你在里面模拟模型正常的模式,指定求解器误差的绝对容忍度。的SIM函数返回SimOut,一个万博1manbetx仿真软件。SimulationOutput对象,该对象包含所有模拟输出:记录的时间、状态和信号。的SIM函数不会将模拟值返回到工作区。

对时间的输出信号值绘制。

x1 =(outputs.get('x1').Values);x2 =(outputs.get('x2').Values);绘图(x1);抓住;情节(x2);标题('VDP国家')xlabel(“时间”);传奇('x1','x2')

VDP模拟的图

使模拟超时

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

N = 100;simOut = repmat(万博1manbetx仿真软件。SimulationOutput N 1);为了i = 1:n simout(i)= sim('vdp',“超时”,1000);结尾

捕获仿真错误

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

simout = sim(“my_model”,“CaptureErrors”,“上”);simout.getsimulationmetadata.executionInfo.
ans = struct with字段:s​​topevent:'diageosticerror'stopeventsource:[] stopeventdescription:'my_model / divide''errordiagnostic中的零分,1×1 struct] prothingdiagnostics:[0×1 struct]

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

访问仿真元数据

此示例显示了一旦模拟完成后如何访问模拟元数据。您可以运行任何仿真并访问其元数据。

此示例使用参数值模拟模型,指定为名称值对。运行模拟。

simout = sim('vdp',“SimulationMode”,“正常”,'ABSTOL','1E-5',“SaveState”,“上”,'soligyavename','xoutnew','saptoutput',“上”,'outputsavename',“youtNew”,“SaveFormat”,'structionWithtime');

进入ModelInfo属性,具有有关模型和求解器的基本信息。

simout.getsimulationmetadata.modelinfo.
ans = struct with字段:modelname:'vdp'modelversion:'1.6'modelfilepath:'c:\ mywork'userid:'用户的machinename:'mymachine'平台:'pcwin64'modelstructuralchecksum:[4×1 uint32] simulationmode:'普通'starttime:0停止时间:20索尔弗里诺:[1×1结构] SimulinkVersion:[1×1结构] 万博1manbetxLoggingInfo:[1×1 struct]

检查求解器信息。

simOut.getSimulationMetadata.ModelInfo.SolverInfo
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 = Simulation MetaData具有属性:modelInfo:[1×1 struct] timinginfo:[1×1 struct] execientionInfo:[1×1结构]用户:'Simulation的结果为10'userData:[]

属性添加自己的自定义数据用户数据财产。

运行按钮模拟

对于交互式模拟,您可以使用set_param.get_param。和set_param.get_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.开始一个模拟后停止命令并在暂停命令后继续模拟。万博1manbetxSimulink首先完成不可中断的工作,例如求解器步骤和在set_param.命令。然后,模拟开始、暂停、继续或停止set_param.命令。

检查模拟的状态。

get_param('vdp','simulationstatus')

软件返回'停止','初始化',“奔跑”,“暂停”,“编译”,“更新”,“终止”,或'外部的'(与之使用万博1manbetxSimulink Coder™产品)。

要在仿真运行时动态更新已更改的工作区变量,请使用更新命令。

set_param('vdp','simulationcommand','更新')

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

set_param('vdp','simulationcommand','writedatalogs')

使用回调自动化模拟任务

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

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

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

%openscopes.m.%在模拟开始时将scope带到了最前线。块= find_system (bdroot,“BlockType”,'范围');%查找顶部级别的所有作用域块%的模型。要在子系统中找到作用域,请提供子系统%的名字。键入help find_system获取有关此命令的更多信息。为了i = 1:长度(块)set_param(块{i},“开放”,“上”)结尾%循环通过所有范围块并带来它们%到最前线。

设定startfcn.参数来调用openscopes.脚本。

set_param(“my_model”,'startfcn',“openscopes”)

另请参阅

||||

相关话题