主要内容

部署应用程序与Lorenz系统的现场仿真结果

这个例子展示了如何开发一个应用程序,该应用程序使用回调来查看Lorenz系统的Simulink模型的仿真。金宝app然后,您可以使用Simulink®Compiler™部署应用程序。金宝app

打开并检查项目文件

此示例使用一个Simulink项目,其中金宝app包含运行此示例所需的所有文件。该项目包含一个Lorenz系统的Simulin金宝appk®模型和一个应用程序,它是在MATLAB®app Designer中创建的,可以用不同的输入和输出值来模拟模型。要了解更多关于如何使用应用程序设计器创建应用程序的信息,请参见使用应用程序设计器创建和运行一个简单的应用程序

金宝appsimulink.compiler.example.LorenzSystem

应用细节

打开LorenzSystemAppmlapp文件。您可以查看为创建此应用程序编写的代码代码视图部分的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.setExternalOutputsFcnLine指的是函数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

另请参阅

||||||||

相关的话题