exponenta event banner

Просмотр сгенерированного содержимого для таблиц истинности потока состояний

При моделировании модели создается содержимое для таблицы истинности. Содержимое регенерируется при каждом изменении таблицы истинности. Чтобы просмотреть сгенерированное содержимое таблицы истинности, нажмите кнопку Просмотр сгенерированного содержимого. Диаграммы Stateflow ®, использующие C в качестве языка действий, генерируют содержимое как графическую функцию. Диаграммы статусов, использующие MATLAB ® в качестве языка действий, генерируют содержимое в виде кода MATLAB.

Как программное обеспечение Stateflow генерирует графические функции для таблиц истинности

В этом разделе описывается, как программное обеспечение Stateflow преобразует логику таблицы истинности C в графическую функцию.

В следующем примере таблица истинности C имеет три условия, четыре решения и действия, а также начальные и конечные действия.

Программное обеспечение Stateflow генерирует графическую функцию для предыдущей таблицы истинности. Верхняя половина блок-схемы выглядит следующим образом:

Верхняя половина блок-схемы выполняется следующим образом:

  • Выполняет начальные действия

  • Оценивает условия и сохраняет результаты во временных переменных данных

    Временные данные для хранения условий основаны на метках, вводимых для условий. Если метки не указаны, появляются временные переменные данных.

Нижняя половина блок-схемы выглядит следующим образом:

В нижней половине блок-схемы сохраненные значения условий определяют, какое решение является верным и какое действие необходимо выполнить. Каждое решение появляется как вилка от соединительного соединения с одним из двух возможных путей:

  • Переходный сегмент с решением, за которым следует сегмент с последующим действием

    Действие появляется как действие условия, которое приводит к FINAL действие и завершение блок-схемы.

  • Переходный сегмент, который переходит к следующей развилке для оценки следующего решения

    Этот сегмент перехода не имеет условий или действий.

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

Как программное обеспечение Stateflow генерирует код MATLAB для таблиц истинности

Программа Stateflow генерирует содержимое таблиц истинности MATLAB в виде кода MATLAB, который представляет каждое действие как вложенную функцию в основной функции таблицы истинности.

Вложенные функции обладают следующими преимуществами:

  • Вложенные функции независимы друг от друга. Переменные являются локальными для каждой функции и не подвержены конфликтам именования.

  • Вложенные функции могут получать доступ ко всем данным из основной функции таблицы истинности.

Созданное содержимое появляется в редакторе функций, который предоставляет инструменты для моделирования и отладки.

Ниже приведено сгенерированное содержимое для таблицы истинности MATLAB, описанной в разделе Действия программы таблицы истинности:

  • Функция основной таблицы истинности

    function r = ttable(x,y,z)
    
    % Initialize condition vars to logical scalar
    XEQ1 = false;
    YEQ1 = false;
    ZEQ1 = false;
    
    % Condition #1, "XEQ1"
    % x is equal to 1
    XEQ1 = logical(x == 1);
    
    % Condition #2, "YEQ1"
    % y is equal to 1
    YEQ1 = logical(y == 1);
    
    % Condition #3, "ZEQ1"
    % z is equal to 1
    ZEQ1 = logical(z == 1);
    
    if (XEQ1 && ~YEQ1 && ~ZEQ1) % D1
        A1();
    elseif (~XEQ1 && YEQ1 && ~ZEQ1) % D2
        A2();
    elseif (~XEQ1 && ~YEQ1 && ZEQ1) % D3
        A3();
    else % Default
        A4();
    end
  • Действие A1

    function A1()
    % Action #1, "A1"
    % Maintain a counter and a circular vector of length 6.
    % Every time this action is called,
    % output t takes the next value of the vector.
    
    persistent values counter;
    cycle = 6;
    
    if isempty(counter)
      % Initialize counter to be zero
      counter = 0;
    else
      % Otherwise, increment counter
      counter = counter + 1;
    end
    
    if isempty(values)
      % Values is a vector of 1 to cycle
      values = zeros(1, cycle);
      for i = 1:cycle
        values(i) = i;
      end
    
      % For debugging purposes, call the MATLAB
      %  function "plot" to show values
      plot(values);
    end
    
    % Output r takes the next value in values vector
    r = values( mod(counter, cycle) + 1);
  • Действия A2, A3, и A4

    function A2()
    % Action #2, "A2"
    % set r to 2
    
    r=2;
    
    %==================================
    function A3()
    % Action #3, "A3"
    % set r to 3
    
    r=3;
    
    %==================================
    function A4()
    % Action #4, "A4"
    % set r to 4
    
    r=4;

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