Страница 1 из 1

Нужна помощь с правильным сбором данных, pls hlp

Добавлено: 05 мар 2019, 11:53
Blinky_Pinky
Доброго времени суток! Нужна помощь\совет по правильному сбору данных

Задача: Нужен ВП для управления экспериментом по циклическому нагружению образца. С его помощью нужно включать электродвигатель, который отвечает за нагружение, управлять им, а также собирать данные с трех датчиков(сила, перемещение, температура). Эксперименты проходят при частоте нагружения aka частоте вращения двигателя 0-50 Гц, в силу этого необходима относительно высокая частота съема данных с датчиков, порядка 1-5 кГц. Программа получает на вход файл, в котором записано сколько вольт подавать на двигатель и сколько времени в секундах. При запуске программы идет съем данных с датчиков и отрисовка граффиков, чтобы можно было убедиться, что все ок, но мы не в состоянии эксперимента, поэтому эти данные нам не интересны и их не пишем. При нажатии на кнопку начало эксперимента, идет чтение входного файла, крутится двигатель и собираются данные, которые будут записаны в файл для последующей обработки. На выходе необходимо получить файл о четырех столбцах, в которых будет отсечка времени и значение с каждого датчика. Опционально хотелось бы видеть график в реальном времени, если только это не помешает быстродействию и точному сбору данных.

Проблема: Собственно, я не очень разобрался с частотой съема данных. Насколько я понял, что за это отвечает условно три параметра, input rate из Sample clock, число выборок на канал (размер буфера?), и samples to read в самом DAQmx read, если выбрать опцию Nsamp. Несмотря на то, что я по мануалам, кажется, понял смысл каждого в отдельности, правильно выставить значения не получается, как их не подбирал. Ниже буду скрины блок диаграммы и сам ВП, при таком коде в выходном файле строк сильно меньше, чем, например, выставленная 1000, на секунду, да и отсечки времени не раз в 1мс, а сильно реже. Например, при частоте 1000выб/с и буффере 10 получается всего ~100 строк в файле, да и само время в нем крайне странное (приложу скрин)

Вопрос:
(в дурацкой форме) Что я делаю не так?
(в нормальной) Возможно стоит частично/глобально реорганизовать структуры программы? И какие значения для тех трех параметров нужны, чтобы точно получать точки с частотой ~3 кГц? На форуме уже встречал записи о том, что на быстродействии может сказаться риал-тайм отрисовка графиков и запись в файл на каждой итерации цикла, но, к сожалению, проблема остается, даже если графики убрать, и данные сохранять в большой массив, и только после все вместе писать в файл. И существует ли более правильный способ получать отсечку времени, кроме того, что есть в блок-диаграмме? а то этот кажется довольно костыльным.

P.S. Я являюсь абсолютным новичком в лабвью, спросить в моем НИИ совершенно некого, разбирался со всем сам по литературе, гайдам и форуму, поэтому конструктивная критика по написанию в целом кода приветствуется, буду очень благодарен за советы/подсказки по этому поводу
P.P.S плата PCI 6221, :labview: 8.2 Ниже скрины и сам ВП.
Большое спасибо за помощь, я тупенький походу, раз сам не разобрался, но форум большая надежда!

Re: Нужна помощь с правильным сбором данных, pls hlp

Добавлено: 05 мар 2019, 14:29
Borjomy_1
Посмотрите в примерах (Help->Find Examples) пример "Analog Input - Syncronization"
там показано, как реализовать синхронный сбор с разных плат. В вашем случае - это синхронный сбор и вывод. Тут, правда, есть нюанс - а именно то, что данные на ЦАП не могут поступить мгновенно после вызова функции. Тут надо думать.

Re: Нужна помощь с правильным сбором данных, pls hlp

Добавлено: 05 мар 2019, 17:23
taras_33
Один While цикл внутри другого меня всегда настораживает (FGV не в счет). Добавлять по одному значению каждую миллисекунду у Вас не получится. Вместо этого "накапливайте" данные с определенной частотой и, скажем каждые 100mS, выводите на график, анализируйте и тд. Поэтому структуру программы нужно менять. Многоканальный сбор данных, например как здесь, только изменить под свои "хотелки". Нужен сбор с чатотой 5кГц - Sample Rate = 5000, график будем обновлять каждые 100mS - sample to read = 500 ( пока прочитаем 500 точек на частоте 5000, пройдет 0.1 секунда, поэтому и задержка в цикле не нужна - Read.vi обеспечит ее). Не забываем что вход samples per input channel (Timing) в режиме Continuous работает как буфер, посему значение выставляем раза в 2 - 3 больше количества точек. Скажем 1500 для 500. Покрутился Ваш двигатель скажем 5 секунд, остановили сбор (либо тупо перестали обновлять график) и вывели все что на графике в таблицу и получите вы 25000 значений с отсчетом в 200 микросекунд (1/5000) для каждого канала. Примерно так.

Re: Нужна помощь с правильным сбором данных, pls hlp

Добавлено: 06 мар 2019, 13:24
Blinky_Pinky
taras_33 писал(а): Нужен сбор с частотой 5кГц - Sample Rate = 5000, график будем обновлять каждые 100mS - sample to read = 500 ( пока прочитаем 500 точек на частоте 5000, пройдет 0.1 секунда, поэтому и задержка в цикле не нужна - Read.vi обеспечит ее).
Правильно ли я понимаю, что тогда на одной итерации цикла мы будем получать 500 точек, но только одну отсечку времени на них все? И если да, нет ли возможности получаться каждой точке соответствующее время? мне это было бы важно...

Re: Нужна помощь с правильным сбором данных, pls hlp

Добавлено: 06 мар 2019, 14:38
IvanLis
Blinky_Pinky писал(а):Правильно ли я понимаю, что тогда на одной итерации цикла мы будем получать 500 точек, но только одну отсечку времени на них все? И если да, нет ли возможности получаться каждой точке соответствующее время? мне это было бы важно...
Да, правильно.
Время для каждой точки можно рассчитать зная начало сбора данных (первая точка) t0 и время между отсчетами dt (или частоту дискретизации dt=1/Fs).
Т.е. для каждого элемента массива, по его индексу, получается время...

Re: Нужна помощь с правильным сбором данных, pls hlp

Добавлено: 06 мар 2019, 15:23
taras_33
В догонку к сообщению от IvanLis. Если уж совсем "придраться" к точности, то Sample rate можно уточнить воспользовавшись Timing property node, потому как фактическая частота может немного отличаться от запрашиваемой. Подробности тут

Re: Нужна помощь с правильным сбором данных, pls hlp

Добавлено: 23 мар 2019, 22:30
Blinky_Pinky
taras_33 писал(а): Добавлять по одному значению каждую миллисекунду у Вас не получится.
А можно еще вопрос, почему это невозможно? В литературе +- одно и тоже говорится разными словами про ввод/вывод, объяснения этому я найти не смог.

btw, большое спасибо вам за ответы, очень помогло разобраться!