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

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

Откройте модель

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

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

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

  1. Чтобы открыть MATLAB Function Block Editor, дважды кликните блок MATLAB Function. Функция по умолчанию появляется в MATLAB Function Block Editor с одним аргументом ввода и вывода.

    this image shows the MATLAB Function Block Editor after it has been opened from the call_stats_block1 model. It includes a default function.

  2. Задайте входные параметры функции и выходные параметры путем редактирования оператора объявления функции:

    function [mean, stdev] = stats(vals)
    

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

  3. В MATLAB Function Block Editor введите пробел линии после оператора объявления функции и добавьте следующий код:

    % 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;
    
  4. Выйдите из блока. Функциональные выходные параметры mean и stdev соответствуйте выходным портам блока mean и stdev и входной параметр функции vals соответствует импорту блока vals.

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

    This shows connected signals between the blocks established in the previous image.

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

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

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

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

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

  1. Перейдите к странице Supported и Compatible Compilers и выберите свою платформу.

  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 может иметь уникальный тип данных, который является скаляром, вектором или матрицей. Однако создание аргументов функции непосредственно не задает их тип данных. По умолчанию входные параметры функции и выходные параметры наследовали свой тип данных и размер от сигналов, присоединенных к их портам. Исследуйте входные и выходные данные на блок MATLAB Function, чтобы проверить, что это наследовало правильный тип и размер.

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

  2. В MATLAB Function Block Editor нажмите Ports & 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.

    Примечание

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

Сконфигурируйте программно блоки MATLAB Function

Существует два программируемых подхода для конфигурирования блока MATLAB Function:

  • Используйте MATLABFunctionConfiguration возразите, чтобы запросить и изменить свойства блока. Можно идентифицировать блок в модели при помощи блока path или вызова gcb функция.

  • Используйте Stateflow.EMChart возразите, чтобы получить доступ к входным параметрам, выходным параметрам и свойствам блока. Идентифицируйте блок в своей модели путем навигации по иерархии Stateflow® Объекты API.

Сконфигурируйте свойства блока

Рассмотрите модель call_stats_block1 описанный в предыдущем примере. Можно получить доступ к MATLABFunctionConfiguration объект для блока MATLAB Function в этой модели путем вызова get_param функция:

config = get_param('call_stats_block1/MATLAB Function', ...
    'MATLABFunctionConfiguration');

Чтобы запросить или изменить свойства в вашем объекте настройки, используйте запись через точку со своим именем объекта:

myConfig.UpdateMethod
ans =

  'Inherited'
config.Description = 'Calculate the mean and standard deviation for a vector of values.';

Чтобы узнать больше о свойствах, можно изменить в объекте настройки MATLAB Function, видеть MATLABFunctionConfiguration.

Доступ к входным параметрам блока, Выходным параметрам и свойствам

Для большего программируемого управления вашего блока MATLAB Function получите доступ к его Stateflow.EMChart объект путем вызова find (Stateflow) функция для Simulink.Root объект в верхнем уровне иерархии Stateflow объектов.

rt = sfroot;
block = find(rt,'-isa','Stateflow.EMChart', ...
    'Path','call_stats_block1/MATLAB Function');

Чтобы запросить или изменить свойства в вашем объекте настройки, используйте запись через точку со своим именем объекта:

block.ChartUpdate
ans =

  'INHERITED'
block.Description = 'Calculate the mean and standard deviation for a vector of values.';

Stateflow.EMChart объект предоставляет вам доступ к дополнительным свойствам, которые не доступны в MATLABFunctionConfiguration объект. Например, чтобы создать a table из вводов и выводов блока, введите:

info = get([block.Inputs;block.Outputs],{'Name','Scope','Port'});
T = table(info(:,2),cell2mat(info(:,3)), ...
    'VariableNames',{'Scope','Port'}, ...
    'RowNames',info(:,1));
T.Scope = categorical(T.Scope)
T =

  3×2 table

             Scope     Port
             ______    ____

    vals     Input      1  
    mean     Output     1  
    stdev    Output     2  

Для получения дополнительной информации см. Обзор API Stateflow (Stateflow).

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

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

len = length(vals);

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

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

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

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

  3. Откройте приложение Simulink Coder.

  4. На вкладке C Code, Build, чтобы скомпилировать и создать модель в качестве примера.

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

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

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

| | | | | | |

Похожие темы