部署应用程序与洛伦兹系统的实时仿真结果
这个例子展示了如何开发一个应用程序,使用回调函数来模拟输入和输出的模拟仿真软件®的洛伦兹模型系统。万博1manbetx然后可以部署应用程序与仿真软件编译器™。万博1manbetx
打开洛伦兹系统应用
这个示例使用洛伦兹系统的仿真软件模型,创万博1manbetx建一个应用程序在模拟模型的MATLAB®应用程序设计师不同的输入和输出值。了解更多关于如何使用应用程序创建一个应用程序设计师,看看使用应用程序创建并运行一个简单的应用程序设计师。打开应用程序,在MATLAB命令窗口输入以下。
LorenzSystemApp
应用细节
打开LorenzSystemApp
。mlapp
文件。您可以查看编写的代码创建这个应用程序的代码视图部分应用Sesigner。构建这个应用程序的重要组成部分的行为模拟按钮。它具有以下突出的部分:创建SimulationInput
使用模拟对象,配置部署,回调读取输出端口数据和情节在每个时间步的数据。这三个函数允许您查看现场模拟的结果在已部署的应用程序。
创建万博1manbetxSimulink.SimulationInput
对象
在函数createSimulationInput
,定义一个空万博1manbetxSimulink.SimulationInput
对象模型。使用这个万博1manbetxSimulink.SimulationInput
模拟对象设置回调函数和变量的模型。
模拟使用回调函数注册回调。的万博1manbetxsimulink.compiler.setPostStepFcn
注册一个回调函数每次调用模拟步骤。的万博1manbetxsimulink.compiler.setExternalOuputsFcn
注册一个回调,动态过程对每一个输出端口的值在根级别的模型模拟。
使用setVariable
的方法万博1manbetxSimulink.SimulationInput
应用程序对象提供参数值。仿真得到的值编辑字段的应用程序的UI。要部署应用程序,使用万博1manbetxsimulink.compiler.configureForDeployment
函数。(注释行代码调用万博1manbetxsimulink.compiler.configureForDeployment
函数更快的调试)。
函数simInp = createSimulationInput(应用)%创建一个空SimulationInput对象simInp = 万博1manbetxSimulink.SimulationInput (“LorenzSystemModel”);simInp = 万博1manbetxsimulink.compiler.setSimulationStatusChangeFcn (simInp,…@ (simStatus) app.simStatusChangedFcn (simStatus));% PostStepFcn用于更新的阴谋simInp = 万博1manbetxsimulink.compiler.setPostStepFcn (simInp,…@ (simTime) app.postStepFcn (simTime),…“才”,app.postStepFcnDecimation);%加载ui编辑字段的参数值simInp = simInp.setVariable (的ρ,app.rhoUIC.Value);simInp = simInp.setVariable (“β”,app.betaUIC.Value);simInp = simInp.setVariable (“σ”,app.sigmaUIC.Value);simInp = simInp.setVariable (“x0”,app.x0UIC.Value);simInp = simInp.setVariable (“y0”,app.y0UIC.Value);simInp = simInp.setVariable (“z0”,app.z0UIC.Value);%为部署配置simInpsimInp = 万博1manbetxsimulink.compiler.configureForDeployment (simInp);结束% createSimulationInput
模拟回调函数
模拟回调函数注册回调,让你读值输出端口和写值根输入端口。这些函数注册回调函数在每一个仿真时间步,它允许您查看现场模拟的结果。
的postStepFcn
回调
的postStepFcn
每一个仿真步骤后调用回调函数。的时间
参数是时间之前的模拟步骤。的postStepFcn
函数获取缓存的输出港为每一块值simTime
并使用这些值来模拟次情节的缓存值。
函数postStepFcn app.SimTime(应用,simTime)。文本= sprintf (% 0.5克的,simTime);% 0.1234 e + 56wcTime = toc (app.wallClockTimeAtSimStart);app.SimPace。文本= sprintf (' % 7.2 f 'simTime / wcTime);% 1234.56app.adjustPostStepFcnDecimation ();simOut = 万博1manbetxsimulink.compiler.getSimulationOutput (app.modelName);ts = 万博1manbetxsimulink.compiler.internal.extractTimeseriesFromDataset (simOut.yout);十五= [];青年志愿= [];zv = [];为= 1:长度(ts) idx =找到(ts {}。时间> = app.simTimeAtLastPostStep);开关ts{其}. name情况下“x”十五= ts{其}. data (idx);情况下“y”青年志愿= ts{其}. data (idx);情况下“z”zv = ts{其}. data (idx);结束结束addpoints (app.hLine、十五、青年志愿,zv);[十五,青年志愿,zv] = getpoints (app.hLine);集(app.hTail,“XData”十五(1)“YData”青年志愿(1),“ZData”,zv (1));集(app.hHead,“XData”十五(结束),“YData”青年志愿(结束),“ZData”zv(结束));drawnowlimitrate;app.simTimeAtLastPostStep = simTime;结束
测试应用程序设计师
在部署应用程序之前,确保应用程序运行在应用程序设计师。点击模拟验证应用程序通过模拟模型为不同的值。
编译应用程序部署
您可以使用应用程序设计师编译和部署应用程序,您还可以使用deploytool
函数。更多信息在编译和部署应用程序设计师,看看使用应用程序开发应用程序设计师,网络应用程序和应用程序编译器。
编译应用程序在这个例子中,使用世纪挑战集团
命令之后,应用程序的名称。
mcc - m LorenzSystemApp
另请参阅
configureForDeployment
|万博1manbetxSimulink.SimulationInput
|世纪挑战集团
|deploytool
|sim卡
|万博1manbetxsimulink.compiler.setExternalInputsFcn
|万博1manbetxsimulink.compiler.setExternalOutputsFcn
|万博1manbetxsimulink.compiler.setPostStepFcn
|万博1manbetxsimulink.compiler.genapp