Страница 1 из 1

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

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

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

Добавлено: 02 янв 2020, 18:07
IvanLis
Нужно внимательно изучить доки на железку, наверняка там имеется терминальный бит, настроить правильно VISA и использовать его, как детектор окончания посылки.

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

Добавлено: 02 янв 2020, 18:19
Blackman
А как поступить если устройство шлет данные с различным количеством байт и без посылки команды?
Можете привести пример? Что за устройство?

Как видно tag
не работает -:(

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

Добавлено: 02 янв 2020, 18:20
jane_wild
Так этот байт то есть 0xA, но количество байт перед ним заранее неизвестно.

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

Добавлено: 02 янв 2020, 18:28
Blackman
В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.

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

Добавлено: 02 янв 2020, 18:32
dadreamer
>> В инициализации порта разрешаете терминал char 0xA и в функции VISA Read указываете максимально возможное количеством байт: например 256.
Я 4096 обычно прописываю. :)

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

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

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

Добавлено: 02 янв 2020, 19:09
Blackman
Это зависит от решаемой задачи и для чего Вам требуются данные с прибора. Как работать с прибором определяете Вы.

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

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