Список форумов   Список форумов  

Как ускорить опрос устройства по COM-порту?

Всё о программировании на Labview

Модераторы: Техподдержка NI, Robert, Модератор

Как ускорить опрос устройства по COM-порту?

Сообщение us5qvh » Пн май 28, 2012 10:41 pm

Стоит задача: забирать из самодельного прибора (Arduino+переходник USB/COM) данные с высокой скоростью (в идеале - 1000 измерений в секунду). Пакеты короткие, скорость порта 115200. Сделал всё по инструкциям (признаюсь - в LabView чайник), данные забираются, индикация работает, но частота опроса низкая. При детальном изучении осциллографом (обычным, не в программе) видны большие задержки между пакетами, период опроса болтается вокруг 15мс. Как его можно ускорить? Использую отдельные компоненты VISA-Serial или Serial-Assistant - разницы никакой. LabView 8.6 под WinXP SP2.
us5qvh
 
Сообщений: 7
Зарегистрирован: Пн май 28, 2012 10:31 pm

Re: Как ускорить опрос устройства по COM-порту?

Сообщение IvanLis » Вт май 29, 2012 12:02 am

us5qvh писал(а):Стоит задача: забирать из самодельного прибора (Arduino+переходник USB/COM) данные с высокой скоростью (в идеале - 1000 измерений в секунду). Пакеты короткие, скорость порта 115200. Сделал всё по инструкциям (признаюсь - в LabView чайник), данные забираются, индикация работает, но частота опроса низкая. При детальном изучении осциллографом (обычным, не в программе) видны большие задержки между пакетами, период опроса болтается вокруг 15мс. Как его можно ускорить? Использую отдельные компоненты VISA-Serial или Serial-Assistant - разницы никакой. LabView 8.6 под WinXP SP2.


Здесь не в LabVIEW дело. А в том как используется интерфейс и контроллер.

Вы посчитайте, с какой скоростью возможно передавать информацию при заданных настройках и длине пакета.

Посмотрите прошивку, у МК тоже скорость ограничена. Возможно, что он нагружен до такой степени, что не полностью использует ресурсы RS-232.
Знание нескольких принципов освобождает от знания многих фактов!

Живу я здесь ||| LabVIEW Portal in Google+
IvanLis
Специалист LabVIEW
 
Сообщений: 491
Зарегистрирован: Пн апр 23, 2007 1:44 pm
Откуда: СССР

Re: Как ускорить опрос устройства по COM-порту?

Сообщение us5qvh » Вт май 29, 2012 12:48 am

Да, длину пакета и скорость считал и МК отвечает сразу, не тормозит. Лишние задержки видны именно между окончанием ответа и следующим запросом. \n на конце пакета тоже имеется, вроде бы нечего ему ждать.
us5qvh
 
Сообщений: 7
Зарегистрирован: Пн май 28, 2012 10:31 pm

Re: Как ускорить опрос устройства по COM-порту?

Сообщение IvanLis » Вт май 29, 2012 12:53 am

us5qvh писал(а):Лишние задержки видны именно между окончанием ответа и следующим запросом. \n на конце пакета тоже имеется, вроде бы нечего ему ждать.

А для чего запрос?
Делайте так, что бы МК гнал информацию постоянно, без запросов от ПК.
Знание нескольких принципов освобождает от знания многих фактов!

Живу я здесь ||| LabVIEW Portal in Google+
IvanLis
Специалист LabVIEW
 
Сообщений: 491
Зарегистрирован: Пн апр 23, 2007 1:44 pm
Откуда: СССР

Re: Как ускорить опрос устройства по COM-порту?

Сообщение us5qvh » Вт май 29, 2012 3:35 pm

А как тогда обнаруживать начало и конец пакета? Особенно если открытие порта окажется вызвано на середине пакета. На обычном C/C++ это решается без проблем (под QT когда-то ловил такое с помощью кольцевого буфера и двух указателей) а как здесь?
us5qvh
 
Сообщений: 7
Зарегистрирован: Пн май 28, 2012 10:31 pm

Re: Как ускорить опрос устройства по COM-порту?

Сообщение IvanLis » Вт май 29, 2012 6:36 pm

us5qvh писал(а):А как тогда обнаруживать начало и конец пакета? Особенно если открытие порта окажется вызвано на середине пакета. На обычном C/C++ это решается без проблем (под QT когда-то ловил такое с помощью кольцевого буфера и двух указателей) а как здесь?


А в LabVIEW можно настроить в VISA символ окончания строки. В этом случае пакет будет накапливаться, пока не поступит символ, не закончится время TimeOut или не заполнится буфер.
Вы же не посимвольно читаете, а строку целиком.
Знание нескольких принципов освобождает от знания многих фактов!

Живу я здесь ||| LabVIEW Portal in Google+
IvanLis
Специалист LabVIEW
 
Сообщений: 491
Зарегистрирован: Пн апр 23, 2007 1:44 pm
Откуда: СССР

Re: Как ускорить опрос устройства по COM-порту?

Сообщение us5qvh » Вт май 29, 2012 10:35 pm

Переделал программу контроллера на непрерывную передачу - 6 значений, разделённых точками с запятой, на конце - \n. Частота передачи - 400 пакетов/с, передавать успевает.
В LabView поставил внутри цикла Visa-Serial-Read и просто вывел приёмный буфер на индикацию, без всякой обработки. На индикации мелькают куски пакетов, как будто он теряет первые байты пакета и выводит от того момента когда начал принимать до конца пакета (\n). Инициализация при этом находится вне цикла - уже прочитал тут о тормозах, если её занести вовнутрь.
Попробовал применить "Assistant", одиночный пакет при настройке ловит нормально, при попытке запустить программу выдаёт ошибку: "VISA: (Hex 0xBFFF006C) An overrun error occurred during transfer. A character was not read from the hardware before the next character arrived." - явное переполнение буфера.
us5qvh
 
Сообщений: 7
Зарегистрирован: Пн май 28, 2012 10:31 pm

Re: Как ускорить опрос устройства по COM-порту?

Сообщение IvanLis » Ср май 30, 2012 1:26 pm

us5qvh писал(а):Попробовал применить "Assistant", одиночный пакет при настройке ловит нормально, при попытке запустить программу выдаёт ошибку

с экспресс не работаю, ничего сказать не могу

us5qvh писал(а):На индикации мелькают куски пакетов, как будто он теряет первые байты пакета и выводит от того момента когда начал принимать до конца пакета (\n). Инициализация при этом находится вне цикла - уже прочитал тут о тормозах, если её занести вовнутрь.

Не знаю отчего они у Вас мелькали, но в программе стоит выполнение всего одного такта цикла, видимо вы программу на бесконечность запускали, так что никаких проблем с инициализацией Вам и не удалось решить
К тому же, первая итерация чтения как правило рвет пакет, дальше все устаканивается и начинает работать нормально.
Speed.zip
скетч + LabVIEW2010
(15.61 KiB) Скачиваний: 195

Датчика у меня нет, а соответственно программу упростил немного. К Вашим данным добавил передачу номера пакета и микросекундную задержку, для контроля работы.
При этом за 1 сек передается около 146 пакетов (2 * longInt + 6 * float), это примерно 1200 значений в сек. Пропусков пакетов нет, задержка примерно 7,5 мс.
Так что все нормально со стороны LabVIEW все проблемы выяснены.
Знание нескольких принципов освобождает от знания многих фактов!

Живу я здесь ||| LabVIEW Portal in Google+
IvanLis
Специалист LabVIEW
 
Сообщений: 491
Зарегистрирован: Пн апр 23, 2007 1:44 pm
Откуда: СССР

Re: Как ускорить опрос устройства по COM-порту?

Сообщение us5qvh » Ср май 30, 2012 5:15 pm

Файл vi открыть не удалось - можно сохранить под LabView 8.6?
us5qvh
 
Сообщений: 7
Зарегистрирован: Пн май 28, 2012 10:31 pm

Re: Как ускорить опрос устройства по COM-порту?

Сообщение IvanLis » Ср май 30, 2012 6:24 pm

us5qvh писал(а):Файл vi открыть не удалось - можно сохранить под LabView 8.6?

Serial-Ivan 8.6.vi
lv8.6 save from lv2010
(18.44 KiB) Скачиваний: 172

сохранил из LV2010, но за работоспособность ручаться уже не могу
по этому выкладываю еще и скрин
Speed.png
Speed.png (57.55 KiB) Просмотров: 5405
Знание нескольких принципов освобождает от знания многих фактов!

Живу я здесь ||| LabVIEW Portal in Google+
IvanLis
Специалист LabVIEW
 
Сообщений: 491
Зарегистрирован: Пн апр 23, 2007 1:44 pm
Откуда: СССР

Re: Как ускорить опрос устройства по COM-порту?

Сообщение us5qvh » Чт май 31, 2012 10:05 pm

Присланные примеры работают. Рабочая программа МК (после добавления двух полей к пакету) с Вашей программой LabView - тоже работает. В чём разница? Заметил на границах цикла сдвиговые регистры - что они дают? Функция Visa-Clear перед входом в цикл - это очистка приёмного буфера? Чем задаётся период индикации? У меня индикация бегала быстро, видимо, вместе с принимаемыми данными, может из-за этого оно так тормозило? Можно ли как-то увидеть, не теряются ли пакеты?
Если при работающей (непрерывно) программе нажать кнопку "Stop", которая вроде бы должна завершать цикл, ничего не происходит. Если остановить программу вручную (кнопкой на тулбаре) и потом опять запустить, она не запускается и пишет ошибку. И вот если теперь нажать на этот "Stop", она начинает работать. Что бы это значило?
us5qvh
 
Сообщений: 7
Зарегистрирован: Пн май 28, 2012 10:31 pm

Re: Как ускорить опрос устройства по COM-порту?

Сообщение IvanLis » Пт июн 01, 2012 1:36 pm

us5qvh писал(а):Присланные примеры работают. Рабочая программа МК (после добавления двух полей к пакету) с Вашей программой LabView - тоже работает. В чём разница?

Разница в том, что у Вас цикла как такового нет! А отсюда и все проблемы. Сделано так, что он выполняется всего один раз.

Посмотрите внимательно, тем более я об этом писал раньше.

us5qvh писал(а):Заметил на границах цикла сдвиговые регистры - что они дают? Функция Visa-Clear перед входом в цикл - это очистка приёмного буфера? Чем задаётся период индикации? У меня индикация бегала быстро, видимо, вместе с принимаемыми данными, может из-за этого оно так тормозило? Можно ли как-то увидеть, не теряются ли пакеты?

Обновление информации происходит после приема пакета (т.е. терминатора).
Для проверки целостности специально добавил "номер пакета", но они и так не должны быть утеряны.
Остальные вопросы достаточно освещены в различных источниках информации, пользуйтесь поиском.

us5qvh писал(а):Если при работающей (непрерывно) программе нажать кнопку "Stop", которая вроде бы должна завершать цикл, ничего не происходит. Если остановить программу вручную (кнопкой на тулбаре) и потом опять запустить, она не запускается и пишет ошибку. И вот если теперь нажать на этот "Stop", она начинает работать. Что бы это значило?

То что у Вас цикла нет, а программу Вы запускаете на циклическое выполнение.

Если нет возможности разобраться в своей программе, то переделайте то что предложил я.
Знание нескольких принципов освобождает от знания многих фактов!

Живу я здесь ||| LabVIEW Portal in Google+
IvanLis
Специалист LabVIEW
 
Сообщений: 491
Зарегистрирован: Пн апр 23, 2007 1:44 pm
Откуда: СССР

Re: Как ускорить опрос устройства по COM-порту?

Сообщение us5qvh » Сб июн 02, 2012 10:47 am

Вроде дошло - программу с циклом надо запускать однократно, а не непрерывно...
Спасибо за помощь, перехожу к следующей части (ух там вопросов будет :))
us5qvh
 
Сообщений: 7
Зарегистрирован: Пн май 28, 2012 10:31 pm

Re: Как ускорить опрос устройства по COM-порту?

Сообщение ypo » Сб фев 16, 2013 12:08 am

Здравствуйте!
Serial ModBus Slave для Arduino попробовал - кое что получается. В качестве мастера использовал OPC сервер.
Tакже LABvIEW попробовал через I/O Server DSC модуля. Вижу нормально 5 аналоговых входов, а вот светодиод на 13 ноге зажечь не могу. Также не вижу пин настроенный на цифровой вход. Какая то непонятка с адресацией пространства ардуины и описания адресов в LV.
Вижу в LV модбасовские библиотеки, но как имаи пользоваться пока не пойму, да и не понятно зачем если все можно делать через глобальные переменные LV.?

Клиентом через OPC сервер доступны 5 аналоговых, и 13 пин светодиод. Буду разбираться с МодБасом-до этого дела не имел.
Может кто знает, как получить доступ не к физическим входам-выходам Ардуины, а к переменным?

Ну и главный вопрос-Можно ли перенаправить Modbus Serial RTU в Ethernet Shild?
Или может есть библиотека для Modbus через Ethernet для Arduino?

Буду рад любым свежим идеям...
ypo
 
Сообщений: 8
Зарегистрирован: Вт окт 30, 2007 12:16 am


Вернуться в LabVIEW

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1