Создайте пользовательскую функциональность Используя блок MATLAB function

Этот пример показывает, как создать модель, которая использует блок MATLAB function, чтобы вычислить среднее и стандартное отклонение для вектора значений.

Создайте модель

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

  2. Добавьте блок Constant и установите его значение, чтобы векторизовать [2 3 4 5]. Добавьте два блока Отображения в модель. Соедините эти блоки как показано в схеме.

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

Программируйте блок MATLAB function

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

  1. Дважды кликните блок MATLAB function. Функциональная подпись по умолчанию появляется в Редакторе блока MATLAB function. Запишите любой код в заданных функциональных подписях.

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

    function [mean,stdev] = stats(vals)
    

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

  3. В Редакторе блока 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

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

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

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

Поддерживаемые компиляторы для сборок симуляции и генерации кода

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

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

  2. Прокрутите к таблице под Семейством продуктов Simulink.

  3. Чтобы проверять таблицу на модели, которые содержат блоки MATLAB function для симуляции, найдите, что компиляторы зарегистрировались в столбце, названном Simulink For Model Referencing, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks.

    Чтобы проверять таблицу на модели, которые содержат блоки MATLAB function и генерируют код, найдите, что компиляторы зарегистрировались в столбце, названном Simulink Coder™ .

Поддерживаемые компиляторы для генерации кода

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

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

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

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

Найдите и зафиксируйте ошибки

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

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

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

  2. Займитесь расследованиями ошибка назвала Undefined function or variable 'aug'. В диагностическом сообщении для выбранной ошибки щелкните по синей ссылке после имени функции, чтобы отобразить незаконный код. Незаконная строка кажется подсвеченной в MATLAB Function Block Editor.

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

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

Задайте вводы и выводы

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

  1. Дважды кликните блок MATLAB function stats.

  2. В Редакторе блока MATLAB function выберите Edit Data. Ports and Data Manager открывается, чтобы помочь вам задать аргументы для блоков 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-by-3. Смотрите Аргументы функции Типа и Аргументы функции Размера для получения дополнительной информации о выражениях, что можно ввести для типа и размера.

    Примечание

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

Задайте локальные переменные для генерации кода

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

len = length(vals);

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

Сгенерируйте код для блока MATLAB function

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

  2. Дважды кликните блок stats.

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

    Если вы связали ошибку с решателем Variable-step, от Configuration Parameters> Solver, изменяете тип решателя на решатель Fixed-step и повторно выполняете сборку. Чтобы узнать больше о различиях между фиксированным шагом и решателями переменного шага, смотрите Решатели Фиксированного Шага По сравнению с Решателями Переменного Шага.

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

Добавьте код в блок MATLAB function программно

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

  1. Создайте и сохраните модель под названием myModel.

  2. Создайте функцию MATLAB со следующим кодом и сохраните его в myAdd.m.

    function c = myAdd(a, b)
    c = a + b;

  3. Запишите скрипт MATLAB, который добавляет блок MATLAB function в myModel и заполняет его с содержимым myAdd.m.

    % Add a MATLAB Function block to a model and populate the block with MATLAB
    % code.
    %
    % Copyright 2018 The Mathworks, Inc.
    
    open_system('myModel.slx');
    libraryBlockPath = 'simulink/User-Defined Functions/MATLAB Function';
    newBlockPath = 'myModel/myBlockName';
    % Add a MATLAB Function to the model
    add_block(libraryBlockPath, newBlockPath);
    % In memory, open models and their parts are represented by a hierarchy of
    % objects. The root object is slroot. This line of the script returns the
    % object that represents the new MATLAB Function block:
    blockHandle = find(slroot, '-isa', 'Stateflow.EMChart', 'Path', newBlockPath);
    % The Script property of the object contains the contents of the block,
    % represented as a character vector. This line of the script loads the
    % contents of the file myAdd.m into the Script property:
    blockHandle.Script = fileread('myAdd.m');
    % Alternatively, you can specify the code directly in a character vector.
    % For example: 
    % blockHandle.Script = 'function c = fcn (a, b)';

  4. Запустите скрипт и наблюдайте новый блок MATLAB function в myModel.

  5. Чтобы видеть код, который вы добавили в блок, дважды кликните блок myBlockName.

Смотрите также

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте