Uploaded by Hải Nguyễn Quang

Инструкция Конечный автомат

advertisement
Машина состояний — это способ описания логики работы устройства или
приложения.
Концепция машины состояний подразумевает, что устройство может
находится в различных состояниях и переходить от одного состояния к
другому, как только случается какое-то событие.
Машина состояний может иметь неограниченное число состояний и
ограниченное число состояний. Машину с ограниченным числом состояний
называют конечным автоматом. Примером могут служить, например, автомат
Мили или автомат Мура.
Конечный автомат (КА) описывается набором состояний и функцией
перехода из одного состояния в другое. Автомат Мили выполняет действие
при каждом переходе. Автомат Мура выполняет определенное действие в
каждом состоянии.
Конечный автомат часто используется при проектировании в LabVIEW
для реализации любого алгоритма, который явно описывается диаграммой
состояний или блок-схемой.
Конечные автоматы используются в тех приложениях, где существуют
четко различимые состояния. Из каждого состояния можно перейти в одно или
несколько других состояний, или завершить процесс. Переход в следующее
состояние происходит в результате действий пользователя или вычислений в
рамках текущего состояния.
Для многих приложений первым должно быть состояние инициализации.
Состояние завершения работы обычно используется для освобождения
ресурсов и выключения приложения.
Примером использования конечного автомата может служить создание
пользовательских интерфейсов. Различные действия пользователя приводят к
переходу в те или иные секции обработки. Каждая секция обработки
эквивалентна состоянию КА. Каждая секция может передавать управление
другой секции или ожидать дальнейших действий пользователя. Такой КА
постоянно следит за пользователем, реагируя на его действия.
Другим примером применения КА является тестирование процессов.
Здесь состоянием является каждый сегмент процесса. В зависимости от
результата теста текущего состояния может быть выполнен переход в другое
состояние. Это может происходить многократно, позволяя выполнять
углубленный анализ тестируемого процесса.
Рассмотрим построение простейшего КА, который позволяет реализовать
алгоритм, описываемый автоматом Мура.
Создать ВП. Присвоить ему имя и сохранить. Перейти на Block Diagram:
– создать структуру While Loop, внутри которой расположить структуру
Case;
– на границе структуры While Loop создать сдвиговый регистр;
– вне структуры While Loop создать элемент Programming -> Numeric ->
Enum Constant. В свойствах элемента в Edit Items добавить значения, как
указано на рис.1:
Рисунок 1
После заполнения элемент будет содержать следующий список (рис. 2):
Рисунок 2
– Подвести указатель мыши к Enum Constant, вызвать контекстное меню
и выбрать пункт (рис.3):
Рисунок 3
– На элементе Enum Constant появится черный треугольник сверху слева
(рис.4):
Рисунок 4
Это означает, что для Enum Constant создан определитель типа – type
definition (далее тайпдеф). Тайпдеф - это файл LabVIEW с расширением
*.ctl, сконфигурированный как шаблон и позволяющий автоматически
обновлять созданные копии элемента при внесении изменений в шаблон.
Пояснения см. в примечании «Зачем нужен тайпдеф».
Чтобы добавить пункт в созданный Enum Constant (рис.4), нужно вызвать
контекстное меню и выбрать пункт (рис.5):
Рисунок 5
Откроется Front Panel ВП (файл «Control 1.ctl») (рис.6):
Рисунок 6
Чтобы добавить пункт к списку, нужно вызвать свойства элемента Enum
и добавить пункт обычным способом (рис.7):
Рисунок 7
После добавления сохранить ВП «Control 1.ctl» в папку с основным ВП.
В результате в Enum Constant будет доступен следующий список (рис.8):
Рисунок 8
– После подключения сдвигового регистра к селекторному терминалу в
структуре Case автоматически появятся два варианта (рис. 9):
Рисунок 9
Добавить варианты можно обычным способом (рис.10):
Рисунок 10
Варианты появятся автоматически с нужными названиями, всего должны
быть созданы 5 вариантов (рис.11):
Рисунок 11
В простейшем случае в каждом варианте можно расположить копию
созданного Enum Constant со значением следующего варианта по списку.
Тогда на следующей итерации цикла будет выполняться очередной вариант
структуры Case (рис. 12):
Рисунок 12
Пример реализации последнего варианта «Конец» показан на рис. 13. При
переходе в этот вариант будет вызвано диалоговое окно (как подтверждение
того, что выполнились все предыдущие варианты), While Loop остановится и
ВП прекратит работу.
Рисунок 13
Примечание «Зачем нужен тайпдеф?».
Если не создавать тайпдеф для элемента Enum Constant, то при попытке
добавить пункт в исходный список (рис. 14,а), пункт добавиться только в этот
элемент Enum Constant (рис. 14, б). Во всех остальных копиях новый пункт
автоматически не появится (рис. 14,в), его нужно будет вручную добавлять в
каждую копию.
Рисунок 14,а
Рисунок 14,б
Рисунок 14,в
Download