Генерация сигнала с помощью NI 9263

Захват, обработка и генерирование сигнала
Ответить
sashoo
interested
interested
Сообщения: 5
Зарегистрирован: 02 сен 2013, 08:13
Версия LabVIEW: 2012
Контактная информация:

Генерация сигнала с помощью NI 9263

Сообщение sashoo »

Добрый день!

Испытываю некоторые трудности с генерацией произвольного сигнала с помощью модуля NI 9263. Модуль установлен в cDAQ.
Мне требуется сделать такую программу, в которой можно было бы на лицевой панели задавать параметры синуисоды (частоту, фазу и амплитуду), а на аналоговом выходе NI 9263 получать соответствующий аналоговый сигнал. Причём, изменения должны происходить на ходу: чтобы я покрутил лицевую панель, а на выходе сразу или почти сразу изменённая синусоида появилась.

На деле же устройство захватывает параметры только с момента старта VI, генерирует всё время одну и ту же синусоиду и никогда её не обновляет. Параметры меняются только после рестарта VI (возможно, потому что рестартуется таск?)

Прежде чем писать, тщательно изучил примеры в example finder'е, но они не позволяют менять параметры сигнала на ходу. Смысл такой: во всех из этих примеров есть waveform chart/graph, который показывает, какой сигнал должен получиться. Он, как правило, обновляет синусоиду по моему требованию. Поменял частоту - она сразу же отобразилась. Но вот с NI 9263 сигнал идёт всегда первоначальный. Проверял измерительными модулями и внешним осциллографом на всякий случай - результат такой же, сигнал не меняется.

Пример, на котором я остановился, называется Voltage (non-regeneration) Continuous Output. Выбрал я его потому, что DAQmx Write и Waveform находятся оба внутри цикла, и поэтому обязаны реагировать на изменения параметров (в отличие от других примеров, где этого нет). Тем не менее, аналоговый сигнал на выходе не изменяется. Пробовал также в PropertyNode DAQmx Write в том примере изменить значение RegenMode с Do Not Allow Regeneration на Allow Regeneration - не помогло. Другой пример, Voltage - continuous output, не записывает новых значений в цикле, и поэтому изменить в этот примере сигнал хотя бы на вейвформе можно, но только перезапустив приложение.

В Voltage (non-regeneration) Continuous Output программная часть работает, как ожидается, но аналоговый сигнал не изменяется, хотя параметры нового сигнала обновляются в цикле. Аналоговый сигнал изменяется только при перезапуске приложения даже если изменить значение RegenMode. Словно бы DAQmx Write не реагирует на новые параметры.

Возможно ли добиться того, чтобы DAQmx Write всё-таки реагировал на изменения, или железка не может без останова сгенерировать новый сигнал?
Аватара пользователя
Aleksey Feoktistov

Activity Gold Silver Black
leader
leader
Сообщения: 898
Зарегистрирован: 20 янв 2009, 00:15
Награды: 6
Версия LabVIEW: 2015
Откуда: Tyumen
Поблагодарили: 2 раза
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение Aleksey Feoktistov »

sashoo, покажите Ваш код и фрагмент кода или :vi: , думаю, проблему решим
sashoo
interested
interested
Сообщения: 5
Зарегистрирован: 02 сен 2013, 08:13
Версия LabVIEW: 2012
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение sashoo »

Я испытываю исключительно тот пример, который есть в example finder для DAQmx, пытаюсь от него добиться требуемого функционала;
Ниже представлены скриншоты этого примера (Voltage (non-regeneration) Continuous Output). Постарался немного покомпактнее расположить элементы.
Общий вид программы
Общий вид программы
И самое главное, цикл:
Цикл
Цикл
Суть такова, что Waveform Graph обновляется в цикле и показывает всё правильно. А вот DAQmx write не реагирует никак: устройство продолжает генерировать тот сигнал, который был задан с лицевой панели через Output Array при старте VI, и изменений аналогового сигнала не наблюдается

Мой вопрос выше можно переформулировать так: здесь не хватает какого-либо программного решения, или же это ограничение железки? Пытался писать в саппорт. Они говорят, что железка всё может, и продолжают указывать на Waveform Chart, но с ним-то проблем как раз нет, мне фактический сигнал нужен с устройства
Аватара пользователя
IvanLis

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

Re: Генерация сигнала с помощью NI 9263

Сообщение IvanLis »

sashoo писал(а):Суть такова, что Waveform Graph обновляется в цикле и показывает всё правильно. А вот DAQmx write не реагирует никак: устройство продолжает генерировать тот сигнал, который был задан с лицевой панели через Output Array при старте VI, и изменений аналогового сигнала не наблюдается
Проверить нет возможности, но зрительно можно сделать следующие выводы.

Вы подаете на плату массив состоящий из сигналов. По логике каждый элемент массива должен писаться в свой канал ввода/вывода.
У Вас активен один канал, на нем Вы и видите сигнал, остальные уходят "в некуда".
Если хотите, что бы плата генерировала различные сигналы по очереди, то и нужно их либо подавать по очереди и воспроизводить, либо писать все в один сигнал - WaveForm.
sashoo
interested
interested
Сообщения: 5
Зарегистрирован: 02 сен 2013, 08:13
Версия LabVIEW: 2012
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение sashoo »

IvanLis писал(а):Вы подаете на плату массив состоящий из сигналов. По логике каждый элемент массива должен писаться в свой канал ввода/вывода.
У Вас активен один канал, на нем Вы и видите сигнал, остальные уходят "в некуда".
Да, верное замечание. Я тоже обратил было внимание на это и с этими целями переделывал программу под один Waveform (вместа массива и внутреннего цикла были просто параметры для одного сигнала). Тем не менее, это не помогло; реакция такая же. К сожалению, прямо сейчас не могу продемонстрировать, как я переделал этот пример, но постараюсь выложить скриншот несколько позже.

Однако, это оригинальный, неизменённый с точки зрения структуры программы пример.
Аватара пользователя
Andrew Lunev

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

Re: Генерация сигнала с помощью NI 9263

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

Пример вполне работоспособный. Но есть несколько нюансов в работе непрерывного вывода с обновлением. Данные, которые генерируются в программе посылаются в буфер, а оттуда уже передаются на модуль вывода (ЦАП) с его заданной частотой обновления. Если вы обновили данные в программе, то еще не значит, что они мгновенно обновятся на выходе, они обновятся только тогда, когда в буфере выйдут все предыдущие данные.
Например если записать в буфер 1000 точек и выводить данные на частоте 1 Гц, то новая порция данных из буфера появится на ЦАП только через 1000 секунд.
Покажите все текущие значения индикаторов, чтобы понять, сколько данных записывается в буфер и как часто они выводятся на ЦАП.
Посмотрите скорость работы цикла, возможно он выполняется очень часто и за первую секунду работы забивает буфер на несколько часов вперед и тогда реакции напряжения на ЦАП придется ждать очень долго...
sashoo
interested
interested
Сообщения: 5
Зарегистрирован: 02 сен 2013, 08:13
Версия LabVIEW: 2012
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение sashoo »

Andrew Lunev писал(а):Если вы обновили данные в программе, то еще не значит, что они мгновенно обновятся на выходе, они обновятся только тогда, когда в буфере выйдут все предыдущие данные.
Большое спасибо за замечание. У меня были такие подозрения, но я не был заведомо уверен, как можно решить эту проблему.

Прикрепляю скриншот лицевой панели, где видны используемые мной значения. Отмечу только, что на скриншоте хоть и выставлена частота сигнала 50 Гц, на деле предполагается генерация сигнала 200 Гц. В первую очередь необходима возможность изменения фазы и амплитуды.
Лицевая панель
Лицевая панель
Также прикрепляю скриншот немного изменённой программы, без входного массива сигналов.
Вариант цикла без массива
Вариант цикла без массива
Отмечу, что в исходном примере отсутствует возможность изменения фазы; это, по сути, единственное изменение, которое я внёс в пример.
Нужно ли вывести какую-то дополнительную информацию? Возможно ли всё-таки "смыть" буфер до того, как выйдут предыдущие значения, и занести в него новый сигнал?
Аватара пользователя
Andrew Lunev

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

Re: Генерация сигнала с помощью NI 9263

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

C вашими настройками буфер полностью обновляется за одну секунду. Соответственно, цикл должен работать с частотой 1 Гц. Проверьте частоту работы цикла, если она выше, то поставьте задержку в 1000 мс.
sashoo
interested
interested
Сообщения: 5
Зарегистрирован: 02 сен 2013, 08:13
Версия LabVIEW: 2012
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение sashoo »

Andrew Lunev писал(а):C вашими настройками буфер полностью обновляется за одну секунду. Соответственно, цикл должен работать с частотой 1 Гц. Проверьте частоту работы цикла, если она выше, то поставьте задержку в 1000 мс.
Большое спасибо!
Поставил внутри цикла Wait Until Next ms Multiple с 1000 в качестве параметра, всё заработало, теперь можно генерировать произвольный сигнал и изменять его на ходу.
Асія
interested
interested
Сообщения: 3
Зарегистрирован: 16 мар 2014, 23:38
Версия LabVIEW: 2012
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение Асія »

здравствуйте! простите за некорректную просьбу: вы не могли б мне кинуть этот вариант программы. Я новичок и у меня очень похожая задача, просто понимаю что сама не справлюсь, спасибо :thank:
danya
junior
junior
Сообщения: 52
Зарегистрирован: 23 мар 2015, 18:29
Версия LabVIEW: 2010
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение danya »

Добрый день суток!
У меня похожий вопрос!
Я формирую синус и сразу его считываю. Когда я изменяю один из параметров во время работы программы(амплитуду или частоту например), то на input значения меняются не сразу, а только спустя несколько операций. С чем это связано? и Каким образом это можно исправить? Привожу скриншоты программы и результата.
Вложения
Безымянный.jpg
Белый график - output, красный - input
Белый график - output, красный - input
Аватара пользователя
Andrew Lunev

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

Re: Генерация сигнала с помощью NI 9263

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

danya писал(а):У меня похожий вопрос!
Ответ на него тоже похожий. Я выше уже подробно на него ответил. Читайте, у вас та же проблема.
Небольшие замечания:
1. Посмотрите на картинку кода, вы на ней много чего можете увидеть? Я например ничего не вижу, разрешение слишком низкое. Прикладывайте сам код, а не картинку.
2. Вам уже два раза советовали разделить циклы. До сих пор не сделали. Советую третий раз...
danya
junior
junior
Сообщения: 52
Зарегистрирован: 23 мар 2015, 18:29
Версия LabVIEW: 2010
Контактная информация:

Re: Генерация сигнала с помощью NI 9263

Сообщение danya »

Простите за навязчивость и за непонимание, но я чем дальше тем больше не путаюсь.
Я пробовала два цикла. Полагаю, что их можно синхронизировать, н-р с помощью очереди, но на одном графики отобразить и вход, и выход не знаю в этом случае как.
Простите, картинка действительно ужасная. Приложу код. Возможно я вообще не права, объединив таким образом графики. И еще, у меня такое ощущение, что мне необходимо просто правильно настроить все размеры буфера ,частот и т.д., но у меня пока что не получается. Возможно я вообще не так сделала по сути.
Вложения
AO_AI.vi
(35.4 КБ) 226 скачиваний
Последний раз редактировалось danya 25 июн 2015, 15:23, всего редактировалось 1 раз.
Аватара пользователя
Andrew Lunev

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

Re: Генерация сигнала с помощью NI 9263

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

1. Файл не открывается. Похоже на ошибку при передаче на сайт. Залейте файл еще раз.
2. Вам сначала надо разобраться в основах ввода/вывода данных. Лучше всего прочитать учебник по курсу "Системы сбора данных"

Как работает у вас:
1. Вы генерируете и записываете массив в память платы и выводите на график. Но на выходе платы этот массив появляется не мгновенно, а с вашей частотой выдачи данных. На графике же он отображается моментально. Например если создаете массив из тысячи точек и выводите с частотой 1 кГц, то смещение будет на одну секунду.
2. Данные с платы вы собираете так же сначала в буфер платы, а как наберется в нем нужное кол-во данных, так выводите на график. Если буфер равен тем же 1000 точек и частота 1 кГц, то получаете вывод на экран с задержкой еще на секунду. В итоге общее смещение графиков - две секунды.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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