exponenta event banner

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

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

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

Подсчитать способы внесения изменений в валюту

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

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

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

  • tally - количество допустимых конфигураций изменений.

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

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

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

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

  • Подгосударство move_up обменивает некоторые монеты самой низкой стоимости на монету с более высокой стоимостью, указанную индексом i.

  • Подгосударство move_down обменивает все монеты на значение, указанное индексом i для монет с наименьшей стоимостью. Тогда move_up обменивает некоторые монеты с наименьшей стоимостью на монету со стоимостью, указанной индексом i+1 или выше.

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

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

Выполнение автономной диаграммы в сценарии MATLAB

Чтобы выполнить алгоритм подсчета изменений до завершения, необходимо выполнить автономную диаграмму несколько раз. Например, сценарий MATLAB sf_change_script.m создает объект диаграммы 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, блок «Дисплей» 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, get, и displ функции для выполнения автономной диаграммы, доступа к ее локальным данным и отображения результатов алгоритма.

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

При моделировании этой диаграммы с вводом x = 27, блок «Дисплей» 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

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