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

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

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

Сообщение jane_wild »

Всем здравствуйте и с Наступившим Новым Годом! Очень рада, что форум вновь заработал! Здоровья этому прекрастному порталу!
Теперь к теме вопроса. Если я посылаю команду и точно знаю колличество байт, которые придут в ответ, то вопросов не возникает. А если количество неизвестно, то пользуемся Byte at Port, с этим тоже понятно. А как поступить если устройство шлет данные с различным колличеством байт и без посылания команды? Т.е. нужно ожидать данные с разным колличеством байт постоянно. Поэтому приходится все время опрашивать порт на предмет их наличия. А если их нет, но после timeout очищать ошибку и снова ждать... Возможно есть более рациональное решение?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

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

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

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

Сообщение Blackman »

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

Как видно tag
не работает -:(
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

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

Сообщение jane_wild »

Так этот байт то есть 0xA, но количество байт перед ним заранее неизвестно.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

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

Сообщение Blackman »

В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

>> В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.
Я 4096 обычно прописываю. :)
Аватара пользователя
jane_wild
master
master
Сообщения: 459
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 83 раза
Поблагодарили: 15 раз
Контактная информация:

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

Сообщение jane_wild »

В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256 Спасибо, я правильно поняла, что visa read вернет посылку, как только встретит терминатор, либо достигнет указаных колличества байт, а избавиться от постоянного опроса порта видимо не получится верно :think: ?
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

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

Сообщение Blackman »

Это зависит от решаемой задачи и для чего Вам требуются данные с прибора. Как работать с прибором определяете Вы.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

jane_wild, а какой таймаут устанавливаете на VISA Configure Serial Port? VISA Read будет ждать указанное время, пока не получит заданное ему количество байт или пока не обнаружит терминатор. Если не дождётся, то выдаст таймаут по кластеру ошибки. Вызов VISA Read обычно не отнимает много ресурсов у системы, хотя и работает в асинхронном режиме по умолчанию (опрос устройства производится с интервалом в 1 мс, пока не получено запрашиваемое количество данных). Если переживаете за производительность, попробуйте поменять режим работы на синхронный (ПКМ по :vi: -> Synchronous I/O Mode).
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»