用Lorenz系统的现场仿真结果部署App
这个例子展示了如何开发一个应用程序,该应用程序使用对仿真输入和输出的回调来查看Lorenz系统的Simulink模型的仿真。金宝app然后您可以使用Simulink®Compiler™部署应用程序。金宝app
打开并检查项目文件
本例使用了一个包含运行本例所需的所有文件金宝app的Simulink项目。该项目包含一个Lorenz系统的Simulin金宝appk®模型和一个应用程序,在MATLAB®应用程序设计器中创建,模拟具有不同输入和输出值的模型。有关如何使用应用程序设计器创建应用程序的详细信息,请参见使用应用程序设计器创建并运行一个简单的应用程序.
金宝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
函数用于更快的调试。)
函数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.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 = 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
另请参阅
configureForDeployment
|金宝app仿真软件。SimulationInput
|世纪挑战集团
|deploytool
|sim卡
|金宝appsimulink.compiler.setExternalInputsFcn
|金宝appsimulink.compiler.setExternalOutputsFcn
|金宝appsimulink.compiler.setPostStepFcn
|金宝appsimulink.compiler.genapp