Создайте модель, которая использует блок MATLAB function

Добавление блока MATLAB function к модели

  1. Создайте новую модель Simulink® и добавьте блок MATLAB function к модели от библиотеки User-Defined Functions:

  2. Добавьте следующие блоки Источника и Приемника к модели:

    • От библиотеки Sources добавьте блок Constant слева от блока MATLAB function и установите его значение к векторному [2 3 4 5].

    • От библиотеки Sinks добавьте два блока Отображения справа от блока MATLAB function.

  3. В Редакторе Simulink выберите File> Save As и сохраните модель как call_stats_block1.

Программирование блока MATLAB function

Следующее осуществление демонстрирует программирование блока, чтобы вычислить среднее и стандартное отклонение для вектора значений:

  1. Откройте модель call_stats_block1, которую вы сохранили в конце Добавления блока MATLAB function к Модели. Дважды кликните блок MATLAB function fcn, чтобы открыть его для редактирования.

    Появляется функциональная подпись по умолчанию.

  2. Отредактируйте функциональную строку заголовка:

    function [mean,stdev] = stats(vals)
    

    Функциональный stats вычисляет статистическое среднее и стандартное отклонение для значений в векторном vals. Функциональный заголовок объявляет vals в качестве аргумента к функции stats с mean и stdev как возвращаемые значения.

  3. Сохраните модель как call_stats_block2.

  4. Завершите связи с блоком MATLAB function как показано.

  5. В Редакторе блока MATLAB function введите пробел строки после функционального заголовка и добавьте следующий код:

    % calculates a statistical mean and a standard
    % deviation for the values in vals.
    
    len = length(vals);
    mean = avg(vals,len);
    stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);
    plot(vals,'-+');
    
    function mean = avg(array,size)
    mean = sum(array)/size;
    

     Больше о length

     Больше о len

     Больше о plot

  6. Сохраните модель как call_stats_block2.

Создание функции и проверки ошибок

После программирования блока MATLAB function в модели Simulink можно создать функцию и протестировать на ошибки. В этом разделе описываются шаги:

Подготовка вашего компилятора

Создание вашего блока MATLAB function требует поддерживаемого компилятора. MATLAB автоматически выбирает тот как компилятор по умолчанию. Если у вас есть несколько поддерживаемых MATLAB компиляторов, установленных в вашей системе, можно изменить значение по умолчанию с помощью команды mex -setup. См. Компилятор Значения по умолчанию Изменения (MATLAB).

Поддерживаемые Компиляторы для Сборок Моделирования.  Просмотреть список компиляторов для создания моделей, содержащих блоки MATLAB function для моделирования:

  1. Перейдите к Поддерживаемой и Совместимой веб-странице Компиляторов.

  2. Выберите свою платформу.

  3. В таблице для Simulink и сопутствующих товаров, найдите, что компиляторы зарегистрировались в столбце, названном Simulink для блоков MATLAB function.

Поддерживаемые Компиляторы для Генерации кода.  Чтобы сгенерировать код для моделей, которые содержат блоки MATLAB function, можно использовать любой из компиляторов C, поддержанных программным обеспечением Simulink для генерации кода с Simulink Coder™. Для списка этих компиляторов:

  1. Перейдите к Поддерживаемой и Совместимой веб-странице Компиляторов.

  2. Выберите свою платформу.

  3. В таблице для Simulink и сопутствующих товаров, найдите, что компиляторы зарегистрировались в названном Simulink Coder столбца.

Как сгенерировать код для блока MATLAB function

  1. Откройте модель call_stats_block2, которую вы сохранили в конце Программирования блока MATLAB function.

  2. Дважды кликните его блок MATLAB function stats, чтобы открыть его для редактирования.

  3. В Редакторе блока MATLAB function выберите Build Model> Build, чтобы скомпилировать и создать модель в качестве примера.

    Если никакие ошибки не происходят, окно Simulation Diagnostics отображает сообщение, указывающее на успех. В противном случае это окно помогает вам определить местоположение ошибок, как описано в том, Как Определить местоположение и Зафиксировать Ошибки.

Как определить местоположение и зафиксировать ошибки

Если ошибки происходят во время процесса сборки, окно Simulation Diagnostics перечисляет ошибки со ссылками на незаконный код.

Следующее осуществление показывает, как определить местоположение и зафиксировать ошибку в блоке MATLAB function.

  1. В функции stats измените локальную функцию avg на фиктивную локальную функцию aug и затем скомпилируйте снова, чтобы видеть следующие сообщения в окне:

    Окно Simulation Diagnostics отображает каждую обнаруженную ошибку с красной кнопкой.

  2. Кликните по первой ошибочной строке, чтобы отобразить ее диагностическое сообщение в нижнем ошибочном окне.

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

  3. В диагностическом сообщении для выбранной ошибки щелкните по синей ссылке после имени функции, чтобы отобразить незаконный код.

    Незаконная строка кажется подсвеченной в Редакторе блока MATLAB function:

  4. Исправьте ошибку путем возврата aug к avg и перекомпилируйте.

Определение вводов и выводов

В заголовке функции stats для блока MATLAB function вы задали в Программировании блока MATLAB function, аргумент функции, vals является входным параметром, и mean и stdev являются выходные параметры. По умолчанию входные параметры функции и выходные параметры наследовали свой тип данных и размер от сигналов, присоединенных к их портам. В этой теме вы исследуете данные ввода и вывода на блок MATLAB function, чтобы проверить, что это наследовало правильный тип и размер.

  1. Откройте модель call_stats_block2, которую вы сохранили в конце Программирования блока MATLAB function. Дважды кликните блок MATLAB function stats, чтобы открыть его для редактирования.

  2. В Редакторе блока MATLAB function выберите Edit Data.

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

    Левая панель отображает аргумент vals и возвращаемые значения mean и stdev, который вы уже создали для блока MATLAB function. Заметьте, что vals присвоен Осциллограф Input, который является сокращением от Входного параметра от Simulink. mean и stdev присвоены Осциллограф Output, который является сокращением от Вывода к Simulink.

  3. На левой панели Портов и Менеджера данных, щелкните где угодно в строке для vals, чтобы подсветить его.

    Правая панель отображает диалоговое окно Свойств данных для vals. По умолчанию класс, размер, модули и сложность аргументов ввода и вывода наследованы от сигналов, присоединенных к каждому порту ввода или вывода. Наследование задано установкой Size к -1, Сложностью к Inherited и Типом к Inherit: Same as Simulink.

    Фактические наследованные значения для размера и типа устанавливают во время компиляции модели и сообщают в Скомпилированном Типе и Скомпилированных столбцах Размера левой панели.

    Можно задать тип аргумента ввода или вывода путем выбора типа в поле Type диалогового окна Свойств данных, например, double. Можно также задать размер аргумента ввода или вывода путем ввода выражения в поле Size. Например, можно ввести [2 3] в поле Size, чтобы задать vals как 2 3 матрица. Смотрите Аргументы функции Типа и Аргументы функции Размера для получения дополнительной информации о выражениях, что можно ввести для типа и размера.

    Примечание

    Значение по умолчанию сначала индексирует для любых массивов, которые вы добавляете к функции блока MATLAB function, 1, как это было бы в MATLAB.

Определение локальных переменных для генерации кода

Если вы намереваетесь сгенерировать код из алгоритма MATLAB в блоке MATLAB function, необходимо явным образом присвоить класс, размер и сложность локальных переменных перед использованием их в операциях или возврате их как выходные параметры (см. Определение данных для Генерации кода). В функции, взятой в качестве примера, stats локальная переменная len задан прежде чем быть раньше вычислить среднее и стандартное отклонение:

len = length(vals);

Обычно, если вы присваиваете свойства переменной, вы не можете переопределить ее класс, размер или сложность в другом месте в теле функции, но существуют исключения (см. Перевод по службе Variable Properties).

Связанные примеры

Больше о

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