通过编程的方式运行模拟
你可以通过编程模拟的模型sim卡
功能,使用各种技术来指定参数值。除了模拟模型,您可以使用sim卡
使模拟超时,捕捉模拟错误,当你完成模拟仿真元数据的访问
对于交互式仿真,可以使用set_param
和get_param
。与set_param
和get_param
,您可以检查一个运行的状态模拟,利用块回调控制仿真是如何工作的。
指定参数名称-值对
这个例子展示了如何通过编程模拟模型,指定参数名称-值对。
模拟vdp
连续模型参数值指定为名称-值对。
simOut = sim卡(“vdp”,“SimulationMode”,“正常”,“AbsTol”,“1 e-5”,…“SaveState”,“上”,“StateSaveName”,“xout”,…“SaveOutput”,“上”,“OutputSaveName”,“你”,…“SaveFormat”,“数据集”);输出= simOut.get (“你”)
输出= Simuli金宝appnk.SimulationData。数据集包:仿真软件。金宝app模拟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
,一个金宝appSimulink.SimulationOutput
对象,该对象包含所有的模拟输出(记录时间、状态和信号)。的sim卡
函数不返回模拟值的工作区。
画出输出信号值与时间。
x1 = (outputs.get (x1的). values);x2 = (outputs.get (“x2”). values);情节(x1);持有在;情节(x2);标题(“VDP州”)包含(“时间”);传奇(x1的,“x2”)
使模拟超时
如果你是在一个循环中运行多个模拟,并利用变步解算器,考虑使用sim卡
与超时
参数。如果出于某种原因,模拟挂起或开始采取出人意料的小时间步骤,它将超时。然后,接下来的仿真运行。例如语法如下所示。
N = 100;simOut = repmat(金宝app仿真软件。SimulationOutput N 1);为i = 1: N simOut (i) = sim卡(“vdp”,“超时”,1000);结束
捕获仿真错误
如果一个错误会导致你的仿真停止,你可以看到仿真元数据中的错误。在这种情况下,sim卡
了仿真数据的模拟输出对象的时间遇到错误时,可以做一些调试仿真信息而无需重新运行它。要启用这个特性,使用CaptureErrors
参数与sim卡
函数。
例如语法和输出结果捕获错误sim卡
是:
simOut = sim卡(“my_model”,“CaptureErrors”,“上”);simOut.getSimulationMetadata.ExecutionInfo
ans =结构体字段:StopEvent:“DiagnosticError”StopEventSource: [] StopEventDescription:“除零”my_model /鸿沟”ErrorDiagnostic: [1×1 struct] WarningDiagnostics: [0×1 struct]
这种方法的另一个优点是,仿真也不会引起错误sim卡
停止。因此,如果您正在使用sim卡
在一个为
循环为例,后续的迭代循环仍然运行。
模拟访问元数据
这个例子向您展示了如何访问元数据一旦完成仿真模拟。您可以运行任何形式的模拟和访问它的元数据。
这个例子模拟模型与参数值指定名称-值对。运行仿真。
simOut = sim卡(“vdp”,“SimulationMode”,“正常”,“AbsTol”,“1 e-5”,…“SaveState”,“上”,“StateSaveName”,“xoutNew”,…“SaveOutput”,“上”,“OutputSaveName”,“youtNew”,…“SaveFormat”,“StructureWithTime”);
访问ModelInfo
属性,它有一些基本的信息模型和求解。
simOut.getSimulationMetadata.ModelInfo
ans =结构体字段:ModelName:“vdp”ModelVersion:“1.6”ModelFilePath:“C: \ MyWork”标识:“用户”MachineName:“MyMachine”平台:“PCWIN64”ModelStructuralChecksum: [4×1 uint32] SimulationMode:“正常”开始时间:0 StopTime: 20 SolverInfo: [1×1 struct] SimulinkVersion: [1×1 struct] LoggingInfo: [1×1 s金宝apptruct]
检查解决者信息。
simOut.getSimulationMetadata.ModelInfo.SolverInfo
ans =结构体字段:类型:“变步”解算器:“数值”MaxStepSize: 0.4000
评审时间为模拟信息,如当你仿真开始和结束,和时间仿真初始化,执行和终止。
simOut.getSimulationMetadata.TimingInfo
ans =结构体字段:WallClockTimestampStart:“2016-06-17 10:26:58.433686”WallClockTimestampStop:‘2016-06-17 10:26:58.620687 InitializationElapsedWallTime: 0.1830 ExecutionElapsedWallTime: 1.0000 e 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”用户数据:[]
您还可以添加自己的自定义数据使用用户数据
财产。
控制和检查状态的模拟
这个例子展示了如何使用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
启动后仿真停止命令和继续模拟后暂停命令。金宝app动态仿真模块®第一个完成不间断工作,比如解决步骤和其他命令之前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”,“范围”);%发现所有的块在顶层的范围%的模型。在子系统,找到范围提供子系统%的名字。类型帮助find_system这个命令。为i = 1:长度(块)set_param(块{我},“开放”,“上”)结束%循环通过所有的块,给他们带来了巨大的范围%的前沿。
设置StartFcn
为模型参数调用openscopes
脚本。
set_param (“my_model”,“StartFcn”,“openscopes”)
另请参阅
金宝appSimulink.SimulationMetadata
|金宝appSimulink.SimulationOutput
|金宝appSimulink.SimulationOutput.getSimulationMetadata
|金宝appSimulink.SimulationOutput.setUserData
|金宝appSimulink.SimulationOutput.setUserString