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

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

Сохранить модель как call_stats_block1.
Запрограммируйте блок для вычисления среднего и стандартного отклонения для вектора значений:
Дважды щелкните по блоку MATLAB Function. Сигнатура функции по умолчанию появляется в редакторе функциональных блоков MATLAB. Запишите любой код внутри определенных сигнатур функций.
Отредактируйте строку заголовка функции:
function [mean,stdev] = stats(vals)
В этом коде определяется функция с именем stats, который вычисляет среднее статистическое и стандартное отклонение для значений в векторе vals. Заголовок функции объявляет vals в качестве аргумента для stats функция, с mean и stdev в качестве возвращаемых значений.
В редакторе функциональных блоков 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;
Выполните подключение к функциональному блоку MATLAB, как показано на рисунке.

Сохранить модель как call_stats_block2.
После программирования блока в модели Simulink можно построить функцию и проверить наличие ошибок. Для создания функционального блока MATLAB требуется поддерживаемый компилятор. MATLAB ® автоматически выбирает компилятор по умолчанию. Если в системе установлено несколько компиляторов, поддерживаемых MATLAB, можно изменить компилятор по умолчанию с помощью mex -setup команда. См. раздел Изменение компилятора по умолчанию.
Просмотр списка компиляторов для построения моделей, содержащих моделирование функциональных блоков MATLAB и создание кода.
Перейдите на страницу Поддерживаемые и совместимые компиляторы и выберите свою платформу.
Прокрутите таблицу в разделе Семейство продуктов Simulink.
Чтобы проверить таблицу для моделей, содержащих функциональные блоки MATLAB для моделирования, найдите компиляторы, отмеченные в столбце Simulink For Model Referencing, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks.
Чтобы проверить таблицу для моделей, содержащих функциональные блоки MATLAB и сгенерировать код, найдите компиляторы, отмеченные в столбце
Simulink Coder™
.
Для генерации кода для моделей, содержащих функциональные блоки MATLAB, можно использовать любой компилятор C, поддерживаемый программным обеспечением Simulink, для генерации кода с помощью Simulink Coder. Список следующих компиляторов:
Перейдите на веб-страницу Поддерживаемые и совместимые компиляторы.
Выберите платформу.
В таблице для Simulink и связанных продуктов найдите компиляторы, отмеченные в столбце Simulink Coder.
Если в процессе построения возникают ошибки, в окне Средство просмотра диагностики (Diagnostics Viewer) перечисляются ошибки со ссылками на код-нарушитель.
В следующем упражнении показано, как найти и исправить ошибку в блоке функции MATLAB.
В stats функция, изменение локальной функции avg фиктивной локальной функции aug и повторите компиляцию, чтобы увидеть следующие сообщения в окне. В окне Diagnostics Viewer отображается каждая обнаруженная ошибка с закрашенной красной линией.
Исследовать ошибку с названием Undefined function or variable 'aug'. В диагностическом сообщении для выбранной ошибки щелкните синюю ссылку после имени функции, чтобы отобразить код нарушения. Нарушающая линия отображается подсвеченной в MATLAB Function Block Editor.
Сообщение также содержит ссылки на отчет об информации о типе времени компиляции для переменных и выражений в функциях MATLAB. Эта информация помогает диагностировать сообщения об ошибках и понять правила распространения типов. Дополнительные сведения об отчете см. в разделе Отчеты о функциях MATLAB. Чтобы просмотреть отчет, щелкните выделенную синюю ссылку в строке с именем Launch diagnostic report
Исправьте ошибку, изменив aug назад в avg и перекомпилировать.
По умолчанию входы и выходы функций наследуют их тип данных и размер от сигналов, подключенных к их портам. Проверьте входные и выходные данные для функционального блока MATLAB, чтобы убедиться, что он наследует правильный тип и размер.
Дважды щелкните по функциональному блоку MATLAB stats.
В редакторе функциональных блоков MATLAB выберите «Редактировать данные». Ports and Data Manager позволяет определить аргументы для функциональных блоков MATLAB.
В левой области отображается аргумент vals и возвращаемые значения mean и stdev который уже создан для функционального блока MATLAB. Обратите внимание, что vals назначен объем Input, сокращенно от Input from Simulink. mean и stdev присвоены Объем Output, сокращенно от Output to Simulink.
На левой панели диспетчера портов и данных щелкните в любом месте строки для vals чтобы выделить его.
На правой панели отображается диалоговое окно «Свойства данных» для vals. По умолчанию класс, размер, единицы измерения и сложность входных и выходных аргументов наследуются из сигналов, присоединенных к каждому входному или выходному порту. Наследование задается путем установки для параметра «Размер» значения -1, Сложность к Inheritedи введите для Inherit: Same as Simulink.
Фактические унаследованные значения размера и типа задаются во время компиляции модели и отображаются в столбцах Скомпилированный тип и Скомпилированный размер на левой панели.
Тип входного или выходного аргумента можно указать в поле Тип диалогового окна Свойства данных, например: double. Можно также указать размер входного или выходного аргумента, введя выражение в поле Размер. Например, можно ввести [2 3] в поле Размер для указания vals в качестве 2-by-3 матрица. Дополнительные сведения о выражениях, которые можно ввести для типа и размера, см. в разделах Аргументы функции типа и Аргументы функции размера.
Примечание
Первым индексом по умолчанию для всех массивов, добавляемых к функции блока функции MATLAB, является 1, точно так же, как это было бы в 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);
После назначения свойств переменной невозможно переопределить ее класс, размер или сложность в другом месте тела функции за некоторыми исключениями (см. Переназначение свойств переменных).
Откройте окно call_stats_block2 модель, сохраненная в конце окна «Программирование функционального блока MATLAB».
Двойной щелчок stats блок.
Выберите команду «Построить модель» > «Построить», чтобы скомпилировать и построить пример модели.
При получении ошибки, связанной с Variable-step решатель из меню «Параметры конфигурации» > «Решатель» измените тип решателя на Fixed-step решатель и повторно запустите построение. Дополнительные сведения о различиях между решателями с фиксированным шагом и решателями с переменным шагом см. в разделе Решатели с фиксированным шагом и решателями с переменным шагом.
Если ошибок не возникает, в окне Средство просмотра диагностики (Diagnostics Viewer) отображается сообщение об успешном выполнении. В противном случае это окно поможет найти ошибки, как описано в разделе Поиск и исправление ошибок.
add_block | gcb | get_param | Функция MATLAB | MATLABFunctionConfiguration | Stateflow.EMChart | table