Всем здравствуйте и с Наступившим Новым Годом! Очень рада, что форум вновь заработал! Здоровья этому прекрастному порталу!
Теперь к теме вопроса. Если я посылаю команду и точно знаю колличество байт, которые придут в ответ, то вопросов не возникает. А если количество неизвестно, то пользуемся Byte at Port, с этим тоже понятно. А как поступить если устройство шлет данные с различным колличеством байт и без посылания команды? Т.е. нужно ожидать данные с разным колличеством байт постоянно. Поэтому приходится все время опрашивать порт на предмет их наличия. А если их нет, но после timeout очищать ошибку и снова ждать... Возможно есть более рациональное решение?
Ожидание данных с СОМ порта
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Ожидание данных с СОМ порта
Нужно внимательно изучить доки на железку, наверняка там имеется терминальный бит, настроить правильно VISA и использовать его, как детектор окончания посылки.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Ожидание данных с СОМ порта
Можете привести пример? Что за устройство?А как поступить если устройство шлет данные с различным количеством байт и без посылки команды?
Как видно tag
не работает -:(
- jane_wild
- master
- Сообщения: 461
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 84 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: Ожидание данных с СОМ порта
Так этот байт то есть 0xA, но количество байт перед ним заранее неизвестно.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Ожидание данных с СОМ порта
В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Ожидание данных с СОМ порта
>> В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.
Я 4096 обычно прописываю. :)
Я 4096 обычно прописываю. :)
- jane_wild
- master
- Сообщения: 461
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 84 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: Ожидание данных с СОМ порта
В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256 Спасибо, я правильно поняла, что visa read вернет посылку, как только встретит терминатор, либо достигнет указаных колличества байт, а избавиться от постоянного опроса порта видимо не получится верно ?
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Ожидание данных с СОМ порта
Это зависит от решаемой задачи и для чего Вам требуются данные с прибора. Как работать с прибором определяете Вы.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Ожидание данных с СОМ порта
jane_wild, а какой таймаут устанавливаете на VISA Configure Serial Port? VISA Read будет ждать указанное время, пока не получит заданное ему количество байт или пока не обнаружит терминатор. Если не дождётся, то выдаст таймаут по кластеру ошибки. Вызов VISA Read обычно не отнимает много ресурсов у системы, хотя и работает в асинхронном режиме по умолчанию (опрос устройства производится с интервалом в 1 мс, пока не получено запрашиваемое количество данных). Если переживаете за производительность, попробуйте поменять режим работы на синхронный (ПКМ по -> Synchronous I/O Mode).
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 0 Ответы
- 506 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 878 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1230 Просмотры
-
Последнее сообщение Boxa
-
- 3 Ответы
- 272 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2455 Просмотры
-
Последнее сообщение rsv