Простой пример работы с последовательным портом

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
mishelle
beginner
beginner
Сообщения: 32
Зарегистрирован: 31 июл 2011, 10:05
Версия LabVIEW: 8.0

Re: Простой пример работы с последовательным портом

Сообщение mishelle »

Понял. Ну а со считыванием реального сигнала с частотой дискретизации 40 кГц с помощью VISA READ будут проблемы?
P.S. я правильно понимаю что частота дискретизации-это частота отсчетов(1,2,4 байта) а не частота битов?
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Konstantin Sumenko »

Реальный сигнал с чего снимается и чем принимается, какой он формы. Если ты собираешься напрямую его подавать на линию RX, то это плохая идея.
Частота дискретизации - частота следования отсчетов, а что из себя представляет сам отсчет в данном случае не важно.
mishelle
beginner
beginner
Сообщения: 32
Зарегистрирован: 31 июл 2011, 10:05
Версия LabVIEW: 8.0

Re: Простой пример работы с последовательным портом

Сообщение mishelle »

Реальный сигнал представляет собой последовательные отсчеты, идущие с интервалом 25 мкс.Сигнал идет с платы FT232R, с компьютером будет соединена через USB , то есть работать с ним буду через VISA как с COM портом. В этом случае скорость чтения будет больше?
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Konstantin Sumenko »

Вот честно, из описания мало что понятно: эти отсчеты что формирует- АЦП или микроконтроллер их сам генерирует и т.п.? С платы FT232R идут данные на компьютер (которые тоже на физическом уровне есть сигнал, но нам этот уровень не нужен). FT232 в режиме эмуляции UART поддерживает скорости до 3 мбод.
mishelle
beginner
beginner
Сообщения: 32
Зарегистрирован: 31 июл 2011, 10:05
Версия LabVIEW: 8.0

Re: Простой пример работы с последовательным портом

Сообщение mishelle »

Konstantin Sumenko писал(а): FT232 в режиме эмуляции UART поддерживает скорости до 3 мбод.
Благодарю...
Shpik
assistant
assistant
Сообщения: 119
Зарегистрирован: 10 янв 2011, 11:01
Версия LabVIEW: 8.6, 2009, 2010
Откуда: Таганрог
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Shpik »

Не работал с FT232R, но приходилось применять различные преобразователи интерфейсов ICP DAS и MOXA. Так вот последовательный порт, как известно, с такими модулями на компе может быть представлен как виртуальный. И взаимодействие происходит ПО->Драйвер устройства->физический порт (USB, Ethernet)-> Преобразователь->Устройство и Обратно. Так что, не знаю как FT232R, а вышеперечисленные вносят ощутимую задержку. Ведь скорость передачи по ком-порту имеется ввиду только м/у преобразователем интерфейсов и опрашиваемым устройством, и при этом не берется в расчет топология всей сети вместе со временем обработки данных в контроллерах модулей. Поправьте, если ошибаюсь.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Konstantin Sumenko »

Все верно, принимая во внимание тот факт, что обмен (FT232 с ПК) по USB ведется в режиме bulk, то ни о каких микросекундных задержках можно даже и не говорить.
MaXFaLCoN666
interested
interested
Сообщения: 2
Зарегистрирован: 27 ноя 2011, 21:57
Версия LabVIEW: 8.6
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение MaXFaLCoN666 »

Код: Выделить всё

Микроконтроллер Atmega48 
АЦП: 
Инициализация сбора данных(одновременно работает один канал):
-первого канала 201 (DEC) 
-второго канала 202 (DEC)
Получение результат АЦП :
-для обоих каналов 209(DEC)
Деинициализация сбора данных для АЦП:
-для обоих каналов 216 (DEC)

Внешние прерывания
Инициализация сбора данных о внешнем прерывании
-первого канала 203(DEC)
-второго канала 204(DEC)
Получение данных о внешнем прерывании
-для первого канала 210(DEC)
-для второго канала 211(DEC)
Деинициализация сбора данных о внешнем прерывании
-для первого канала 217(DEC)
-для второго канала 218(DEC)

АЦП усредненного ШИМ сигнала 
Инициализация режима усреднения ШИМ сигнала:
-для первого канала 205(DEC) - разрешение режима - число от 0(DEC) до 255(DEC) - регулятор уровня напряжения на АЦП от 255 до 0
-для второго канала 206(DEC) - разрешение режима - два числа в сумме составляющие число от 0(DEC) до 1023(DEC).Причем первое младшие разряды, а второе старшие. Пример: число 1020(DEC)  будет послано как 252 (DEC) и 3(DEC)
-для третьего канала 207(DEC) -разрешение режима - два числа в сумме составляющие число от 0(DEC) до 1023(DEC).Причем первое младшие разряды, а второе старшие.

Получение данных усреднения ШИМ сигнала:
-для первого канала 213(DEC)
-для второго канала 214(DEC)
-для третьего канала 215(DEC) 

Деинициализация режима усреднения ШИМ сигнала 
-для первого канала 219(DEC)
-для второго канала 220(DEC)
-для третьего канала 221(DEC) 

Сравнение напряжений двух каналов
Инициализация режима
-посылка 208(DEC)

Получение данных о результате сравнения:
-посылка 215(DEC)

Деинициализация режима
-посылка 222(DEC).
выше представлено задание лабораторной - но если честно что и как сделать с помощью Labview можно не могу понять. смотрел выше представленные примеры, не могу подстроить под свое. и нельзя использовать компоненты которые уже все делают за меня. Использовать можно только стандартные элементы управления. :cry: :cry: :cry: помогите если можете уже три лабы бьюсь об стенку и понять не могу.
Frank
interested
interested
Сообщения: 4
Зарегистрирован: 02 апр 2012, 23:26
Версия LabVIEW: 11
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Frank »

Доброго времени суток!
Не пинайте сильно, я только начал ознакомление с LabView.
Построил небольшой пример но что то ничего не работает (((
Есть МК ATmega который шлет по последовательному порту номинал измеряемого тока, мне нужно отображать его на графике.
Тут мне еще не понятно вот что, мк разделяет переменную типа-int для пересылки. Как мне обратно ее склеить ? Чтобы получить корректное значение.
З.Ы. не пинайте я начинающий но очень хочу разобраться.
За ранее благодарен!.
Изображение

Uploaded with ImageShack.us
Аватара пользователя
IvanLis

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

Re: Простой пример работы с последовательным портом

Сообщение IvanLis »

Frank писал(а):Тут мне еще не понятно вот что, мк разделяет переменную типа-int для пересылки. Как мне обратно ее склеить ? Чтобы получить корректное значение.
Покажите что Вы принимаете и что нужно получить (что посылается).

Только я уже запутался....
В одном месте Вы говорите о корреляторе (Сбор данных с коррелятора)
Здесь об ATmega. :dntknw:
Frank
interested
interested
Сообщения: 4
Зарегистрирован: 02 апр 2012, 23:26
Версия LabVIEW: 11
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Frank »

Тема про коррелятор не моя, то сообщение что выше в этой ветке первое на этом форуме, я только вчера зарегистрировался.
В контроллере в переменную "current" типа int (16-ти разрядная) записывается значение, оно уже рассчитанное и не требует какой либо мат. обработки. На дисплее платы контроллера отображается корректно. Я хочу отправить его на комп. для визуального отображения на графике.
Та как компорт передает информацию побайтно я разделил переменную "current" на две 8 разрядные переменные.
temph = current>>8;
templ = current;
При получении на компьютере в терминале я вижу эти байты они корректно приходят один за другим.
При тестировании VISA тоже принимает эти данные. Я сейчас на работе и не могу выложить скрин. Постараюсь ближе к вечеру предоставить его.
Но как только запускаю LabView получаю ошибку и нету ни каких результатов на графике.
Я понимаю что, то что принято из буфера нужно как то распознать для дальнейшего отображения. Но как до сих пор не нашел.
За ранее благодарен. :thank:
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Eugen Graf »

Считывать нужно два байта, а не двести, но даже если считывать два, то какой из них первый, а какой второй не понятно, можно ведь случайно начать считывать и со второго.
Преобразовывать нужно иначе, с помощью Type Cast в Int16.
Frank
interested
interested
Сообщения: 4
Зарегистрирован: 02 апр 2012, 23:26
Версия LabVIEW: 11
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Frank »

Спасибо! )) Попробую, отпишусь о результатах! )
З.Ы. в принципе мне не критично я могу сначала запускать LabView а потом стартовать передачу данных. Так что я думаю в таком порядке должно получится всегда чтение с первого байта.
Frank
interested
interested
Сообщения: 4
Зарегистрирован: 02 апр 2012, 23:26
Версия LabVIEW: 11
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Frank »

Всем спасибо!
Все получилось и работает!
Следующей ступенью будет выводить два сигнала на один график...
Мои мысли по этому поводу: Нужно отсылать два байта от первого сигнала потом разделитель например возврат каретки и опять два байта от второго?
Пока не знаю как это все городить в LabView... почитаю книжки, появятся более вменяемые вопросы задам.
Всем еще раз спасибо! )
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Простой пример работы с последовательным портом

Сообщение Eugen Graf »

Возврат каретки может случайно встретиться и в самих данных, что будешь в этом случае делать?
Но мысли направлены в правильную сторону. Разделитель нужен, назови его синхронизационным байтом или терминаторным байтом. Разделительный байт не обязательно должен быть одним, их может быть больше. Так же можно добавить тип сигнала, например "1" или "2" и контрольную сумму.
Пара выкинутых пакетов не страшна, но если трафик сбивается с синхронизации, то выйдет кака.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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