Непрерывный сбор данных
- antoha
- beginner
- Сообщения: 24
- Зарегистрирован: 04 окт 2008, 12:38
- Версия LabVIEW: 8.5
- Контактная информация:
Непрерывный сбор данных
Необходимо осуществлять непрерывный сбор аналоговых данных (напряжение сети 50Гц) по одному каналу (плата PCI-6024E) и вычислять среднее значение на интервале 3 периодов.
Для решения этой задачи применил буферизованный аналоговый ввод со скоростью сканирования 1000. Как я понимаю для того, что-бы организовать вычисление среднего значения за 3 периода промышленной частоты необходимо, исходя из выбранной скорости сканирования, сделать определенную выборку, в данном случае 60 сканирований. Верный ли такой подход?
И еще, какой в таком случае должна быть величина буфера? При моем выборе в 4000
сканирований, индикатор scan backlog показывает 0, т.е. я понимаю, что опрос буфера
осуществляется быстрее, чем данные поступают туда при опросе. Или же все-таки наоборот, т.е. часть данных теряется? Зарнее благодарен.
З.Ы. Юзаю LabView 5.0.
Для решения этой задачи применил буферизованный аналоговый ввод со скоростью сканирования 1000. Как я понимаю для того, что-бы организовать вычисление среднего значения за 3 периода промышленной частоты необходимо, исходя из выбранной скорости сканирования, сделать определенную выборку, в данном случае 60 сканирований. Верный ли такой подход?
И еще, какой в таком случае должна быть величина буфера? При моем выборе в 4000
сканирований, индикатор scan backlog показывает 0, т.е. я понимаю, что опрос буфера
осуществляется быстрее, чем данные поступают туда при опросе. Или же все-таки наоборот, т.е. часть данных теряется? Зарнее благодарен.
З.Ы. Юзаю LabView 5.0.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Непрерывный сбор данных
При величине буфера в 4000 и частотой в 1000 Герц твой прибор должен успеть обработать данные за 4 секунды. Ты считываешь по 60 значений за один раз и усредняешь эти 60 значений. То есть ты должен за четыре секунды считать 4000 значений иначе твой буфер переполнится (не сразу, но со временем).
В общем я думаю такой подход вполне подходит. Посмотрим что скажут другие.
В общем я думаю такой подход вполне подходит. Посмотрим что скажут другие.
- antoha
- beginner
- Сообщения: 24
- Зарегистрирован: 04 окт 2008, 12:38
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Непрерывный сбор данных
Вообщем решил немного поэкспериментировать. Немного усложнил исходные данные, а именно: увеличил число каналов аналогового ввода до 4 (все сигналы гармонические частотой 50 Гц), увеличил число операций по обработке сигналов в цикле, уменьшил число считываемых значений за раз до 20, т.е. до одного периода каждого из 4 сигналов. Программа работала около 3 часов, при этом переполнение буфера не наблюдалось (переменная scan backlog=0). Однако загрузка ЦП была 100% и запуск любого другого приложения (например MS Word), как и следовало ожидать, длился в течение нескольких минут и приводил к небольшому переполнению буфера. ПК, на котором осуществлялось тестирование довольно-таки вшивенький (С-1500, 128 Мб ОЗУ).
Возникает вопрос, как же все-таки в этом случае подобрать значение буфера оптимальным?
Возникает вопрос, как же все-таки в этом случае подобрать значение буфера оптимальным?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Непрерывный сбор данных
А скажи, какие индикаторы ты применяешь? Если какие то графики или индикаторы с большим шрифтом, то в этом может быть проблема. Желательно выдавать значения на лицевую панель с частотой около 10 герц, всё равно если будет быстрее, то не успеешь число прочитать.
В общем попробуй для начала убрать вывод данных на лицевую панель и проверь сколько процентов ЦПУ у тебя съедается.
В общем попробуй для начала убрать вывод данных на лицевую панель и проверь сколько процентов ЦПУ у тебя съедается.
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Непрерывный сбор данных
А никакого таймаута в функции чтения не установлено получается. Т.е у цикла высокий приоритет выполнения.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Непрерывный сбор данных
Crowbar, если чтение буферизированное, то "задержка" сама по себе находится в функции чтения, а внешний хард на это время загружается. Может я ошибаюсь?
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Непрерывный сбор данных
По-моему это не всегда так. Если взять ф-ию DAQmx read, которая по умолчанию читает из буфера, то там вобще задержку можно в 0 установить и что получим: условно цикл, который выдает данные с задержками, обуслвленными временем обновления буфера, а они могут быть меньше 1мс и т.п.
- antoha
- beginner
- Сообщения: 24
- Зарегистрирован: 04 окт 2008, 12:38
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Непрерывный сбор данных
Crowbar В этом случае, наверное, будет прерывание, обусловленное инерционностью операционки.
- antoha
- beginner
- Сообщения: 24
- Зарегистрирован: 04 окт 2008, 12:38
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Непрерывный сбор данных
Пробывал делать задержку в цикле на 20 мс, все как в аптеке. Увеличение до 200 приводит к переполнению буфера и возникновению ошибки.Crowbar писал(а):А никакого таймаута в функции чтения не установлено получается. Т.е у цикла высокий приоритет выполнения.
Вообщем, хочу сделать счетчик итераций цикла за 1 сек, чтоб проверить какое количество данных за это время можно получить, а исходя из этого и выбирать размер буфера. Конечно, это будет применимо только к моему ПК. Как вам такой подход?
- antoha
- beginner
- Сообщения: 24
- Зарегистрирован: 04 окт 2008, 12:38
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Непрерывный сбор данных
Нашел в примерах LabView по аналоговому вводу VI Calculate buffer size. Правда описание к нему отсутствует и непонятно откуда берутся коэффициенты при расчете. Может кто разбирался с этим или мысли какие-нибудь появятся по этому поводу, а то у меня уже все перемешалось в голове.
- Вложения
-
- Image1.png (2.78 КБ) 7848 просмотров
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Непрерывный сбор данных
Размер буфера надо брать из расчета вычислительной нагрузки в данном цикле и из расчета, как скоро после первого вызова дойдет очередь до ф-ии чтения из буфера.
- antoha
- beginner
- Сообщения: 24
- Зарегистрирован: 04 окт 2008, 12:38
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Непрерывный сбор данных
Т.е. я так понимаю его оптимальную величину можно определить только опытным путем и при этом она зависит от конфигурации компа?
Еще вопрос, если можно - при заданной частоте дискретизации, например 1000 Гц, заполнение буфера происходит по одному сканированному значению или же в него помещаются по 1000 значений через каждую секунду? т.е. может ли размер буфера быть меньше, чем частота дискретизации?
Заранее благодарен.
Еще вопрос, если можно - при заданной частоте дискретизации, например 1000 Гц, заполнение буфера происходит по одному сканированному значению или же в него помещаются по 1000 значений через каждую секунду? т.е. может ли размер буфера быть меньше, чем частота дискретизации?
Заранее благодарен.
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Непрерывный сбор данных
От конфигурации компа зависит слабо. Заполнение буфера происходит непрерывно, в том смысле, что точки в него поступают по мере их прихода с АЦП, а не целым массивом. Размер буфера может быть меньше частоты дискретизации.
- antoha
- beginner
- Сообщения: 24
- Зарегистрирован: 04 окт 2008, 12:38
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Непрерывный сбор данных
Для закрепления: при одних и тех же исходных данных увеличение операций по обработке сигналов может привести к переполнению буфера и его размер придется увеличивать, правильно понимаю?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 871 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1224 Просмотры
-
Последнее сообщение Boxa
-
- 0 Ответы
- 502 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 272 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2451 Просмотры
-
Последнее сообщение rsv