主要内容

用Lorenz系统的现场仿真结果部署App

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

打开并检查项目文件

本例使用了一个包含运行本例所需的所有文件金宝app的Simulink项目。该项目包含一个Lorenz系统的Simulin金宝appk®模型和一个应用程序,在MATLAB®应用程序设计器中创建,模拟具有不同输入和输出值的模型。有关如何使用应用程序设计器创建应用程序的详细信息,请参见使用应用程序设计器创建并运行一个简单的应用程序

金宝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函数用于更快的调试。)

函数simin = createSimulationInput(app)创建一个空的SimulationInput对象simInp = 金宝appSimulink。SimulationInput (“LorenzSystemModel”);指定模拟回调simInp = 金宝appsimulink.compiler.setPostStepFcn(simInp, @app.postStepFcn);simInp = 金宝appsimulink.compiler.setExternalOutputsFcn(simInp, @app.processOutputs);从ui编辑字段加载参数值simin = simin . setvariable (的ρ, app.rhoUIC.Value);simin = simin . setvariable (“β”, app.betaUIC.Value);simin = simin . setvariable (“σ”, app.sigmaUIC.Value);simin = simin . setvariable (“x0”, app.x0UIC.Value);simin = simin . setvariable (“y0”, app.y0UIC.Value);simin = simin . setvariable (“z0”, app.z0UIC.Value);配置simInp用于部署调试提示:注释掉下面的行在MATLAB中运行时,更快/更容易调试simInp = 金宝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 = tic;结束如果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

在应用程序设计器中测试

在部署应用程序之前,确保应用程序在应用程序设计器中运行。点击模拟通过模拟不同值的模型来验证应用程序是否工作。

编译部署应用

您可以使用应用程序设计器来编译和部署应用程序deploytool函数。有关使用应用程序设计器编译和部署的更多信息,请参见使用应用设计器开发应用程序网络应用程序而且应用程序编译器

要编译本例中的应用程序,请使用世纪挑战集团命令,后跟应用程序名称。

LorenzSystemApp

另请参阅

||||||||

相关的话题