Странный приём по UDP

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Странный приём по UDP

Сообщение ladik »

Всем здрасте! Стоит задача синхронизации времени на cRIO c GPS или локальным временем сервера. В приоритете GPS. Реализую задачу с помощью конечного автомата. Время с GPS приёмника получаем по COM-порту. Пока эта часть не закончена. Чтобы была точная синхронизация нужно принимать "свежее сообщение" после PPS импульса. В случае отсутствия GPS, синхронизация идёт по UDP. Читается время из порта, которое сервер туда отправляет. На картинке можно увидеть 2 разные реализации. Разница в том, что во 2м случае порт открывается единожды, а в 1м на каждой итерации. Так вот, когда порт открыт 1 раз, первая синхронизация проходит нормально, а последующие странно. С UDP приходят неактуальные "старые" данные о времени. Если внести открытие порта в цикл, то всё работает отлично. В принципе, задача вроде как решена, но мне не даёт покоя непонимание почему именно так всё работает? Может у UDP порта есть приёмный буфер? Тогда всё более менее ясно. При закрытии он очищается, и мы видим последнее принятое сообщение.
Вложения
Блок-диаграмма разных реализаций
Блок-диаграмма разных реализаций
UDP Multicast Sender.vi
(12.13 КБ) 131 скачивание
TimeSync_2.vi
(30.85 КБ) 119 скачиваний
TimeSync_1.vi
(31.39 КБ) 140 скачиваний
Дорогу осилит идущий.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Странный приём по UDP

Сообщение Borjomy_1 »

По поводу самого UDP не скажу, а вот по диаграмме есть замечание: у вас слева внизу сброс индикаторов. Вы в курсе, что в таком виде сброс происходит когда угодно, а не перед выполнением цикла? Для нормальной последовательности надо хотя-бы выходы ошибок с них завести на цикл. Их можно никуда не подключать больше, просто подцепить к левой части рамки цикла.
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Странный приём по UDP

Сообщение ladik »

Borjomy_1, Спасибо за замечание! Да, я в курсе! Для отладки сделал просто, чтоб сбрасывало "где-то на старте". По хорошему их в разрыв кластера ошибок при инициализации надо бы. Честно скажу пока этому не уделял внимания, ровно как и обработке ошибок.
Дорогу осилит идущий.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Странный приём по UDP

Сообщение Borjomy_1 »

Попробуйте явно выставить размер пакета.
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Странный приём по UDP

Сообщение ladik »

Borjomy_1, если я правильно понял, что Вы имеете в виду, то в функции UDP Read нужно указать значение поля max size. Это я пробовал, не помогло, к сожалению.
Дорогу осилит идущий.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Странный приём по UDP

Сообщение Kosist »

ladik, Вы отсылаете данные каждые 50 мс, а при считывании выплывает задержка в 250 мс (после синхронизации времени, в Вашей программе есть переход на стейт blank). А в UDP есть буфер, в который за это время задержки пишутся данные. И при следующем чтении программа получает не актуальную информацию, а время из буфера.
Нужно, значит, как-то очищать/уменьшать буфер.
Мы делили апельсин - много наших полегло...
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Странный приём по UDP

Сообщение Borjomy_1 »

Либо посылать реже. Зачем 50мс? Настолько неточные внутренние часы? Да сетевые задержки на порядки больше.
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Странный приём по UDP

Сообщение ladik »

Kosist, примерно это я и предполагал. Остановился на втором решении, с постоянным открытием/закрытием порта на приёмном устройстве. Работает нормально. Пока так и оставлю.

Borjomy_1, данные шлются в порт постоянно. Чем точнее синхронизация, тем лучше для системы в целом. А по поводу задержек на порядок. Действительно задержки на передачу будут в пол секунды? Я почему-то считал, что поменьше.
Дорогу осилит идущий.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2211
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 27 раз

Re: Странный приём по UDP

Сообщение Borjomy_1 »

Предположим, у вас часы расходятся за 50мс на 1 мкс. Возможно? Почему-бы и нет, это соответствует ~2 секундам в сутки.
Вопрос первый: таймстамп с каким реальным дискретом?
Вопрос второй: вы оценивали транспортные задержки между получением таймстампа и приемом контроллером, и их волатильность? Они наверняка будут значительно больше этой самой 1мкс.
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Странный приём по UDP

Сообщение ladik »

И тут я завис :crazy: В реальной жизни синхронизация будет проходить раз в несколько часов/раз в сутки. Дело ещё и в том, что на всех контроллерах время должно быть как можно более одинаковым. Вплоть да сотен миллисекунд.
Дорогу осилит идущий.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Странный приём по UDP

Сообщение Kosist »

ladik писал(а):И тут я завис :crazy: В реальной жизни синхронизация будет проходить раз в несколько часов/раз в сутки. Дело ещё и в том, что на всех контроллерах время должно быть как можно более одинаковым. Вплоть да сотен миллисекунд.
Так тогда проблем вообще нет. Отсылайте время для синхронизации раз в час/сутки, и все - скажем, несколько значений с некоторым интервалом на случай, если данные потеряются. Можно тогда feedback прикрутить от виайки-приемника, и когда будет отослано подверждения приема и синхронизации, перестать слать можно время для синхронизации.
Данные не потеряете, и будете уверены в синхронизации.
Мы делили апельсин - много наших полегло...
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Странный приём по UDP

Сообщение ladik »

Kosist, спасибо за совет! :drink: Буду думать как лучше реализовать.
Дорогу осилит идущий.
Ответить

Вернуться в «Коммуникация с приборами»