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

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

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

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

  2. Добавьте блок Constant и установите его значение на вектор [2 3 4 5]. Добавьте два блока Display к модели.

  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;
    
  4. Завершите соединения с блоком MATLAB Function, как показано на рисунке.

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

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

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

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

Смотрите список компиляторов для создания моделей, содержащих симуляцию блоков 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 function, изменить локальную функцию 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. The Ports and Data Manager открывает, чтобы помочь вам задать аргументы для блоков MATLAB Function.

    На левой панели отображается аргумент vals и возврат значения mean и stdev который вы уже создали для блока MATLAB Function. Наблюдайте за этим vals присваивается возможности Input, что сокращение от Input from 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 Function блокируйте программно

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

  • Использование MATLABFunctionConfiguration объект для запроса и изменения свойств блока. Можно идентифицировать блок в модели, используя путь блока или вызывая 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.';

The Stateflow.EMChart Объект предоставляет вам доступ к дополнительным свойствам, которые недоступны в MATLABFunctionConfiguration объект. Например, чтобы создать 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  

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

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

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

len = length(vals);

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

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

  1. Откройте call_stats_block2 модель, которую вы сохранили в конце Program the Блока MATLAB function.

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

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

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

    Если ошибок не происходит, в Diagnostics Viewer окне отображается сообщение об успехе. В противном случае это окно поможет вам найти ошибки, как описано в разделе Locate и Fix Errors.

См. также

| | | | | |

Похожие темы