Re[10]: udp без задержек
От: leonneon  
Дата: 20.12.13 07:56
Оценка:
Здравствуйте, ononim, Вы писали:

L>>>>>>Отвечу поподробней. В общем контроллер устройств управляет фазовращателями(не особо важно в этом контексте). В нем имеется 2 генератора состояний: 1, 0, -1, 0 и 0, 1, 0, -1, которые изменяются циклически.

S>>>>> В такой постановке задача нереальная, а уж тем более под гражданской ОС, типа Windows. Контроллеры должны ставить отметки времени в своих пакетах, тем или иным образом, тогда можно будет попытаться их как-то синхронизировать.
L>>>>При принятии сообщения возникла проблема, пакеты идут неупорядоченно, так есть какая-нибудь возможность получать пакет по порядку, не дожидаясь других пакетов, т.е. сразу. Как отправил контроллер устройств сообщение, так у себя в программе получить сразу же этот пакет?
O>>>Интересно, те кто изначально проектировал вашу систему чем вообще руководствовались? Явно не спецификациями тех средств, которые они использовать решили.
O>>>ЗЫ UDP не гарантирует ни порядок, ни сам факт доставки пакетов
O>>>ЗЗЫ по хорошему вам нужна своя реализация UDP и всего что под ним. + про реалтайм уже много чего написано.
L>>Проектировал не я, мне просто дали задание это сделать. Своя реализация это грубо говоря каждое сообщение помечать при отправке и при приеме проверять, чтобы в общем потом совпадал порядок следования сообщений?
O>Ну это не своя реализация, а как правильно юзать UDP. + контроль того что все дошло, если надо что все дошло
O>А под своей реализацией я подразумевал свой стек tcp(udp)/ip дабы гарантировать что все что пришло физически по кабелю пришло в лучшем виде к вам в апликуху. Потому как разработчики _стандартных_ стеков вольны делать с UDP пакетами все что угодно. И делают. Скажем не успела апликуха вовремя чтото вычитать — ну и фиг с ним. Или сделать некий кольцевой буфер и складывать в него пакеты, а вычитывать разумеется тоже в любом порядке могут. Причем так могут делать еще и производители драйверов сетевых карт с эзернет фреймами. То есть если в вашей задаче требуется передавать UDP пакеты с фиксированными задержками, гарантированной передачей и порядком — вам по сути не UDP нужно, а совсем другой протокол, который лишь использует формат пакетов UDP
O>Ну или научите свой софт мириться с ограничениями стандартного UDP — путем введения порядковых номеров пакетов.

А если использовать другой вид передачи, например rs422. У него скорость передачи и чтения может обеспечить 1 мс? Или can? Просто с udp пока, что пришел в тупик.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.