Сохранение данных графиков
-
- beginner
- Сообщения: 40
- Зарегистрирован: 21 мар 2014, 14:09
- Версия LabVIEW: 2011
- Контактная информация:
Сохранение данных графиков
Есть проект сбора данных с платы АЦП по нескольким каналам. Информация от платы приходит в виде нескольких 1-д массивов (по количеству каналов). Далее с помощью build Waveform массив каждого канала преобразовывается в осциллограмму, далее по ней рассчитывается RMS, последний спектр и т.д. Получаем мониторинг реального времени. Как и куда нужно сохранять данные и в каком виде, что бы, допустим, я "тыкнул" в программе на число в календарике, и мне отобразились значения за тот период времени?
-
alerm
- leader
- Сообщения: 682
- Зарегистрирован: 02 май 2012, 21:28
- Награды: 1
- Версия LabVIEW: 20
- Благодарил (а): 57 раз
- Поблагодарили: 9 раз
- Контактная информация:
Re: Сохранение данных графиков
ну можно сохранять в виде текстовых файлов с именем с привязкой к дням в какой-нибудь конкретной папке, например D:\data\
а когда надо, загружать данные из файла, найдя его по имени, в таком случае советую использовать японское (и еще нескольких стран) обозначение времени, оно же ISO
а когда надо, загружать данные из файла, найдя его по имени, в таком случае советую использовать японское (и еще нескольких стран) обозначение времени, оно же ISO
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Сохранение данных графиков
В Waveform'е по дефолту есть компонента Timestamp, если в неё загнать текущую дату/время, то проблема будет наполовину решена.
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Сохранение данных графиков
Не совсем понятна задача.
Если эксперименты проходят периодически и файлы имеют конечную длину, то конечно варианты с папками и абсолютным временем в данных самый удачный вариант. Тут еще NI DataFinder может хорошо помочь с поиском.
Если же данные пишутся непрерывно месяцами и требуется их просмотр без останова измерений и выборка по времени, то тут самый удобный вариант писать в базу данных. В LabView это делается самым простым способом с DSC модулем, в MAXе создается база и в одной программе пишете в базу, в другой делаете из нее выборку за требуемое время (тот же календарик). Можно эти процессы и в одной программе объединить.
Если эксперименты проходят периодически и файлы имеют конечную длину, то конечно варианты с папками и абсолютным временем в данных самый удачный вариант. Тут еще NI DataFinder может хорошо помочь с поиском.
Если же данные пишутся непрерывно месяцами и требуется их просмотр без останова измерений и выборка по времени, то тут самый удобный вариант писать в базу данных. В LabView это делается самым простым способом с DSC модулем, в MAXе создается база и в одной программе пишете в базу, в другой делаете из нее выборку за требуемое время (тот же календарик). Можно эти процессы и в одной программе объединить.
-
- beginner
- Сообщения: 40
- Зарегистрирован: 21 мар 2014, 14:09
- Версия LabVIEW: 2011
- Контактная информация:
Re: Сохранение данных графиков
Задача такова: длительное время опрашиваю 32 канала АЦП с частотой 12.5 кГц на канал. Получаю в секунду 400к выборок одинарной точности. Далее с помощью BuildWaveform прикрепляется timestamp. Теперь эти значения нужно сохранить на диск. Писал в TDMS файл- получаются файлы огромного размера. Как я понимаю, временная метка прикрепляется к каждому значению и сохраняется вместе с ним, занимая лишнее место. Каким образом оптимизировать процесс записи в TDMS? Или имеет ли смысл использовать другие форматы, где, допустим, одному значению времени соответствует 32 значения каналов? Или секрет огромного файла не в этом? Спасибо
-
Andrew Lunev
- VIP
- Сообщения: 957
- Зарегистрирован: 11 дек 2010, 12:31
- Награды: 2
- Версия LabVIEW: 2014-2021
- Откуда: Москва
- Благодарил (а): 4 раза
- Поблагодарили: 10 раз
Re: Сохранение данных графиков
Начали с указания точных цифр, а дальше ушли на понятия "длительное время" и "огромного размера". Для кого-то и килобайт огромный размер, а для кого-то и терабайт это не много. Для вашей задачи получается минимум 12,5 МБ в секунду, не так и мало. Покажите код. Многое зависит от того как вы формируете Waveform и как сохраняете в файл. Замените сбор данных на генерацию синусоиды например, чтобы программа была не привязана к оборудованию. Тогда можно будет посоветовать оптимальный вариант.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Сохранение данных графиков
Нет, на один waveform создаётся один timestamp, больше там никак не может быть.VladosXPOM писал(а):Как я понимаю, временная метка прикрепляется к каждому значению и сохраняется вместе с ним, занимая лишнее место.
-
- beginner
- Сообщения: 40
- Зарегистрирован: 21 мар 2014, 14:09
- Версия LabVIEW: 2011
- Контактная информация:
Re: Сохранение данных графиков
Схему постараюсь приложить после праздников. Длительное время- это несколько суток. Огромного размера- это за минуту больше гигабайта. Код в двух словах такой: в бесконечном цикле данные от АЦП приходят в виде массива с заранее указанным числом элементов. В массиве 0-й элемент это первая выборка 1-го канала, 31-й элемент- первая выборка последнего канала; 32-й элемент- вторая выборка 1-го канала и т.д. Сейчас число элементов- 4к. Далее с помощью Decimate1DArray разбираю этот массив на 32 подмассива, по 125 элементов, получаю подмассив данных каждого канала. После чего каждый подмассив идет на BuildWaveform в качестве Y; в качестве dt— 8е-5 (1/12,5кГц); Т0— из прибора GetDate/timeinseconds (внутри того-же цикла). После этого массив из 32-х WaveForm в TDMS Write. Вне главного цикла естественно TDMS open И close. Прореживать и усреднять выборки нельзя. ЧТо предложите?
Т.е время остальных точек в массиве рассчитывается "на лету", согласно t0 и dt ?на один waveform создаётся один timestamp
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Сохранение данных графиков
VladosXPOM, скорее всего, потому что согласно исследованиям вэйвформ содержит один timestamp, один dt, массив собственно данных, кластер error in/out и атрибуты.
-
- beginner
- Сообщения: 40
- Зарегистрирован: 21 мар 2014, 14:09
- Версия LabVIEW: 2011
- Контактная информация:
Re: Сохранение данных графиков
Постоянно идет запись значений в TDMS файл. Т.е перед основным циклом я создаю и открываю файл, в цикле с помощью Write to TDMS записываю, после цикла закрываю. Файл постоянно открытый. Как заставить программу закрывать и открывать файл раз в минуту, скажем? Или лучше собирать данные в буфер, и записывать сразу весь буфер раз в минуту? Пробовал через Case, но записывает синхронно, а очередь не уменьшается. Как поступают в таких случаях?
Re: Сохранение данных графиков
Наверное меня снова неправильно воспримут, с гневной риторикой...
VladosXPOM, а давайте займемся простой арифметикой.
С другой стороны,
Согласитесь, что то явно результат не сходится. Даже если вы на каждое число записываете timestamp, чего вроде бы быть не должно, в 10 раз объем данных не увеличите.
Да и формировать и записывать waveform вам нет никакого смысла. Ведь частоту дискретизации АЦП устанавливаете 1 раз и более не трогаете. Это число можно записать на бумажку и забыть до обработки данных.
Тоже самое и про timestamp. Если бы у вас было более медленное АЦП, например 100 Гц максимум тысячу, можно было бы понять зачем вам эта величина нужна. А в вашем случае время просто высчитывается:
Т= Т0 + dt * номер отсчета.
VladosXPOM, а давайте займемся простой арифметикой.
Пусть в минуту у вас записывается гигабайт данных и длится это всего лишь день. Вы же пишите все в 1 файл, тогда его размер будет равен: 1ГиГ * 60*24 = почти 1,5 терабайт. Не слабо На какой станции трудитесь? ХвалитесьVladosXPOM писал(а):Длительное время- это несколько суток. Огромного размера- это за минуту больше гигабайта.
С другой стороны,
Считаем, длительность также 1 день. 32 * 12500 * 3600 * 24 = около 35 миллиардов чисел. Одинарная точность - это тип single (если память не изменяет), т.е. 4 байта на число. Итого не больше 150 Гигабайт .VladosXPOM писал(а):длительное время опрашиваю 32 канала АЦП с частотой 12.5 кГц на канал. Получаю в секунду 400к выборок одинарной точности.
Согласитесь, что то явно результат не сходится. Даже если вы на каждое число записываете timestamp, чего вроде бы быть не должно, в 10 раз объем данных не увеличите.
Да и формировать и записывать waveform вам нет никакого смысла. Ведь частоту дискретизации АЦП устанавливаете 1 раз и более не трогаете. Это число можно записать на бумажку и забыть до обработки данных.
Тоже самое и про timestamp. Если бы у вас было более медленное АЦП, например 100 Гц максимум тысячу, можно было бы понять зачем вам эта величина нужна. А в вашем случае время просто высчитывается:
Т= Т0 + dt * номер отсчета.
-
- beginner
- Сообщения: 40
- Зарегистрирован: 21 мар 2014, 14:09
- Версия LabVIEW: 2011
- Контактная информация:
Re: Сохранение данных графиков
Не воспринимал с гневной. Ведь я прошу консультации... Объяснил ситуацию начальству) Взял по-минимуму- 150Гб/сутки. Увидел глаза какающей собачки Теперь надо писать на хард не мгновенные значения с АЦП, а обработанные и усредненные (300МБ/сут). Но что бы файл журнала все время открытым не был. Это на слушай краша. Теперь думаю как его закрывать/открывать по истечению некоторого контрольного времени без потери данных и увеличения очереди.
-
- advanced
- Сообщения: 150
- Зарегистрирован: 30 мар 2011, 22:41
- Награды: 1
- Версия LabVIEW: 8.2-2013
- Контактная информация:
Re: Сохранение данных графиков
VladosXPOM, я бы предложил два способа.
1. Подумать над вейвлет-преобразованием.
2. Подобрать архиватор - я свои фильмы ужимал почти в 10 раз без ощутимой потери качества.
1. Подумать над вейвлет-преобразованием.
2. Подобрать архиватор - я свои фильмы ужимал почти в 10 раз без ощутимой потери качества.
-
- beginner
- Сообщения: 40
- Зарегистрирован: 21 мар 2014, 14:09
- Версия LabVIEW: 2011
- Контактная информация:
Re: Сохранение данных графиков
Думал почти о том же: хотел сохранять спектр (амплитуда, фаза, прочее), потом при необходимости восстанавливать сигнал без привязки ко времени, это лучше чем терабайты. Но задача отпала сама собой. Теперь думаю как сделать "асинхронную" запись в файл что бы не держать его открытым и начинать новый файл каждые сутки. Подскажите, задача решается отдельным циклом для записи данных? Рассчитанные данные отправляю сразу в очередь, в нужное мне время по If срабатывает запись в файл в другом цикле, данные выковыриваются из очереди и записываются. Или я в основном цикле собираю данные в сдвиговый регистр, по If содержимое этого регистра отправляю в очередь, в цикле записи данных из очереди все отправляю в файл, очищаю сдвиговый. Раскритикуйте что не таквейвлет-преобразованием
Журнал принесли на флешке на другой ПК, где просматриваются данные. В просмотрщике указали интересный им период. С DD_MM1_YY по DD_MM2_YY. Посмотрели. ВСе довольны...про timestamp. ...можно было бы понять зачем вам эта величина нужна
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 855 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1191 Просмотры
-
Последнее сообщение Boxa
-
- 0 Ответы
- 486 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 263 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2439 Просмотры
-
Последнее сообщение rsv