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

- Сообщения: 126
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Прием запроса данных из COM port с Visa
Доброго времени,форумчане! Столкнулся с проблемой приема данных по команде.Мое устройство на контроллере принимает команду по UART и начинает собирает массив данных состоящих из двух двухбайтовых значений,в общем это понятно в приатаченном коде .Проблема заключается в том,что я принимаю предыдущие значения массива,а не те которые запросил.Не могу понять в чем проблема,буду благодарен за помощь или совет.
- Вложения
-
- ProbeDataLog.vi
- (28.87 КБ) 397 скачиваний
-
IvanLis
- guru

- Сообщения: 5652
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 35 раз
- Поблагодарили: 122 раза
Re: Прием запроса данных из COM port с Visa
А как Вы это определяете?AndryG писал(а): 09 сен 2024, 13:07 Проблема заключается в том,что я принимаю предыдущие значения массива,а не те которые запросил.Не могу понять в чем проблема,буду благодарен за помощь или совет.
Скорее всего вы вычитываете из порта данные которые не дочитали после последнего запроса.
Вообще более правильно использовать в качестве признака окончания посылки "терминатор", возможно за 1с не успевает передать все данные.
Вы должны быть уверены, что получили все данные, которые запросили.
Я бы порекомендовал изменить логику.
Ответ должен состоять из двух посылок:
1. U16 (2 byte) - размер информационной посылки. Ну или сами определите каким числом определить размер.
2. Непосредственно информация - количество byte переданных в п.1.
Вы же на передаче всегда знаете сколько будете передавать, вот и сообщите приемнику размер данных.
Тогда не нужно дергать Bytes at Port Property и гарантированно Вы получите то, что нужно.
Ну и перед началом работы, неплохо было бы почистить буфер.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
AndryG
- assistant

- Сообщения: 126
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Прием запроса данных из COM port с Visa
Да я конечно знаю размер посылки,она 4000 байт,логическим анализатором я проверял пакет,который передаю,он точно передан,указал размер на входе,вродебы стало работать,еще хотел спросить как в LV правильно очистить буфер и в какое время лучше это делать?IvanLis писал(а): 09 сен 2024, 14:30А как Вы это определяете?AndryG писал(а): 09 сен 2024, 13:07 Проблема заключается в том,что я принимаю предыдущие значения массива,а не те которые запросил.Не могу понять в чем проблема,буду благодарен за помощь или совет.
Скорее всего вы вычитываете из порта данные которые не дочитали после последнего запроса.
Вообще более правильно использовать в качестве признака окончания посылки "терминатор", возможно за 1с не успевает передать все данные.
Вы должны быть уверены, что получили все данные, которые запросили.
Я бы порекомендовал изменить логику.
Ответ должен состоять из двух посылок:
1. U16 (2 byte) - размер информационной посылки. Ну или сами определите каким числом определить размер.
2. Непосредственно информация - количество byte переданных в п.1.
Вы же на передаче всегда знаете сколько будете передавать, вот и сообщите приемнику размер данных.
Тогда не нужно дергать Bytes at Port Property и гарантированно Вы получите то, что нужно.
Ну и перед началом работы, неплохо было бы почистить буфер.
-
IvanLis
- guru

- Сообщения: 5652
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 35 раз
- Поблагодарили: 122 раза
Re: Прием запроса данных из COM port с Visa
Для очистки буфера используется VISA ClearAndryG писал(а): 09 сен 2024, 14:57 Да я конечно знаю размер посылки,она 4000 байт,логическим анализатором я проверял пакет,который передаю,он точно передан,указал размер на входе,вродебы стало работать,еще хотел спросить как в LV правильно очистить буфер и в какое время лучше это делать?
Если протокол отлажен и нет потери пакетов, то достаточно один раз очистить после инициализации порта.
Если пакеты теряются, то можно перед подачей команды на чтение. Но сами понимаете, что это экстренный вариант и говорит о том, что вы не прочитали все, что запросили на предыдущем шаге.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение