exponenta event banner

Создание пользовательских функциональных возможностей с помощью функционального блока MATLAB

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

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

  1. Создайте новую модель Simulink ® и вставьте блок функции MATLAB из библиотеки пользовательских функций.

  2. Добавление блока «Константа» и установка его значения «Вектор» [2 3 4 5]. Добавьте в модель два блока отображения.

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

Программирование функционального блока MATLAB

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

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

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

    function [mean,stdev] = stats(vals)
    

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

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

    % 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, как показано на рисунке.

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

Построение функции и проверка на наличие ошибок

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

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

Просмотр списка компиляторов для построения моделей, содержащих моделирование функциональных блоков MATLAB и создание кода.

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

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

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

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

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

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

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

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

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

Поиск и исправление ошибок

Если в процессе построения возникают ошибки, в окне Средство просмотра диагностики (Diagnostics Viewer) перечисляются ошибки со ссылками на код-нарушитель.

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

  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, чтобы убедиться, что он наследует правильный тип и размер.

  1. Дважды щелкните по функциональному блоку MATLAB stats.

  2. В редакторе функциональных блоков MATLAB выберите «Редактировать данные». Ports and Data Manager позволяет определить аргументы для функциональных блоков MATLAB.

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

  3. На левой панели диспетчера портов и данных щелкните в любом месте строки для vals чтобы выделить его.

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

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

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

    Примечание

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

Программная настройка функционального блока MATLAB

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

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

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

Настройка свойств блока

Рассмотрим модель 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, см. в разделе MATLABFunctionConfiguration.

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

Для более эффективного программного управления функциональным блоком MATLAB откройте его 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 объект. Например, для создания 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);

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

Создание кода для функционального блока MATLAB

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

  2. Двойной щелчок stats блок.

  3. Выберите команду «Построить модель» > «Построить», чтобы скомпилировать и построить пример модели.

    При получении ошибки, связанной с Variable-step решатель из меню «Параметры конфигурации» > «Решатель» измените тип решателя на Fixed-step решатель и повторно запустите построение. Дополнительные сведения о различиях между решателями с фиксированным шагом и решателями с переменным шагом см. в разделе Решатели с фиксированным шагом и решателями с переменным шагом.

    Если ошибок не возникает, в окне Средство просмотра диагностики (Diagnostics Viewer) отображается сообщение об успешном выполнении. В противном случае это окно поможет найти ошибки, как описано в разделе Поиск и исправление ошибок.

См. также

| | | | | |

Связанные темы