Банальный вопрос. Прекращение последовательных действий.
- Войдите на сайт для отправки комментариев
Втр, 15/09/2015 - 20:33
Делаю скетч для работы гидравлического пресса. И возникла проблема одна. По нажатию кнопки на пульте управления запускается автоматический цикл работы пресса и есть кнопка которая абсолютно на любом этапе автоматического цикла должна прирывать работу автомата.
Вопрос: как лучше всего реализовать проверку состояния кнопки отмены и экстренного завершения работы автоматического цикла (пропуск дальнейших этапов и выполнение другой операции) без проверки If-ом в каждой второй строке?
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'ов через строчку.
Вообщем, например, у меня есть последовательные действия 1,2,3,4,5,6 потом программа продолжается. Мне нужно, чтобы в любой момент(хоть внутри действий 3 или 2, например, хоть после этих действй) можно было прервать эту последовательность, выполнить действие 7 и продолжить программу.
Внешнее прерывание.
Делаете свою функцию задержки, в которой опрашиваете кнопку стоп. Эту функцию задержки используете в программе.
Настраиваете параметры работы пресса в сетапе и запускаете луп. Останавливаете пресс и переходите в установки, или повторный запуск ресетом. Параметры храните в еепроме.
Обычно подобные кнопки на подобных устройствах обеспечивают безопасность и никак не должны быть завязаны на МК. Только механическое прерывание и останов силовых нагрузок. Далее, по команде оператора. ИМХО.
Любой станок можно представить в качестве конечного автомата.
Вот тут у меня статья есть в качестве примера http://robocraft.ru/blog/3128.html
Основной цикл обработки состояний и переходов выполняется несколько сот раз в секунду, так что проверку можно выполнять один раз в цикле. И если в цикле есть delay(), то избавляться от них.
Попробуйте конечный автомат.
И bwn #6 правильно говорит. Другое дело, что после механического прерывания работы программа может перейти в некий аварийный режим, для ожидания реакции оператором.