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

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

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

Postby powerf12 on 16 Oct 2018, 08:58

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

Принцип программы - на железку отправляю 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 , то никаких проблем с повторной отправкой нет)
powerf12
interested
interested
 
Posts: 8
Joined: 15 Jul 2014, 08:58
LabVIEW Version: 2013(х64)
Karma: 0

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

Postby Vitekkz88 on 16 Oct 2018, 09:40

Да вы где-то сами эти данные буферизируете, исходники покажите. Какая очистка буфера? Сделайте её(очистку) самостоятельно, если такие проблемы: VISA Flush I/O Buffer Function .
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1047
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 301
hardware I/O VIP

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

Postby Borjomy_1 on 16 Oct 2018, 11:45

Приемный буфер ВСЕГДА очищается при вычитывании. Если там есть еще данные, значит они были приняты дополнительно.
Очищать входной буфер - последнее дело. Надо разбираться, почему железка оправляет пакет на запрос данных с датчиков повторно. Учтите, что через терминал вы отправляете команды с большими промежутками. Выставьте в настройках драйвера последовательного порта размер FIFO буфера равный 1. Тогда не будет задержек прихода данных в буфер (т.к пакет не кратен размеру буфера, задержка может составлять 55мс, в некоторых случаях это критично, особенно для систем запрос-ответ)
Borjomy_1
expert
expert
 
Posts: 1833
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 319
VIP

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

Postby powerf12 on 16 Oct 2018, 13:28

Borjomy_1, Vitekkz88,

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

добавил VISA Flush I/O Buffer Function, все заработало
Attachments
Снимок.PNG
powerf12
interested
interested
 
Posts: 8
Joined: 15 Jul 2014, 08:58
LabVIEW Version: 2013(х64)
Karma: 0

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

Postby Borjomy_1 on 16 Oct 2018, 13:59

на осциллографе 1 пакет прилетает обратно)
ну так вычитывайте его! Зачем буфер очищать? Тем более после отправки команды. А если процесс в это время притормозит, то буфер очистится и от принятого пакета. Зачем подлянки себе устраивать?
Borjomy_1
expert
expert
 
Posts: 1833
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 319
VIP

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

Postby powerf12 on 16 Oct 2018, 15:01

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

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

то есть если не добавить VISA Flush I/O Buffer Function, то данные в программе считываются иногда повторно при отправке другой команды.
powerf12
interested
interested
 
Posts: 8
Joined: 15 Jul 2014, 08:58
LabVIEW Version: 2013(х64)
Karma: 0

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

Postby Borjomy_1 on 16 Oct 2018, 15:10

Не могут они повторно считываться из буфера. Ни у кого они не считываются, а у вас считываются, как странно. Не находите?
Вы в одном месте обращаетесь к железке с запросом или в разных? Так вот если в разных, то один поток посылает одну команду, другой посылает вторую команду, а чтение из буфера срабатывает первым у того, у кого запрос на считывание короче (меньше байт). Вот и все. Чтобы такого не происходило,нужно обмен с контроллером вставить в один VI. Тогда запросы будут выполняться строго последовательно, независимо от того, из какого потока они вызваны.
Borjomy_1
expert
expert
 
Posts: 1833
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 319
VIP

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

Postby powerf12 on 16 Oct 2018, 21:31

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

в одном.

при отправке команды я получаю в ответ саму команду и данные с датчиков.
powerf12
interested
interested
 
Posts: 8
Joined: 15 Jul 2014, 08:58
LabVIEW Version: 2013(х64)
Karma: 0

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

Postby Vitekkz88 on 17 Oct 2018, 06:36

powerf12, давайте попробуем разобраться с этой проблемой.
Откройте пример Help -> Find Examples -> Simple Serial. Величину задержки установите в 500 мс. Посмотрите, какой объем информации у Вас будет приходить при различных задержках. Затем, вместо Bytes at Port используйте реальное число байт, которое ожидается в ответе.
Вы просто где-то просчитались с байтами и читаете меньшее количество, а ошмётки прошлого запроса вычитываете при следующем запросе.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1047
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 301
hardware I/O VIP

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

Postby dadreamer on 17 Oct 2018, 12:42

powerf12, также проверьте работу прибора в этом :vi: . Установите на БД параметры порта, отправляйте посылки и смотрите, что приходит в ответ - будут ли дублироваться пакеты и появится ли какой-то посторонний "мусор". Отправлять числа можете в HEX - переключите Display Style у контрола "Выход", нажав ЛКМ (инструмент "рука") на серой полоске контрола и выбрав Hex Display. Кроме того, как вам уже советовали, надо подумать о структуре посылки, а также предусмотреть использование терминатора (терминального байта), что значительно облегчит разделение принятых посылок и парсинг данных.
Attachments
Untitled 1-1.vi
lv2013
(15.23 KiB) Downloaded 9 times
User avatar
dadreamer
professor
professor
 
Posts: 3157
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 803
I/O VIP vision internet


Return to Коммуникация с приборами

Who is online

Users browsing this forum: No registered users and 11 guests

cron