Прием/передача двоичных данных через COM-порт

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Vladimir_T
user
user
Сообщения: 72
Зарегистрирован: 13 сен 2011, 18:06
Версия LabVIEW: 2009
Контактная информация:

Прием/передача двоичных данных через COM-порт

Сообщение Vladimir_T »

Здравствуйте, коллеги, подскажите где я ошибаюсь... Мне нужно организовать обмен через COM-порт с прибором для чего взял пример из LabView. Пример конечно же работает со строковыми данными, используются функции VISA Read & VISA Write. Мне нужно работать с двоичными данными. Нашел в палитре функции VISA I32 & VISA O32 для работы с 32-х битными данными, для меня это самые подходящие. На вход этих функций подал имя ресурса, блок-схема без ошибок, но привыполнении появляется ошибка, что для данного ресурса неверные установки. Если можно, то подскажите в чем я ошибаюсь или дайте ссылку на решение подобной задачи. Заранее благодарен.
Аватара пользователя
IvanLis

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

Re: Прием/передача двоичных данных через COM-порт

Сообщение IvanLis »

Vladimir_T писал(а):Мне нужно организовать обмен через COM-порт с прибором для чего взял пример из LabView.
Для того, что бы передавать данные и команды внешнему устройству, то как минимум необходимо знать протокол взаимодействие. Параметры потока и структуру кадра.

Что у Вас за устрйство? Почему Вы уверены, что передается именно тип данных I32...?
Vladimir_T
user
user
Сообщения: 72
Зарегистрирован: 13 сен 2011, 18:06
Версия LabVIEW: 2009
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение Vladimir_T »

Устройство у меня собственной разработки с контроллером АРМ, который и передает измерительную информацию. Может передавать строковые данные и тогда VI работает и отображает данные, но мне нужно работать с двоичными данными для снижения непроизводительных затрат для АРМ контроллера.
Аватара пользователя
IvanLis

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

Re: Прием/передача двоичных данных через COM-порт

Сообщение IvanLis »

Vladimir_T писал(а):Устройство у меня собственной разработки с контроллером АРМ, который и передает измерительную информацию.
Он же все равно должен согласно определенному протоколу передавать информацию.
Скоросто, длина пакета, бит четности, старт/стоповый биты - это только часть параметров, а еще есть и другие.
Прочтите например RS-232
Последний раз редактировалось IvanLis 15 сен 2011, 18:05, всего редактировалось 1 раз.
Vladimir_T
user
user
Сообщения: 72
Зарегистрирован: 13 сен 2011, 18:06
Версия LabVIEW: 2009
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение Vladimir_T »

Спасибо за участие и наставления, но у меня конкретный вопрос по приему/передаче двоичных данных. Объясню: технологический контроллер передает в ПК данные длинной 32 бита (4-е байта) на одно длинное целое знаковое, а для передачи того же числа в формате ASCII потребуется 12 байт (включая терминатор). Разница заметна. Само собой для передачи двоичных данных потребуется реализация некоторого протокола с пердачей контрольной суммы. А потому прием/передача данных в двоичном формате выгоднее - это же очевидно! Ну и еще один важный аргумент - это скорость и объем пакетов, которые опять же для двоичных данных быдут максимально достижимыми. Вот потому я и обратился с вопросом.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение mzu2006 »

Можно так:
VisaI32.png
Vladimir_T
user
user
Сообщения: 72
Зарегистрирован: 13 сен 2011, 18:06
Версия LabVIEW: 2009
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение Vladimir_T »

Спасибо огромное за пример. В палитре Data Manipulation я нашнл и другие полиморфные функции, позволяющие работать с двоичными данными. Теперь сразу встал дополнительный вопрос: как поднять быстродействие LV? Прием данных идет нормально. Но изредка вижу, что теряются данные при приеме на ПК, потому LV отображает ошибочные данные. Т.е. есть факт потери одного-двух байт. На ПК запущена только LV, других задач нет. Может нужно грамотно оптимизровать Windows? Или попробовать библиотеку, альтернативную VISA, которая приводится в этой же ветке, чуть выше? Подскажите, пожалуйста.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение mzu2006 »

Дело, видимо, в программе - не успевает отработать обработка. Возможно, нужно распараллелить прием и обработку. Покажите код.
Про альтернативы VISA я уже говорил: http://labviewportal.org/viewtopic.php?p=29262#p29262. Вкратце: как правило - не нужны.
Vladimir_T
user
user
Сообщения: 72
Зарегистрирован: 13 сен 2011, 18:06
Версия LabVIEW: 2009
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение Vladimir_T »

На этот пост я и ссылался, учел ваши рекомендации и скачал последнюю VISA 5.02. После переустановки VISA, программа работает почти нормально и на предельной скорости потока данных. Сказал почти, потому, что через 2-3 мин. программа переключается на БД и устанавливается пауза. Делаю повторный RUN и опять программа работает пару минут. Пока не разобрался в чем дело.
Программа VI сделана на основе примера LV для Advanced Serial Port, добавлен лишь вывод на график и анализатор спектра. ПК современный довольно мощный.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение mzu2006 »

Vladimir_T писал(а):Программа VI сделана на основе примера LV для Advanced Serial Port, добавлен лишь вывод на график и анализатор спектра. ПК современный довольно мощный.
FFT используемая в анализаторе спектра штука довольно ресурсоемкая + отображение на экране завязано на остальные процессы в Windows. Вынесите обработку и отображение в отдельный цикл, взяв за основу пример Producer-Consumer.
Vladimir_T
user
user
Сообщения: 72
Зарегистрирован: 13 сен 2011, 18:06
Версия LabVIEW: 2009
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение Vladimir_T »

Спасибо за помощь, видимо тормозит прием из COM-порта из-за графики и FFT. Мне нужно все-же организовать прием всего потока без потерь, вот я и сделал обработку в реальном времени. ПК мощный, 3-ядерный, должен успевать принять 10 КБ/с данных на скорости 115200 Кб/с, между байтами есть паузы, причем использую адаптер UART - USB. Т.е. для физического USB интерфейса мои скорости мизерные.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение mzu2006 »

Распараллельте. Тогда и весь поток примете и обработка не будет мешать приему.
georgiy2590
beginner
beginner
Сообщения: 17
Зарегистрирован: 02 май 2014, 16:03
Версия LabVIEW: 2013
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение georgiy2590 »

Здравствуйте mzu2006 интересует как работать с двоичными данными картинка не отображается можете перезалить или это у меня тока не отображается. Заранее большое спасибо.
Здравствуйте Vladimir_T у меня к вам вопрос мне нужно по USART передать значения АЦП в двоичных все передается использую USART_SendData(USART2, ADC_Result); в терминале все отображается, а вы не подскажите как вы преобразовывали в строку ? Заранее благодарен.
Vladimir_T
user
user
Сообщения: 72
Зарегистрирован: 13 сен 2011, 18:06
Версия LabVIEW: 2009
Контактная информация:

Re: Прием/передача двоичных данных через COM-порт

Сообщение Vladimir_T »

Со стороны МК строковая переменная формируется с помощью стандартной С-функции sprintf ().
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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