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');
Можно использовать объекты во время выполнения, чтобы получить значение выхода блока и отобразить в Командном Окне MATLAB путем ввода следующих команд.
rto = get_param(gcb,'RuntimeObject') rto.OutputPort(1).Data
Однако отображаемые данные могут не быть истинным блоком выхода, если объект времени выполнения не синхронизируется с выполнением Simulink. Simulink обеспечивает синхронизацию объекта во время выполнения и выполнения Simulink только тогда, когда объект во время выполнения используется или в Level-2 S-функции MATLAB, или в коллбэке прослушивателя событий. При вызове из Командного окна MATLAB объект времени выполнения может вернуть неправильные выходные данные, если другим блокам в модели разрешено делиться памятью.
Для обеспечения Data
поле содержит правильный блочный выход, откройте диалоговое окно Параметров конфигурации, а затем снимите флажок Signal storage reuse (см. «Повторное использование памяти сигнала (Simulink Coder)»).