您可以以两种方式编程方式模拟模型:
通过SIM
命令。
通过运行按钮
与之执行模拟时SIM
命令,您可以使用命令行对您的模拟执行操作。使用运行按钮表示您可以使用Simulink与仿真进行交互万博1manbetx®UI执行任何其他其他操作。下表阐述了这两种方法之间的差异。
行动 | SIM 命令模拟 |
运行按钮模拟 |
允许的互动水平 | 低的 | 高的 |
开始模拟 | SIM 命令 |
set_param(mdl,'simulationcommand','start') /运行 |
停止一个模拟 | Ctrl-C.在命令行上 |
|
暂停模拟 | 不 | 是的。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')
如果你在一个循环中运行多个模拟,并使用可变步长求解器,请考虑使用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字段:stopevent:'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”)
getsimulationmetadata.
|setUserData
|setUserstring.
|万博1manbetx仿真软件。SimulationMetadata
|万博1manbetx仿真软件。SimulationOutput