以编程方式运行模拟
您可以通过两种方式编程模拟模型:
通过
sim卡
命令。通过运行按钮
方法执行模拟时sim卡
命令,使用命令行对模拟执行操作。执行模拟运行按钮表示您可以使用Simulink与模拟进行交互®UI来执行任何其他附加操作。下表阐述了这两种方法之间的区别。
行动 | 非交互式仿真(sim卡 命令模拟) |
交互仿真(运行按钮模拟) |
允许的互动水平 | 低 | 高 |
开始模拟 | sim卡 命令 |
运行/set_param (mdl‘SimulationCommand’,‘开始’) |
停止模拟 | ctrl - c在命令行上 |
|
暂停模拟 | 没有 | 是的。set_param (mdl“SimulationCommand”、“暂停”) /暂停 |
仿真运行时MATLAB提示可用 | 没有 | 是的 |
模拟运行时更新作用域 | 是的,除了快速加速模式 | 是的 |
模拟步进 | 没有 | 是的,除了快速加速模式 |
有条件的停顿 | 没有 | 是的,除了快速加速器模型 |
模拟运行时端口值显示可用? | 没有 | 是的 |
支持模拟节奏 | 是的 | 是的 |
支持超时 选项 |
是的 | 没有 |
错误处理 | MATLAB异常,除非CaptureErrors 是在 |
报告给诊断查看器 |
sim卡
命令模拟
方法可以以编程方式模拟模型sim卡
函数通过使用指定的技术来指定参数值。除了模拟模型之外,您还可以使用sim卡
命令来启用模拟超时、捕获模拟错误并在模拟完成时访问模拟元数据。
指定参数名称-值对
这个例子展示了如何以编程方式模拟模型,将模型参数指定为名称-值对。
模拟vdp
使用指定为连续名称-值对的参数值建模。
simOut = sim(“vdp”,“SimulationMode”,“正常”,...“SaveState”,“上”,“StateSaveName”,“xout”,...“SaveOutput”,“上”,“OutputSaveName”,“你”,...“SaveFormat”,“数据集”);outputs = simOut.yout
Simulink. simulationdata . dataset模拟Data Characteristics: Name: 'yout' Total Elements: 2 Elements: 1 : 'x1' 2 : 'x2' -Use get or getElement to access elements by index or name. -Use addElement or setElement to add or modify elements.
模拟模型正常的
模式,指定求解器错误的绝对容差。的sim卡
函数返回SimOut
,一个仿真软件。SimulationOutput
对象,该对象包含所有模拟输出:记录的时间、状态和信号。
绘制输出信号值与时间的关系图。
X1 = (output .get(x1的) . values);X2 = (output .get)“x2”) . values);情节(x1);持有在;情节(x2);标题(“VDP州”)包含(“时间”);传奇(x1的,“x2”)
启用模拟超时
如果您在一个循环中运行多个模拟,并使用变步长求解器,请考虑使用sim卡
与超时
参数。如果由于某种原因,模拟挂起或开始执行出乎意料的小时间步骤,它将超时。然后,可以运行下一个模拟。
N = 100;simOut = repmat(Simulink. simOut = repmat)SimulationOutput, N, 1);为i = 1:N simOut(i) = sim(“vdp”,“超时”, 1000);结束
捕获模拟错误
如果错误导致模拟停止,则可以在模拟元数据中看到错误。在这种情况下,sim卡
捕获模拟输出对象中的模拟数据直到它遇到错误,使您能够在不重新运行模拟的情况下对模拟进行一些调试。要启用此功能,请使用CaptureErrors
参数。sim卡
函数。
这种方法的另一个优点是模拟误差也不会引起sim卡
停止。因此,如果你正在使用sim卡
在一个为
例如,循环的后续迭代仍然会运行。
simOut = sim(“my_model”,“CaptureErrors”,“上”);simOut.getSimulationMetadata.ExecutionInfo
ans = struct with fields: StopEvent: ' diagnostics error ' StopEventSource: [] StopEventDescription: 'Division by zero in 'my_model/Divide " ErrorDiagnostic: [1×1 struct] WarningDiagnostics: [0×1 struct]
接入仿真元数据
此示例向您展示如何在模拟完成后访问模拟元数据。您可以运行任何类型的模拟并访问它的元数据。
此示例使用指定为名称-值对的参数值来模拟模型。运行模拟。
simOut = sim(“vdp”,“SimulationMode”,“正常”,“AbsTol”,“1 e-5”,...“SaveState”,“上”,“StateSaveName”,“xoutNew”,...“SaveOutput”,“上”,“OutputSaveName”,“youtNew”,...“SaveFormat”,“StructureWithTime”);
访问ModelInfo
属性,该属性具有关于模型和求解器的基本信息。
simOut.getSimulationMetadata.ModelInfo
ans = struct with fields: ModelName: 'vdp' ModelVersion: '1.6' ModelFilePath: 'C:\MyWork' UserID: 'User' MachineName: 'MyMachine' Platform: 'PCWIN64' ModelStructuralChecksum: [4×1 uint32] SimulationMode: 'normal' StartTime: 0 StopTime: 20 SolverInfo: [1×1 struct] SimulinkVersion: [1×1 struct] LoggingInfo: [1×1 struct]
检查解算器信息。
simOut.getSimulationMetadata.ModelInfo.SolverInfo
类型:'Variable-Step'求解器:'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 (“模拟1 / 10的结果”);simOut.getSimulationMetadata
ans =带有属性的SimulationMetadata: 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
之后开始模拟停止
命令并在pause命令之后继续模拟。Simulink首先完成不可中断的工作,例如求解器步骤和在set_param
命令。控件指定的启动、暂停、继续或停止模拟set_param
命令。
检查模拟的状态。
get_param (“vdp”,“SimulationStatus”)
软件返回“停止”
,“初始化”
,“奔跑”
,“暂停”
,“编译”
,“更新”
,“终止”
,或“外部”
(与the连用仿真软件编码器™产品)。
要在运行模拟时动态更新已更改的工作区变量,请使用更新
命令。
set_param (“vdp”,“SimulationCommand”,“更新”)
将所有数据日志变量写入基本工作区。
set_param (“vdp”,“SimulationCommand”,“WriteDataLogs”)
使用回调自动化模拟任务
当您在模型上执行各种操作时,例如启动、暂停或停止模拟,将执行回调。你可以使用回调来执行MATLAB®脚本或其他MATLAB命令。有关更多信息,请参见用回调自定义模型行为而且块回调.
这个例子展示了如何使用该模型StartFcn
回调函数在模拟开始前自动执行MATLAB代码。
编写一个MATLAB脚本范围块,并在模拟模型时在前景中打开它们。将脚本保存在当前文件夹中。
% openscopes.m%在模拟开始时将范围放在最前面。Blocks = find_system(bdroot,“BlockType”,“范围”);中最顶层的所有作用域块%的模型。要在子系统中查找作用域,请提供子系统%的名字。键入help find_system以了解该命令的更多信息。为I = 1:length(blocks) set_param(blocks{I},“开放”,“上”)结束遍历所有作用域块并将它们带来%走到最前面。
设置StartFcn
方法调用的模型的openscopes
脚本。
set_param (“my_model”,“StartFcn”,“openscopes”)
另请参阅
仿真软件。SimulationOutput
|仿真软件。SimulationMetadata
|getSimulationMetadata
|setUserString
|setUserData