主要内容

金宝appsimulink.compiler.setExternalOutputsFcn

设置callback在每个模拟步骤之后读取外部根输出块数据

描述

在= si金宝appmulink.compiler.setexternalOutputsfcn(@(id,时间,数据)processOutput(id,时间,数据)函数寄存回调以在模拟期间动态地处理每个输出端口的每个输出端口的值。

例子

全部折叠

此示例显示了一个应用程序,它使用用于仿真输入和输出的回调来查看Lorenz系统的Simulink模型的模拟,然后使用Simulink编译器部署金宝app

打开并检查项目文件

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

金宝appsimulink.compiler.example.LorenzSystem

应用细节

打开MLAPP.文件。您可以查看编写的代码以创建此应用程序代码视图应用程序设计部分。这个应用程序的基本部分是行为模拟按钮。它具有以下突出部分:创建SimulationInput对象,将其配置为部署,使用模拟回调来读取输出端口数据并在每个时间步骤绘制数据。下一节将解释如何使用这三个函数来查看已部署应用程序中的模拟结果

创造金宝appsimulink.simulationInpul.目的

在函数createSimulationInput,我们定义一个空的金宝appsimulink.simulationInpul.对象。我们使用这个金宝appsimulink.simulationInpul.对象设置模拟仿真回调和变量以模拟模拟。

模拟回调函数用于注册回调。这金宝appsimulink.compiler.setPostStepFcn函数寄存在每个模拟步骤后调用的回调。这金宝appsimulink.compiler.setexternalouputsfcn.注册一个回调函数,该回调函数在模拟期间在模型的根级动态地处理每个输出端口的值。

我们使用可遗漏的的方法金宝appsimulink.simulationInpul.对象为应用程序提供参数值。模拟的这些值是从应用程序的UI的编辑字段获取的。要启用应用程序的部署,我们使用金宝appsimulink.compiler.configurefordeployment函数。(注释调用的代码行金宝appsimulink.compiler.configurefordeployment功能更快调试)

函数simInp = createSimulationInput(应用)创建一个空的SimulationInput对象siminp = 金宝appsimulink.simulationInput('lorenzsystemmodel');%指定模拟回调simInp = 金宝appsimulink.compiler.setPostStepFcn(simInp, @app.postStepFcn); / /在simulink中编译simInp = 金宝appsimulink.compiler.setExternalOutputsFcn(simInp, @app.processOutputs);%从ui编辑字段加载参数值siminp = siminp.setvariable('rho', app.rhoUIC.Value);siminp = siminp.setvariable('beta',app.betauic.value);siminp = siminp.setvariable('sigma',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用于部署%调试提示:注释出下面的行在Matlab中runnng时%更快/更容易调试siminp = 金宝appsimulink.compiler.configurefordeplopment(Siminp);结尾%createSimulationInpulit.

模拟回调函数

模拟回调函数注册回调,使您能够从输出端口读取值,并将值写入根输入端口。这些函数在每个仿真时间步骤注册回调,从而允许您查看仿真的实时结果。

processOutputs回调

金宝appsimulink.compiler.setExternalOutputsFcnLine指的是函数postProcessuputs..这是一个回调函数,用于在仿真期间处理模型的每个根输出端口块的值。这postProcessuputs.函数每端口调用一次,并按下PORT的示例时间。什么时候postProcessuputs.函数时,它读取每个根输出块的值并缓存这些值。这postStepFcn获取缓存值以更新绘图。

函数processOutputs(应用程序,opidx,〜,数据)%在SIM期间调用以处理外部输出端口数据,每次样本命中,%将被调用一次。开关opIdx情况下1 app.txyzBuffer.x = data;情况下2 app.txyzbuffer.y =数据;情况下3 app.txyzBuffer.z = data;否则错误(['无效端口索引:',num2str(opidx)]);结尾结尾

poststepfcn.回调

postStepFcn是在每个模拟步骤之后调用的回调函数。time参数是前一个模拟步骤的时间。该函数获取每个节点的缓存的输出端口块值时间,并将这些值传递给UpdateTrace.函数在模拟时间下绘制缓存值。

函数postStepFcn(应用程序、时间)在每个模拟时间步骤后,在SIM期间调用%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中运行。点击模拟验证应用程序是否通过模拟不同值模型来工作。

编译应用程序部署

.您可以使用MATLAB App Designer来编译和部署应用程序deploytool.有关使用App Designer编译和部署的更多信息,请参见使用App Designer开发应用程序Web应用程序应用程序编译器

在这个例子中,我们用世纪挑战集团命令后跟应用程序名称。

mcc - m LorenzSystemApp

输入参数

全部折叠

仿真输入和对仿真模型的更改,指定为金宝appsimulink.simulationInpul.目的

例子:在= Si金宝appmulink.SimulationInput (vdp)

功能句柄用于回调处理输出的值,数据指定的每个根端口块id在仿真步骤中,时间

  • id- 由数值指定的root出口块索引,为其设置回调。

  • 时间—需要输入到根输出端口块的时间,由数值指定。

  • 数据- 根出口块的值。

在R2020B中介绍