Выполните объекты диаграммы Stateflow через скрипты и модели

Автономный график Stateflow® является классом MATLAB®, который задает поведение конечного автомата. Автономные графики реализуют классическую семантику графика с MATLAB как язык действия. Можно программировать график при помощи полной функциональности MATLAB, включая те функции, которые ограничиваются для генерации кода в Simulink®. Для получения дополнительной информации смотрите, Создают диаграммы Stateflow для Выполнения как Объекты MATLAB.

В этом примере показано, как выполнить автономную диаграмму Stateflow при помощи скрипта MATLAB или модели Simulink.

Считайте способы внести изменение за валюту

Файл sf_change.sfx задает автономную диаграмму Stateflow, которая считает количество способов внести изменение для данной суммы денег. График содержит эти объекты данных:

  • x сумма денег должна измениться. Значение по умолчанию равняется 100.

  • coinValues вектор наименований монеты, расположенных в увеличивающемся порядке. coinNames массив соответствующих имен монеты. Значения по умолчанию представляют стандартные американские монеты (пенсы, пятицентовые монеты, десять центов и четверти).

  • tally количество допустимых настроек изменения.

  • tabula массив, содержащий различные допустимые настройки изменения.

  • chgсделанныйi, и n локальные данные, используемые считающим изменение алгоритмом.

  • textWidth и quietMode локальные данные, которые управляют, как график отображает свои результаты.

График начинается с потенциальной настройки изменения, состоящей полностью из монет самого низкого значения, заданных индексом 1. На каждом шаге выполнения, exchange состояния изменяет эту настройку одним из двух способов:

  • move_up подсостояния обмены некоторые монеты самого низкого значения для монеты с более высоким значением, заданным индексом i.

  • move_down подсостояния обмены все монеты со значением, заданным индексом i для монет самого низкого значения. Затем move_up обмены некоторые монеты самого низкого значения для монеты со значением, заданным индексом i+1 или выше.

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

Когда больше обменов монеты не возможно, stop состояния становится активным. Это состояние распечатывает результаты расчета, преобразовывает содержимое tabula к таблице, и устанавливает значение done к true.

Выполните автономный график в СКРИПТЕ MATLAB

Чтобы запустить считающий изменение алгоритм к завершению, необходимо выполнить автономный график многократно. Например, sf_change_script.m скрипта MATLAB создает объект диаграммы chartObj и инициализирует значение локальных данных x к 27. Параметр конфигурации '-warningOnUninitializedData', который скрипт устанавливает на false, устраняет предупреждение что tabula пустой массив в новом объекте диаграммы. while цикл выполняет график до локальных данных done становится true. Наконец, скрипт отображает значение tabula.

chartObj = sf_change('x',27,'--warningOnUninitializedData',false);

while ~chartObj.done
    step(chartObj);
end

disp(chartObj.tabula)
Когда вы запускаете этот скрипт, автономный график вычисляет количество способов внести изменение за 27 центов при помощи стандартных американских монет:
sf_change_script
.............
There are 13 ways to make change for 27 cents.
    Pennies    Nickels    Dimes    Quarters
    _______    _______    _____    ________

      27          0         0         0    
      22          1         0         0    
      17          2         0         0    
      12          3         0         0    
       7          4         0         0    
       2          5         0         0    
      17          0         1         0    
      12          1         1         0    
       7          2         1         0    
       2          3         1         0    
       7          0         2         0    
       2          1         2         0    
       2          0         0         1    

Чтобы определить количество способов внести изменение для различной суммы или использовать различную систему валюты, изменяют значения x и coinValues. Например, чтобы использовать британскую валюту, инициализируйте coinValues к [1 2 5 10 20 25 50].

Выполните автономный график в модели Simulink

Можно выполнить автономную диаграмму Stateflow из модели Simulink. Например, модель sf_change_model содержит две диаграммы Stateflow, которые используют автономный график sf_change считать количество способов внести изменение за 27 центов в двух различных валютных системах. Можно симулировать модель, но функции, которые выполняют автономный график, не поддерживают генерацию кода.

Каждый график содержит эти состояния:

  • Initialize создает локальный объект диаграммы chartObj это реализует считающий изменение алгоритм для входного значения x.

  • Execute вызывает step функция, чтобы выполнить автономный график и хранилища результат как выходные данные tally.

  • Finish отображает результаты алгоритма в окне Diagnostic Viewer и устанавливает значение выходных данных done к true.

Когда оба графика достигают своего соответствующего Finish состояние, симуляция остановок модели и блоков Отображения показывают окончательные значения двух счетов.

Выполнение Используя MATLAB как язык действия

График MATLAB syntax использование MATLAB как язык действия. Чтобы выполнить автономную диаграмму Stateflow, этот график должен следовать этим инструкциям:

  • Локальная переменная chartObj это содержит указатель на объект диаграммы, имеет, вводят Inherit: From definition in chart.

  • Execute и Finish состояния получают доступ к локальным данным для автономного графика путем вызова get функция.

Когда вы симулируете этот график с входом x = 27, блок Display Olde English показывает счет 4. Окно Diagnostic Viewer показывает эти результаты:

   Pennies    Shillings    Florins
   _______    _________    _______
     27           0           0
     15           1           0
      3           2           0
      3           0           1

Выполнение Используя C как язык действия

График C syntax использование C как язык действия. Чтобы выполнить автономную диаграмму Stateflow, этот график должен следовать этим инструкциям:

  • Локальная переменная chartObj это содержит указатель на объект диаграммы, имеет, вводят ml.

  • Initialize утвердите вызывает ml функция, чтобы создать объект диаграммы.

  • Execute и Finish состояния используют ml оператор пространства имен, чтобы получить доступ к stepполучение, и displ функции, чтобы выполнить автономный график, получите доступ к его локальным данным и отобразите результаты алгоритма.

Для получения дополнительной информации смотрите доступ к функциям MATLAB и Данным о Рабочей области в Графиках C.

Когда вы симулируете этот график с входом x = 27, блок Display Modern American показывает счет 13. Окно Diagnostic Viewer показывает эти результаты:

   Safety    FieldGoal    TouchDown
   ______    _________    _________
     12          1            0
      9          3            0
      6          5            0
      3          7            0
      0          9            0
     10          0            1
      7          2            1
      4          4            1
      1          6            1
      5          1            2
      2          3            2
      3          0            3
      0          2            3

Похожие темы