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

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

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

Примечание

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

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

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

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

rto = get_param(gcb,'RuntimeObject');

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

Примечание

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

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

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

в командной строке MATLAB. Эта модель Simulink содержит S-функцию adapt_lms.m, который выполняет систему идентификации для определения коэффициентов конечной импульсной характеристики. Функции S PostPropagationSetup способ инициализирует вектор 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 зарегистрирован как прослушиватель событий, который выполняется после каждого вызова функции S Outputs способ. Функция обращается к вектору 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 только тогда, когда объект во время выполнения используется или в Level-2 S-функции MATLAB, или в коллбэке прослушивателя событий. При вызове из Командного окна MATLAB объект времени выполнения может вернуть неправильные выходные данные, если другим блокам в модели разрешено делиться памятью.

Для обеспечения Data поле содержит правильный блочный выход, откройте диалоговое окно Параметров конфигурации, а затем снимите флажок Signal storage reuse (см. «Повторное использование памяти сигнала (Simulink Coder)»).

Похожие темы