Доброго времени суток! Нужна помощь\совет по правильному сбору данных
Задача: Нужен ВП для управления экспериментом по циклическому нагружению образца. С его помощью нужно включать электродвигатель, который отвечает за нагружение, управлять им, а также собирать данные с трех датчиков(сила, перемещение, температура). Эксперименты проходят при частоте нагружения 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, 8.2 Ниже скрины и сам ВП.
Большое спасибо за помощь, я тупенький походу, раз сам не разобрался, но форум большая надежда!
Нужна помощь с правильным сбором данных, pls hlp
-
- interested
- Сообщения: 6
- Зарегистрирован: 22 янв 2019, 21:46
- Версия LabVIEW: 8.2
- Контактная информация:
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Нужна помощь с правильным сбором данных, pls hlp
Посмотрите в примерах (Help->Find Examples) пример "Analog Input - Syncronization"
там показано, как реализовать синхронный сбор с разных плат. В вашем случае - это синхронный сбор и вывод. Тут, правда, есть нюанс - а именно то, что данные на ЦАП не могут поступить мгновенно после вызова функции. Тут надо думать.
там показано, как реализовать синхронный сбор с разных плат. В вашем случае - это синхронный сбор и вывод. Тут, правда, есть нюанс - а именно то, что данные на ЦАП не могут поступить мгновенно после вызова функции. Тут надо думать.
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Нужна помощь с правильным сбором данных, pls hlp
Один 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) для каждого канала. Примерно так.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- interested
- Сообщения: 6
- Зарегистрирован: 22 янв 2019, 21:46
- Версия LabVIEW: 8.2
- Контактная информация:
Re: Нужна помощь с правильным сбором данных, pls hlp
Правильно ли я понимаю, что тогда на одной итерации цикла мы будем получать 500 точек, но только одну отсечку времени на них все? И если да, нет ли возможности получаться каждой точке соответствующее время? мне это было бы важно...taras_33 писал(а): Нужен сбор с частотой 5кГц - Sample Rate = 5000, график будем обновлять каждые 100mS - sample to read = 500 ( пока прочитаем 500 точек на частоте 5000, пройдет 0.1 секунда, поэтому и задержка в цикле не нужна - Read.vi обеспечит ее).
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Нужна помощь с правильным сбором данных, pls hlp
Да, правильно.Blinky_Pinky писал(а):Правильно ли я понимаю, что тогда на одной итерации цикла мы будем получать 500 точек, но только одну отсечку времени на них все? И если да, нет ли возможности получаться каждой точке соответствующее время? мне это было бы важно...
Время для каждой точки можно рассчитать зная начало сбора данных (первая точка) t0 и время между отсчетами dt (или частоту дискретизации dt=1/Fs).
Т.е. для каждого элемента массива, по его индексу, получается время...
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Нужна помощь с правильным сбором данных, pls hlp
В догонку к сообщению от IvanLis. Если уж совсем "придраться" к точности, то Sample rate можно уточнить воспользовавшись Timing property node, потому как фактическая частота может немного отличаться от запрашиваемой. Подробности тут
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
- interested
- Сообщения: 6
- Зарегистрирован: 22 янв 2019, 21:46
- Версия LabVIEW: 8.2
- Контактная информация:
Re: Нужна помощь с правильным сбором данных, pls hlp
А можно еще вопрос, почему это невозможно? В литературе +- одно и тоже говорится разными словами про ввод/вывод, объяснения этому я найти не смог.taras_33 писал(а): Добавлять по одному значению каждую миллисекунду у Вас не получится.
btw, большое спасибо вам за ответы, очень помогло разобраться!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение