Вы генерируете содержимое для таблицы истинности, когда вы симулируете свою модель. Содержимое регенерирует каждый раз, когда таблица истинности изменяется. Чтобы просмотреть сгенерированное содержимое таблицы истинности, нажмите кнопку View Generated Content. Графики Stateflow®, которые используют C в качестве языка действия, генерируют содержимое как графическую функцию. Диаграммы Stateflow, которые используют MATLAB® в качестве языка действия, генерируют содержимое как код MATLAB.
В этом разделе описывается программное обеспечение Stateflow переводит логику таблицы истинности C в графическую функцию.
В следующем примере таблица истинности C имеет три условия, четыре решения и действия и начальные и окончательные решения.
Программное обеспечение Stateflow генерирует графическую функцию для предыдущей таблицы истинности. Верхняя часть блок-схемы выглядит так:
Верхняя часть блок-схемы выполняется можно следующим образом:
Выполняет начальные действия
Оценивает условия и хранит результаты во временных переменных данных
Временные данные для хранения условий основаны на метках, что вы вводите для условий. Если вы не задаете метки, временные переменные данных появляются.
Нижняя половина блок-схемы выглядит так:
В нижней половине блок-схемы сохраненные значения для условий определяют, который решение верно и что действие выполнить. Каждое решение появляется как ветвление от соединительного перекрестка с одним из двух возможных путей:
Сегмент перехода с решением, сопровождаемым сегментом с последовательным действием
Действие появляется как действие условия, которое приводит к FINAL
действие и завершение блок-схемы.
Сегмент перехода, который течет к следующему ветвлению для оценки следующего решения
Этот сегмент перехода не имеет никакого условия или действия.
Эта реализация продолжается от первого решения до остающихся решений в слева направо порядке следования столбцов. Когда соответствие решения происходит, действие для того решения выполняется как действие условия его сегмента перехода. После того, как действие выполняется, блок-схема выполняет окончательное решение для таблицы истинности и завершает работу. Поэтому только одно действие следует из вызова графической функции таблицы истинности. Это поведение также означает, что никакие зависимости по данным не возможны между различными решениями.
Программное обеспечение 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;