Непрерывный DO + AI

Захват, обработка и генерирование сигнала
asd1379
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 апр 2013, 14:53
Версия LabVIEW: 2010
Контактная информация:

Непрерывный DO + AI

Сообщение asd1379 »

Добрый день, уважаемые профессионалы и энтузиасты. Обращаюсь к вам за помощью.
Задача, которую я пытаюсь решить, состоит в следующем: непрерывная генерация сигналов с цифровых выходов (6 сигналов) и параллельный сбор данных, точнее регистрация напряжения на 3-х аналоговых входах. При этом два из трёх сигналов импульсные, продолжительностью 0,04…0,001 с. и длительностью фронта примерно 10% от самого импульса (и именно фронт меня более всего интересует). В дальнейшем ещё добавятся расчёты. NI USB-6251 - плата, с которой я на данный момент работаю.
1) Не могу получить вменяемые осциллограммы. Похоже, что данные теряются. Снятие сигналов, их отображение и запись должны происходить одновременно с пятым кадром цикла Flat Sequence.
2) Что можете посоветовать в плане повышения быстродействия (очень важный для меня параметр)?
3) Постоянно работать с платой возможности у меня нет (т.к. не один я её юзаю). Для того чтобы можно было работать с программой без "железа" я внес некоторые изменения. Адекватны ли они?
Заранее большое спасибо всем откликнувшимся.
Вложения
_ver. 10---.vi
без "железа"
(262.54 КБ) 115 скачиваний
_ver. 10.vi
с DAQ
(263.63 КБ) 101 скачивание
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Непрерывный DO + AI

Сообщение Andrew Lunev »

asd1379 писал(а):1) Не могу получить вменяемые осциллограммы. Похоже, что данные теряются.
Еще как теряются. Express приборы на каждой итерации конфигурируют задачу, запускают, выполняют, останавливают. На это процесс уходит много времени. Если важна производительность и непрерывность измерений, то используйте :vi: из палитры DAQmx, а не Express. Там вы сможете запустить задачу и потом в цикле просто получать порцию данных без дополнительных накладных расходов времени.
asd1379
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 апр 2013, 14:53
Версия LabVIEW: 2010
Контактная информация:

Re: Непрерывный DO + AI

Сообщение asd1379 »

Andrew Lunev писал(а):
asd1379 писал(а):1) Не могу получить вменяемые осциллограммы. Похоже, что данные теряются.
Еще как теряются. Express приборы на каждой итерации конфигурируют задачу, запускают, выполняют, останавливают. На это процесс уходит много времени. Если важна производительность и непрерывность измерений, то используйте :vi: из палитры DAQmx, а не Express. Там вы сможете запустить задачу и потом в цикле просто получать порцию данных без дополнительных накладных расходов времени.
Большое спасибо за участие.
Если я правильно вас понял, то вы рекомендуете отказаться от использования блоков «DAQ Assistant», а вместо этого сконфигурировать входы и выходы посредством vi из Measurment I/O --> NI-DAQmx. Это действительно правильный шаг, только как это сделать я не совсем пока представляю. Может кинете ссылочку на какой-нибудь более-менее годный пример или ветку форума, если не затруднит конечно.
asd1379
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 апр 2013, 14:53
Версия LabVIEW: 2010
Контактная информация:

Re: Непрерывный DO + AI

Сообщение asd1379 »

Andrew Lunev писал(а): из палитры DAQmx, а не Express.

Нашел похожую тему, только в другой ветке (http://www.labviewportal.org/viewtopic. ... Qmx#p48326). Буду разбираться. Может сможете что-то подсказать по 2 и 3 вопросам.
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Непрерывный DO + AI

Сообщение Andrew Lunev »

asd1379 писал(а):Если я правильно вас понял, то вы рекомендуете отказаться от использования блоков «DAQ Assistant», а вместо этого сконфигурировать входы и выходы посредством vi из Measurment I/O --> NI-DAQmx.
Все верно, описание функций и методы работы с ними есть практически в любом учебнике по LabView. Примеров работы с ними куча встроено в LabView, посмотрите их.
По пункту 2. Как раз переделка программы под DAQmx многократно ускорит ее работу. Еще избавьтесь от переменных и будет совсем хорошо.
3. Когда перепишете прогу с DAQmx, тогда и метод симуляции изменится, тогда уже можно будет обсуждать его корректность.
asd1379
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 апр 2013, 14:53
Версия LabVIEW: 2010
Контактная информация:

Re: Непрерывный DO + AI

Сообщение asd1379 »

Andrew Lunev писал(а): переделка программы под DAQmx многократно ускорит ее работу. Еще избавьтесь от переменных и будет совсем хорошо
Внес некоторые изменения, в том числе и DAQmx. Пока проверить работоспособность на оборудовании возможности нет. Оттого и в названии каналов пусто, но судя по примерам работать должно. Если не сложно, гляньте, чтоб я не мучился сомнениями.

Входы и выходы я скорректировал, но еще осталась проблема с записью данных, т.к. «Write To Measurement File» тоже из «Express». И тут я пока забуксовал.

Ещё выяснил, что использование локальных переменных - «последнее дело» в моём случае (вы тоже об этом писали). Может знаете какую-либо альтернативу?
В литературе указывают, что кроме переменных, обмен данными между циклами можно осуществить посредством уведомлений, очередей пользовательских событий, разделяемыми переменными и буфером реального времени RT FIFO. Но я не знаю, что лучше подойдёт в моей задаче.
_ver. 11.vi
DAQmx для AI и DO
(150.15 КБ) 119 скачиваний
Вложения
_ver 11.jpg
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Непрерывный DO + AI

Сообщение Andrew Lunev »

Ваш вариант работать не будет.
1. Три задачи одновременно запустить не получится. Переделайте на одну задачу с тремя каналами измерения.
2. Задачи должны быть непрерывного сбора, у вас же программа получит 10 измерений и остановится.
3. Очень советую убрать внутри цикла добавление кусков данный в Waveform. Непонятно зачем это делать, но времени и памяти уходит очень много. Эти кусочки надо просто дописывать в файл, а не хранить все это в сдвиговом регистре.
asd1379
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 апр 2013, 14:53
Версия LabVIEW: 2010
Контактная информация:

Re: Непрерывный DO + AI

Сообщение asd1379 »

Andrew Lunev писал(а):1. Три задачи одновременно запустить не получится. Переделайте на одну задачу с тремя каналами измерения.
Я пытался на один "DAQmx Start Task" завести данные от трёх “DAQmx Timing” но не вышло. Может надо здесь использовать что-то вроде Merge Signals. Никак не найду пример для нескольких каналов. Может наведёте на мысль. :help:
Andrew Lunev писал(а):2. Задачи должны быть непрерывного сбора, у вас же программа получит 10 измерений и остановится.
Вы имеете ввиду замену “Finite Samples” на “Continuous Samples” в настройках VI “DAQmx Timing”?
Andrew Lunev писал(а): 3. Очень советую убрать внутри цикла добавление кусков данный в Waveform. Непонятно зачем это делать, но времени и памяти уходит очень много. Эти кусочки надо просто дописывать в файл, а не хранить все это в сдвиговом регистре.
А чем лучше воспользоваться: запись в текстовый файл, TDMS, Binary file или чем-то ещё? Или это через DAQmx тоже делается.
asd1379
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 апр 2013, 14:53
Версия LabVIEW: 2010
Контактная информация:

Re: Непрерывный DO + AI

Сообщение asd1379 »

По первому вопросу в help вычитал, что можно назначить несколько физических каналов через “DAQmx Flatten Channel String” и завести их на “DAQmx Create Virtual”, но у меня на 3-х каналах разный диапазон входных величин и масштабирование. Можно ли эти параметры связать в массив и завести в блок или тут по-другому действовать надо?
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Непрерывный DO + AI

Сообщение Andrew Lunev »

С несколькими каналами конфигурация, как на картинке.
В какой файл лучше сохранять решать вам, у всех форматов есть плюсы и минусы. Попробуйте TDMS, думаю вам понравится.
И конечно надо заменить “Finite Samples” на “Continuous Samples”, но надо и другие настройки поменять, посмотрите примеры с “Continuous Samples”.
Вложения
DAQconfig.PNG
asd1379
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 апр 2013, 14:53
Версия LabVIEW: 2010
Контактная информация:

Re: Непрерывный DO + AI

Сообщение asd1379 »

Это какой-то кошмар. Решил проверить работоспособность программки на предмет приёма сигналов. NI USB-6251 не было, вместо неё взял 6009.
Выскакивает ошибка Error -200489.
Вложения
Error -200489.jpg
Error -200489.jpg (61.75 КБ) 5904 просмотра
_ver. 13a.vi
(87.84 КБ) 100 скачиваний
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Непрерывный DO + AI

Сообщение Andrew Lunev »

У вас все ошибки из-за элементарной невнимательности. Вам же программа пишет, что вы создали два канала с одинаковым именем Uc, откройте код и увидите, что это действительно так. Нулевой и второй канал имеют одинаковое имя.
vova1306
beginner
beginner
Сообщения: 14
Зарегистрирован: 19 апр 2013, 12:57
Версия LabVIEW: 2012
Контактная информация:

Re: Непрерывный DO + AI

Сообщение vova1306 »

Здравствуйте!
У меня похожая задача. Нужно записать с помощью NI 6363 сигналы с 32 каналов (это по максимуму) с частотой порядка 30 кГц (на самом деле такие высокочастотные каналы не все; но ,как я понимаю, частота опроса для всех каналов одна), вывести на экран (с небольшой обработкой) и записать в файл (я так понимаю в моём случае это надо делать после окончания эксперимента). Время опыта порядка пяти минут. Пока у меня нет самой АЦП, я хотел попробовать с помощью MAX съэмулмровать её и написать простенькую программу. Опыта работы с LaabView тоже нет. Поигрался только собственно с языком программирования, а вот по системам сбора информации книг в интернете не нашёл (включая ссылки на форуме). Поэтому просьба если у кого есть работающие ссылки на такого рода документацию (на русском языкке) выложить. Прежде всего, хотелось бы почитать упомянутое здесь пособие по курсу "системы сбора данных" и книгу: Магда. LabView. Практический курс для инженеров и разработчиков. И просьба прокоментировать мои вопросы. Программу прикладываю.
1. В Help DAQmx нашёл, что при эмуляции на вход подаётся синусиода с трёхпроцентным шумом с непонятной частотой и амплитудой. Можно ли задавать форму (прямоугольные импульсы, пилообразные), частоту и амплитуду?
2. Можно ли получать не напряжение, а разряды АЦП?
3. Я что-то делаю не так. Меняя частоту оцифровки и размер буфера, получаю разную частоту входной синусоиды?
4. В какой-то момент (при разных частоте и размере буфера по разному) появляется такая ошибка:
Attempted to read samples that are no longer available. The requested sample was previously available, but has since been overwritten.
Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem.
Увеличивая частоту и размер буфера от ошибки не избавляюсь.
5. Наверное (судя потому, что уважаемый гуру не рекомендовал DAQ Assistant) в моём случае и Build Table нельзя использовать?
6. Для хранения данных в оперативной памяти нужно заводить переменные, использовать структуры Chart и Table или какой-то другой способ?
Вложения
MySample2.vi
(38.86 КБ) 108 скачиваний
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Непрерывный DO + AI

Сообщение Andrew Lunev »

Учебник "Системы сбора данных" является собственностью NI и они не разрешают выкладывать его в свободный доступ. Так что или обращайтесь в офис NI, они с радостью продадут вам экземпляр, или ищите на просторах инета, я не раз встречал отсканированные версии этого учебника.
1. Менять настройки сигнала нельзя. Он ведь тестовый, только проверить работоспособность вашей задачи сбора данных. Если надо отработать алгоритм обработки, то замените сбор данных с платы генератором сигнала. То есть сначала проверяете работоспособность измерений на эмуляторе, потом отлаживаете алгоритмы с генератором.
2. Можно, настройте ваш DAQmx Read (VI) на формат RAW.
3. Так устроен эмулятор платы, именно поэтому и не понятно какой частоты генерируется синусоида эмулятором, что она зависит от частоты оцифровки.
4. У вас сбор данных получается по одной точке, то есть вы при частоте 1 кГц тысячу раз в секунду считываете данные из буфера. Лучше читать реже и большими пачками, это значительно разгрузит процессор. То есть для одноканального варианта надо использовать DAQmx Read (VI) в варианте "Analog 1D DBL 1Chan NSamp".
5. Использовать можно все, но некоторые варианты в десятки раз менее быстродействующие. Вы же 1000 раз записываете по одному значению в файл. Лучше делать это 10 раз в секунду по 100 значений или еще реже. Тогда и Express VI можно оставить.
6. Для хранения данных нужно место, но как его реализовать существует больше десятка вариантов и у каждого есть плюсы и минусы. Объясните, что вы собираетесь там хранить и тогда можно подобрать оптимальный вариант. Чем не устраивает вариант с хранением в файле?
vova1306
beginner
beginner
Сообщения: 14
Зарегистрирован: 19 апр 2013, 12:57
Версия LabVIEW: 2012
Контактная информация:

Re: Непрерывный DO + AI

Сообщение vova1306 »

Andrew Lunev,

Спасибо, большое! Кое-что стало проясняться. Можно я ещё Вас немного попытаю?
Задачу я свою обрисовал. Причём, для начала я хочу записать с одного канала, но при f=1мГц (что примерно соответствует 32 канала по 30 кГц). Для того, чтобы понять успею ли я считать все данные. Поскольку запись в файл - операция достаточно медленная, а длительность опыта не более пяти минут, то я думал считать данные с АЦП, например, в массив (примерный объём: 300 сек * 1мГц * 2б = 0.6 Гб). А потом (после завершения опыта) записать в файл. Не знаю насколько этот алгоритм в моём случае будет правильным? Вот, собственно, почему я интересовался разрядами АЦП (экономия памяти).
1. А при выборе RAW - нельзя выбрать NSamp ?
2. Не могу избавиться от ошибки указанной в предыдущем сообщении. Поставил "Analog 1D DBL 1Chan NSamp". Пробовал играться разными соотношениями частоты, размера буфера и NSamp. Ничего не получается. И если про соотношение частоты и размера буфера довольно однозначно написано в Help (при f=1мГц SizeBuff не меньше 1 МS), то про NSamp как-то неопределённо. Может, что-нибудь подскажите.
3. При большом значении Chart History Length ( 300 сек * 1мГц ; хотел использовать как один из вариантов для хранения всех данных за опыт) - резко падает скорость работы компа.
4. В Build Table точность можно задавать только для всей таблицы в целом (для отдельных столбцов можно?)?
5. Частоту опроса разных каналов нельзя задавать разной (имею ввиду- железо)?
P.S. Поискал в интернете эти две книги - не нашёл. Может кто-нибудь поделится рабочими ссылками на них.
Ответить

Вернуться в «Обработка сигнала»