Доступ к блочным данным во время моделирования

О блочных объектах периода выполнения

Simulink® обеспечивает прикладной программный интерфейс, названный блочным интерфейсом времени выполнения, который позволяет программируемому доступу блокировать данные, такие как блочные вводы и выводы, параметры, состояния, и работать векторы, в то время как моделирование запускается. Можно использовать этот интерфейс, чтобы получить доступ к блочным данным времени выполнения из командной строки MATLAB®, Отладчика Simulink, и из Уровня 2 S-функции MATLAB (см. Уровень 2 Записи S-функции MATLAB).

Примечание

Можно использовать этот интерфейс, даже когда модель приостановлена или запускается или приостановленная в отладчике.

Блочный интерфейс времени выполнения состоит из набора классов Объекта данных Simulink (см. Объекты данных), чьи экземпляры обеспечивают данные о блоках в рабочей модели. В частности, интерфейс сопоставляет экземпляр Simulink.RunTimeBlock, названного объектом периода выполнения блока, с каждым невиртуальным блоком в рабочей модели. Методы и свойства объекта периода выполнения обеспечивают доступ к данным во время выполнения о портах I/O блока, параметрах, частотах дискретизации и состояниях.

Доступ к объекту периода выполнения

Каждый невиртуальный блок в рабочей модели имеет параметр RuntimeObject, значение которого, в то время как моделирование запускается, является указателем для объекта периода выполнения блоков. Это позволяет вам использовать get_param, чтобы получить объект периода выполнения блока. Например, следующий оператор

rto = get_param(gcb,'RuntimeObject');

возвращает объект периода выполнения в настоящее время выбранного блока. Данные объекта периода выполнения только для чтения. Вы не можете использовать объекты периода выполнения, чтобы изменить параметры блока, ввести, вывести и утвердить данные.

Примечание

Виртуальные блоки (см. Невиртуальные и Виртуальные Блоки) не имеют объектов периода выполнения. Блоки, устраненные во время образцовой компиляции как оптимизация также, не имеют объектов периода выполнения (см. Блочное сокращение). Объект периода выполнения существует только, в то время как модель, содержащая блок, запускается или приостановленная. Если модель останавливается, get_param возвращает пустой указатель. Когда вы останавливаете модель, все существующие указатели для объектов периода выполнения становятся пустыми.

Прислушайтесь к Событиям выполнения метода

Одно приложение для блочного API времени выполнения должно собрать диагностические данные в ключевых пунктах во время моделирования, таких как значение блочных состояний прежде или после того, как блоки вычислят свои выходные параметры или производные. Блочный API времени выполнения обеспечивает механизм прослушивателя события, который упрощает такие приложения. Для получения дополнительной информации см. документацию для команды add_exec_event_listener. Для примера использования событий выполнения метода войти

в командной строке MATLAB. Эта модель Simulink содержит S-функцию adapt_lms.m, который выполняет систему идентификации, чтобы определить коэффициенты КИХ-фильтра. Метод PostPropagationSetup S-функции инициализирует вектор объекта периода выполнения блока DWork, таким образом, что второй вектор хранит коэффициенты фильтра, вычисленные на каждом временном шаге.

В модели Simulink, дважды кликающей на аннотации ниже Блока s-function, выполняет его OpenFcn. Эта функция сначала открывает фигуру для графического изображения КИХ-коэффициентов фильтра. Это затем выполняет функциональный add_adapt_coef_plot.m, чтобы добавить событие выполнения метода PostOutputs к блочному объекту периода выполнения S-функции с помощью следующих строк кода.

% Add a callback for PostOutputs event
blk = 'sldemo_msfcn_lms/LMS Adaptive';

h   = add_exec_event_listener(blk, ...
         'PostOutputs', @plot_adapt_coefs);

Функциональный plot_adapt_coefs.m указан как прослушиватель события, который выполняется после каждого вызова метода Outputs S-функции. Функциональные доступы вектор и графики объекта периода выполнения блока DWork коэффициенты фильтра, вычисленные в методе Outputs. Синтаксис вызова, используемый в plot_adapt_coefs.m, следует стандарту, необходимому для любого прослушивателя. Первый входной параметр является блочным объектом периода выполнения S-функции, и второй аргумент является структурой данных о событиях, как показано ниже.

function plot_adapt_coefs(block, ei) %#ok<INUSD>
% 
% Callback function for plotting the current adaptive filtering
% coefficients.

stemPlot  = get_param(block.BlockHandle,'UserData');

est = block.Dwork(2).Data;
set(stemPlot(2),'YData',est);
drawnow('expose');

Синхронизация объектов периода выполнения и выполнения Simulink

Можно использовать объекты периода выполнения, чтобы получить значение блока вывод и отобразиться в Окне Команды MATLAB путем ввода следующих команд.

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

Однако отображенные данные не могут быть истинным блоком вывод, если объект периода выполнения не синхронизируется с казнью Simulink. Simulink только гарантирует, что объект периода выполнения и казнь Simulink синхронизируются, когда объект периода выполнения используется или в Уровне 2 S-функция MATLAB или в обратном вызове прослушивателя события. Когда названо из Окна Команды MATLAB, объект периода выполнения может возвратить неправильные выходные данные, если другим блокам в модели позволяют совместно использовать память.

Гарантировать поле Data содержит правильный блок вывод, откройте диалоговое окно Configuration Parameters, и затем снимите флажок Повторного использования памяти (см. Повторное использование памяти).

Похожие темы

Была ли эта тема полезной?