Найти тему
Робототехника

Чуть чуть о "теории автоматов".

Сложно сказать какой процент программистов с ней знаком и ещё сложнее сказать, кто её использует на практике.

Помнится, когда мы проходили это в институте и решали малопонятные задачки, казалось, что это как-то абстрактно и далеко от нас. Отчасти так оно и есть.

Итак сперва знакомство с тем что говорит об этом википедия.

Теория автоматов — раздел дискретной математики, изучающий абстрактные автоматы — вычислительные машины, представленные в виде математических моделей — и задачи, которые они могут решать.
Теория автоматов наиболее тесно связана с теорией алгоритмов: автомат преобразует дискретную информацию по шагам в дискретные моменты времени и формирует результат по шагам заданного алгоритма.

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

Тогда простейший автомат для него можно представить так:

Выходным сигналом при смене состояния будет включение или выключение света.

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

Но если предположить, что выключатель вполне интеллектуальная штука и она умеет "ждать" следующего сигнала, то модель очень даже рабочая.

Так выключатель находится в состоянии вкл и выдает управляющее воздействие на лампу, в виде коммутации цепи. Если при этом нажать на верхнюю клавишу, то выключатель останется в этом состоянии.

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

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

Например рассмотрим примитивную кофе машину. Которая может приготовить несколько сортов кофе, налить кипятка или чая.

-2

Начнем с того, что у нас тут есть входные сигналы и внутренние, А также есть состояния системы. Начнем с сигналов

1. Нажата кнопка выбор кофе

2. Нажата кнопка выбор кафе с молоком

3. Нажата кнопка выбор кофе со сливками.

4. Нажата кнопка выбор горячей воды.

5. Нажата кнопка выбора чая.

6. Подан сигнал об обслуживании прибора.

Теперь перечислим внутренние сигналы.

1. Закончилась вода.

2. Закончилось кофе.

3. Закончились сливки.

4. Закончилось молоко.

5. Закончился чай.

6. Другая не предвиденная ситуация.

Теперь переходим непосредственно к состояниям. Моделей может быть несколько, но мы чтобы не путаться будем рассматривать простейший вариант.

1. Состояние ожидания.

2. Подготавливаем горячую воду.

3. Добавляем ингредиент - кофе

4. Добавляем ингредиент - молоко

5. Добавляем ингредиент - сливки

6. Добавляем ингредиент - чай.

7. Выдача заказа и ожидание забора стаканчика.

8. Состояние ограниченной работы

9. Состояние ошибки.

10. Состояние обслуживание прибора.

Как вы уже поняли, в целом модель будет иметь примерно следующий вид.

-3

Теперь просто пройдёмся по каждому из состояний.

1. В этом случае мы ждём, когда подойдет человек и нажмет одну из 5 доступных кнопок. После выбора переходим к состоянию 2. Передаем одновременно команду по дальнейшему переходу в состояние 3 из 2 или 6 из 2.

2. В этом состоянии, мы проверяем наличие воды(хотя правильнее его будет проверять в состоянии 7 или 1) и наливаем необходимое количество. Далее переходим в выдачу горячей воды (состояние 7 ) или переходим к состояниям 3 или 6.

3. После этого насыпаем кофе в кружку и от команды переданной с первого состояния переходим в состояния 4, 5 или 7.

4,5 -добавляем необходимый ингредиент и переходим в состояние 7.

6. Добавляем чай и переходим в состояние 7.

7. Это состояние достаточно интересное, так как оно завершает цикл действия и проводит все проверки, для возврата в состояние 1. То есть необходимо провести ряд тестов, для того чтобы оценить готовность к работе. В случае если ингредиент закончился, то может быть состояние 8 или 9.

8. Это состояние идентично первому - ожидание, но в данном случае закончился один или два ингредиента - чай, молоко или чай, сливки или кофе, а может просто чай. То есть, аппарат работать может , но сам себя ограничил в возможностях и некоторые кнопки при выборе не доступны.

9. Это состояние ошибки, которая может содержать большой объем состояний Самый простые - закончилась вода, стаканчики, все ингредиенты. А может быть ошибка цикла, когда автомат не смог за заданный период сменить состояние на 7 и затем 1. Как вы понимаете, что отследить ошибку в каждом состоянии не простая задача. Но например, если за 200 секунд (а положено 45), автомат не выдал стакан с питьем система автоматом переходит в аварийный режим.

10. Это сервисный режим, который доступен инженерам и переходить мы можем в него из ожидания или из ошибки. То есть останавливать работу системы не совсем корректно. Или подав команду на сервис, ждать когда установка перейдет в состояние 7 и далее в состояние 10.

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

Теперь к выводам. Можете задать вполне резонный вопрос: для чего это всё я прочитал.

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

Большинство профессионалов при создании проектов держат в голове подобный граф.

-4

Изучая ардуино или стм, и планируя, какую-то интересную задачу. Вы можете использовать как раз графы, для того чтобы построить нормальную рабочую систему, которая будет автоматизирована, отказоустойчивой и самодиагностироваться.

Если идти по пути усложнения изначальной модели, то вы рано или поздно всё равно упрётесь в количество событий и их обработку.

Но а теперь самое главное, представьте что у Вас не 6 входных сигналов, а 50, и внутренних состояний не 10, а 5000 тысяч, соответственно и внутренних сигналов будет несколько сотен. В таком случае построить устойчивую систему с хорошей отказоусточивостью без конечно модели, просто затруднительно.

-5

Я специально не привожу тут кучу формул, так как без понимания самой задачи формулы точно не помогут, а если есть интерес, то в интернете найдете массу литературы.

---------------------------------------------------

Ставьте в закладки эту публикацию, а так же подписывайтесь в группу
🔹
Вконтакте и 🔹 Телеграм-канал.