Построение управляющей программы - вопрос об алгоритме

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Построение управляющей программы - вопрос об алгоритме

Сообщение Alkul »

Приветствую всех.
Что-то у меня иссякла мысль. Быть может, кто-то подскажет свежую идею.

Вводная такова – делается управляющее устройство ("master"), к которому по RS-485 подключены устройства ("slave"), выполняющие измерения некоторых величин и по запросам master'а с определенной периодичностью передающие ему данные. Master должен обрабатывать эти данные и выдавать управляющее воздействие на исполнительный механизм. При этом сам master может быть подключен к компьютеру (по отношению к которому будет являться slave'ом) и по запросам компьютера транслировать ему некоторую часть данных, получаемых от измерительных устройств. Задача должна решаться на контроллере AVR (ATmega1284).

Понятно, что реализовывать все действия в обработчиках прерываний в данном случае неверно, поэтому нужно строить автомат состояний.
Но как именно реализовать автомат?
Да, нужно выделить битовое поле, каждый бит в котором определяет выполнение того или иного действия и циклически опрашивать состояния этих бит. Но это хорошо работает для обслуживания так называемых "входящих" событий, как-то: окончание счетного интервала (таймер), прием пакета данных (прерывание по приему байта) и т.д.
Но ведь управляющее устройство должно и само формировать команды! То есть, кроме собственно битового поля состояний где-то должна храниться и очередь команд, задающая последовательность действий, причем если предусмотрено несколько режимов, то для каждого режима нужна своя очередь команд. Очередь команд – это своего рода "перфокарта", в которой описана последовательность команд. Например, для периодического опроса двух измерителей очередь команд может выглядеть так:
1. Послать запрос измерителю 0.
2. Послать запрос измерителю 1.
3. Обработать полученные данные
4. Выдать управляющее воздействие
5. Ожидать окончания счетного интервала, после чего вернуться к шагу 1.

Но ведь не все так просто! Допустим, на первом шаге я сформировал командный пакет, инициировал отправку его первого байта, после чего остальная часть пакета отправляется "автоматически" в обработчике прерывания по завершению передачи байта. Это понятно, но ведь для получения ответа требуется определенное время! При этом нельзя ждать ответа измерителя бесконечно, поэтому я, циклически опрашивая битовое поле состояний в ожидании установки бита "Получен ответ от измерителя 0", через какое-то время должен сказать – все, баста! Ответа от измерителя 0 нет, поэтому нужно выдать ошибку и перейти к команде 2. То есть, в очереди команд должно храниться еще и время выполнения каждой команды.

Одновременно с этим не получится полностью "зациклиться" на выполнении команд 1…5, потому что в любое время может прийти запрос от компьютера предоставить ему данные за предыдущий счетный интервал, поэтому нужно будет прервать выполнение команд из очереди, ответить на запрос, а потом вернуться к выполнению текущей команды.

Вот, собственно, и все "мысли вслух". Конечно, очень полезно иной раз "выговориться", ибо лично у меня частнеько бывает, что решение трудной задачи приходит в процессе рассказа другому человеку о том, что именно не получается при решении проблемы. Может быть, кто-то подскажет способ или идею. Может, я что-то упускаю :)

Меня не интересует программная реализация, только алгоритм или хотя-бы "пинок" в нужную сторону.
Реклама
Аватара пользователя
Zud
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн авг 19, 2013 03:23:00
Откуда: замкадье

Re: Построение управляющей программы - вопрос об алгоритме

Сообщение Zud »

Alkul писал(а):Меня не интересует программная реализация, только алгоритм или хотя-бы "пинок" в нужную сторону.
Привет. Ну обычно всё очень просто. Берётся лист бумаги и рисуется ... временная диаграмма работы программы. Циклограмма... возможно с вложенными циклограммками подпроцессов.

Запрос от компьютера наверное можно проверять через каждую циклограмму работы с измерителем. Дело ведь пустяковое - просто проверить буфер DMA... (или его нету в AVR?). хотя можно и в прерывании. Всё зависит от конкретных требований к устройству и соотношения этих требований с параметрами работы измерителей.
:))
Изображение
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Построение управляющей программы - вопрос об алгоритме

Сообщение uk8amk »

Если камень 1284 выбран осознанно, то рекомендую обратить внимание на RTOS:
http://easyelectronics.ru/avr-uchebnyj- ... adach.html

Super Simple Tasker:
http://www.embedded.com/design/prototyp ... ple-Tasker

Было еще подобие ОС на основе продолжений, но сейчас правильный линк не попадается.
Ответить

Вернуться в «Разные вопросы по МК»