这个例子展示了如何开发一个应用程序,该应用程序使用回调来查看Lorenz系统的Simulink模型的仿真。金宝app然后,您可以使用Simulink®Compiler™部署应用程序。金宝app
此示例使用一个Simulink项目,其中金宝app包含运行此示例所需的所有文件。该项目包含一个Lorenz系统的Simulin金宝appk®模型和一个应用程序,它是在MATLAB®app Designer中创建的,可以用不同的输入和输出值来模拟模型。要了解更多关于如何使用应用程序设计器创建应用程序的信息,请参见使用应用程序设计器创建和运行一个简单的应用程序.
金宝appsimulink.compiler.example.LorenzSystem
打开LorenzSystemApp
.mlapp
文件。您可以查看为创建此应用程序编写的代码代码视图部分的App Sesigner。构建这个应用程序的基本部分是模拟按钮。它有以下几个突出部分:创建SimulationInput
对象,将其配置为部署,使用模拟回调来读取输出端口数据并在每个时间步骤绘制数据。这三个函数允许您在部署的应用程序中查看模拟的实时结果。
金宝app仿真软件。SimulationInput
对象在函数createSimulationInput
,定义空的金宝app仿真软件。SimulationInput
对象。使用这个金宝app仿真软件。SimulationInput
对象来设置模型的模拟回调函数和变量。
模拟回调函数用于注册回调。的金宝appsimulink.compiler.setPostStepFcn
函数注册在每个模拟步骤之后调用的回调函数。的金宝appsimulink.compiler.setExternalOuputsFcn
注册一个回调函数,该回调函数在模拟期间在模型的根级动态地处理每个输出端口的值。
使用setVariable
的方法金宝app仿真软件。SimulationInput
对象向应用程序提供参数值。模拟的值是从应用程序的UI的编辑字段中获得的金宝appsimulink.compiler.configureForDeployment
函数。(注释调用的代码行金宝appsimulink.compiler.configureForDeployment
函数用于更快的调试。)
函数simInp = createSimulationInput(应用)创建一个空的SimulationInput对象simInp =仿金宝app真软件。SimulationInput (“LorenzSystemModel”);%指定模拟回调simInp = 金宝appsimulink.compiler.setPostStepFcn(simInp, @app.postStepFcn); / /在simulink中编译simInp = 金宝appsimulink.compiler.setExternalOutputsFcn(simInp, @app.processOutputs);%从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);%配置simInp用于部署提示:注释掉下面的一行%更快/更容易调试时运行在MATLABsimInp = 金宝appsimulink.compiler.configureForDeployment (simInp);结束% createSimulationInput
模拟回调函数注册回调函数,允许您从输出端口读取值,并将值写入根输入端口。这些函数在每个模拟时间步骤注册回调,这允许您查看模拟的实时结果。
processOutputs
回调的金宝appsimulink.compiler.setExternalOutputsFcn
Line指的是函数procressOuputs
.的procressOuputs
回调函数在仿真过程中处理模型的每个根输出端口块的值。的procressOuputs
函数在每个端口和端口的采样时间调用一次。当procressOuputs
函数时,它读取每个根输出块的值并缓存这些值。的postStepFcn
获取用于更新图的缓存值。
函数processOutputs(app, opIdx, ~, data)输出结果%在sim期间调用,以处理外部输出端口数据,%将被调用一次每个端口每次它的样本击中。开关opIdx情况下1 app.txyzBuffer.x = data;情况下2 app.txyzBuffer.y = data;情况下3 app.txyzBuffer.z = data;否则错误([“无效的端口索引:”num2str (opIdx)]);结束结束
postStepFcn
回调的postStepFcn
在每个模拟步骤之后调用回调函数。的时间
参数是前一个模拟步骤的时间。的postStepFcn
函数获取缓存的输出端口块值时间
并将这些值传递给updateTrace
函数来绘制模拟时的缓存值。
函数postStepFcn(应用程序、时间)%每次模拟时间步后在模拟过程中调用app.updateSimStats(时间);如果app.status = = AppStatus。开始app.switchStatus (AppStatus.Running);app.simStats.WallClockTimeAfterFirstStep =抽搐;结束如果app.stopRequested app.switchStatus (AppStatus.Stopping);stopRequestedID = [mfilename (“类”),“:StopRequested”];把(MException (stopRequestedID,“停止请求”));结束%--------------------------------------------------------------app.txyzBuffer.t =时间;x = [app.txyzBuffer.x];y = [app.txyzBuffer.y];z = [app.txyzBuffer.z];app.updateTrace (x, y, z);app.updateMarker (“头”, x, y, z);%--------------------------------------------------------------drawnowlimitrate;结束% postStepFcn
在部署应用程序之前,确保应用程序在app Designer中运行。点击模拟通过模拟不同值的模型来验证应用程序的工作情况。
你可以使用App Designer来编译和部署应用程序deploytool
函数。有关使用应用程序设计器编译和部署的更多信息,请参见使用应用程序设计师开发应用程序,网络应用程序和应用程序编译器.
要编译本例中的应用程序,请使用世纪挑战集团
命令后跟应用程序名称。
mcc - m LorenzSystemApp
configureForDeployment
|金宝app仿真软件。SimulationInput
|世纪挑战集团
|deploytool
|sim卡
|金宝appsimulink.compiler.setExternalInputsFcn
|金宝appsimulink.compiler.setExternalOutputsFcn
|金宝appsimulink.compiler.setPostStepFcn
|金宝appsimulink.compiler.genapp