您可以通过两种方式编程模拟模型:
通过模拟
命令。
通过运行按钮
在使用模拟
命令,则使用命令行对模拟执行操作。使用运行按钮表示您可以使用Simulink与模拟进行交互金宝app®UI来执行任何其他附加操作。下表详细说明了这两种方法之间的区别。
行动 | 非交互式仿真(模拟 命令模拟) |
交互式仿真(运行按钮模拟) |
允许的互动水平 | 低的 | 高 |
开始模拟 | 模拟 命令 |
运行/设置参数(mdl、'SimulationCommand'、'Start') |
停止一个模拟 | Ctrl-C在命令行上 |
|
暂停一个模拟 | 没有 | 是的。设置参数(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”)
如果您在一个循环中运行多个模拟并使用可变步长求解器,请考虑使用模拟
与超时
参数。如果由于某种原因,模拟挂起或开始采取意外的小时间步长,它将超时。然后,可以运行下一个模拟。
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”)
金宝app仿真软件。SimulationOutput
|金宝app仿真软件。SimulationMetadata
|getSimulationMetadata
|setUserString
|setUserData