Связь с устройством: запрос-ответ.
От: todritab  
Дата: 29.01.13 09:37
Оценка:
Есть некое устройство. Подключается к компьютеру через COM или USB.

Протокол обмена:
Компьютер посылает запрос — устройство присылает ответ. В случае ошибки, ответ может и не прийти.
При некоторых событиях устройство может послать сообщение компьютеру само, без запроса.

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

Хочется сделать более надежную реализацию. Мне это видится как-то так:
Две очереди: посланных и принятых сообщений. Функция, которая формирует из них третью очередь — пар запрос-ответ. Причем, в третьей очереди могут быть и неполные пары: запрос без ответа, и ответ без запроса.

Принципы спаривания сообщений:
1) По времени. Ответ должен прийти в течение некоторого промежутка времени после отправления запроса.
2) По смыслу. Есть функция, определяющая, может ли данное сообщение быть ответом на данный запрос.

Не хочется изобретать велосипед. Наверняка есть и теория всего этого дела, и готовые библиотечные реализации, и open-source программы. Подскажите, пожалуйста, куда копать. Ссылки, книги, ключевые слова для поиска...
Re: Связь с устройством: запрос-ответ.
От: Nikolay_Ch Россия  
Дата: 29.01.13 09:44
Оценка:
Здравствуйте, todritab, Вы писали:

T>Есть некое устройство. Подключается к компьютеру через COM или USB.


T>Протокол обмена:

T>Компьютер посылает запрос — устройство присылает ответ. В случае ошибки, ответ может и не прийти.
T>При некоторых событиях устройство может послать сообщение компьютеру само, без запроса.

T>Пока я использую самую примитивную реализацию: посылаю запрос и некоторое время жду ответа. В первом приближении это работает, но валится, если устройство само пришлет сообщение.


T>Хочется сделать более надежную реализацию. Мне это видится как-то так:

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

T>Принципы спаривания сообщений:

T>1) По времени. Ответ должен прийти в течение некоторого промежутка времени после отправления запроса.
T>2) По смыслу. Есть функция, определяющая, может ли данное сообщение быть ответом на данный запрос.

Мне кажется, что все плохо именно из-за того, что устройство может послать сообщение "внезапно" — т.е. по сути образуется второй "обратный" поток данных.
ИМХО или делать для обратных сообщений отдельный поток данных или различать как-то "прямой" и "обратный" поток данных... Ну, например префиксами какими-то.
Re: Связь с устройством: запрос-ответ.
От: Pasha1st  
Дата: 29.01.13 10:16
Оценка:
Здравствуйте, todritab, Вы писали:

T>Есть некое устройство. Подключается к компьютеру через COM или USB.


T>Протокол обмена:

T>Компьютер посылает запрос — устройство присылает ответ. В случае ошибки, ответ может и не прийти.
T>При некоторых событиях устройство может послать сообщение компьютеру само, без запроса.

А можно ли по ответу определить на что был запрос? Если да, то имеет смысл разбирать все ответы (отдельный цикл приема), а там где время ответа критично — выставлять признаки что ожидается ответ на такой-то запрос.
Re[2]: Связь с устройством: запрос-ответ.
От: todritab  
Дата: 29.01.13 15:13
Оценка:
Конечно, хорошо было бы, если б запрос содержал более-менее уникальный ID, и ответ на него содержал бы этот же ID. Но в протоколе этого нет...

По ответу нельзя однозначно определить запрос. Глядя на запрос и на ответ, можно сказать, что данный ответ {НАВЕРНЯКА МОЖЕТ}, {МОЖЕТ}, или {НИКАК НЕ МОЖЕТ} относиться к данному запросу.

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

Наверняка все эти алгоритмы давно придуманы и разжеваны. Где бы об этом почитать?
Re[3]: Связь с устройством: запрос-ответ.
От: Nikolay_Ch Россия  
Дата: 29.01.13 17:39
Оценка:
Здравствуйте, todritab, Вы писали:

T>Наверняка все эти алгоритмы давно придуманы и разжеваны. Где бы об этом почитать?

А более точно описание алгоритма работы устройства есть? Также уточните, есть возможность корректировки протокола обмена?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.