您可以通过两种方式编程模拟模型:
通过sim卡
命令。
通过运行按钮
在使用sim卡
命令,则使用命令行对模拟执行操作。使用跑按钮表示您可以使用Simulink与模拟进行交互金宝app®UI来执行任何其他附加操作。下表详细说明了这两种方法之间的区别。
行动 | 非交互式模拟(sim卡 命令模拟) |
交互仿真(运行按钮模拟) |
允许的互动水平 | 低的 | 高的 |
开始一个模拟 | sim卡 命令 |
跑/set_param (mdl‘SimulationCommand’,‘开始’) |
停止模拟 | ctrl - c在命令行上 |
|
暂停一个模拟 | 不 | 是的。set_param (mdl“SimulationCommand”、“暂停”) /暂停 |
MATLAB提示在模拟运行时可用 | 不 | 是的 |
仿真运行时,范围更新 | 是的,除了快速加速器模式 | 是的 |
模拟步进 | 不 | 是的,除了快速加速器模式 |
有条件的停顿 | 不 | 是的,除了快速加速器模型 |
当模拟运行时,端口值显示可用? | 不 | 是的 |
金宝app支持模拟踱来踱去 | 是的 | 是的 |
金宝app支持暂停 选项 |
是的 | 不 |
错误处理 | MATLAB例外,除非Capticerrors. 是在 |
报告给诊断观众 |
sim卡
命令模拟控件可以编程地模拟模型sim卡
使用指定的技术指定参数值的功能。除了模拟模型之外,您还可以使用sim卡
命令以启用模拟超时、捕获模拟错误并在模拟完成时访问模拟元数据。
此示例显示如何以编程方式模拟模型,将模型参数指定为名称值对。
模拟vdp
模型的参数值指定为连续的名称-值对。
simOut = sim卡(“vdp”,'simulationmode',“正常”,......“SaveState”,“上”,'soligyavename','xout',......'saptoutput',“上”,'outputsavename',“你”,......“SaveFormat”,'dataset');输出= simOut.yout
outputs = 金宝appsimulink.simulationdata.dataset包:simulink.simulationdata特征:名称:'yout'总要素:2个元素:1:'x1'2:'x2'-USE获取或GetEment按索引或名称访问元素。- 使用Addelement或SetElement添加或修改元素。
你在普通的
模式,指定求解器错误的绝对容忍。的sim卡
函数返回SimOut
,一个单身金宝appsimulink.simulationOutput.
包含所有模拟输出的对象:记录的时间,状态和信号。
绘制输出信号值与时间的关系。
x1 = (outputs.get ('x1') . values);x2 = (outputs.get ('x2') . values);情节(x1);持有在;绘图(x2);标题(“VDP州”)Xlabel(“时间”);传奇('x1','x2')
如果您在循环中运行多个模拟并使用变量步骤求解器,请考虑使用sim卡
与之超时
参数。如果由于某种原因,模拟挂起或开始采取意外的小时间步长,它将超时。然后,可以运行下一个模拟。
N = 100;simOut = repmat(金宝app仿真软件。SimulationOutput N 1);为i = 1:N simOut(i) = sim(“vdp”,'暂停', 1000);结束
如果错误导致模拟停止,则可以在模拟元数据中看到错误。在这种情况下,sim卡
在仿真输出对象遇到错误之前捕获仿真数据,使您能够在不重新运行仿真的情况下进行一些调试。要启用此功能,请使用Capticerrors.
参数与sim卡
函数。
这种方法的另一个优点是模拟错误也没有原因sim卡
停止。因此,如果您正在使用sim卡
在一个为
例如,循环仍将运行循环的后续迭代。
simOut = sim卡(“my_model”,'CaptureArrors',“上”);simOut.getSimulationMetadata.ExecutionInfo
ans = struct with fields: StopEvent: 'DiagnosticError' StopEventSource: [] StopEventDescription: '在'my_model/Divide'中除以0 ' errordiagnosis: [1×1 struct] WarningDiagnostics: [0×1 struct]
此示例显示了一旦模拟完成后如何访问模拟元数据。您可以运行任何仿真并访问其元数据。
此示例使用名称-值对指定的参数值来模拟模型。运行仿真。
simOut = sim卡(“vdp”,'simulationmode',“正常”,“AbsTol”,“1 e-5”,......“SaveState”,“上”,'soligyavename',“xoutNew”,......'saptoutput',“上”,'outputsavename',“youtNew”,......“SaveFormat”,“StructureWithTime”);
访问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结构] 金宝appLoggingInfo:[1×1 struct]
检查求解器信息。
simOut.getSimulationMetadata.ModelInfo.SolverInfo
ans = struct with fields: Type: 'Variable-Step' Solver: 'ode45' MaxStepSize: 0.4000
检查模拟的计时信息,例如模拟何时开始和结束,以及模拟初始化、执行和终止所花的时间。
simOut.getSimulationMetadata.TimingInfo
ANS =带有字段的结构:WallclockTimestampStart:'2016-06-17 10:26:26:58.433686'WallclockTimestampstop:'2016-06-17 10:26:58.620687'初始化纽尔时间:0.1830 executioneLapsedWalltime:1.0000E-03 TerminationeLappWalltime:0.0030总计:0.1870
添加注释到您的模拟。
simOut = simOut.setUserString (‘10次模拟1的结果’);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_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
启动模拟后停止
命令并在暂停命令后继续模拟。金宝appsimulink首先完成不间断的工作,例如求解器步骤和其他命令之前set_param
命令。然后,模拟开始,暂停,继续或停止所指定的set_param
命令。
检查模拟的状态。
get_param(“vdp”,'simulationstatus')
软件退货“停止”
,“初始化”
,“奔跑”
,'暂停'
,'编译'
,'更新'
,'终止'
, 或者“外部”
(与之使用金宝app仿真软件编码器™产品)。
要在仿真运行时动态更新已更改的工作区变量,请使用更新
命令。
set_param (“vdp”,'simulationcommand','更新')
将所有数据记录变量写入基础工作区。
set_param (“vdp”,'simulationcommand',“WriteDataLogs”)
当您在模型上执行各种操作时,例如启动、暂停或停止模拟时,将执行回调。可以使用回调函数来执行MATLAB®脚本或其他matlab命令。有关更多信息,请参阅自定义模型行为的回调和块回调参数.
这个例子展示了如何使用这个模型startfcn.
回调函数在仿真开始前自动执行MATLAB代码。
写一个找到的matlab脚本范围块,并在模拟模型时在前景中打开它们。将脚本保存在当前文件夹中。
% openscopes.m%在模拟开始时将范围放在最重要的位置。块= find_system (bdroot,'blocktype',“范围”);%找到了顶级的所有范围块%的模型。要查找子系统中的作用域,请提供子系统%名称。在此命令上键入help find_system。为i = 1:长度(块)set_param(块{i},“开放”,“上”)结束%循环通过所有范围块并带来它们名列前茅。
设定startfcn.
用于调用模型的参数openscopes
脚本。
set_param (“my_model”,“StartFcn”,“openscopes”)
金宝appsimulink.simulationOutput.
|金宝app仿真软件。SimulationMetadata
|getSimulationMetadata
|setUserstring.
|setuserdata.