Запись архивов на диск контроллера организуется с помощью блоков из библиотеки profiLoggerLight.
Добавление библиотеки в проект описано в разделе.
Файловый архив данных (FileDpLogger)
Блок FileDpLogger предназначен для архивирования значений выбранных входов/выходов в текстовых файлах.
Раздел библиотеки: Архивы.
Назначение входов и выходов FileDpLogger
Элемент | Описание |
---|---|
Входы | |
file_path | Абсолютный путь к директории, где будут храниться архивные файлы. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе usbpath блока 210-SD-USB (константный) |
enb | Разрешена работа блока: 0 – блок не работает; 1 – блок пишет данные в буфер |
wr | Разрешена запись на диск: 0 – нет; 1 – да |
loc | Использовать локальное время для смены файлов (константный): 0 – нет (использовать мировое время); 1 – да |
grp | Группировка данных по файлам (константный): NO_GROUP – каждое данное в отдельном файле; GROUP_ALLINONE – все данные в одном файле |
frmt | Формат записей в файлах (константный): TAB_and_COMM – формат записи с разделителем табуляция «→», в числах с плавающей точкой используется запятая «,»; COMM_and_DOT – формат записи с разделителем запятая «,», в числах с плавающей точкой используется точка «.». Использование запятой в комментарии приведет к некорректному формату файла; TO_MSD200 – формат записи с разделителем точка с запятой «;», в числах с плавающей точкой используется запятая «,» |
meth | Метод записи данных в файл (константный): TIMESTAMP – запись с временными метками с заполнением пустых; INTERVAL – запись с заданным интервалом (период архивирования по умолчанию 1 с) |
intr | Интервал записи, мс. Устанавливает период архивирования. В файл записывается последнее значение входа/выхода, полученное в этом периоде. Используется только в методе INTERVAL (константный) |
qqlen | Размер буфера на каждое данное: минимальное значение 10, максимальное зависит от характеристик контроллера и объема оперативной памяти, которую при работе проекта допускается выделить для хранения буфера данных. Для расчета максимального размера очереди нужно учитывать количество данных, которое планируется записывать (см. пример ниже) (константный) |
prt | Приоритет потока записи из буфера на диск, по умолчанию 25 (константный) |
rst | Сброс ошибок записи: изменение с 0 на 1 сбрасывает бит iserr, обнуляет err и lost |
Выходы | |
lg | Указатель на блок базового типа CBaseLogger, инициализируется указателем на базовый класс блока. Не используется в программе контроллера |
ok | Количество удачно записанных строк, значение инициализации 0 |
lost | Количество потерянных данных из-за заполненности очередей, значение инициализации 0 |
iserr | Была ошибка записи, значение инициализации 0 |
err | Количество ошибок записи, значение инициализации 0 |
Данные в архив записываются по изменению с учетом свойства Зона нечувствительности. Формат, группировка и метод записи в файл выбираются на входах блока.
Входы/выходы в проекте, которые необходимо архивировать, добавляются в раздел Данные внутри блока.
Для того, чтобы блок начал запись на диск, следует установить значение 1 на входах enb и wr.

Каждый день запись производится в новый файл. На входе loc блока можно выбрать, какое время использовать для смены файлов (мировое или локальное). Дата записи данных отображается в имени файла.
Имена файлов зависят от заданных на входе блока значений:
для формата TO_MSD200;
Logs_ALLINONE_ГГГГ_ММ_ДД.txt – для форматов TAB_and_COMM и COMM_and_DOT с группировкой всех данных в одном файле GROUP_ALLINONE
;Logs_<алиас данного>_ГГГГ_ММ_ДД.txt – для форматов TAB_and_COMM и COMM_and_DOT без группировки NO_GROUP (каждое данное в отдельном файле).
В заголовок таблицы по умолчанию попадают свойства входов/выходов Полный алиас и Комментарий.

Если необходимо, чтобы комментарий не отображался, следует удалить свойство Трансляция: комментарии отдельно у раздела Данные.
Если во время начала записи файл на диске с таким именем существует, то к имени существующего файла добавляется метка времени и создается новый файл. Название нового файла определяется по правилам выше.


Использование запятой в комментарии приведет к некорректному чтению файла трендом, в случае использования формата COMM_and_DOT.

Для корректного отображения сохраненных данных в программах просмотра графиков необходимо, чтобы у входов/выходов, добавленных в раздел, было добавлено свойство Полный алиас. Алиасы должны быть уникальными в пределах раздела Данные, чтобы обеспечить уникальность имен файлов. Уникальность алиаса должна обеспечиваться без учета регистра. Если алиас отсутствует, или не уникален, то данное не будет архивироваться.

Если блок устанавливается в таймере, то порядок выполнения всех блоков, входы/выходы которых добавлены в архив, имеет смысл выставлять либо выше, либо ниже, чем у блока архива. Так как метка времени блоков, порядок которых ниже, запишется с меткой времени текущего таймерного цикла, а те, которые выше – с меткой времени следующего цикла.
Каждый объект данных хранится в своем буфере, максимальная величина которого задается на входе блока qqlen. Максимальный размер очереди используется для ограничения количества оперативной памяти, которую может выделить блок для хранения буфера данных, т.к. на хранение каждого элемента очереди требуется 32 байта оперативной памяти.
Пример
Например, при qqlen = 1000, для хранения 64 различных показателей, потребуется 2,048 мегабайт оперативной памяти. Если нет возможности записать данные в файл, то эта очередь заполнится через 1000 секунд (при записи методом INTERVAL и показателе int = 1000 мс).
При возникновении ошибок записи (недостаточно памяти, память испорчена, извлечена Flash-карта и т.п.) блок установит значение 1 на выходе iserr (если была ошибка записи), и увеличит счетчик ошибок err. После двух ошибок блок прекратит запись на диск, пока ошибки не будут сброшены сигналом на входе rst.
Если запись остановлена (wr = 0 или err = 2), но при этом разрешена работа блока (enb = 1), то данные копятся в буфере, пока он не достигнет максимальной величины, заданной на входе qqlen.
Если за время отключения записи буфер заполнится, часть архивируемых данных будет утеряна. На выходе lost отобразится общее количество утерянных данных по всем входам/выходам. Количество потерянных данных сбрасывается при сбросе ошибок записи сигналом на входе rst.
Работа блока FileDpLogger осуществляется в отдельном потоке, приоритет которого задается на входе prt.

В связи с особенностями работы программы График ОВЕН МСД200 существуют следующие ограничения для обеспечения совместимости:
Ограничение группировки – только GROUP_ALLINONE, т. к. имя файла должно быть в формате ГГГГ_ММ_ДД.csv.
Ограничение времени – только INTERVAL с интервалом не менее секунды (intr = 1000). Желательно, чтобы интервал был кратен секунде, т.к. программа использует время в формате ЧЧ:ММ:СС. Миллисекунды считаются за пределами диапазона: блок округляет точность времени до секунды в большую сторону. Если программа обнаружит несколько идентичных значений времени, то файл не откроется.
Ограничение количества данных – максимум 64 канала. При использовании большего количества точек архивации программа не откроет файл.
Пример работы с блоком приведен в разделе.

Черный ящик (BlackBox)
Блок BlackBox совмещает в себе работу блоков RamFRLogger и ComtradeLogger из библиотеки profiLogger. Этот блок сохраняет значения выбранных параметров в файл в течение заданного времени «до» события и в течение заданного времени «после» события.
Раздел библиотеки: Архиваторы.
Блок BlackBox следует размещать только в Таймере.
Назначение входов и выходов BlackBox
Элемент | Описание |
---|---|
Входы | |
trigger | Фронт срабатывания. При подаче 1 на данный вход блок начинает работать |
before | Время, в течение которого производится запись значений до срабатывания триггера |
after | Время, в течение которого производится запись значений после срабатывания триггера |
every | Кратность квантования. Например, если таймерный промежуток (свойство модуля Таймерный промежуток) установлен 20 мс и every = 5, запись будет производиться каждые 100 мс. Должно быть отлично от 0 |
enb | Разрешение записи на диск: 0 – выключена; 1 – включена |
name | Путь и начало имени файла. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока 210-SD-USB (константный) |
priority | Приоритет потока ожидания выполнения команды |
Выходы | |
logger_sts | Статус подготовки лога в ОЗУ: 0 – нет ошибок; 1 – идет подготовка лога; -1 – неверное значение параметра every или отсутствует раздел Данные в блоке |
me | Указатель на блок базового типа CBaseLogger, инициализируется указателем на базовый класс блока. Не используется в программе контроллера |
fname | Абсолютный путь и начало имени результирующего файла *.dat, инициализируется 0 |
comtrade_sts | Статус подготовки файла, инициализируется 0: 0 – блок не работает над файлом или данные для файла еще накапливаются; 1 – файл успешно создан (взводится на один цикл работы блока); -1 – внутренняя ошибка при работе с массивом данных (массив не содержит данных или меток времени); -2 – проблема создания/открытия файла; -3 – неподдерживаемый формат входных данных |
pnum | Число накопленных значений в массиве для записи в ПЗУ, инициализируется 0 |
Входы/выходы в проекте, которые необходимо архивировать по событию, добавляются в раздел Данные внутри блока.
Блок сохраняет в ОЗУ текущие значения с фиксированной частотой дискретизации в течение установленного в before времени.
Если на вход trigger подано значение больше 0, отмечается время наступления события и пишутся значения в течение установленного в аfter времени.
Когда запись окончена, сформированный массив передается в фоновый поток записи массива данных в ПЗУ. Если в enb установлено значение 1, формируется следующие два файла: файл с расширением .dat – набор значений параметров, накопленных за временной отрезок, файл с расширением .cfg – служебная информация о событии.
Имена файлов определяются по входу name плюс метка времени (без учета часового пояса) начала записи параметров на диск в формате ГГГГ_ММ_ДД_ЧЧ_ММ_СС.

Пример работы с блоком приведен в разделе.
