Прием запроса данных из COM port с Visa

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
AndryG
assistant
assistant
Сообщения: 122
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Прием запроса данных из COM port с Visa

Сообщение AndryG »

Доброго времени,форумчане! Столкнулся с проблемой приема данных по команде.Мое устройство на контроллере принимает команду по UART и начинает собирает массив данных состоящих из двух двухбайтовых значений,в общем это понятно в приатаченном коде .Проблема заключается в том,что я принимаю предыдущие значения массива,а не те которые запросил.Не могу понять в чем проблема,буду благодарен за помощь или совет.
Вложения
ProbeDataLog.vi
(28.87 КБ) 38 скачиваний
Аватара пользователя
IvanLis

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

Re: Прием запроса данных из COM port с Visa

Сообщение IvanLis »

AndryG писал(а): 09 сен 2024, 13:07 Проблема заключается в том,что я принимаю предыдущие значения массива,а не те которые запросил.Не могу понять в чем проблема,буду благодарен за помощь или совет.
А как Вы это определяете?
Скорее всего вы вычитываете из порта данные которые не дочитали после последнего запроса.
Вообще более правильно использовать в качестве признака окончания посылки "терминатор", возможно за 1с не успевает передать все данные.
Вы должны быть уверены, что получили все данные, которые запросили.

Я бы порекомендовал изменить логику.
Ответ должен состоять из двух посылок:
1. U16 (2 byte) - размер информационной посылки. Ну или сами определите каким числом определить размер.
2. Непосредственно информация - количество byte переданных в п.1.

Вы же на передаче всегда знаете сколько будете передавать, вот и сообщите приемнику размер данных.
Тогда не нужно дергать Bytes at Port Property и гарантированно Вы получите то, что нужно.
Ну и перед началом работы, неплохо было бы почистить буфер.
AndryG
assistant
assistant
Сообщения: 122
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Прием запроса данных из COM port с Visa

Сообщение AndryG »

IvanLis писал(а): 09 сен 2024, 14:30
AndryG писал(а): 09 сен 2024, 13:07 Проблема заключается в том,что я принимаю предыдущие значения массива,а не те которые запросил.Не могу понять в чем проблема,буду благодарен за помощь или совет.
А как Вы это определяете?
Скорее всего вы вычитываете из порта данные которые не дочитали после последнего запроса.
Вообще более правильно использовать в качестве признака окончания посылки "терминатор", возможно за 1с не успевает передать все данные.
Вы должны быть уверены, что получили все данные, которые запросили.

Я бы порекомендовал изменить логику.
Ответ должен состоять из двух посылок:
1. U16 (2 byte) - размер информационной посылки. Ну или сами определите каким числом определить размер.
2. Непосредственно информация - количество byte переданных в п.1.

Вы же на передаче всегда знаете сколько будете передавать, вот и сообщите приемнику размер данных.
Тогда не нужно дергать Bytes at Port Property и гарантированно Вы получите то, что нужно.
Ну и перед началом работы, неплохо было бы почистить буфер.
Да я конечно знаю размер посылки,она 4000 байт,логическим анализатором я проверял пакет,который передаю,он точно передан,указал размер на входе,вродебы стало работать,еще хотел спросить как в LV правильно очистить буфер и в какое время лучше это делать?
Аватара пользователя
IvanLis

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

Re: Прием запроса данных из COM port с Visa

Сообщение IvanLis »

AndryG писал(а): 09 сен 2024, 14:57 Да я конечно знаю размер посылки,она 4000 байт,логическим анализатором я проверял пакет,который передаю,он точно передан,указал размер на входе,вродебы стало работать,еще хотел спросить как в LV правильно очистить буфер и в какое время лучше это делать?
Для очистки буфера используется VISA Clear
Если протокол отлажен и нет потери пакетов, то достаточно один раз очистить после инициализации порта.
Если пакеты теряются, то можно перед подачей команды на чтение. Но сами понимаете, что это экстренный вариант и говорит о том, что вы не прочитали все, что запросили на предыдущем шаге.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»