Создайте графики при помощи API Stateflow

Создайте новую модель и график

  1. Закройте все модели.

  2. Введите функциональный sfnew чтобы создать новую, неназванную модель с новым Stateflow® строят диаграмму в нем.

MATLAB® является языком действия по умолчанию графика, который вы создаете с sfnew. Чтобы открыть новый график C или изменить язык действия по умолчанию, смотрите, Изменяют Язык Действия для Графика.

У вас есть только одна модель Simulink® в памяти. Не открывайте график. Можно теперь получить доступ к API Machine объект, который представляет саму модель.

Доступ к Machine Объект

В API Stateflow каждая модель вы создаете или загружаете в память, представлен объектом типа Machine. Прежде, чем получить доступ к диаграмме Stateflow вы создали в предыдущем разделе, необходимо сначала соединиться с его Machine объект. Однако в API Stateflow, всем Machine объекты содержатся в API Stateflow Root объект, таким образом, необходимо использовать Root объект возвращен функциональным sfroot получить доступ к Machine объект:

  1. Используйте эту команду, чтобы получить указатель на Root объект:

    rt = sfroot;
  2. Используйте указатель на Root объект, rt, найти Machine объект, представляющий вашу новую неназванную модель Simulink и присвоение это указатель m в этой команде:

    m = rt.find('-isa','Stateflow.Machine');
    

Если вместо одной модели существует несколько открытых моделей, эта команда возвращает массив различного Machine объекты, к которым можно получить доступ посредством индексации (m(1), m(2), и т.д.), можно идентифицировать определенный Machine объект с помощью свойств каждой модели, особенно Name свойство, которое является именем модели. Например, можно использовать Name свойство найти Machine возразите названному myMachine с этой командой:

m = rt.find('-isa', 'Stateflow.Machine', '-and', ...
'Name', 'myMachine');

Однако, поскольку у вас теперь есть только одна загруженная модель, указатель на объект m в команде для шага 2 возвращает Machine объект для модели, которую вы только создали. Вы теперь готовы использовать m получить доступ к пустому графику так, чтобы можно было начать заполнять его объектами Stateflow.

Доступ к объекту диаграммы

В доступе к Объекту Машины вы получили доступ к Machine объект, содержащий ваш новый график, чтобы возвратить указатель на Machine возразите для своей новой модели, m. Выполните эти шаги, чтобы получить доступ к новому графику:

  1. Доступ к новому Chart объект и присвоение это к переменной ch рабочей области можно следующим образом:

    ch = m.find('-isa','Stateflow.Chart');
    

    В предыдущей команде, find метод Machine объект m возвращает массив всех графиков, принадлежащих той модели. Поскольку вы создали только один график, результатом этой команды является график, который вы создали. Если вы создали несколько графиков, find метод возвращает массив графиков, к которым вы могли получить доступ посредством индексации (например, ch(1), ch(2), и так далее).

    Можно также использовать обозначение стандартной функции вместо записи через точку для предыдущей команды. В этом случае первым аргументом является Machine указатель на объект, m.

    ch = find(m, '-isa','Stateflow.Chart');
    
  2. Откройте диаграмму Stateflow с этой командой API:

    ch.view;
    

    Предыдущая команда вызывает view метод Chart возразите, чьим указателем является ch. Заданный график появляется. Другие объекты API Stateflow имеют view методы также.

Создайте новые объекты в графике

В предыдущем разделе вы создали указатель на новый Chart объект, ch. Продолжите путем создания новых объектов для графика с помощью этих шагов:

  1. Создайте новое состояние в Chart объект ch с этой командой:

    sA = Stateflow.State(ch);
    

    Эта команда является конструктором API Stateflow для нового состояния в который Stateflow.State тип объекта для состояния, ch переменная рабочей области, содержащая указатель на вышестоящую диаграмму нового состояния и sA рабочая область является переменной, чтобы получить возвращенный указатель на новое состояние.

    Пустое состояние теперь появляется в верхнем левом угле графика.

  2. Используйте ch.view команда, чтобы принести график к переднему плану для просмотра.

  3. Присвойте имя и положение к новому состоянию путем присвоения значений свойствам нового State объект можно следующим образом:

    sA.Name = 'A';
    sA.Position = [50 50 310 200];
    
  4. Создайте новые состояния, A1 и A2 в утверждают A и присваивают их свойства с этими командами:

    sA1 = Stateflow.State(ch);
    sA1.Name = 'A1';
    sA1.Position = [80 120 90 60];
    sA2 = Stateflow.State(ch);
    sA2.Name = 'A2';
    sA2.Position = [240 120 90 60];
    

    Эти команды создают и используют переменные sA рабочей области, sA1, и sA2 как обрабатывает к новым состояниям, которые теперь появляются следующими.

  5. Создайте переход от 3-часового положения (правая сторона) A1 состояния к 9-часовой позиции (левая сторона) A2 состояния с этими командами:

    tA1A2 = Stateflow.Transition(ch);
    tA1A2.Source = sA1;
    tA1A2.Destination = sA2;
    tA1A2.SourceOClock = 3;
    tA1A2.DestinationOClock = 9;
    

    Переход теперь появляется как показано.

  6. Добавьте метку E1 к переходу от A1 состояния утверждать A2 с этой командой:

    tA1A2.LabelPosition = [180 140 0 0];
    tA1A2.LabelString = 'E1';
    

    График теперь выглядит так:

    Состояние и метки перехода в этом графике являются простыми короткими метками. Чтобы ввести более комплексные многострочные метки, смотрите, Вводят Многострочные Метки в состояния и Переходы. Метки для переходов также имеют LabelPosition свойство можно использовать, чтобы переместить метки в лучшие местоположения.

  7. Используйте эти команды, чтобы переместить метку для перехода от A1 до A2 направо на 5 пикселей:

    pos = tA1A2.LabelPosition;
    pos(1) = pos(1)+5;
    tA1A2.LabelPosition = pos;
    
  8. Закончите свой новый график путем добавления переходов по умолчанию к состояниям A и A1 с исходными точками на 20 пикселей выше и 10 пикселей слева от главной средней точки каждого состояния:

    % Add a default transition to state A
    dtA = Stateflow.Transition(ch);
    dtA.Destination = sA;
    dtA.DestinationOClock = 0;
    xsource = sA.Position(1)+sA.Position(3)/2;
    ysource = sA.Position(2)-30;
    dtA.SourceEndPoint = [xsource ysource];
    dtA.MidPoint = [xsource ysource+15];
    
    % Add a default transition to state A1
    dtA1 = Stateflow.Transition(ch);
    dtA1.Destination = sA1;
    dtA1.DestinationOClock = 0;
    xsource = sA1.Position(1)+sA1.Position(3)/2;
    ysource = sA1.Position(2)-30;
    dtA1.SourceEndPoint = [xsource ysource];
    dtA1.MidPoint = [xsource ysource+15];
    

    Ваш полный график выглядит так:

  9. Сохраните модель с новым графиком к текущей папке как myModel:

    sfsave(m.Name, 'myModel');

    Эта команда использует Name свойство Объекта модели m для сохранения модели под новым именем.

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

| | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте