Добрый вечер!
Пытаюсь непрерывно генерировать синус с помощью NI DAQCard 6036.
Генерация начинается, все как положено, но потом в какой-то момент времени цикл останавливается по приходу флага завершения задачи..при чем один раз запускаю , а генерация практически сразу останавливается, а иной раз может и минуту генерировать..т.е. время каждый раз разное и не понятно от чего зависит.. в чем проблема?что я не так делаю? Блок диаграмму прилагаю. Очень рассчитываю на вашу помощь!
Генерация синуса
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Генерация синуса
Небольшие замечания по коду:
1. Если сигнал у вас типа Waveform, то используйте в DAQmx Timing (Use Waveform), тогда настройки сигнала передадутся в генерацию и частота генерации будет меняться в одном месте в программе.
2. Проверять выполнена ли задача с максимально возможной частотой не имеет смысла. Поставьте задержку в цикле. Каждая проверка нагружает карту и возможно приводит к ошибкам генерации.
По поводу ошибки. Укажите какие настройки частоты и буфера сигнала используете. Скорее всего генерация прерывается по ошибке, которую вы не проверяете и не обрабатываете. У этой платы отсутствует буфер FIFO для ЦАП, поэтому возможно данные не успевают поступать в плату. Уменьшите частоту генерации сигнала и кол-во точек генерации. Это делается в Sine Waveform (sampling info).
Ко всему прочему ваша карта не работает через DMA, а только через прерывания, для режима через прерывание максимальная частота генерации 1кГц, так что даже не пытайтесь получить больше. Да и стабильный килогерц получить сложно.
1. Если сигнал у вас типа Waveform, то используйте в DAQmx Timing (Use Waveform), тогда настройки сигнала передадутся в генерацию и частота генерации будет меняться в одном месте в программе.
2. Проверять выполнена ли задача с максимально возможной частотой не имеет смысла. Поставьте задержку в цикле. Каждая проверка нагружает карту и возможно приводит к ошибкам генерации.
По поводу ошибки. Укажите какие настройки частоты и буфера сигнала используете. Скорее всего генерация прерывается по ошибке, которую вы не проверяете и не обрабатываете. У этой платы отсутствует буфер FIFO для ЦАП, поэтому возможно данные не успевают поступать в плату. Уменьшите частоту генерации сигнала и кол-во точек генерации. Это делается в Sine Waveform (sampling info).
Ко всему прочему ваша карта не работает через DMA, а только через прерывания, для режима через прерывание максимальная частота генерации 1кГц, так что даже не пытайтесь получить больше. Да и стабильный килогерц получить сложно.
- ProBoDiS
- beginner
- Сообщения: 42
- Зарегистрирован: 20 мар 2012, 01:57
- Версия LabVIEW: 2012
- Откуда: Москва
- Контактная информация:
Re: Генерация синуса
1)Мне частота не больше 10 Гц нужна, так что проблем с этим не должно быть.
2)DAQmx Timing (Use Waveform) тоже пробовал, такая же ерунда получается.
3) Задержку в цикл действительно что то забыл поставить, спасибо. Но я больше чем уверен что причина не в этом, но исправлю, посмотрим что получится.
Не могли бы вы показать как правильно сформировать сигнал и запустить его на DAQmx? был бы премного благодарен:)
2)DAQmx Timing (Use Waveform) тоже пробовал, такая же ерунда получается.
3) Задержку в цикл действительно что то забыл поставить, спасибо. Но я больше чем уверен что причина не в этом, но исправлю, посмотрим что получится.
Не могли бы вы показать как правильно сформировать сигнал и запустить его на DAQmx? был бы премного благодарен:)
Делай хорошо- плохо само получится!
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Генерация синуса
У вас вполне работоспособная программа. На других платах NI она должна работать, но именно NI DAQCard 6036 имеет некоторые ограничения и особенности из-за PCMCIA интерфейса . Так что дело не в коде, а в параметрах настройки вашей программы.
Реальная частота генерации синуса в вашей программе определяется двумя параметрами: frequency и rate. Какой из них 10 Гц?
Поставьте frequency=1 Гц, а rate=10 Гц и попробуйте программу в работе. Так же не забудьте в цикл добавить задержку например в 500 мс. Если и в таком варианте будет вылетать, то будем думать дальше. Так же посмотрите, что передается в кластере ошибок во время остановки программы.
Если в таком варианте перестанет вылетать, то увеличивайте rate пока не начнет вылетать. Максимальное теоретическое значение rate=1 кГц.
Реальная частота генерации синуса в вашей программе определяется двумя параметрами: frequency и rate. Какой из них 10 Гц?
Поставьте frequency=1 Гц, а rate=10 Гц и попробуйте программу в работе. Так же не забудьте в цикл добавить задержку например в 500 мс. Если и в таком варианте будет вылетать, то будем думать дальше. Так же посмотрите, что передается в кластере ошибок во время остановки программы.
Если в таком варианте перестанет вылетать, то увеличивайте rate пока не начнет вылетать. Максимальное теоретическое значение rate=1 кГц.
- ProBoDiS
- beginner
- Сообщения: 42
- Зарегистрирован: 20 мар 2012, 01:57
- Версия LabVIEW: 2012
- Откуда: Москва
- Контактная информация:
Re: Генерация синуса
В принципе если поиграться значениями этими то оно вроде перестает вылетать, или я так и не дождался.
Ошибка возникает -200016 "Property Node DAQmx Task (arg 1) in DAQmx Is Task Done.vi:1->Untitled 1.vi <append>
<B>Task Name: </B>_unnamedTask<16>". Возник новый вопрос: как высчитать реальную частоту? Какая связь между rate и frequency?
Спасибо!
Ошибка возникает -200016 "Property Node DAQmx Task (arg 1) in DAQmx Is Task Done.vi:1->Untitled 1.vi <append>
<B>Task Name: </B>_unnamedTask<16>". Возник новый вопрос: как высчитать реальную частоту? Какая связь между rate и frequency?
Спасибо!
Делай хорошо- плохо само получится!
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Генерация синуса
Все правильно, ошибка возникает из-за того, что данные не успевают поступать в ЦАП из LabView. О причинах я писал выше.
Rate это частота обновления данных на ЦАП. Frequency - частота синусоидального сигнала. Один и тот же сигнал если выдавать с разной частотой (rate) на выходе будет давать синусоиду разной частоты.
Чтобы этого не происходило и используется DAQmx Timing (Use Waveform), тогда задача аналогового вывода использует настройки генератора сигнала (берет их из Waveform).
Не забудьте только подключить Sine Waveform (sampling info) и поиграться значениями в нем. Там по умолчанию стоит 1000,1000. Я бы поставил 100,100 для вашей задачи.
Rate это частота обновления данных на ЦАП. Frequency - частота синусоидального сигнала. Один и тот же сигнал если выдавать с разной частотой (rate) на выходе будет давать синусоиду разной частоты.
Чтобы этого не происходило и используется DAQmx Timing (Use Waveform), тогда задача аналогового вывода использует настройки генератора сигнала (берет их из Waveform).
Не забудьте только подключить Sine Waveform (sampling info) и поиграться значениями в нем. Там по умолчанию стоит 1000,1000. Я бы поставил 100,100 для вашей задачи.
- ProBoDiS
- beginner
- Сообщения: 42
- Зарегистрирован: 20 мар 2012, 01:57
- Версия LabVIEW: 2012
- Откуда: Москва
- Контактная информация:
Re: Генерация синуса
Спасибо большое, Andrew Lunev!
Теперь все хорошо работает!
Теперь все хорошо работает!
Делай хорошо- плохо само получится!