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

Простейшие вопросы в области инженерной разработки

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

Postby Blinky_Pinky on 05 Mar 2019, 11:53

Доброго времени суток! Нужна помощь\совет по правильному сбору данных

Задача: Нужен ВП для управления экспериментом по циклическому нагружению образца. С его помощью нужно включать электродвигатель, который отвечает за нагружение, управлять им, а также собирать данные с трех датчиков(сила, перемещение, температура). Эксперименты проходят при частоте нагружения 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 Ниже скрины и сам ВП.
Большое спасибо за помощь, я тупенький походу, раз сам не разобрался, но форум большая надежда!
Attachments
my_vi.vi
(123.43 KiB) Downloaded 17 times
my_vi_1.jpg
my_vi_2.jpg
my_vi_3.jpg
my_vi_4.jpg
result.jpg
"Странное" время
Blinky_Pinky
interested
interested
 
Posts: 6
Joined: 22 Jan 2019, 21:46
LabVIEW Version: 8.2
Karma: 0

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

Postby Borjomy_1 on 05 Mar 2019, 14:29

Посмотрите в примерах (Help->Find Examples) пример "Analog Input - Syncronization"
там показано, как реализовать синхронный сбор с разных плат. В вашем случае - это синхронный сбор и вывод. Тут, правда, есть нюанс - а именно то, что данные на ЦАП не могут поступить мгновенно после вызова функции. Тут надо думать.
Borjomy_1
expert
expert
 
Posts: 1894
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 328
VIP

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

Postby taras_33 on 05 Mar 2019, 17:23

Один 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!
User avatar
taras_33
developer
developer
 
Posts: 285
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

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

Postby Blinky_Pinky on 06 Mar 2019, 13:24

taras_33 wrote: Нужен сбор с частотой 5кГц - Sample Rate = 5000, график будем обновлять каждые 100mS - sample to read = 500 ( пока прочитаем 500 точек на частоте 5000, пройдет 0.1 секунда, поэтому и задержка в цикле не нужна - Read.vi обеспечит ее).


Правильно ли я понимаю, что тогда на одной итерации цикла мы будем получать 500 точек, но только одну отсечку времени на них все? И если да, нет ли возможности получаться каждой точке соответствующее время? мне это было бы важно...
Blinky_Pinky
interested
interested
 
Posts: 6
Joined: 22 Jan 2019, 21:46
LabVIEW Version: 8.2
Karma: 0

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

Postby IvanLis on 06 Mar 2019, 14:38

Blinky_Pinky wrote:Правильно ли я понимаю, что тогда на одной итерации цикла мы будем получать 500 точек, но только одну отсечку времени на них все? И если да, нет ли возможности получаться каждой точке соответствующее время? мне это было бы важно...


Да, правильно.
Время для каждой точки можно рассчитать зная начало сбора данных (первая точка) t0 и время между отсчетами dt (или частоту дискретизации dt=1/Fs).
Т.е. для каждого элемента массива, по его индексу, получается время...
User avatar
IvanLis
professor
professor
 
Posts: 4812
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2015, 2016
Karma: 763
hardware VIP bloggers teachers

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

Postby taras_33 on 06 Mar 2019, 15:23

В догонку к сообщению от 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!
User avatar
taras_33
developer
developer
 
Posts: 285
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 130
CLD VIP

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

Postby Blinky_Pinky on 23 Mar 2019, 22:30

taras_33 wrote: Добавлять по одному значению каждую миллисекунду у Вас не получится.

А можно еще вопрос, почему это невозможно? В литературе +- одно и тоже говорится разными словами про ввод/вывод, объяснения этому я найти не смог.

btw, большое спасибо вам за ответы, очень помогло разобраться!
Blinky_Pinky
interested
interested
 
Posts: 6
Joined: 22 Jan 2019, 21:46
LabVIEW Version: 8.2
Karma: 0


Return to Для чайников

Who is online

Users browsing this forum: No registered users and 3 guests

cron