主要内容

在模拟中访问块数据

关于块运行时对象

万博1manbetx®提供一个称为块运行时接口的应用程序编程接口,该接口支持在模拟运行时以编程方式访问块数据,例如块输入和输出、参数、状态和工作向量。您可以使用此接口从MATLAB访问块运行时数据®命令行,Simulink调试器,以及万博1manbetx来自Level-2 MATLAB s函数(参见编写二级MATLAB s函数).

请注意

即使在模型暂停或在调试器中运行或暂停时,您也可以使用此接口。

块运行时接口由一组Simulink数据对象类(参见万博1manbetx数据对象),其实例提供有关运行模型中的块的数据。的实例相关联万博1manbetx仿真软件。RunTimeBlock,称为块的运行时对象,在运行模型中包含每个非虚拟块。运行时对象的方法和属性提供了对有关块的I/O端口、参数、采样时间和状态的运行时数据的访问。

访问一个运行时对象

运行模型中的每个非虚拟块都有一个RuntimeObject参数,在模拟运行时,其值是块的运行时对象的句柄。这允许您使用get_param获取块的运行时对象。例如,下面的语句

rto = get_param(gcb,'RuntimeObject');

返回当前选定块的运行时对象。运行时对象数据是只读的。不能使用运行时对象更改块的参数、输入、输出和状态数据。

请注意

虚拟块(请参阅非虚拟块和虚拟块)没有运行时对象。在模型编译期间作为优化而消除的块也没有运行时对象(参见块减少).运行时对象仅在包含块的模型运行或暂停时存在。如果模型停止,get_param返回一个空句柄。当您停止一个模型时,运行时对象的所有现有句柄将变为空。

监听方法执行事件

块运行时API的一个应用程序是在模拟过程中的关键点上收集诊断数据,例如在块计算其输出或导数之前或之后的块状态值。块运行时API提供了一种事件监听器机制,以方便此类应用程序。有关的详细信息,请参阅add_exec_event_listener命令。要获得使用方法执行事件的示例,请输入

在MATLAB命令行。这个Sim万博1manbetxulink模型包含s函数adapt_lms.m,它执行系统辨识以确定FIR滤波器的系数。功能的PostPropagationSetup方法初始化块运行时对象的DWork向量,以便第二个向量存储在每个时间步骤中计算的过滤器系数。

在Simuli万博1manbetxnk模型中,双击s函数块下面的注释执行它的OpenFcn.这个函数首先打开一个图形来绘制FIR滤波器系数。然后执行函数add_adapt_coef_plot.m要添加PostOutputs方法执行事件使用下面的代码行传递给s函数的块运行时对象。

为PostOutputs事件blk = 'sldemo_msfcn_lms/LMS Adaptive'添加回调;H = add_exec_event_listener(blk,…PostOutputs, @plot_adapt_coefs);

这个函数plot_adapt_coefs.m注册为事件监听器,在每次调用s函数后执行输出方法。函数访问块运行时对象的DWork向量,并绘制在输出方法。中使用的调用语法plot_adapt_coefs.m遵循任何侦听器所需的标准。第一个输入参数是s函数的块运行时对象,第二个参数是事件数据的结构,如下所示。

function plot_adapt_coefs(block, ei) %#ok % %绘制当前自适应滤波%系数的回调函数。st雇佣= get_param(block.BlockHandle,'UserData');est = block.Dwork(2).Data;集(stemPlot(2),“YData”,美国东部时间);drawnow(“暴露”);

同步运行时对象和万博1manbetx执行

您可以使用运行时对象获取块输出的值,并通过输入以下命令在MATLAB命令窗口中显示。

rto = get_param(gcb,'RuntimeObject') rto. outputport (1).Data . rto = get_param(gcb,'RuntimeObject'

但是,如果运行时对象没有与Simulink执行同步,则显示的数据可能不是真正的块输出。万博1manbetx万博1manbetx当运行时对象被用于二级MATLAB s函数或事件监听器回调时,Simulink仅确保运行时对象和Simulink执行同步。当从MATLAB命令窗口调用时,如果模型中的其他块被允许共享内存,则运行时对象会返回错误的输出数据。

以确保数据字段包含正确的块输出,打开“配置参数”对话框,然后清除信号存储重用复选框(请参阅信号存储重用(万博1manbetx仿真软件编码器)).

相关的话题