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

Таблицы истинности реализуют проект комбинаторной логики в кратком, табличном формате. Таблицы истинности поддерживаются только в блоках Stateflow® в модели Simulink®. Для получения дополнительной информации смотрите Комбинаторную логику Повторного использования путем Определения Таблиц истинности.

Типы сгенерированного содержимого

Программное обеспечение Stateflow понимает логическое поведение, заданное в таблице истинности путем генерации содержимого можно следующим образом:

Тип таблицы истинностиСгенерированное содержимое
CГрафическая функция
MATLAB® КОД MATLAB

Просмотрите сгенерированное содержимое

Вы генерируете содержимое для таблицы истинности, когда вы моделируете свою модель. Содержимое регенерирует каждый раз, когда таблица истинности изменяется. Чтобы просмотреть сгенерированное содержимое таблицы истинности, выполните эти шаги:

  1. Моделируйте модель, которая содержит таблицу истинности.

  2. Дважды кликните таблицу истинности.

  3. Нажмите кнопку View Generated Content:

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

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

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

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

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

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

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

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

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

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

  • Сегмент перехода с решением, сопровождаемым сегментом с последовательным действием

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

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

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

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

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

Программное обеспечение Stateflow генерирует содержимое таблиц истинности MATLAB как код 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;