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