Сохранение данных графиков

Работа с файлами и базами данных
Ответить
VladosXPOM
beginner
beginner
Сообщения: 40
Зарегистрирован: 21 мар 2014, 14:09
Версия LabVIEW: 2011
Контактная информация:

Сохранение данных графиков

Сообщение VladosXPOM »

Есть проект сбора данных с платы АЦП по нескольким каналам. Информация от платы приходит в виде нескольких 1-д массивов (по количеству каналов). Далее с помощью build Waveform массив каждого канала преобразовывается в осциллограмму, далее по ней рассчитывается RMS, последний спектр и т.д. Получаем мониторинг реального времени. Как и куда нужно сохранять данные и в каком виде, что бы, допустим, я "тыкнул" в программе на число в календарике, и мне отобразились значения за тот период времени?
Аватара пользователя
alerm

Activity
leader
leader
Сообщения: 682
Зарегистрирован: 02 май 2012, 21:28
Награды: 1
Версия LabVIEW: 20
Благодарил (а): 57 раз
Поблагодарили: 9 раз
Контактная информация:

Re: Сохранение данных графиков

Сообщение alerm »

ну можно сохранять в виде текстовых файлов с именем с привязкой к дням в какой-нибудь конкретной папке, например D:\data\
а когда надо, загружать данные из файла, найдя его по имени, в таком случае советую использовать японское (и еще нескольких стран) обозначение времени, оно же ISO
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Сохранение данных графиков

Сообщение dadreamer »

В Waveform'е по дефолту есть компонента Timestamp, если в неё загнать текущую дату/время, то проблема будет наполовину решена.
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Сохранение данных графиков

Сообщение Andrew Lunev »

Не совсем понятна задача.
Если эксперименты проходят периодически и файлы имеют конечную длину, то конечно варианты с папками и абсолютным временем в данных самый удачный вариант. Тут еще NI DataFinder может хорошо помочь с поиском.
Если же данные пишутся непрерывно месяцами и требуется их просмотр без останова измерений и выборка по времени, то тут самый удобный вариант писать в базу данных. В LabView это делается самым простым способом с DSC модулем, в MAXе создается база и в одной программе пишете в базу, в другой делаете из нее выборку за требуемое время (тот же календарик). Можно эти процессы и в одной программе объединить.
VladosXPOM
beginner
beginner
Сообщения: 40
Зарегистрирован: 21 мар 2014, 14:09
Версия LabVIEW: 2011
Контактная информация:

Re: Сохранение данных графиков

Сообщение VladosXPOM »

Задача такова: длительное время опрашиваю 32 канала АЦП с частотой 12.5 кГц на канал. Получаю в секунду 400к выборок одинарной точности. Далее с помощью BuildWaveform прикрепляется timestamp. Теперь эти значения нужно сохранить на диск. Писал в TDMS файл- получаются файлы огромного размера. Как я понимаю, временная метка прикрепляется к каждому значению и сохраняется вместе с ним, занимая лишнее место. Каким образом оптимизировать процесс записи в TDMS? Или имеет ли смысл использовать другие форматы, где, допустим, одному значению времени соответствует 32 значения каналов? Или секрет огромного файла не в этом? Спасибо
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Сохранение данных графиков

Сообщение Andrew Lunev »

Начали с указания точных цифр, а дальше ушли на понятия "длительное время" и "огромного размера". Для кого-то и килобайт огромный размер, а для кого-то и терабайт это не много. Для вашей задачи получается минимум 12,5 МБ в секунду, не так и мало. Покажите код. Многое зависит от того как вы формируете Waveform и как сохраняете в файл. Замените сбор данных на генерацию синусоиды например, чтобы программа была не привязана к оборудованию. Тогда можно будет посоветовать оптимальный вариант.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Сохранение данных графиков

Сообщение dadreamer »

VladosXPOM писал(а):Как я понимаю, временная метка прикрепляется к каждому значению и сохраняется вместе с ним, занимая лишнее место.
Нет, на один waveform создаётся один timestamp, больше там никак не может быть.
VladosXPOM
beginner
beginner
Сообщения: 40
Зарегистрирован: 21 мар 2014, 14:09
Версия LabVIEW: 2011
Контактная информация:

Re: Сохранение данных графиков

Сообщение VladosXPOM »

Схему постараюсь приложить после праздников. Длительное время- это несколько суток. Огромного размера- это за минуту больше гигабайта. Код в двух словах такой: в бесконечном цикле данные от АЦП приходят в виде массива с заранее указанным числом элементов. В массиве 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. Прореживать и усреднять выборки нельзя. ЧТо предложите?
на один waveform создаётся один timestamp
Т.е время остальных точек в массиве рассчитывается "на лету", согласно t0 и dt ?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Сохранение данных графиков

Сообщение dadreamer »

VladosXPOM, скорее всего, потому что согласно исследованиям вэйвформ содержит один timestamp, один dt, массив собственно данных, кластер error in/out и атрибуты.
VladosXPOM
beginner
beginner
Сообщения: 40
Зарегистрирован: 21 мар 2014, 14:09
Версия LabVIEW: 2011
Контактная информация:

Re: Сохранение данных графиков

Сообщение VladosXPOM »

Постоянно идет запись значений в TDMS файл. Т.е перед основным циклом я создаю и открываю файл, в цикле с помощью Write to TDMS записываю, после цикла закрываю. Файл постоянно открытый. Как заставить программу закрывать и открывать файл раз в минуту, скажем? Или лучше собирать данные в буфер, и записывать сразу весь буфер раз в минуту? Пробовал через Case, но записывает синхронно, а очередь не уменьшается. Как поступают в таких случаях?
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: Сохранение данных графиков

Сообщение IORIK »

Наверное меня снова неправильно воспримут, с гневной риторикой...

VladosXPOM, а давайте займемся простой арифметикой.
VladosXPOM писал(а):Длительное время- это несколько суток. Огромного размера- это за минуту больше гигабайта.
Пусть в минуту у вас записывается гигабайт данных и длится это всего лишь день. Вы же пишите все в 1 файл, тогда его размер будет равен: 1ГиГ * 60*24 = почти 1,5 терабайт. Не слабо :D На какой станции трудитесь? Хвалитесь

С другой стороны,
VladosXPOM писал(а):длительное время опрашиваю 32 канала АЦП с частотой 12.5 кГц на канал. Получаю в секунду 400к выборок одинарной точности.
Считаем, длительность также 1 день. 32 * 12500 * 3600 * 24 = около 35 миллиардов чисел. Одинарная точность - это тип single (если память не изменяет), т.е. 4 байта на число. Итого не больше 150 Гигабайт :crazy: .
Согласитесь, что то явно результат не сходится. Даже если вы на каждое число записываете timestamp, чего вроде бы быть не должно, в 10 раз объем данных не увеличите.

Да и формировать и записывать waveform вам нет никакого смысла. Ведь частоту дискретизации АЦП устанавливаете 1 раз и более не трогаете. Это число можно записать на бумажку и забыть до обработки данных.
Тоже самое и про timestamp. Если бы у вас было более медленное АЦП, например 100 Гц максимум тысячу, можно было бы понять зачем вам эта величина нужна. А в вашем случае время просто высчитывается:
Т= Т0 + dt * номер отсчета.
VladosXPOM
beginner
beginner
Сообщения: 40
Зарегистрирован: 21 мар 2014, 14:09
Версия LabVIEW: 2011
Контактная информация:

Re: Сохранение данных графиков

Сообщение VladosXPOM »

Не воспринимал с гневной. Ведь я прошу консультации... Объяснил ситуацию начальству) Взял по-минимуму- 150Гб/сутки. Увидел глаза какающей собачки :suicide: Теперь надо писать на хард не мгновенные значения с АЦП, а обработанные и усредненные (300МБ/сут). Но что бы файл журнала все время открытым не был. Это на слушай краша. Теперь думаю как его закрывать/открывать по истечению некоторого контрольного времени без потери данных и увеличения очереди.
ESeid

Автор
advanced
advanced
Сообщения: 150
Зарегистрирован: 30 мар 2011, 22:41
Награды: 1
Версия LabVIEW: 8.2-2013
Контактная информация:

Re: Сохранение данных графиков

Сообщение ESeid »

VladosXPOM, я бы предложил два способа.
1. Подумать над вейвлет-преобразованием.
2. Подобрать архиватор - я свои фильмы ужимал почти в 10 раз без ощутимой потери качества.
VladosXPOM
beginner
beginner
Сообщения: 40
Зарегистрирован: 21 мар 2014, 14:09
Версия LabVIEW: 2011
Контактная информация:

Re: Сохранение данных графиков

Сообщение VladosXPOM »

вейвлет-преобразованием
Думал почти о том же: хотел сохранять спектр (амплитуда, фаза, прочее), потом при необходимости восстанавливать сигнал без привязки ко времени, это лучше чем терабайты. Но задача отпала сама собой. Теперь думаю как сделать "асинхронную" запись в файл что бы не держать его открытым и начинать новый файл каждые сутки. Подскажите, задача решается отдельным циклом для записи данных? Рассчитанные данные отправляю сразу в очередь, в нужное мне время по If срабатывает запись в файл в другом цикле, данные выковыриваются из очереди и записываются. Или я в основном цикле собираю данные в сдвиговый регистр, по If содержимое этого регистра отправляю в очередь, в цикле записи данных из очереди все отправляю в файл, очищаю сдвиговый. Раскритикуйте что не так
..про timestamp. ...можно было бы понять зачем вам эта величина нужна
Журнал принесли на флешке на другой ПК, где просматриваются данные. В просмотрщике указали интересный им период. С DD_MM1_YY по DD_MM2_YY. Посмотрели. ВСе довольны.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Сохранение данных»