StateFlow   ОКМ   ДМ   экономическая информатика   визуальные среды - 4GL   Теория и практика обработки информации

Cистема численно-математического моделирования MatLab

Stateflow - Simulink

Временная логика, использующая функцию before (до того, как)

Синтаксис оператора before: before(n, E).

Здесь E - базовое событие для оператора, а n либо целое положительное число, либо выражение, принимающее неотрицательное целое значение. Оператор before принимает значение "истина", если событие E произошло менее чем n раз после того, как связанное состояние стало активно. В противном случае значение оператор before - "ложь". В диаграммах без входных событий выражение before(n,wakeup) или before(n,tick) истинно, пока диаграмма не будет активизирована n раз. Оператор before устанавливает счетчик событий E в 0 каждый раз, когда связанное состояние становится активным.

Вот как оператор before можно использовать в описании переходов:

ROTATION[before(10, CLK)].

Это выражение разрешает переход из некоторого состояния только при возникновении события ROTATION (ВРАЩЕНИЕ), но не позже, чем через 10 циклов CLK после активизации этого состояния.

Следующий пример иллюстрирует использование события before в действии during состояния:

Heater_on

on before(MAX_ON_TIME, CLK): temp++;

Эта команда заставляет состояние Heater_on увеличивать на единицу переменную temp однажды за время цикла CLK, пока предел MAX_ON_TIME не достигнут.

Демонстрационный пример функции BEFORE.

Simulink-модель этого примера представлена на рис. 8.

Рис. 8

Этот пример иллюстрирует использование функции BEFORE для трех различных состояний с тремя различными ограничениями. Stateflow-диаграмма представлена на рис. 9. Для нее событием является переход через ноль в положительном направлении сигнала генератора Pulse Generator, что происходит с периодичностью 1 с-1.

Рис. 9

В суперсостоянии One (Один) должны быть выполнены два условия для перехода из подсостояния A_state: signal_one должен быть меньше пяти прежде, чем произойдет 10 событий. Начиная с момента, когда оба эти условия выполнены, каждое событие выходной сигнал устанавливается в 1 (но лишь после того, как все три параллельных состояния инициализированы первым по счету событием!).

В суперсостоянии Two (Два) два различных условия должны быть выполнены для перехода из B_state: signal_two должен быть меньше, чем 10 прежде, чем произойдет 20 событий. Эти условия будут выполнены позже, когда signal_two станет большим, чем 10.

Наконец, в суперсостоянии Three (Три), следующие два условия должны быть выполнены для перехода из C_state: signal_three должен быть больше 11 прежде, чем произойдет 10 событий. Так как эти условия никогда не выполнятся одновременно, output3 никогда не устанавливается в 1 и остается нулевым все время моделирования.

На рис. 10 показаны временные зависимости сигналов signal_one, signal_two и signal_three.

Рис. 10

Временная логика, использующая функцию at (во время того, как).

Синтаксис оператора at: at (n, E).

Здесь E - базовое событие для оператора, а n либо целое положительное число, либо выражение, принимающее неотрицательное целое значение. Оператор at принимает значение "истина", когда событие E произошло ровно n раз после того, как связанное состояние стало активно. В противном случае значение оператор at - "ложь". В диаграммах без входных событий выражение at (n,wakeup) или at (n,tick) истинно, когда диаграмма активизирована n-ный раз. Оператор at устанавливает счетчик событий E в 0 каждый раз, когда связанное состояние становится активным.

Вот как оператор before можно использовать в описании переходов:

ROTATION[at(10, CLK)].

Это выражение разрешает переход из некоторого состояния только если событие ROTATION (ВРАЩЕНИЕ) произошло ровно через 10 циклов CLK после активизации этого состояния.

Следующий пример иллюстрирует использование события at в действии during состояния:

Heater_on

on at(10, CLK): status('heater on');

Эта команда заставит состояние Heater_on выдать сообщение о своем статусе через 10 циклов CLK после активизации этого состояния.

Демонстрационный пример функции AT.

Simulink-модель этого примера представлена на рис. 11.

Рис. 11

Этим примером иллюстрируется преимущество использования функции AT. В диаграмме "Temporal Logic" функция AT используется трижды (см. рис. 12).

Рис. 12

После присвоения переменной a значения 5 мы используем функцию at, чтобы изменить в диаграмме выходной сигнал output. При каждом 5-ом событии выходной сигнал устанавливается равным 1; при каждом 10-ом событии выходной сигнал устанавливается равным 0; и наконец, 30-е ('6*a') событие заставляет выходной сигнал равняться -1. В диаграмме "Without Temporal Logic" необходимо использовать намного больше состояний и переходов, чтобы создать ту же самую модель (рис. 13).

Рис. 13

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

На рисунке 14 показаны временные зависимости выходного сигнала output.

Рис. 14

Временная логика, использующая функцию every (каждый).

Синтаксис оператора every: every(n, E).

Здесь E - базовое событие для оператора, а n либо целое положительное число, либо выражение, принимающее неотрицательное целое значение. Оператор every принимает значение "истина" в каждое n-ное событие E после того, как связанное состояние стало активно. В противном случае значение оператор at - "ложь". В диаграммах без входных событий выражение every (n,wakeup) или every (n,tick) истинно, когда диаграмма активизирована в k-ый раз, где k кратно n. Оператор every устанавливает счетчик событий E в 0 каждый раз, когда связанное состояние становится активным.

Следующий пример иллюстрирует использование события every в состоянии:

Heater_on

on every(10, CLK): status('heater on');

Эта команда заставляет состояние Heater_on выдаватьвать сообщение о своем статусе через каждые 10 циклов CLK после активизации этого состояния.

Демонстрационный пример функции EVERY.

Этот демонстрационный пример (рис. 15) иллюстрирует преимущество использования функции EVERY.

Рис. 15

Пусть необходимо вызвать графическую функцию, когда происходят некоторые события. В диаграмме "Temporal Logic" (рис. 16) мы определяем, что каждые пять секунд (или пять событий) мы добавляем единицу к локальной переменной 'count'.

Рис. 16

Кроме того каждые 10 секунд, вызывается графическая функция double_counter, которая удваивает свой входной аргумент и присваивает это значение переменной 'count'. Лишь одно состояние и одна графическая функция необходима, если эта задача решается с использованием временной логики. В диаграмме "Without Temporal Logic" мы воссоздаем то же самое поведение, что и в диаграмме "Temporal Logic". Чтобы осуществить это, необходимо использовать 4 состояния и одну графическую функцию (рис. 17). Временные зависимости сигналов на выходах диаграмм идентичны (рис. 18). Однако диаграмма "Without Temporal Logic" выглядит намного сложнее. При этом гораздо труднее следить за переходами и событиями, которые имеют место в модели. Таким образом, задача усложняется в том случае, когда делается попытка реализовать требуемое поведение без использования временных логических функций.

Рис. 17

Рис. 18

StateFlow   ОКМ   ДМ   экономическая информатика   визуальные среды - 4GL   Теория и практика обработки информации

Знаете ли Вы, что знаковое моделирование - это процесс построения модели с использованием специальных знаков, символов на основе общих физических закономерностей.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution