прием пакетов различной длины с COM-порта

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
powerf12
interested
interested
Сообщения: 8
Зарегистрирован: 15 июл 2014, 08:58
Версия LabVIEW: 2013(х64)
Контактная информация:

прием пакетов различной длины с COM-порта

Сообщение powerf12 »

Добрый день!
Есть проблема.

Принцип программы - на железку отправляю 9 байт, эти же 9 байт я получаю обратно (мол пакет цел).

Отправляю в ком-порт 9 байт, считываю 9 байт (указываю byte count 9 в VISA Read Function ), все без проблем (вопрос-ответ).
на один из пакетов (запрос данных с датчиков) я получаю пакет 50 байт(указываю byte count 9(пакет) + 50(данные с датчиков) в VISA Read Function ), тоже все без проблем. (вопрос-ответ + информация с датчиков)

Но, когда я отправлю в ком-порт снова пакет из 9 байт я могу получить 9 байт , среди которых будет половина данных с датчиков. иногда получаю тот же пакет , который и отправил)

Есть подозрение, что данные не очищаются в буфере labview ком-порта, так как если тестить через terminal, или через Comm Operator Pal , то никаких проблем с повторной отправкой нет)
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: прием пакетов различной длины с COM-порта

Сообщение Vitekkz88 »

Да вы где-то сами эти данные буферизируете, исходники покажите. Какая очистка буфера? Сделайте её(очистку) самостоятельно, если такие проблемы: VISA Flush I/O Buffer Function .
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Borjomy_1

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

Re: прием пакетов различной длины с COM-порта

Сообщение Borjomy_1 »

Приемный буфер ВСЕГДА очищается при вычитывании. Если там есть еще данные, значит они были приняты дополнительно.
Очищать входной буфер - последнее дело. Надо разбираться, почему железка оправляет пакет на запрос данных с датчиков повторно. Учтите, что через терминал вы отправляете команды с большими промежутками. Выставьте в настройках драйвера последовательного порта размер FIFO буфера равный 1. Тогда не будет задержек прихода данных в буфер (т.к пакет не кратен размеру буфера, задержка может составлять 55мс, в некоторых случаях это критично, особенно для систем запрос-ответ)
powerf12
interested
interested
Сообщения: 8
Зарегистрирован: 15 июл 2014, 08:58
Версия LabVIEW: 2013(х64)
Контактная информация:

Re: прием пакетов различной длины с COM-порта

Сообщение powerf12 »

Borjomy_1, Vitekkz88,

на осциллографе 1 пакет прилетает обратно)

добавил VISA Flush I/O Buffer Function, все заработало
Вложения
Снимок.PNG
Borjomy_1

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

Re: прием пакетов различной длины с COM-порта

Сообщение Borjomy_1 »

на осциллографе 1 пакет прилетает обратно)
ну так вычитывайте его! Зачем буфер очищать? Тем более после отправки команды. А если процесс в это время притормозит, то буфер очистится и от принятого пакета. Зачем подлянки себе устраивать?
powerf12
interested
interested
Сообщения: 8
Зарегистрирован: 15 июл 2014, 08:58
Версия LabVIEW: 2013(х64)
Контактная информация:

Re: прием пакетов различной длины с COM-порта

Сообщение powerf12 »

Borjomy_1, прошу прощения, не так выразился )

на осциллографе вижу пакет-ответ от от команды и пакет-запрос данных с датчиков. больше никаких пакетов нет.

то есть если не добавить VISA Flush I/O Buffer Function, то данные в программе считываются иногда повторно при отправке другой команды.
Borjomy_1

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

Re: прием пакетов различной длины с COM-порта

Сообщение Borjomy_1 »

Не могут они повторно считываться из буфера. Ни у кого они не считываются, а у вас считываются, как странно. Не находите?
Вы в одном месте обращаетесь к железке с запросом или в разных? Так вот если в разных, то один поток посылает одну команду, другой посылает вторую команду, а чтение из буфера срабатывает первым у того, у кого запрос на считывание короче (меньше байт). Вот и все. Чтобы такого не происходило,нужно обмен с контроллером вставить в один VI. Тогда запросы будут выполняться строго последовательно, независимо от того, из какого потока они вызваны.
powerf12
interested
interested
Сообщения: 8
Зарегистрирован: 15 июл 2014, 08:58
Версия LabVIEW: 2013(х64)
Контактная информация:

Re: прием пакетов различной длины с COM-порта

Сообщение powerf12 »

Borjomy_1,
Вы в одном месте обращаетесь к железке с запросом или в разных?
в одном.

при отправке команды я получаю в ответ саму команду и данные с датчиков.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: прием пакетов различной длины с COM-порта

Сообщение Vitekkz88 »

powerf12, давайте попробуем разобраться с этой проблемой.
Откройте пример Help -> Find Examples -> Simple Serial. Величину задержки установите в 500 мс. Посмотрите, какой объем информации у Вас будет приходить при различных задержках. Затем, вместо Bytes at Port используйте реальное число байт, которое ожидается в ответе.
Вы просто где-то просчитались с байтами и читаете меньшее количество, а ошмётки прошлого запроса вычитываете при следующем запросе.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: прием пакетов различной длины с COM-порта

Сообщение dadreamer »

powerf12, также проверьте работу прибора в этом :vi: . Установите на БД параметры порта, отправляйте посылки и смотрите, что приходит в ответ - будут ли дублироваться пакеты и появится ли какой-то посторонний "мусор". Отправлять числа можете в HEX - переключите Display Style у контрола "Выход", нажав ЛКМ (инструмент "рука") на серой полоске контрола и выбрав Hex Display. Кроме того, как вам уже советовали, надо подумать о структуре посылки, а также предусмотреть использование терминатора (терминального байта), что значительно облегчит разделение принятых посылок и парсинг данных.
Вложения
Untitled 1-1.vi
lv2013
(15.23 КБ) 166 скачиваний
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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