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

Простейшие вопросы в области инженерной разработки
Ответить
Blinky_Pinky
interested
interested
Сообщения: 6
Зарегистрирован: 22 янв 2019, 21:46
Версия LabVIEW: 8.2
Контактная информация:

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

Сообщение 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 Ниже скрины и сам ВП.
Большое спасибо за помощь, я тупенький походу, раз сам не разобрался, но форум большая надежда!
Вложения
my_vi.vi
(123.43 КБ) 66 скачиваний
my_vi_1.jpg
my_vi_2.jpg
my_vi_3.jpg
my_vi_4.jpg
"Странное" время
"Странное" время
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

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

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

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

Сообщение 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) для каждого канала. Примерно так.
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!
Blinky_Pinky
interested
interested
Сообщения: 6
Зарегистрирован: 22 янв 2019, 21:46
Версия LabVIEW: 8.2
Контактная информация:

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

Сообщение Blinky_Pinky »

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

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

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

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

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

Сообщение taras_33 »

В догонку к сообщению от 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!
Blinky_Pinky
interested
interested
Сообщения: 6
Зарегистрирован: 22 янв 2019, 21:46
Версия LabVIEW: 8.2
Контактная информация:

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

Сообщение Blinky_Pinky »

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

btw, большое спасибо вам за ответы, очень помогло разобраться!
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»