Нужна помощь с правильным сбором данных, pls hlp
Добавлено: 05 мар 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, 8.2 Ниже скрины и сам ВП.
Большое спасибо за помощь, я тупенький походу, раз сам не разобрался, но форум большая надежда!
Задача: Нужен ВП для управления экспериментом по циклическому нагружению образца. С его помощью нужно включать электродвигатель, который отвечает за нагружение, управлять им, а также собирать данные с трех датчиков(сила, перемещение, температура). Эксперименты проходят при частоте нагружения 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 Ниже скрины и сам ВП.
Большое спасибо за помощь, я тупенький походу, раз сам не разобрался, но форум большая надежда!