Ожидание данных с СОМ порта

Простейшие вопросы в области инженерной разработки

Ожидание данных с СОМ порта

Postby jane_wild on 02 Jan 2020, 16:18

Всем здравствуйте и с Наступившим Новым Годом! Очень рада, что форум вновь заработал! Здоровья этому прекрастному порталу!
Теперь к теме вопроса. Если я посылаю команду и точно знаю колличество байт, которые придут в ответ, то вопросов не возникает. А если количество неизвестно, то пользуемся Byte at Port, с этим тоже понятно. А как поступить если устройство шлет данные с различным колличеством байт и без посылания команды? Т.е. нужно ожидать данные с разным колличеством байт постоянно. Поэтому приходится все время опрашивать порт на предмет их наличия. А если их нет, но после timeout очищать ошибку и снова ждать... Возможно есть более рациональное решение?
User avatar
jane_wild
advanced
advanced
 
Posts: 173
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 8

Re: Ожидание данных с СОМ порта

Postby IvanLis on 02 Jan 2020, 18:07

Нужно внимательно изучить доки на железку, наверняка там имеется терминальный бит, настроить правильно VISA и использовать его, как детектор окончания посылки.
Знание нескольких принципов освобождает от знания многих фактов!




User avatar
IvanLis
professor
professor
 
Posts: 4864
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2015, 2016
Karma: 787
hardware VIP bloggers teachers

Re: Ожидание данных с СОМ порта

Postby Blackman on 02 Jan 2020, 18:19

А как поступить если устройство шлет данные с различным количеством байт и без посылки команды?
Можете привести пример? Что за устройство?

Как видно tag [quote] не работает -:(
Blackman
leader
leader
 
Posts: 893
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 260
VIP

Re: Ожидание данных с СОМ порта

Postby jane_wild on 02 Jan 2020, 18:20

Так этот байт то есть 0xA, но количество байт перед ним заранее неизвестно.
User avatar
jane_wild
advanced
advanced
 
Posts: 173
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 8

Re: Ожидание данных с СОМ порта

Postby Blackman on 02 Jan 2020, 18:28

В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.
Blackman
leader
leader
 
Posts: 893
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 260
VIP

Re: Ожидание данных с СОМ порта

Postby dadreamer on 02 Jan 2020, 18:32

>> В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.
Я 4096 обычно прописываю. :)
User avatar
dadreamer
professor
professor
 
Posts: 3423
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Ожидание данных с СОМ порта

Postby jane_wild on 02 Jan 2020, 18:33

В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256 Спасибо, я правильно поняла, что visa read вернет посылку, как только встретит терминатор, либо достигнет указаных колличества байт, а избавиться от постоянного опроса порта видимо не получится верно :think: ?
User avatar
jane_wild
advanced
advanced
 
Posts: 173
Joined: 30 Jun 2016, 02:11
LabVIEW Version: 2016
Karma: 8

Re: Ожидание данных с СОМ порта

Postby Blackman on 02 Jan 2020, 19:09

Это зависит от решаемой задачи и для чего Вам требуются данные с прибора. Как работать с прибором определяете Вы.
Blackman
leader
leader
 
Posts: 893
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 260
VIP

Re: Ожидание данных с СОМ порта

Postby dadreamer on 02 Jan 2020, 20:03

jane_wild, а какой таймаут устанавливаете на VISA Configure Serial Port? VISA Read будет ждать указанное время, пока не получит заданное ему количество байт или пока не обнаружит терминатор. Если не дождётся, то выдаст таймаут по кластеру ошибки. Вызов VISA Read обычно не отнимает много ресурсов у системы, хотя и работает в асинхронном режиме по умолчанию (опрос устройства производится с интервалом в 1 мс, пока не получено запрашиваемое количество данных). Если переживаете за производительность, попробуйте поменять режим работы на синхронный (ПКМ по :vi: -> Synchronous I/O Mode).
User avatar
dadreamer
professor
professor
 
Posts: 3423
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet


Return to Для чайников

Who is online

Users browsing this forum: Yandex and 7 guests

cron