HRP-N3 - серия источников питания с максимальной пиковой мощностью в 350% от MEAN WELL
РадиоЛоцман - Все об электронике

IAR visualSTATE: удобный подход к проектированию с помощью конечных автоматов. Часть 1

Журнал РАДИОЛОЦМАН, апрель 2014

Михаил Русских

Рассматривается роль программного пакета IAR visulSTATE в процессе разработки встраиваемых систем; в рамках этого пакета поясняется принцип автоматного подхода, описывается взаимосвязь элементов проекта и их иерархическая структура, приводятся типы состояний и рассматривается описание перехода между состояниями.

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Программирование на основе конечных автоматов является удобным и наглядным способом создания приложений для встраиваемых систем. Конечные автоматы позволяют добиться нужного уровня абстракции, на котором значительно упрощается понимание функционирования программы. Для облегчения создания кода с использованием автоматов компания IAR Systems предлагает программное обеспечение IAR visualSTATE [1].

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

IAR visualSTATE: удобный подход к проектированию
Рисунок 1. Модель взаимодействия системы с внешней средой.

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

Нужно отметить, что драйверы должен написать сам программист, и они представляют собой не просто описание поведения периферийного модуля, например, UART или CAN, на аппаратном уровне, но и дополнительный код приложения, способный преобразовывать как входные сигналы в воспринимаемые автоматной логикой события, так и действия этой логики в выходные сигналы. Связь пользовательского кода приложения с кодом, полученным с помощью visualSTATE, осуществляется благодаря интерфейсу visualSTATE API, как показано на Рисунке 2.

IAR visualSTATE: удобный подход к проектированию
Рисунок 2. Связь пользовательского кода с кодом visualSTATE.

Конечные автоматы и диаграммы состояний

Прежде чем приступить к более детальному рассмотрению visualSTATE, нужно понять, какую роль играют конечные автоматы в рамках этой программы. IAR visualSTATE основана на языке UML (Unified Modeling Language или унифицированный язык моделирования) [2], который предназначен для описания, визуализации и моделирования процессов проектируемой системы. Хотя UML не является языком программирования в классическом понимании, но на основе UML-моделей возможна генерация кода. UML позволяет создавать диаграммы различных типов, среди которых есть диаграммы состояний. Такие диаграммы изображают автоматы с конечным числом состояний и переходами между этими состояниями. Конечный автомат в каждый момент времени может быть только в одном состоянии. В visualSTATE можно моделировать сложные иерархические автоматные структуры. В таких структурах один конечный автомат может содержать в себе несколько других конечных автоматов. Такое возможно, например, в случае, когда состояние автомата само состоит из ряда состояний, то есть представляет собой суперсостояние. Подобный автомат с суперсостоянием показан на Рисунке 3.

IAR visualSTATE: удобный подход к проектированию
Рисунок 3. Конечный автомат с суперсостоянием.

Иерархия и взаимосвязь элементов проекта visualSTATE

В visualSTATE структура проекта имеет четкую иерархию. Высший уровень представляет сам проект (файл с расширением .vsp). Он может содержать несколько систем visualSTATE, а они, в свою очередь, объединяют в себе файлы диаграмм состояний (расширение .vsr), также их называют моделями состояний и событий. Если эти модели сгруппированы в одну систему, то они могут быть синхронизированы друг с другом с помощью так называемых условий состояния. Таким образом, поведение одних моделей может влиять на поведение других в рамках одной системы. Если, например, необходимо создать модель состояний и событий для вентилятора, которая бы реагировала на поведение модели для калорифера, то разумно было бы включить эти две модели в одну систему. Если же модели в рамках одного проекта работают независимо, то стоит для каждой модели выделить свою собственную систему.

Основной логической единицей в visualSTATE является система, и когда происходит событие, оно интерпретируется на системном базисе. И хотя система может иметь в своем составе больше одного конечного автомата, событие происходит для всех автоматов внутри данной системы. Если проект содержит в себе не одну систему, а несколько, и эти системы должны реагировать на одно и то же событие, то механизм обработки событий гарантирует, что данное событие произойдет для каждой системы проекта.

Сам проект может содержать элементы, которые могут быть общими для систем этого проекта. Такие элементы называют глобальными, и определяются они на уровне проекта. Локальные же элементы определяются на уровне главного состояния (topstate) диаграмм состояний и не могут использоваться в других системах. Если система содержит в себе только один файл диаграммы состояний, то главное состояние этой диаграммы будет являться главным состоянием данной системы. Если же система имеет два или более файла, то в рамках этой системы будет автоматически создана иерархия состояний. При этом будет выбрано одно главное состояние для системы и для каждой диаграммы состояний будет определена область.

Состояния

Состояние представляет собой условие или ситуацию, в которой находится объект в данный момент времени. Конечный автомат, описывающий поведение этого объекта, переходит из одного состояния в другое при возникновении определенного события. В visualSTATE существуют состояния различных типов, имеющие свое графическое обозначение и логический смысл. В общем случае оно изображается в виде прямоугольника с закругленными углами и может иметь три секции: секцию наименования, где указывается имя состояния, секцию внутренних действий состояния, где определяются реакции и внутренние действия состояния на события, и секцию подсостояний (если данное состояние является суперсостоянием). Первая секция обязательна, другие две создаются при необходимости. Пример состояния со всеми тремя секциями представлен на Рисунке 4.

IAR visualSTATE: удобный подход к проектированию
Рисунок 4. Состояние с тремя секциями.

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

Составное состояние (суперсостояние) представляет собой структуру, состоящую из нескольких состояний. Она может содержать в себе либо две или более параллельные области, либо взаимоисключающие состояния. В первом случае его также можно назвать параллельным состоянием (Рисунок 5а). Каждая область в нем представлена определенным конечным автоматом. Во втором случае составное состояние представляет собой обычный конечный автомат, содержащий взаимоисключающие состояния (Рисунок 5б).

IAR visualSTATE: удобный подход к проектированию
Рисунок 5. Составные состояния с двумя параллельными областями (а)
и с взаимоисключающими состояниями (б).

В visualSTATE также можно создать простое состояние. Оно имеет низший иерархический уровень и не может содержать в себе другие состояния или области.

Для учета предыстории при работе с конечными автоматами существуют так называемые исторические состояния, которые используются в контексте составного состояния. Они необходимы для запоминания некоторого подсостояния, которое было активным в момент выхода из составного состояния. Имеются два типа исторического состояния: недавнее и давнее. Недавнее историческое состояние изображается окружностью с буквой «H» и является первым подсостоянием в составном состоянии. При этом переход в данное составное состояние должен вести в недавнее историческое состояние. Также должен существовать только один переход из исторического в другое состояние. Изначально историческое состояние не хранит никакой информации, то есть при первом заходе история пуста. В данном случае оно выступает в роли начального состояния подавтомата. Затем выполняется последовательное изменение вложенных подсостояний, и если происходит выход из вложенного состояния в результате какого-то события, то недавнее историческое состояние запомнит текущее на момент выхода подсостояние. В результате недавнее историческое состояние уже будет иметь некоторую информацию, и при следующем входе в составное состояние оно переведет подавтомат в запомненное состояние. Когда автомат дойдет до конечного состояния, история недавнего исторического состояния будет очищена. Давнее историческое состояние ведет себя подобно недавнему, но с одним существенным отличием. Дело в том, что запомненное состояние также может быть составным, а недавнее историческое состояние может запомнить историю одного уровня вложенности. Давнее историческое состояние способно запомнить подсостояние любого уровня вложенности. Изображается оно в виде окружности с символами «H*».

Также в visualSTATE можно указывать начальные и конечные состояния. Начальное не содержит каких-либо внутренних действий, и в нем находится объект в начальный момент времени. Графически оно изображается в виде закрашенной окружности со стрелкой, обозначающей переход из этого состояния. Конечное состояние также не содержит внутренних действий, и в нем будет находиться объект после завершения работы автомата в конечный момент времени. Оно обозначается в виде закрашенной окружности внутри другой окружности большего диаметра с направленной в нее стрелкой.

Переходы

Переход представляет собой отношение между двумя состояниями, обозначающее, что находящийся в одном состоянии конечный автомат выполнит определенные действия и перейдет в другое при возникновении определенных событий и соблюдении необходимых условий. Состояние, из которого совершается переход, называется исходным состоянием или источником, а состояние, в которое переход будет совершен, именуется целевым состоянием. Над стрелкой, обозначающей переход из источника в целевое состояние, также изображается описание перехода, в котором указываются события и действия. На Рисунке 6 представлен пример перехода с полным описанием, а на Рисунке 7 приводится пояснение этого описания.

IAR visualSTATE: удобный подход к проектированию
Рисунок 6. Пример перехода из одного состояния в другое.

Как видно из Рисунка 7, описание перехода разделено символом «/» на две части: условие и действие. В условной части указывается, какие условия должны быть соблюдены для того, чтобы были выполнены действия, обозначенные во второй части описания. Условная часть, в свою очередь, подразделяется на триггер и сторожевое условие. Триггеры делятся на явные и неявные. Явный триггер может представлять собой событие, группу событий или сигнал. Неявный триггер может являться некоторым действием, например, действием входа, выхода или выполняющейся активности. После триггера могут следовать круглые скобки, в которых задаются параметры этого триггера.

IAR visualSTATE: удобный подход к проектированию
Рисунок 7. Пример полного описания перехода.

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

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

Таким образом, описание перехода, представленного на Рисунке 7, имеет следующий смысл: если автомат находится в состоянии State_1, произошло событие E1(), переменная x равна 0, система находится в состоянии A, система не находится в состоянии B, то приравнять переменной x значение, возвращаемое функцией A1(), выполнить функцию A2(), перевести систему в состояние D, добавить сигнал S1 в очередь сигналов, перейти в состояние State_2.

В следующей части будут описаны такие важные при проектировании систем на основе конечных автоматов компоненты, как реакции состояния, и рассмотрены модули программного пакета IAR visualSTATE.

Ссылки

  1. supp.iar.com/Download
  2. uml.org

Окончание

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя