exponenta event banner

Stateflow. EMChart

Интерфейс потока состояний к функциональному блоку MATLAB

    Описание

    Использовать Stateflow.EMChart объекты для конфигурирования блоков функции MATLAB (Simulink) через программный интерфейс Stateflow ® .

    Функциональные блоки MATLAB определяют пользовательские функциональные возможности в моделях Simulink ®. Используйте эти блоки в следующих случаях:

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

    • Для модели требуется пользовательская функциональность, которая не поддерживается или не может быть зафиксирована на графическом языке Simulink.

    • С помощью функции MATLAB проще моделировать пользовательские функциональные возможности, чем с помощью блок-схемы Simulink.

    • Пользовательские функции, которые требуется моделировать, не включают непрерывные или дискретные динамические состояния. Для моделирования динамических состояний используйте S-функции.

    Дополнительные сведения см. в разделах Реализация функций MATLAB с использованием блоков (Simulink) и Создание пользовательских функциональных возможностей с использованием функционального блока MATLAB (Simulink).

    Совет

    Свойства функционального блока MATLAB можно также сконфигурировать программно с помощью MATLABFunctionConfiguration (Simulink) объект. Этот объект обеспечивает прямой интерфейс к свойствам блока функции MATLAB. Дополнительные сведения см. в разделе Программная настройка функционального блока MATLAB (Simulink).

    Создание

    Каждый функциональный блок MATLAB имеет свой собственный Stateflow.EMChart объект. При добавлении функционального блока MATLAB в модель Simulink Stateflow.EMChart для него автоматически создается объект. Например, можно использовать функцию add_block (Simulink):

    add_block('simulink/User-Defined Functions/MATLAB Function', ...
       'myModel/MATLAB Function')

    Затем для доступа к Stateflow.EMChart объект, вызовите find для функции Simulink.Root объект:

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

    Свойства

    развернуть все

    Содержание

    Имя функционального блока MATLAB, заданного как символьный вектор.

    Код для блока MATLAB Function, заданного как символьный вектор. Для ввода нескольких строк кода можно:

    • Вызов функции MATLAB sprintf и использовать \n для вставки новых символов строки:

      str = sprintf('function y=f(x)\ny=x+1;\nend');
      block.Script = str;
    • Введите конкатенированное текстовое выражение, использующее целое число 10 в качестве ASCII-эквивалента символа новой строки:

      str = ['function y=f(x)',10, ...
          'y=x+1;',10, ...
          'end'];
      block.Script = str;

    Поддерживает ли функциональный блок MATLAB данные переменного размера, указанные как числовые или логические 1 (true) или 0 (false). Только данные переменного размера могут изменять размеры во время моделирования. Дополнительные сведения см. в разделе Объявление входов и выходов переменного размера (Simulink).

    Поддерживает ли функциональный блок MATLAB семантику прямого прохождения, заданную как числовой или логический 1 (true) или 0 (false). Дополнительные сведения см. в разделе Разрешение прямого прохождения (Simulink).

    Интерфейс

    Это свойство доступно только для чтения.

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

    Это свойство доступно только для чтения.

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

    Дискретная семантика с непрерывным временем

    Метод активации функционального блока MATLAB, указанный как 'CONTINUOUS', 'DISCRETE', или 'INHERITED'. Дополнительные сведения см. в разделе Метод обновления (Simulink).

    Время выборки для активации функционального блока MATLAB, заданного как символьный вектор. Это свойство применяется только в том случае, если ChartUpdate свойство для функции MATLAB 'DISCRETE'.

    Целочисленные данные и данные с фиксированной точкой

    Будут ли данные в блоке MATLAB Function насыщаться при целочисленном переполнении, указанном как числовой или логический 1 (true) или 0 (false). Если это свойство отключено, данные в функции переносятся при переполнении целых чисел. Дополнительные сведения см. в разделе Насыщение при переполнении целых чисел (Simulink).

    Унаследованные сигналы Simulink для обработки как Designer™ с фиксированной точкой fi объекты, указанные как одно из следующих значений:

    • 'Fixed-point' - Функциональный блок MATLAB рассматривает все вводы с фиксированной точкой как fi объекты.

    • 'Fixed-point & Integer' - Функциональный блок MATLAB рассматривает все фиксированные и целочисленные входы как fi объекты.

    Дефолт fimath свойства блока MATLAB Function, указанные как одно из следующих значений:

    • 'Same as MATLAB Default' - Использовать то же самое fimath свойства в качестве текущего значения по умолчанию fimath объект.

    • 'Other:UserSpecified' - Использовать InputFimath свойство для указания значения по умолчанию fimath объект.

    Дефолт fimath объект, указанный как символьный вектор. Когда EmlDefaultFimath свойство для функционального блока MATLAB 'Other:UserSpecified', это свойство можно использовать для:

    • Введите выражение, которое создает fimath объект.

    • Введите имя переменной для fimath в рабочей области MATLAB или модели.

    Иерархия

    Это свойство доступно только для чтения.

    Машина, содержащая функциональный блок MATLAB, указанный как Stateflow.Machine объект.

    Это свойство доступно только для чтения.

    Расположение блока MATLAB Function в иерархии модели, заданного как символьный вектор.

    Изменялся ли функциональный блок MATLAB после открытия или сохранения, указывается как числовой или логический 1 (true) или 0 (false).

    Блокируется ли функциональный блок MATLAB, указывается как числовой или логический 1 (true) или 0 (false). Включите это свойство, чтобы предотвратить изменения в блоке функции MATLAB.

    Это свойство доступно только для чтения.

    Блокируется ли функциональный блок MATLAB, указывается как числовой или логический 1 (true) или 0 (false). Это свойство эквивалентно свойству Locked, но используется внутри для предотвращения изменений в блоке MATLAB Function во время моделирования.

    Идентификация

    Описание функционального блока MATLAB, заданного как символьный вектор.

    Ссылка на документ для функционального блока MATLAB, заданного как символьный вектор.

    Определяемый пользователем тег для функционального блока MATLAB, определяемый как данные любого типа.

    Это свойство доступно только для чтения.

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

    Функции объекта

    classhandleПредоставить дескриптор класса для объекта
    dialogДиалоговое окно «Открыть свойства»
    findУказанные объекты в иерархии
    getВозврат структуры MATLAB, содержащей параметры свойств объекта или массива объектов
    parseАнализ одной или всех диаграмм в модели
    setЗадать свойства с заданными значениями
    viewЭкранный объект в среде редактирования

    Примеры

    свернуть все

    Доступ к Stateflow.EMChart объект для функционального блока MATLAB.

    block = find(sfroot,'-isa','Stateflow.EMChart');

    Сохраните код MATLAB для вычисления среднего и стандартного отклонения для вектора значений в виде символьного вектора.

    str = ['function [mean,stdev] = stats(vals)',10, ...
    '% Calculates a statistical mean and a standard',10, ...
    '% deviation for the values in vals.',10,10, ...
    'len = length(vals);',10, ...
    'mean = avg(vals,len);',10, ...
    'stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);',10, ...
    'plot(vals,''-+'');',10,10,...
    'function mean = avg(array,size)',10, ...
    'mean = sum(array)/size;'];

    Заполните блок кодом, изменив Script свойство соответствующего Stateflow.EMChart объект.

    block.Script = str;

    Откройте функцию в редакторе функциональных блоков MATLAB.

    view(block)

    Этот код отображается в редакторе.

    function [mean,stdev] = stats(vals)
    % 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;

    Открытие модели Simulink с именем myModel.

    open_system('myModel')

    Добавление функционального блока MATLAB в myModel.

    blockPath = 'myModel/My Function';
    add_block('simulink/User-Defined Functions/MATLAB Function',blockPath)

    Заполните блок кодом из функции MATLAB myFunction.m.

    block = find(sfroot,'-isa','Stateflow.EMChart', ...
        'Path',newBlockPath);
    block.Script = fileread('myFunction.m');

    Открытие модели Simulink с именем myModel.

    open_system('myModel')

    Доступ к Simulink.Root объект на верхнем уровне иерархии Stateflow.

    rt = sfroot;

    Найдите в модели функциональные блоки MATLAB.

    blocks = find(rt,'-isa','Stateflow.EMChart');

    Подсчитать количество блоков.

    numel(blocks);
    Представлен в R2011a