Страница 1 из 1

Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 16:41
bagiatti
Уважаемые специалисты labview!

У меня следующая задача: в системе с нескольких датчиков по CAN-шине считываются показания.
Считывание данных организовано с помощью цикла while.
Я хочу записывать данные в текстовый файл таким образом, чтобы раз в сутки или по достижения определенного размера файла
открывался новый файл с новым именем (которое будет задаваться по какому-то заданному алгоритму).
Я нашел самую подходящую ветку для моей задачи эту: http://labviewportal.org/viewtopic.php?f=21&t=831
Но это не совсем то, так как в указанном топике не стоит проблема с закрытием файла и открытием нового файла на определенной итерации цикла.
Собственно мой вопрос: как организовать закрытие файла и открывание нового файла на определенной итерации цикла или как это можно организовать по_другому?

Заранее спасибо.

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 16:52
Blackman
Установите библиотеку Asynchronous Multi File TDMS Data Logger https://forums.ni.com/t5/Example-Progra ... -p/3531663
при помощи VIPM или можно скачать по ссылке https://forums.ni.com/ni/attachments/ni ... .0.0.7.vip и установить.
И будет Вам "щастье" :bye:

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 17:27
bagiatti
Спасибо, попробую. :super:
Но пока как временный вариант, когда опубликовал свой вопрос до меня дошло, что можно банально воспользоваться case structure,
которая будет проверять каждую итерацию while выполнение условия по размеру файла или по дате.
Главное, чтобы не было так, что "нет ничего постоянного, чем временное". :wink:

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 17:34
Borjomy_1
По-хорошему, нет смысла постоянно держать открытый файл TDMS. С чисто рабочих соображений - пока архив не будет закрыт, его нельзя посмотреть. Рекомендую буфферизировать запись и сохранять данные раз в минуту или около того, с открытием файла и последующим закрытием. В таком случае при достижении определенного порога достаточно изменить имя файла.

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 18:01
Blackman
Borjomy_1 писал(а):...Рекомендую буфферизировать запись и сохранять данные раз в минуту или около того, с открытием файла и последующим закрытием...
И как минимум получить в один прекрасный момент при очередной записи ошибку, что нет доступа к файлу, потому что кто-то решил его в это время посмотреть (например в Excel) и он оказался занят :shok:

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 19:30
Borjomy_1
И как минимум получить в один прекрасный момент при очередной записи ошибку, что нет доступа к файлу, потому что кто-то решил его в это время посмотреть (например в Excel) и он оказался занят :shok:
Нормальная ситуация! Если ошибка доступа к файлу, то буфер не сбрасывается, а данные продолжают в него копиться. При освобождении - накопленные данные скидываются. Для этого желательно иметь собственный просмотрщик, который будет открывать файл только для загрузки. Если совсем невмоготу, то досрочно создается другой файл. Другой вариант - открывать копию в экселе. Но даже для копии необходимо время на копирование и будут конфликты доступа. Так что эти вещи надо предусматривать.
Глупо считать, что будет всегда просматриваться архив не позднее прошлых суток. Надо представлять себе, что требование просмотреть данные за последние несколько минут, возникнет в первый-же день эксплуатации оборудования.

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 20:18
Blackman
Вар.1 Не выдерживает ни какой критики. Сколько времени будет занят файл? Какой буфер выделять? Как управлять записями?
Вар.2 Изобретение детского велосипеда
Вар.3 Ответ дан автором предыдущего сообщения. Тоже проблемы. А если еще лог под максимальный размер файла? :suicide:

Горит посмотреть: закрой текущий файл и открой новый. Все есть в указанном выше логгере.

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 21:09
Borjomy_1
Blackman У меня подобный функционал под LV2009. потому все ручками (включая контроль размера папки и, кстати, свободного пространства еще и на диске). И все работает, причем не в лаборатории, а на производстве.
Однако остается вопрос работы в условиях совместного доступа.

Re: Создание новых файлов каждые сутки

Добавлено: 29 мар 2017, 23:07
Kosist
Blackman писал(а):Вар.1 Не выдерживает ни какой критики. Сколько времени будет занят файл? Какой буфер выделять? Как управлять записями?
Вар.2 Изобретение детского велосипеда
Вар.3 Ответ дан автором предыдущего сообщения. Тоже проблемы. А если еще лог под максимальный размер файла? :suicide:

Горит посмотреть: закрой текущий файл и открой новый. Все есть в указанном выше логгере.
Вар.1 - как раз один из наиболее правильных и оптимальных. Плюс NI техподдержка такой подход тоже рекоммендует. Обращаться каждую секунду к файлу на диске - далеко не лучшая практика. А вот грамотная буфферизация - другое дело.
Да, для TDMS есть эта либа (Asynchronous Multi File TDMS Data Logger). А если будет другой формат файла?

Re: Создание новых файлов каждые сутки

Добавлено: 30 мар 2017, 08:02
Blackman
Уважаемый Kosist) Вы немного не в тему. :think: Диспут был не о том как часто писать в файл и предварительной буферизации данных, которая как правило есть всегда в том или ином виде (в той же, как Вы говорите, либе), а о методах или способах доступа к текущему лог файлу.

Re: Создание новых файлов каждые сутки

Добавлено: 30 мар 2017, 09:53
Borjomy_1
а о методах или способах доступа к текущему лог файлу.
Ну и? ТС, кстати, этот вопрос не поднимался.
У меня есть два решения - работа с архивом в собственном просмотрщике, который открывает файл только на время чтения его в ОЗУ. И копирование архива для работы с ним, например, на другой машине. И то и другое требует обработки ситуации временной недоступности файла архива. Потому вопрос к Blackman - решает ли предложенная им библиотека эту задачу?

Re: Создание новых файлов каждые сутки

Добавлено: 30 мар 2017, 10:31
Blackman
Asynchronous TDMS Logger v1.5.1.15 by National Instruments
Released On: Thu, 19 May 2016 16:32:10 -0500
Author: Piotr Kruczkowski
Copyright: Copyright (c) 2014, National Instruments
Compatible LabVIEW Versions: >= 2014.
Compatible OS Versions: ALL.
Repository Name: NI LabVIEW Tools Network

Description:
This is a library of functions of the asynchronous TDMS logger. It allows you to dynamically run an asynchronous thread for data logging with additional functionality of seperating the data into multiple files based on size or date and time. It also implements functions to delete old files that would normally overflow your hard drive.

These functions can be used in the same loop as you measurement task because they are asynchronous. This means that the logger is created in the background and works as a parallel thread. You can monitor the status of that thread by getting its info.

Please note that this functionality may not work correctly when the destination folder is updated by NI Data Finder or Google Drive etc.

The supported data types are: Single, Double, Double Waveform, Signed Integer 8 bit, Signed Integer 16 bit, Unsigned Integer 8 bit, 16 bit and String Events.

Release Notes:
- finalized support for I8, I16, U8, U16, Single, Double, Waveform and String data types,
- rewritten the code in the background not to use classes for data types. This minimizes the footprint and optimizes the API to work faster,
- modified the internal architecture to make it easier to understand,
- updated description of the package.

Re: Создание новых файлов каждые сутки

Добавлено: 30 мар 2017, 13:23
Borjomy_1
Хм.. ну и толку тогда от нее?... Если я, делая ручками, могу эту проблему корректно обработать, то в этой библиотеке этого никак не сделать.