Simulink ® предоставляет интерфейс прикладного программирования, называемый интерфейсом блочного выполнения, который обеспечивает программный доступ к блочным данным, таким как входы и выходы блоков, параметры, состояния и рабочие векторы, во время выполнения моделирования. Этот интерфейс используется для доступа к блочным данным времени выполнения из командной строки MATLAB ®, Simulink Debugger и из Level-2 S-функций MATLAB (см. Запись Level-2 S-функций MATLAB).
Примечание
Этот интерфейс можно использовать, даже если модель приостановлена или запущена или приостановлена в отладчике.
Блочный интерфейс времени выполнения состоит из набора классов объектов данных Simulink (см. Объекты данных), экземпляры которых предоставляют данные о блоках в выполняющейся модели. В частности, интерфейс связывает экземпляр Simulink.RunTimeBlock, называемый объектом времени выполнения блока, с каждым невиртуальным блоком в выполняемой модели. Методы и свойства объекта времени выполнения обеспечивают доступ к данным времени выполнения о портах ввода-вывода блока, параметрах, времени выборки и состояниях.
Каждый невиртуальный блок в выполняющейся модели имеет RuntimeObject параметр, значение которого во время выполнения моделирования является дескриптором для объекта времени выполнения блока. Это позволяет использовать get_param для получения объекта времени выполнения блока. Например, следующий оператор
rto = get_param(gcb,'RuntimeObject');
возвращает объект времени выполнения выбранного блока. Данные объекта времени выполнения доступны только для чтения. Нельзя использовать объекты времени выполнения для изменения параметров блока, входных, выходных данных и данных состояния.
Примечание
Виртуальные блоки (см. Невиртуальные и Виртуальные блоки) не имеют объектов времени выполнения. Блоки, исключенные при компиляции модели в качестве оптимизации, также не имеют объектов времени выполнения (см. Сокращение блоков). Объект времени выполнения существует только во время работы или приостановки модели, содержащей блок. Если модель остановлена, get_param возвращает пустой дескриптор. При остановке модели все существующие маркеры перемещения объектов времени выполнения становятся пустыми.
Одним из приложений для блочного API времени выполнения является сбор диагностических данных в ключевых точках во время моделирования, таких как значение состояний блоков до или после того, как блоки вычисляют свои выходы или производные. Блочный API времени выполнения обеспечивает механизм прослушивания событий, который облегчает такие приложения. Дополнительные сведения см. в документации по add_exec_event_listener команда. Для примера использования событий выполнения метода введите
в командной строке MATLAB. Эта модель Simulink содержит S-функцию adapt_lms.m, которая выполняет системную идентификацию для определения коэффициентов КИХ-фильтра. S-функция PostPropagationSetup способ инициализирует вектор DWork объекта времени выполнения блока так, что второй вектор сохраняет коэффициенты фильтра, вычисленные на каждом временном шаге.
В модели Simulink двойной щелчок на аннотации под S-функциональным блоком выполняет 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 синхронизированы, когда объект во время выполнения используется или в Уровне 2 MATLAB S-function или в отзыве слушателя событий. При вызове из окна команд MATLAB объект времени выполнения может вернуть неверные выходные данные, если другим блокам модели разрешено совместно использовать память.
Для обеспечения Data содержит правильный вывод блока, откройте диалоговое окно «Параметры конфигурации» и снимите флажок «Повторное использование хранилища сигналов» (см. раздел Повторное использование хранилища сигналов (Simulink Coder)).