Основы автоматного программирования
Построение управляющей программы и ее функционирование как конечного автомата, находящегося в каждый момент времени в одном из N состояний. Вычисление логических условий в каждом цикле для текущего состояния, позволяющих изменить состояние программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 09.10.2016 |
Размер файла | 1,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ОСНОВЫ АВТОМАТНОГО ПРОГРАММИРОВАНИЯ
Суть автоматного программирования состоит в том, что управляющая программа строится и функционирует как конечный автомат, который может находиться в каждый момент времени только в одном из N состояний. При этом в каждом цикле для текущего состояния (иначе, ШАГА программы) вычисляются логические условия, позволяющие изменить состояние программы.
Теоретиками автоматного программирования предложена следующая концепция идеальной программной реализации:
- вся логика программы строится на основе селектора (switch в языке Си);
- вспомогательно используется оператор условия if;
- обязательно наличие цикла, охватывающего код собственно реализации автомата.
Представим универсальный автоматный алгоритм в общем виде (рис. 1).
Рис. 1
Рамка имитирует цикловую природу реализации автомата. Вверху явно указан оператор "while(cycle)", где "cycle" - признак продолжения цикла, который перед передачей управления оператору while должен быть установлен в ненулевое значение.
Автоматная программа имеет несколько состояний Y. Обязательно наличие начального состояния Y=0.
Переходы между состояниями обозначаются стрелками и помечаются дробью: входное событие Х / выходное событие Z (действие на соответствующем переходе).
Пусть мы находимся в состоянии Y=i. Тогда при наступлении входного события Хij, за которым скрыто соответствующее логическое выражение, выполняется некоторая последовательность операторов Zij, подготавливающая функционирование автоматной программы в новом состоянии, и осуществляется переход в новое состояние (Y=j).
Разумеется, не обязательно должен быть возможен переход из любой вершины в любую. При его невозможности соответствующий Х равен нулю, и дуга отсутствует.
Входному событию взаимно однозначно соответствует переход из текущего состояния в другое. Если ни одно из вычисляемых в данном состоянии событий не наступило, то сохраняется текущее состояние, и этому соответствует логическое условие, отрицающее любое из входных событий - условий переходов в другие состояния (см. "петли" - дуги, исходящие и заходящие в одну и ту же вершину).
Отдельно, через запятую, указаны операторы вида "cycle = 0", что означает конец циклической обработки. При этом направление перехода всегда к начальной вершине, она же является и заключительной для обеспечения корректного повторного использования данной подпрограммы.
Приведем структуру программы на языке Си, реализующей представленный на рис. 1 алгоритм.
int X01, ..., ХN(N-1), Z01, ..., ZN(N-1), Y=0, cycle=1;
while(cycle)
{
switch(Y)
{
case 0:
if (X01) {Z01; Y=1;}
else
...
if (X0i) {Z0i; Y=i;}
else
...
if (X0N) {Z0N; Y=N;}
else Z00;
break;
case 1:
if (X10) {Z10; Y=0; cycle=0;}
else
...
if (X1i) {Z1i; Y=i;}
else
...
if (X1N) {Z1N; Y=N;}
else Z11;
break;
...
case i:
if (Xi0) {Zi0; Y=0; cycle=0;}
else
...
if (Xi(i-1)) {Zi(i-1); Y=i-1;}
else
if (Xi(i+1)) {Zi(i+1); Y=i+1;}
else
...
if (XiN) {ZiN; Y=N;}
else Zii;
break;
...
case N:
if (XN0) {ZN0; Y=0; cycle=0;}
else
...
if (XNi) {ZNi; Y=i;}
else
...
if (XN(N-1)) {ZN(N-1); Y=N-1;}
else ZNN;
break;
}
}
Рассмотрим пример реализации алгоритма управления и контроля трехпозиционным клапаном (Кл) с памятью с помощью трех кнопок без памяти. Наличие памяти в исполнительных механизмах объекта управления (клапана) позволяет снимать с них управляющие сигналы после того, как клапан откроется или закроется, сохраняя это положение.
Приведем словесное описание алгоритма управления клапаном [Шалыто А.А. SWITCH-технология. Алгоритмизация и программирование задач логического управления. СПб.: Наука, 1998].
1. При нажатии кнопки "Откр." (Х1) клапан начинает открываться.
2. После его открытия срабатывает сигнализатор открытого положения, зажигается лампа "Откр." (Х4) и снимается управляющий сигнал с клапана (Z2).
3. При нажатии кнопки "Закр." (X2) клапан начинает закрываться.
4. После его закрытия срабатывает сигнализатор закрытого положения, зажигается лампа "Закр." (X3) и снимается управляющий сигнал с клапана (Z1). программа состояние логический цикл
5. Если в течение трех секунд (T=3) клапан не откроется или не закроется, то управляющий сигнал с клапана снимается и зажигается лампа контроля "Неисправность" (Z3).
6. Сброс сигнала контроля осуществляется нажатием кнопки "Разблок." (Х5), после чего клапан принудительно закрывается.
7. Для фиксации события одновременного нажатия двух управляющих кнопок Х1 и Х2 включена лампа сигнализации "Ошибка" (Z4). Сброс сигнализации также осуществляется кнопкой Х5.
На рис. 2 приведена схема связей "источник информации - управляющий автомат - исполнительные механизмы", содержащая интерфейс автомата, краткие комментарии, поясняющие смысл используемых переменных и свойства органов управления, исполнительных механизмов и собственно объекта управления.
Рис. 2
По словесному описанию и приведенной схеме связей построим граф переходов автомата (рис. 3) в соответствии с концепцией, изложенной выше. Подробно методика разработки графа переходов излагается в курсе "Основы логического управления".
Рис. 3
Построенная схема связей и граф переходов автомата, входящего в эту схему, однозначно определяют техническое задание на разработку программного обеспечения.
Реализуем граф переходов с помощью программы, написанной на Си++.
# include <iostream.h>
# include <conio.h>
# include <dos.h>
void main(void)
{int X1, X2, X3, X4, X5, Z1=0, Z2=0, Z3=0, Z4=0, Y=0, cycle=1;
clrscr();
while (cycle)
{switch (Y)
{case 0:
cout<<"Закрыт \n";
cout<<"input X1X2 ";
cin>>X1>>X2;
if (X1&!X2) {Y=1;}
if (X1&X2) {Y=5; Z4=1;}
break;
case 1:
cout<<"Открывается...\n";
delay(3000);
cout<<"input X4 "; cin>>X4;
if (X4) {Y=2; Z2=1;}
else {Y=4; Z3=1;}
break;
case 2:
cout<<"Открыт \n";
cout<<"input X1X2 ";
cin>>X1>>X2;
if (!X1&X2) {Y=3;}
if (X1&X2) {Y=5; Z4=1;}
break;
case 3:
cout<<"Закрывается...\n";
delay(3000);
cout<<"input X3 "; cin>>X3;
if (X3) {Y=0; Z1=1; cycle=0;}
else {Y=4; Z3=1;}
break;
case 4:
cout<<"Неисправность! \n";
cout<<"input X5 ";cin>>X5;
if (X5) {Y=0; cycle=0;}
break;
case 5:
cout<<"Ошибка! \n";
cout<<"input X5 "; cin>>X5;
if (X5) {Y=0; cycle=0;}
break;
}
}
}
Реализованный алгоритм должен являться составной частью курсового проекта, выполняемого в рамках дисциплины "Программирование и основы алгоритмизации". Выбор объекта для реализации алгоритма управления и контроля осуществляется по согласованию с преподавателем.
Размещено на Allbest.ru
...Подобные документы
Построение праволинейной грамматики, автоматной грамматики по полученным результатам. Построение недетерминированного конечного автомата. Сведение недетерминированного конечного автомата к детерминированному. Описание программы и контрольного примера.
курсовая работа [674,9 K], добавлен 13.06.2012Построение математической модели программы, одноленточного автомата над алфавитом, допускающего различные множества слов. Алфавит терминальных символов, множество состояний и переходов. Определение начального и конечного состояний. Понятие сети Петри.
контрольная работа [294,8 K], добавлен 17.09.2013Разработка на языке программирования С++ программы анализа логических дисков. Интерфейс, диалог с пользователем. Определение текущего диска, его размера, занятого и свободного места, информации о кластерах. Организация программы с использованием меню.
курсовая работа [182,1 K], добавлен 22.10.2012Важный частный случай недетерминированного конечного автомата. Проверка нечетности числа единиц в произвольной цепочке, состоящей из нулей и единиц. Составление формальной грамматики, блок-схемы и программы, моделирующей работу конечного автомата.
курсовая работа [210,8 K], добавлен 05.12.2013Составление формальной грамматики, недетерминированный конечный автомат. Построение конечного автомата, программное моделирование работы конечного автомата. Граф детерминированного автомата, Синтаксическая диаграмма. Блок-схемы, примеры разбора строк.
курсовая работа [486,2 K], добавлен 19.11.2010Разработка управляющего автомата, ориентированного на выполнение заданной микрооперации. Разработка алгоритма работы управляющего автомата. Листинг программы. Выбор оптимального варианта кодирования состояний автомата. Синтез функции возбуждения.
курсовая работа [506,9 K], добавлен 26.12.2012Изучение методов построения конечного автомата, распознающего заданный язык, и принципы его программной реализации. Проектирование комбинационной и принципиальной схем распознающего конечного автомата с использованием библиотеки интегральных микросхем.
дипломная работа [1,8 M], добавлен 18.08.2013Создание модели с использованием шаблона, предложенного программой по умолчанию. Создание твердотельной модели. Построение траектории обработки и получение управляющей программы. Построение траектории обработки профиля. Отображение удаленного материала.
курсовая работа [1,3 M], добавлен 25.07.2012Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.
курсовая работа [823,0 K], добавлен 18.12.2011Программирование логических игр с помощью подходов СИИ. Методы работы с Windows Forms в языке С#, алгоритм поиска в пространстве состояний. Формализация дерева состояний. Описание использованных алгоритмов. Иерархическая схема и блок-схемы программы.
курсовая работа [1,7 M], добавлен 01.12.2015Устройство управления и синхронизации в структуре микропроцессора. Порядок синтеза конечного автомата (КА) для устройства управления ЭВМ. Алгоритм функционирования КА, заданный с помощью графа, функции переходов. Состояние триггеров в микросхеме.
методичка [1019,0 K], добавлен 28.04.2009Синтез автомата для преобразования двоично-десятичного кода. Кодировка алфавитов и состояний. Построение булевых функций, минимизация. Разметка вход-выходных слов для автомата Мили и автомата Мура. Реализация на элементах малой степени интеграции.
контрольная работа [141,5 K], добавлен 14.10.2012Понятие машинного и реального времени, дискретизация времени. Реализация временных задержек в программе. Вычисление значения многочлена методом Горнера. Разработка схем алгоритмов, основной программы и подпрограмм. Построение графика временной функции.
курсовая работа [40,7 K], добавлен 18.04.2012Сведение недетерминированного конечного автомата к детерминированному. Построение минимального детерминированного автомата из праволинейной грамматики двумя различными способами: с помощью сетей Петри и с помощью таблиц. Описание контрольного примера.
курсовая работа [903,9 K], добавлен 14.07.2012Составление треугольной таблицы. Нахождение списка максимальных классов совместимости, минимального замкнутого покрытия. Получение логических функций выходов автомата. Синтез конечного автомата и функциональной схемы. Принципиальная электрическая схема.
контрольная работа [215,8 K], добавлен 22.06.2012Разработка программы, реализующей построение объемной гистограммы с использованием свойств языка программирования Java. Возможность графически отобразить статистические данные урожайности как основное требование к программе. Реализация кода программы.
курсовая работа [333,5 K], добавлен 21.01.2013Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.
курсовая работа [1,2 M], добавлен 07.07.2012Принципы и понятия автоматного программирования. Виды конечных автоматов, их применение при построении лексических и синтаксических анализаторов. Описание конечных автоматов Миля и Мура, их различий в зависимости от способа формирования функций выхода.
курсовая работа [430,9 K], добавлен 26.05.2015Технология программирования задач для операторных и функциональных языков программирования, разработка алгоритма и отладка программы. Трансляция исходного текста, компоновка программы, ее выполнение с целью определения логических ошибок и тестирование.
курсовая работа [336,6 K], добавлен 24.04.2010Исследование арифметических, логических и вспомогательных операций, выполняемых микропроцессором. Построение блок-схемы инициализации резидентной программы и тела резидента. Характеристика основных особенностей написания программы на языке ассемблера.
лабораторная работа [67,8 K], добавлен 20.11.2012