прием пакетов различной длины с COM-порта
-
- interested
- Сообщения: 8
- Зарегистрирован: 15 июл 2014, 08:58
- Версия LabVIEW: 2013(х64)
- Контактная информация:
прием пакетов различной длины с COM-порта
Добрый день!
Есть проблема.
Принцип программы - на железку отправляю 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 , то никаких проблем с повторной отправкой нет)
Есть проблема.
Принцип программы - на железку отправляю 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
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: прием пакетов различной длины с COM-порта
Да вы где-то сами эти данные буферизируете, исходники покажите. Какая очистка буфера? Сделайте её(очистку) самостоятельно, если такие проблемы: VISA Flush I/O Buffer Function .
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: прием пакетов различной длины с COM-порта
Приемный буфер ВСЕГДА очищается при вычитывании. Если там есть еще данные, значит они были приняты дополнительно.
Очищать входной буфер - последнее дело. Надо разбираться, почему железка оправляет пакет на запрос данных с датчиков повторно. Учтите, что через терминал вы отправляете команды с большими промежутками. Выставьте в настройках драйвера последовательного порта размер FIFO буфера равный 1. Тогда не будет задержек прихода данных в буфер (т.к пакет не кратен размеру буфера, задержка может составлять 55мс, в некоторых случаях это критично, особенно для систем запрос-ответ)
Очищать входной буфер - последнее дело. Надо разбираться, почему железка оправляет пакет на запрос данных с датчиков повторно. Учтите, что через терминал вы отправляете команды с большими промежутками. Выставьте в настройках драйвера последовательного порта размер FIFO буфера равный 1. Тогда не будет задержек прихода данных в буфер (т.к пакет не кратен размеру буфера, задержка может составлять 55мс, в некоторых случаях это критично, особенно для систем запрос-ответ)
-
- interested
- Сообщения: 8
- Зарегистрирован: 15 июл 2014, 08:58
- Версия LabVIEW: 2013(х64)
- Контактная информация:
Re: прием пакетов различной длины с COM-порта
Borjomy_1, Vitekkz88,
на осциллографе 1 пакет прилетает обратно)
добавил VISA Flush I/O Buffer Function, все заработало
на осциллографе 1 пакет прилетает обратно)
добавил VISA Flush I/O Buffer Function, все заработало
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: прием пакетов различной длины с COM-порта
ну так вычитывайте его! Зачем буфер очищать? Тем более после отправки команды. А если процесс в это время притормозит, то буфер очистится и от принятого пакета. Зачем подлянки себе устраивать?на осциллографе 1 пакет прилетает обратно)
-
- interested
- Сообщения: 8
- Зарегистрирован: 15 июл 2014, 08:58
- Версия LabVIEW: 2013(х64)
- Контактная информация:
Re: прием пакетов различной длины с COM-порта
Borjomy_1, прошу прощения, не так выразился )
на осциллографе вижу пакет-ответ от от команды и пакет-запрос данных с датчиков. больше никаких пакетов нет.
то есть если не добавить VISA Flush I/O Buffer Function, то данные в программе считываются иногда повторно при отправке другой команды.
на осциллографе вижу пакет-ответ от от команды и пакет-запрос данных с датчиков. больше никаких пакетов нет.
то есть если не добавить VISA Flush I/O Buffer Function, то данные в программе считываются иногда повторно при отправке другой команды.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: прием пакетов различной длины с COM-порта
Не могут они повторно считываться из буфера. Ни у кого они не считываются, а у вас считываются, как странно. Не находите?
Вы в одном месте обращаетесь к железке с запросом или в разных? Так вот если в разных, то один поток посылает одну команду, другой посылает вторую команду, а чтение из буфера срабатывает первым у того, у кого запрос на считывание короче (меньше байт). Вот и все. Чтобы такого не происходило,нужно обмен с контроллером вставить в один VI. Тогда запросы будут выполняться строго последовательно, независимо от того, из какого потока они вызваны.
Вы в одном месте обращаетесь к железке с запросом или в разных? Так вот если в разных, то один поток посылает одну команду, другой посылает вторую команду, а чтение из буфера срабатывает первым у того, у кого запрос на считывание короче (меньше байт). Вот и все. Чтобы такого не происходило,нужно обмен с контроллером вставить в один VI. Тогда запросы будут выполняться строго последовательно, независимо от того, из какого потока они вызваны.
-
- interested
- Сообщения: 8
- Зарегистрирован: 15 июл 2014, 08:58
- Версия LabVIEW: 2013(х64)
- Контактная информация:
Re: прием пакетов различной длины с COM-порта
Borjomy_1,
при отправке команды я получаю в ответ саму команду и данные с датчиков.
в одном.Вы в одном месте обращаетесь к железке с запросом или в разных?
при отправке команды я получаю в ответ саму команду и данные с датчиков.
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: прием пакетов различной длины с COM-порта
powerf12, давайте попробуем разобраться с этой проблемой.
Откройте пример Help -> Find Examples -> Simple Serial. Величину задержки установите в 500 мс. Посмотрите, какой объем информации у Вас будет приходить при различных задержках. Затем, вместо Bytes at Port используйте реальное число байт, которое ожидается в ответе.
Вы просто где-то просчитались с байтами и читаете меньшее количество, а ошмётки прошлого запроса вычитываете при следующем запросе.
Откройте пример Help -> Find Examples -> Simple Serial. Величину задержки установите в 500 мс. Посмотрите, какой объем информации у Вас будет приходить при различных задержках. Затем, вместо Bytes at Port используйте реальное число байт, которое ожидается в ответе.
Вы просто где-то просчитались с байтами и читаете меньшее количество, а ошмётки прошлого запроса вычитываете при следующем запросе.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: прием пакетов различной длины с COM-порта
powerf12, также проверьте работу прибора в этом . Установите на БД параметры порта, отправляйте посылки и смотрите, что приходит в ответ - будут ли дублироваться пакеты и появится ли какой-то посторонний "мусор". Отправлять числа можете в HEX - переключите Display Style у контрола "Выход", нажав ЛКМ (инструмент "рука") на серой полоске контрола и выбрав Hex Display. Кроме того, как вам уже советовали, надо подумать о структуре посылки, а также предусмотреть использование терминатора (терминального байта), что значительно облегчит разделение принятых посылок и парсинг данных.
- Вложения
-
- Untitled 1-1.vi
- lv2013
- (15.23 КБ) 169 скачиваний
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение