Непрерывный сбор данных

Захват, обработка и генерирование сигнала
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Непрерывный сбор данных

Сообщение antoha »

Необходимо осуществлять непрерывный сбор аналоговых данных (напряжение сети 50Гц) по одному каналу (плата PCI-6024E) и вычислять среднее значение на интервале 3 периодов.
Для решения этой задачи применил буферизованный аналоговый ввод со скоростью сканирования 1000. Как я понимаю для того, что-бы организовать вычисление среднего значения за 3 периода промышленной частоты необходимо, исходя из выбранной скорости сканирования, сделать определенную выборку, в данном случае 60 сканирований. Верный ли такой подход?
И еще, какой в таком случае должна быть величина буфера? При моем выборе в 4000
сканирований, индикатор scan backlog показывает 0, т.е. я понимаю, что опрос буфера
осуществляется быстрее, чем данные поступают туда при опросе. Или же все-таки наоборот, т.е. часть данных теряется? Зарнее благодарен.

З.Ы. Юзаю LabView 5.0.
Вложения
Image1.jpg
Аватара пользователя
Eugen Graf

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

Re: Непрерывный сбор данных

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

При величине буфера в 4000 и частотой в 1000 Герц твой прибор должен успеть обработать данные за 4 секунды. Ты считываешь по 60 значений за один раз и усредняешь эти 60 значений. То есть ты должен за четыре секунды считать 4000 значений иначе твой буфер переполнится (не сразу, но со временем).
В общем я думаю такой подход вполне подходит. Посмотрим что скажут другие.
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Re: Непрерывный сбор данных

Сообщение antoha »

Вообщем решил немного поэкспериментировать. Немного усложнил исходные данные, а именно: увеличил число каналов аналогового ввода до 4 (все сигналы гармонические частотой 50 Гц), увеличил число операций по обработке сигналов в цикле, уменьшил число считываемых значений за раз до 20, т.е. до одного периода каждого из 4 сигналов. Программа работала около 3 часов, при этом переполнение буфера не наблюдалось (переменная scan backlog=0). Однако загрузка ЦП была 100% и запуск любого другого приложения (например MS Word), как и следовало ожидать, длился в течение нескольких минут и приводил к небольшому переполнению буфера. ПК, на котором осуществлялось тестирование довольно-таки вшивенький (С-1500, 128 Мб ОЗУ).
Возникает вопрос, как же все-таки в этом случае подобрать значение буфера оптимальным?
Аватара пользователя
Eugen Graf

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

Re: Непрерывный сбор данных

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

А скажи, какие индикаторы ты применяешь? Если какие то графики или индикаторы с большим шрифтом, то в этом может быть проблема. Желательно выдавать значения на лицевую панель с частотой около 10 герц, всё равно если будет быстрее, то не успеешь число прочитать.

В общем попробуй для начала убрать вывод данных на лицевую панель и проверь сколько процентов ЦПУ у тебя съедается.
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Re: Непрерывный сбор данных

Сообщение antoha »

Ага, спасибо за совет. В понедельник на работе попробую. Отпишусь.
Аватара пользователя
Konstantin Sumenko

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

Re: Непрерывный сбор данных

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

А никакого таймаута в функции чтения не установлено получается. Т.е у цикла высокий приоритет выполнения.
Аватара пользователя
Eugen Graf

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

Re: Непрерывный сбор данных

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

Crowbar, если чтение буферизированное, то "задержка" сама по себе находится в функции чтения, а внешний хард на это время загружается. Может я ошибаюсь?
Аватара пользователя
Konstantin Sumenko

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

Re: Непрерывный сбор данных

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

По-моему это не всегда так. Если взять ф-ию DAQmx read, которая по умолчанию читает из буфера, то там вобще задержку можно в 0 установить и что получим: условно цикл, который выдает данные с задержками, обуслвленными временем обновления буфера, а они могут быть меньше 1мс и т.п.
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Re: Непрерывный сбор данных

Сообщение antoha »

Crowbar В этом случае, наверное, будет прерывание, обусловленное инерционностью операционки.
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Re: Непрерывный сбор данных

Сообщение antoha »

Crowbar писал(а):А никакого таймаута в функции чтения не установлено получается. Т.е у цикла высокий приоритет выполнения.
Пробывал делать задержку в цикле на 20 мс, все как в аптеке. Увеличение до 200 приводит к переполнению буфера и возникновению ошибки.

Вообщем, хочу сделать счетчик итераций цикла за 1 сек, чтоб проверить какое количество данных за это время можно получить, а исходя из этого и выбирать размер буфера. Конечно, это будет применимо только к моему ПК. Как вам такой подход?
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Re: Непрерывный сбор данных

Сообщение antoha »

Нашел в примерах LabView по аналоговому вводу VI Calculate buffer size. Правда описание к нему отсутствует и непонятно откуда берутся коэффициенты при расчете. Может кто разбирался с этим или мысли какие-нибудь появятся по этому поводу, а то у меня уже все перемешалось в голове.
Вложения
Image1.png
Image1.png (2.78 КБ) 7848 просмотров
Аватара пользователя
Konstantin Sumenko

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

Re: Непрерывный сбор данных

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

Размер буфера надо брать из расчета вычислительной нагрузки в данном цикле и из расчета, как скоро после первого вызова дойдет очередь до ф-ии чтения из буфера.
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Re: Непрерывный сбор данных

Сообщение antoha »

Т.е. я так понимаю его оптимальную величину можно определить только опытным путем и при этом она зависит от конфигурации компа?

Еще вопрос, если можно - при заданной частоте дискретизации, например 1000 Гц, заполнение буфера происходит по одному сканированному значению или же в него помещаются по 1000 значений через каждую секунду? т.е. может ли размер буфера быть меньше, чем частота дискретизации?

Заранее благодарен.
Аватара пользователя
Konstantin Sumenko

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

Re: Непрерывный сбор данных

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

От конфигурации компа зависит слабо. Заполнение буфера происходит непрерывно, в том смысле, что точки в него поступают по мере их прихода с АЦП, а не целым массивом. Размер буфера может быть меньше частоты дискретизации.
Аватара пользователя
antoha
beginner
beginner
Сообщения: 24
Зарегистрирован: 04 окт 2008, 12:38
Версия LabVIEW: 8.5
Контактная информация:

Re: Непрерывный сбор данных

Сообщение antoha »

Для закрепления: при одних и тех же исходных данных увеличение операций по обработке сигналов может привести к переполнению буфера и его размер придется увеличивать, правильно понимаю?
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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