Finite acquisition+continuous generation
-
- beginner
- Сообщения: 24
- Зарегистрирован: 22 янв 2013, 17:14
- Версия LabVIEW: 2009, 2015
- Контактная информация:
Finite acquisition+continuous generation
Здравствуйте. Мне нужно было сделать так,чтобы гармонический сигнал с платы NI PCI 6251 проходил через нейкий четырехполюсник и оцифровывался этой же платой для определения амплитуды и фазы сигнала. То есть, это должно было быть чтото вроде исследования АЧХ и ФЧХ цепи. Как я это хотел сделать показано на рисунке. Таким образом, я так понял, что сигнал на время сбора данных должен генерироваться не прерываясь, а сам бор данных у меня будет конечный. Все это должно происходить циклически для каждой новой частоты синусоиды. Я сделал остановку генерации с помощью Is task done? в цепочке сбора данных. Запуск сбора данных происходит по тактовому генератору ЦАП с задержкой.
Проблема возникла в том, что у меня остановка генерации происходит почему то раньше, чем заканчивается сбор данных. Это видно на втором рисунке.
Так вот у меня вопрос как проследить за тем чтоб все выборки собраны и только тогда остановить работу ЦАП? Или я вообще неправильно это реализовал?
Заранее спсибо и извините, если криво объяснил проблему.
Проблема возникла в том, что у меня остановка генерации происходит почему то раньше, чем заканчивается сбор данных. Это видно на втором рисунке.
Так вот у меня вопрос как проследить за тем чтоб все выборки собраны и только тогда остановить работу ЦАП? Или я вообще неправильно это реализовал?
Заранее спсибо и извините, если криво объяснил проблему.
-
- advanced
- Сообщения: 150
- Зарегистрирован: 30 мар 2011, 22:41
- Награды: 1
- Версия LabVIEW: 8.2-2013
- Контактная информация:
Re: Finite acquisition+continuous generation
Privetvsem, извини, дорогой, но ты ВСЕ сделал неправильно. У тебя идет непрерывная инициализация и останов генерации. Найди в examples->hardware input and output -> DAQmx->Analog Generation-> Voltage -> Cont Gen Voltage Wfm-Ext Clk.vi, скопируй к себе и возьми за основу. Аналоговый прием найдешь рядом сам. Тоже скопируй. И не обьединяй ты их в единый цикл - им вполне достаточно своих!
-
- beginner
- Сообщения: 24
- Зарегистрирован: 22 янв 2013, 17:14
- Версия LabVIEW: 2009, 2015
- Контактная информация:
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Finite acquisition+continuous generation
Цикл здесь, похоже, на опрос разных частот, так что рано его удалять.
Privetvsem, в принципе ваша программа имеет право на существование. Проблема у вас возникает из-за того, что запуск задач вывода и опроса происходит в разное время. Их необходимо синхронизировать.
Privetvsem, в принципе ваша программа имеет право на существование. Проблема у вас возникает из-за того, что запуск задач вывода и опроса происходит в разное время. Их необходимо синхронизировать.
-
- beginner
- Сообщения: 24
- Зарегистрирован: 22 янв 2013, 17:14
- Версия LabVIEW: 2009, 2015
- Контактная информация:
Re: Finite acquisition+continuous generation
А это не тоже самое если просто подвести к функции DAQmx Trigger название источника, по которому срабатывает опрос, как это сделано у меня?
Я ща поробую расписать как я для себя понимаю то, что я наваял. У меня начинается генерироваться сигнал заданной частоты, причем пока не закончится опрос генерация не должна остановиться. Опрос начинается как только срабатывает тактовый генератор ЦАП, причем начало опроса задержанно на какоето время для того, чтобы закончились переходные процессы в исследуемой цепи, если такие возникнут. Опрос начинается, заканчивается, проверяется выполнено ли задание и отправляется остановка цикла в continuous generation, чтобы можно было перейти дальше по циклу на новую частоту сигнала и продолжать измерение. Я сделал так, чтобы при каждом новом сборе данных перерасчитывалось количество выборок, чтобы оцифровывалось 4 периода сигнала известной частоты.
На высоких частотах все работает. То есть АЦП успевает оцифровать 4 периода и расчет идет правильный. Но почему то на низких частотах, типа 10 Гц, генерация обрывается, не успев сгенерировать и пол периода. И, соответственно, как на том рисунке, у меня получается кусок синусоиды и прямая линия за ней.
Я далеко не мастер, но мот дело в Is Task Done? То есть он возращает, что задание выполнено, а на самом деле оно было отправлено на плату и только выполняться начало?
Еще раз простите за некомпетентность, я эти daqюшные фишки по примерам из книги разбирал.
Я ща поробую расписать как я для себя понимаю то, что я наваял. У меня начинается генерироваться сигнал заданной частоты, причем пока не закончится опрос генерация не должна остановиться. Опрос начинается как только срабатывает тактовый генератор ЦАП, причем начало опроса задержанно на какоето время для того, чтобы закончились переходные процессы в исследуемой цепи, если такие возникнут. Опрос начинается, заканчивается, проверяется выполнено ли задание и отправляется остановка цикла в continuous generation, чтобы можно было перейти дальше по циклу на новую частоту сигнала и продолжать измерение. Я сделал так, чтобы при каждом новом сборе данных перерасчитывалось количество выборок, чтобы оцифровывалось 4 периода сигнала известной частоты.
На высоких частотах все работает. То есть АЦП успевает оцифровать 4 периода и расчет идет правильный. Но почему то на низких частотах, типа 10 Гц, генерация обрывается, не успев сгенерировать и пол периода. И, соответственно, как на том рисунке, у меня получается кусок синусоиды и прямая линия за ней.
Я далеко не мастер, но мот дело в Is Task Done? То есть он возращает, что задание выполнено, а на самом деле оно было отправлено на плату и только выполняться начало?
Еще раз простите за некомпетентность, я эти daqюшные фишки по примерам из книги разбирал.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Finite acquisition+continuous generation
Не увидел... Да это тоже самое.
Еще один нюанс - у вас запускается задача АЦП независимо по времени, правильнее гарантированно запускать ее ДО запуска задачи ЦАП. Есть два случая - когда АЦП позже начинает или когда ЦАП раньше заканчивает. Опять-же, закрывать задачу выдачи следует после завершения задачи чтения. И цикл ожидания завершения выдачи не будет нужен. Т.е закрываться задачи будут только после чтения заданного количества отсчетов.
И непонятно, зачем вы ставите задержку в старте АЦП, она, кстати, тоже может портить вам работу.
Еще один нюанс - у вас запускается задача АЦП независимо по времени, правильнее гарантированно запускать ее ДО запуска задачи ЦАП. Есть два случая - когда АЦП позже начинает или когда ЦАП раньше заканчивает. Опять-же, закрывать задачу выдачи следует после завершения задачи чтения. И цикл ожидания завершения выдачи не будет нужен. Т.е закрываться задачи будут только после чтения заданного количества отсчетов.
И непонятно, зачем вы ставите задержку в старте АЦП, она, кстати, тоже может портить вам работу.
-
- beginner
- Сообщения: 24
- Зарегистрирован: 22 янв 2013, 17:14
- Версия LabVIEW: 2009, 2015
- Контактная информация:
Re: Finite acquisition+continuous generation
Задержку я поставил, чтобы закончились переходные процессы в исследуемой цепи от резких скачов уровня сигнала, кодга презапускается генерация
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Finite acquisition+continuous generation
В таком случае вам в генерацию надо заводить не чистый синус, а пропущенный через "окно Хамминга" (либо Ханнига). Никаких резких скачков тогда не будет. А результат вычисления амплитуды нужно будет просто умножить на 2. И вы хорошо будете видеть в результате - а насколько точно попадаете в нужные периоды. Если все таки хотите задержку, то организуйте ее таймером.
Насколько я понимаю, вы ведь выдаете заданные 4 периода, которые потом снимаете? И всё? Или число периодов у вас с запасом на переходные процессы?
Насколько я понимаю, вы ведь выдаете заданные 4 периода, которые потом снимаете? И всё? Или число периодов у вас с запасом на переходные процессы?
-
- beginner
- Сообщения: 24
- Зарегистрирован: 22 янв 2013, 17:14
- Версия LabVIEW: 2009, 2015
- Контактная информация:
Re: Finite acquisition+continuous generation
Генерируется у меня по плану не 4 периода, генерация у меня идет ровно столько сколько нужно чтобы оцифровать 4 периода + задержка+ прочие вещи торомзящие процесс измерения. То есть у меня Continuous generation, которая прекращается когда от ЦАПа на данной частоте уже ничего не нужно. Я так понимаю это называется continuous generation with regeneration.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Finite acquisition+continuous generation
В таком случае лучше резать уже результат, а не играться с запуском. Это проще контролировать.
-
- beginner
- Сообщения: 24
- Зарегистрирован: 22 янв 2013, 17:14
- Версия LabVIEW: 2009, 2015
- Контактная информация:
Re: Finite acquisition+continuous generation
Да, тогда, я так понимаю мне просто сделать запуск АЦП раньше чем ЦАП, и просто вырезать то что оцифровано было в начале?
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Finite acquisition+continuous generation
Ну да, причем тогда можно будет вырезать нужное число периодов (ведь число точек на период наперед известно) и таким образом убрать ошибку по вычислению фазы.
-
- beginner
- Сообщения: 24
- Зарегистрирован: 22 янв 2013, 17:14
- Версия LabVIEW: 2009, 2015
- Контактная информация:
Re: Finite acquisition+continuous generation
Нашел решение проблемы. Все оказалось очень глупо. Я просто забыл заносить в глобальную переменную, которая сигнализировала о завершении сбора данных, состояние false в начале каждой новой итерации цикла. Внизу прикрепил рисунок.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Finite acquisition+continuous generation
Вы всерьез думаете, что расположенная таким образом инициализация переменной будет выполняться в начале цикла потому, что находится левее и ниже? Возможно, сейчас оно будет так выполняться, но в общем случае - нет.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Finite acquisition+continuous generation
Да и установка значения task done? и параллельно останов цикла по условию task done?=true тоже не есть хорошо.