Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 993

/ вопрос закрыт /

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

Sanich Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Sanich (статус: Посетитель)
Вопрос отправлен: 11 марта 2012, 21:21
Состояние вопроса: закрыт, ответов: 1.

Ответ #1. Отвечает эксперт: Толяныч

Здравствуйте, Sanich!
SOA:

Цитата:

Если вы имеете ввиду асинхронное взаимодействие с МК, то вам нужно организовать програмно в цикле опрос датчиков.
А команды контроллеру посылать используя ножки прерываний МК.


Не в обиду будь сказано, но это "ответ ни о чем". О том, что опрос нужно организовывать в цикле, это ясно и ежу, и автор вопроса в этом не сомневается. А "ножки прерываний" -- это уже интересно. Наверно, имеются в виду порты ввода, которым могут назначаться в управляющем регистре разрешения прерываний. Так если идет обмен по интерфейсу, то прерывания будут и так -- не по абстрактным "ножкам", а по поступлению байта в порт UART (или SPI или TWI) с соответствующей их обработкой.
Автор темы задал очень абстрактный вопрос, и содержательный ответ ожидать напрасно. Все определяется в большой степени самими датчиками : что им за команды нужны, как часто, какова допустимая задержка и т.п. А когда ясно "что", то появлится ясность и "как". На этом же этапе становится ясна и роль контроллера ( это готовое изделие или самостоятельного изготовления на микроконтроллере? ) -- или он просто передающее звено от компа к датчикам, или же его можно наделить определенным интеллектом : по определенному алгоритму опрашивает датчики, шлет им команды и по мере необходимости связывается с управляющим компом и высылает ему отфильтрованную и упакованную информацию, меняет управляющий алгоритм и т.п.
Задача достаточно интересная, если сфрмулирована не как "принеи то не знаю что". Такие темы любят обсуждать в radiokot.ru ( несмотря на несерьезное название, разговор там идет вполне профессиональный )

Ответ отправил: Толяныч (статус: 4-ый класс)
Время отправки: 13 марта 2012, 11:28


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 12 марта 2012, 18:57; участников в обсуждении: 4.
bugmenot

bugmenot (статус: 3-ий класс), 11 марта 2012, 21:38 [#1]:

А вопрос-то где?
виконання програми розпочинається з того самого мiсця, де призупинилося.

Sanich

Sanich (статус: Посетитель), 11 марта 2012, 22:45 [#2]:

Каким образом лучше это организовать через компоненту или через API? Как опрашивать поочередно каждый датчик т.е "опрос 1-го датчика ответ,опрос 2-го ответ ... и т.д."?И как посылать команды управления в промежутке между командами опроса?
Вадим К

Вадим К (статус: Академик), 12 марта 2012, 12:17 [#3]:

а чем принципиально команды управления принципиально отличаются от команд опроса?
ответ - ничем!
Как я делал. Есть себе тред (по треду на устройство. Но если устройств будет больше 10, нужно думать о другой методике, хотя это дело такое), он делает так - в цикле посылает команду опроса и ждет ответ. Потом проверяет, нет ли в очереди команд команды для него. Если есть - отправляет. Потом засыпает на какое то время, которое нужно выдерживать между отправками команд опросов. Если в этот момент нужно снова отправить команду, то основной код помещает ее в очередь и "будит" рабочий тред. Тот проснувшись и понимая, что таймаут посылки команды опроса не прошел, обрабатывает команду и снова засыпает, пересчитав время сна.

Параллельно рекомендуется почитать о "модели поставщик-потребитель" (http://en.wikipedia.org/wiki/Producer-consumer_problem - ссылка на английскую вики, потому что там есть примеры кода).
Галочка "подтверждения прочтения" - вселенское зло.
SOA

SOA (статус: Посетитель), 12 марта 2012, 13:50 [#4]:

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

Sanich (статус: Посетитель), 12 марта 2012, 18:57 [#5]:

Правильно ли я делаю опрос в потоке?
procedure TNewThread.Execute;
begin
inherited;
//while true do
Repeat
for i:=1 to 2 do
begin
sleep(300);
ks(i); //Вот сдесь происходит посылка команды опроса датчика с индексом i
end
until stopOp=true;;
{ничего не делаем};
end;

procedure TMainForm.BComPort1TxEmpty(Sender: TObject);
begin
BComPort1.Read(ReadData, 23);
Print;
end;

end.

11 мая 2012, 16:23: Вопрос закрыт (решение принял DNK): Автор потерял интерес к вопросу

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.02 сек.