文档

通过编程的方式运行模拟

你可以通过编程模拟的模型sim卡功能,使用各种技术来指定参数值。除了模拟模型,您可以使用sim卡使模拟超时,捕捉模拟错误,当你完成模拟仿真元数据的访问

对于交互式仿真,可以使用set_paramget_param。与set_paramget_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”)

另请参阅

||||

相关的话题