Пропуск данных при приеме через UART средствами VISA

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Artem.spb

Activity Автор
professor
professor
Сообщения: 3575
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 57 раз
Поблагодарили: 193 раза
Контактная информация:

Re: Пропуск данных при приеме через UART средствами VISA

Сообщение Artem.spb »

Borjomy_1 писал(а): 05 июл 2024, 01:00 Когда прилетает сплошным потоком, абсолютно неважно сколько вычитывать за раз.
Если запросить 100, а выдаст только 10, ещё и ошибку выдаст. Не люблю я это :)
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1421
Зарегистрирован: 03 фев 2010, 00:42
Награды: 8
Версия LabVIEW: 6.1 - 2025
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 78 раз
Контактная информация:

Re: Пропуск данных при приеме через UART средствами VISA

Сообщение AndreyDmitriev »

Artem.spb писал(а): 05 июл 2024, 01:03
Borjomy_1 писал(а): 05 июл 2024, 01:00 Когда прилетает сплошным потоком, абсолютно неважно сколько вычитывать за раз.
Если запросить 100, а выдаст только 10, ещё и ошибку выдаст. Не люблю я это :)
Это, кстати, именно то, что рекомендовали на форуме NI — запрашивать гарантированно больше данных, чем прилетает в сообщении (скажем 4096), но мне такой путь тоже не нравится. Запрашивать надо столько, сколько ожидается. Вообще там всё достаточно детерминировано, как выше отмечалось, работает по прерываниям, и использовать запрос количества байтов нужно ну очень редко (такой код имеет тенденцию периодического опроса, что не есть хорошо), чистого VISA Read с правильно установленным значением ожидаемого количества байт в 99% случаях достаточно.
Borjomy_1

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

Re: Пропуск данных при приеме через UART средствами VISA

Сообщение Borjomy_1 »

Просто если запрашивать больше, то не избежать задержек по таймауту чипа. А это иногда критично
AndryG
assistant
assistant
Сообщения: 122
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Пропуск данных при приеме через UART средствами VISA

Сообщение AndryG »

Borjomy_1 писал(а): 05 июл 2024, 12:00 Просто если запрашивать больше, то не избежать задержек по таймауту чипа. А это иногда критично
Вот кстати еще проблема,принимаю несколько разных пакетов по протоколу MavLink и Visa жутко тормозит,пакеты читаются ,но с задержками превышающими 200 и более мс,в контоллере я использую очередь,каждый пакет отправляется ,примерно, каждые 6 мс,вот как реализовывать прием протокола? Это пока черновик,но принцып приема виден.
Вложения
cod.png
Borjomy_1

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

Re: Пропуск данных при приеме через UART средствами VISA

Сообщение Borjomy_1 »

Зачем Bytes at Port?
Отсутствует начальная синхронизация. При первом включении можно попасть на середину посылки. Задержки могут быть связаны с тем, что нет никакой проверки на размер пакета, который принимается просто как число. В результате при попадании в середину посылки можно получить совсем не тот размер и вычитывать значительно больше (на это уходит время), потом попадать не на начало следующего пакета и так по кругу.
AndryG
assistant
assistant
Сообщения: 122
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Пропуск данных при приеме через UART средствами VISA

Сообщение AndryG »

Borjomy_1 писал(а): 15 авг 2024, 17:13 Зачем Bytes at Port?
Отсутствует начальная синхронизация. При первом включении можно попасть на середину посылки. Задержки могут быть связаны с тем, что нет никакой проверки на размер пакета, который принимается просто как число. В результате при попадании в середину посылки можно получить совсем не тот размер и вычитывать значительно больше (на это уходит время), потом попадать не на начало следующего пакета и так по кругу.
Bytes at Port нужен для понимания есть ли вообще что-то в буфере,я читал на форуме,как его не любят),длины пакетов разные,длина пакета,вернее полезных данных,находится в 5 байте,только тогда понятно сколько принимать.Да я еще заметил,что на разных скоростях работы порта по разному обрабатываются данные,причем не обязательно эта скорость передачи должна быть выше.
Borjomy_1

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

Re: Пропуск данных при приеме через UART средствами VISA

Сообщение Borjomy_1 »

В любом случае, при вызове VISA read происходит ожидание прихода заданного числа символов по таймауту.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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