Банальный вопрос. Прекращение последовательных действий.

kostya2107
Offline
Зарегистрирован: 09.09.2015

Делаю скетч для работы гидравлического пресса. И возникла проблема одна. По нажатию кнопки на пульте управления запускается автоматический цикл работы пресса и есть кнопка которая абсолютно на любом этапе автоматического цикла должна прирывать работу автомата. 

Вопрос: как лучше всего реализовать проверку состояния кнопки отмены и экстренного завершения работы автоматического цикла (пропуск дальнейших этапов и выполнение другой операции) без проверки If-ом в каждой второй строке? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kostya2107, тут была тема про автоматное программирование - это естественный способ программирования управляющих систем. Я даже давал ссылку на замечательную книжку по этому вопросу - http://www.twirpx.com/file/366454/

Если хотите, я могу проиллюстрировать подход метакодом.

Допустим задача стоит такая:

0. Ничего не делаем по не нажали кнопку "Start"
1. делаем действие_1
2. ждём интервал_1
3. делаем действие_2 и в зависимости от услловий в нём
либо
4. Делаем действие_3
либо
6. Делаем действие_4
7. ждём интервал_2
8. передим к п. 1

При этом в любой момент может быть нажата кнопка "Stop" - тогда немедленно переходим к п.0

Окей?

Могу написать пример кода как такое решается в технике таблиц решеий, если Вам интересно. Никаких IF'ов через строчку.

kostya2107
Offline
Зарегистрирован: 09.09.2015

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

Coolerr
Offline
Зарегистрирован: 30.06.2014

Внешнее прерывание.

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

Делаете свою функцию задержки, в которой опрашиваете кнопку стоп. Эту функцию задержки используете в программе.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Настраиваете параметры работы пресса в сетапе и запускаете луп. Останавливаете пресс и переходите в установки, или повторный запуск ресетом. Параметры храните в еепроме.

bwn
Offline
Зарегистрирован: 25.08.2014

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

GraninDm
Offline
Зарегистрирован: 01.08.2013

Любой станок можно представить в качестве конечного автомата.

Вот тут у меня статья есть в качестве примера http://robocraft.ru/blog/3128.html

Основной цикл обработки состояний и переходов выполняется несколько сот раз в секунду, так что проверку можно выполнять один раз в цикле. И если в цикле есть delay(), то избавляться от них.

Попробуйте конечный автомат.

И bwn #6 правильно говорит. Другое дело, что после механического прерывания работы программа может перейти в некий аварийный режим, для ожидания реакции оператором.