---
title: "Руководство пользователя Архивирование и сохранение уставок"
product: "Полигон"
document_number: "№ 1-RU-134367-1.2"
version: "1.2"
language: "ru"
source: "https://docs.owen.ru/product/poligon/doc/1202"
pdf: "https://docs.owen.ru/download/pdf/itD1_.rp_arhivirovanie+i+sohranenie+ustavok_1-ru-134367-1.2.pdf"
generated: "2026-10-16"
---

# Руководство пользователя Архивирование и сохранение уставок

## Содержание

- [Используемые термины и сокращения](#topic-94719)
- [Введение](#topic-94720)
- [Основные сведения по работе с файловой системой контроллера](#topic-94721)
  - [Память контроллеров](#topic-94722)
  - [Требования к подключаемым накопителям (USB-Flash/MicroSD)](#topic-94723)
  - [Пути к файлам и накопителям, работа с накопителями (210-SD-USB)](#topic-94724)
  - [Ограничения на имена файлов и каталогов в ОС Linux](#topic-94725)
  - [Подключение к файловой системе контроллера](#topic-94726)
  - [FTP-сервер контроллера](#topic-94727)
- [Раздел Сохранение данных библиотеки paCore](#topic-94728)
  - [Хранение параметров на диске (SaverEx)](#topic-94729)
  - [Буфер чтения/записи уставок (BufSupEx)](#topic-94730)
  - [Счетчик времени наработки (CounterMEx)](#topic-94731)
- [Библиотека profiLogger](#topic-94732)
  - [Массив значений параметров по событию (RamFRLogger)](#topic-94733)
  - [Сохранение значений параметров на диск по событию (ComtradeLogger)](#topic-94734)
- [Библиотека profiLoggerLight](#topic-94735)
  - [Файловый архив данных (FileDpLogger)](#topic-94736)
  - [Черный ящик (BlackBox)](#topic-94737)
- [Сохранение уставок](#topic-94738)
  - [Сохранение уставок из программы контроллера (SaverEx)](#topic-94739)
  - [Сохранение уставок с использованием OPC UA/Modbus (BufSupEx)](#topic-94740)
    - [Запись уставок с удаленного OPC UA-клиента](#topic-94741)
    - [Синхронизация записи уставок между контроллерами по OPC UA](#topic-94742)
    - [Запись целочисленных уставок по протоколу Modbus](#topic-94743)
    - [Запись уставок с плавающей точкой по протоколу Modbus (BufSupFltEx)](#topic-94744)
- [Работа с счетчиком времени наработки (CounterMEx)](#topic-94745)
- [Архивирование параметров на диск (FileDpLogger)](#topic-94746)
- [Работа с «черным ящиком» (BlackBox)](#topic-94747)

<a id="topic-94719"></a>

## Используемые термины и сокращения

**ОЗУ** - оперативное запоминающее устройство.

**ОС** – операционная система.

**ПК** – персональный компьютер.

**ПЛК** – программируемый логический контроллер.

**FTP** **(****File** **Transfer** **Protocol****)** — протокол прикладного уровня для передачи файлов по сети.

**OPC UA (Open Platform Communications, Unified Architecture)** – протокол для обмена данными с ПЛК и для управления ими.

**SQL** (**Structured Query Language**) – язык программирования для хранения и обработки информации в реляционной базе данных.

<a id="topic-94720"></a>

## Введение

Настоящее руководство описывает настройку архивации и сохранения уставок для контроллеров ОВЕН, программируемых в среде **Полигон**. Подразумевается, что читатель обладает базовыми навыками работы с **Полигон**, поэтому общие вопросы (например, создание и загрузка проектов) в данном документе не рассматриваются – они подробно описаны в документах [Руководство по программированию. Библиотека paCore](https://owen.ru/product/polygon/documentation) и [Быстрый старт](https://owen.ru/product/polygon/documentation).

Настройка архивации и сохранения уставок на диск контроллера или внешние накопители в среде **Полигон** осуществляется с помощью функциональных блоков из библиотеки <b>*paCore*</b> (раздел <b>*Сохранение данных*</b>), а также с помощью библиотек <b>*profiLogger*</b> и <b>*profiLoggerLight*</b>.

Примеры в документе актуальны для версии среды **Полигон** – **1994**, версий библиотек **paCore** – **991**, **profiLogger** – **62**, **profiLoggerLight** – **82** и выше.

<a id="topic-94721"></a>

## Основные сведения по работе с файловой системой контроллера

<a id="topic-94722"></a>

### Память контроллеров

Контроллеры ОВЕН имеют следующие независимые области памяти:

- энергонезависимая память (Flash);
- оперативная память (RAM);
- Retain-память (MRAM).

Программы, созданные в среде **Полигон**, задействуют две из них – Flash и RAM-память, а также позволяют работать с внешними накопителями USB-Flash/MicroSD.

Работа с файлами в большинстве случаев подразумевает работу с Flash-памятью. Flash-память имеет значительный, но ограниченный ресурс перезаписи – поэтому для архивации данных в большинстве случаев рекомендуется использовать внешние накопители (USB-Flash/MicroSD). Ресурс перезаписи внешних накопителей также ограничен, но их выход из строя не повлияет на работоспособность контроллера и накопители можно оперативно заменить. Информация об общем доступном объеме памяти приведена в руководстве по эксплуатации на соответствующий контроллер.

Информация о количестве свободной/занятой памяти доступна в web-конфигураторе контроллера в разделе <b>*Система/Точки монтирования*</b>.

<a id="topic-94723"></a>

### Требования к подключаемым накопителям (USB-Flash/MicroSD)

Поддерживаемый тип разделов – [MBR](https://ru.wikipedia.org/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C) ([GPT](https://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2_GUID) не поддерживается). Методика определения стиля разделов доступна по [ссылке](https://remontka.pro/gpt-or-mbr-disk/).

Рекомендуется использовать накопители с одним [разделом](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB_%D0%B4%D0%B8%D1%81%D0%BA%D0%B0) – тогда гарантируется монтирование по путям, указанным в [разделе](#topic-94724).

Поддерживаемые файловые системы накопителей – [FAT16/FAT32](https://ru.wikipedia.org/wiki/FAT) и [ext4](https://ru.wikipedia.org/wiki/Ext4).

Перед началом работы рекомендуется отформатировать накопитель с помощью **HP USB Disk Storage Format Tool** (для ОС Windows) или любой другой утилитой для форматирования накопителей.

<a id="topic-94724"></a>

### Пути к файлам и накопителям, работа с накопителями (210-SD-USB)

Пути в файловой системе контроллера к рабочей директории **Полигон** и пути монтирования внешних накопителей выглядят следующим образом:

**Пути к директориям ПЛК210**

| Директория | Путь |
| --- | --- |
| Рабочая директория | /home/root |
| USB-Flash-накопитель | /mnt/ufs/media/sda1 (ссылка /sda1) |
| MicroSD-накопитель | /mnt/ufs/media/mmcblk1p1 (ссылка /mmcblk1p1) |
| Директория FTP-сервера | /mnt/ufs/home/ftp/in |

При работе с виртуальным контроллером рабочая директория находится в папке на ПК, где расположен проект, имя папки – <b>*build_имя модуля_ОС*</b>.

Для работы с внешними накопителями в среде **Полигон** предназначен блок <b>*210-*</b><b>*SD*</b><b>*-*</b><b>*USB*</b> из библиотеки <b>*paOwenIO*</b>.

![fb ext drive](https://docs.owen.ru/book_img/1903/134297.png)

*Внешние накопители (210-SD-USB)*

Блок **210-SD-USB** обеспечивает монтирование внешних накопителей (подключение/получение возможности работы с файлами) и их демонтаж (отключение/извлечение без потери данных).

Данный блок можно разместить только в <b>*Фоне*</b>.

Логические входы блока реагируют при изменении значения с **0** на **1**.

**Назначение входов и выходов 210-SD-USB**

**Входы**

| Элемент | Описание |
| --- | --- |
| mntSD | Монтировать MicroSD-карту |
| umntSD | Размонтировать MicroSD-карту |
| mntUSB | Монтировать USB-накопитель |
| umntUSB | Размонтировать USB-накопитель |
| rfrsh | Обновление информации о статусах накопителей |

**Выходы**

| Элемент | Описание |
| --- | --- |
| sdmntd | Статус MicroSD-карты:<br>**0** – карта отключена;<br>**1** – карта подключена |
| sdpath | Путь к файлам MicroSD-карты:<br>**Пустая строка** – накопитель отключен;<br>**/mmcblk1p1** – ссылка на директорию монтирования накопителя |
| usbmntd | Статус USB-накопителя:<br>**0** – накопитель отключен;<br>**1** – накопитель подключен |
| usbpath | Путь к файлам USB-накопителя:<br>**Пустая строка** – накопитель отключен;<br>**/****sda****1** – ссылка на директорию монтирования накопителя |

К входам блока <b>*210-*</b><b>*SD*</b><b>*-*</b><b>*USB*</b> можно подключить сигналы от внешних кнопок или от панели оператора. Выходы статуса накопителя можно подключать к входам сброса ошибок блоков сохранения данных.

> [!NOTE]
> **Примечание.** Информацию о размере свободной/занятой памяти на накопителе можно получить в программе пользователя с помощью блока <b>*DriveInfo*</b> из библиотеки <b>*paCore*</b>.

<a id="topic-94725"></a>

### Ограничения на имена файлов и каталогов в ОС Linux

Максимальная длина – **255** символов.

Символы кириллицы и символ **/** не поддерживаются.

Не рекомендуется использовать в названиях следующие символы: **! @ # $ & \~ % \* ( ) \[ \] { } ' " \\ : ; > < \` пробел**

Регистр букв имеет значение: **Test.txt** и **test.txt** – это два разных файла.

<a id="topic-94726"></a>

### Подключение к файловой системе контроллера

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

При работе на ПК с ОС Windows для этих целей рекомендуется использовать утилиту WinSCP. Утилита распространяется бесплатно и может быть загружена с сайта [https://winscp.net/eng/download.php](https://winscp.net/eng/download.php).

После запуска утилиты следует настроить соединение по протоколу **SFTP**, указав IP-адрес контроллера, имя пользователя – **root** и пароль (по умолчанию – **owen**, можно изменить в web-конфигураторе). Чтобы подключиться к контроллеру, следует нажать <b>*Войти*</b>.

![plug fs 01](https://docs.owen.ru/book_img/1903/134296.png)

*Настройки подключения в WinSCP*

При работе на ПК с ОС Linux можно воспользоваться утилитой Double Commander или любым другим файловым менеджером.

<a id="topic-94727"></a>

### FTP-сервер контроллера

Контроллер может использоваться в режиме FTP-сервера. По умолчанию FTP-сервер контроллера запущен. Логин для доступа: **ftp**, пароль по умолчанию: **ftp** (может быть изменен в web-конфигураторе).

См. более подробную информацию в руководстве [Краткое описание основных функций Web-интерфейса управления контроллеров](https://owen.ru/product/plk210_polygon/documentation).

Рабочая директория FTP-сервера по умолчанию (можно изменить в web-конфигураторе контроллера): **/****mnt****/****ufs****/****home****/****ftp****/****in**.

<a id="topic-94728"></a>

## Раздел Сохранение данных библиотеки paCore

Сохранение параметров на диске контроллера организуется с помощью блоков раздела <b>*Сохранение данных*</b> библиотеки <b>*paCore*</b>.

Для добавления библиотеки в проект следует:

1. Перейти в меню <b>*Окна/Проекты*</b>. В появившемся окне отобразится текущий проект и добавленные библиотеки.

   ![pacore 01](https://docs.owen.ru/book_img/1903/134295.png)

   *Добавление библиотеки в проект*

2. Для добавления библиотеки следует нажать кнопку <b>*Открыть*</b> и перейти в папку с файлами библиотеки, которую необходимо добавить. Затем в выпадающем списке выбрать тип файла <b>*Библиотека Полигон 2 (\*.*</b><b>*ll*</b><b>*2)*</b>.

   ![pacore 02](https://docs.owen.ru/book_img/1903/134294.png)

   *Добавление библиотеки в проект*

3. В окне появится файл библиотеки с расширением **.****ll****2**. Следует выбрать его и нажать **Открыть**.

   ![pacore 03](https://docs.owen.ru/book_img/1903/134293.png)

   *Добавление библиотеки в проект*

Добавленная библиотека отобразится в окне <b>*Проекты*</b>.

<a id="topic-94729"></a>

### Хранение параметров на диске (SaverEx)

Блок <b>*SaverEx*</b> обеспечивает хранение данных в архиве на диске контроллера в виде бинарного файла.

Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в <b>*Фоне*</b>.

**Назначение входов и выходов SaverEx**

**Входы**

| Элемент | Описание |
| --- | --- |
| rst | Сброс ошибок записи |
| fnm | Абсолютный путь и имя файла на диске (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока [210-SD-USB](#topic-94724) (константный) |
| wr | Запись на диск |
| in | Значение параметра (циклический) |
| typ | Тип параметра (циклический, константный):<br>**DI** – 8-ми битный регистр;<br>**AI** – вещественное значение;<br>**II** – 16-ти битный регистр |
| ini | Значение для инициализации (циклический, константный) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| next | Имя следующего файла |
| enb | Запись разрешена |
| sts | Статус:<br>**0** – после сброса;<br>**1** – записан;<br>**2** – прочитан;<br>**<0** – ошибка |
| good | Количество удачных записей |
| bad | Количество ошибок записи |
| rej | Количество отклоненных записей |
| o | Текущее значение параметров (циклический) |

Имя файла и путь к нему задается на входе **fnm**. Поле может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера.

Данные организуются в виде переменных **in** с жестко заданным типом **typ**.

Поскольку входы **in** имеют тип **any**, следует строго соблюдать правила преобразования типов при проведении связей.

Если файла не существует на диске – входы инициализируются с помощью значений **ini**, происходит запись в файл.

Если файл существует на диске, выходы инициализируются сохраненными значениями. Запись в файл осуществляется только при изменении значений на входах **in**.

Запись на диск можно осуществить принудительно, подав команду **wr**.

Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Поэтому если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения переменных, записанные в другом файле.

При чтении содержимое файла контролируется с помощью контрольной суммы и выдается на выходы только при ее корректности. Поэтому если, например, добавить в файл новую переменную, то записанные значения для выходов сбросятся на инициализирующие **ini**.

Если при записи файла на диск происходит однократная ошибка, блок пытается переименовать текущий файл и снова произвести запись. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход **bad** инкрементируется. Следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом равным метке времени сбоя (в мс от 1 января 1970 г). Не рекомендуется его удалять, чтобы повторно не использовать потенциально сбойный сектор.

Если происходит повторный сбой записи, то блок блокируется (выход **enb** **= 0**) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе **rst**.

> [!WARNING]
> **Внимание.** При изменении числа входов блока <b>*SaverEx*</b> файлы на диске перезаписываются.

Пример работы с блоком приведен в [разделе](#topic-94739).

![pacore 04](https://docs.owen.ru/book_img/1903/134292.png)

*Хранение параметров на диске (SaverEx)*

<a id="topic-94730"></a>

### Буфер чтения/записи уставок (BufSupEx)

Блок <b>*BufSupEx*</b> представляет собой двунаправленный буфер данных интерфейса и данные сохраняются в бинарном файле на диске контроллера. Блок сохраняет все значения на диске контроллера аналогично блоку [SaverEx](#topic-94729).

Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в <b>*Фоне*</b>.

**Назначение входов и выходов BufSupEx**

**Входы**

| Элемент | Описание |
| --- | --- |
| inter | Cвязь от интерфейса, к которому принадлежит данный буфер |
| group | Номер группы (константный) |
| fnm | Абсолютный путь и имя файла (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока [210-SD-USB](#topic-94724) (константный) |
| mask | Не используется |
| rst | Сброс ошибок записи |
| wr | Запись на диск |
| dan | Значение, которое записывается в буфер при **czap = 1** (циклический) |
| czap | Запись значения **dan** (циклический) |
| typ | Тип параметра (циклический, константный):<br>**DI**, **DO** – 8-ми битный регистр;<br>**AI**, **AO** – вещественное значение;<br>**II**, **IO** – 16-ти битный регистр |
| adr | Адрес параметра (циклический, константный) |
| ini | Значение для инициализации (циклический, константный) |
| min | Минимум. Если принятое значение меньше **min**, то оно игнорируется (циклический) |
| max | Максимум. Если принятое значение больше **max**, то оно игнорируется (циклический) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| pkt | Подключение к блокам <b>*OpcUAClient*</b>, <b>*UABufSups*</b> из библиотеки <b>*paOpcUA*</b> |
| next | Имя следующего файла |
| enb | Запись разрешена |
| sts | Статус:<br>**0** – после сброса;<br>**1** – записан;<br>**2** – прочитан;<br>**<0** – ошибка |
| good | Количество удачных записей |
| bad | Количество ошибок записи |
| rej | Количество отклоненных записей |
| dan | Значение параметра, полученное по интерфейсу или на вход **dan** (после проверки на **min** и **max**) |
| chn | Признак изменения, выставляется в **1** на один цикл выполнения программы, если значение **dan** изменилось |
| zap | Признак записи, выставляется в **1** на один цикл выполнения программы, если значение с входа **dan** было записано |

Номер группы **group** используется в качестве Slave ID при подключении к блоку интерфейса Modbus Slave.

Имя файла и путь к нему задается на входе **fnm**. Поле может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера.

Адрес переменной **adr** зависит от интерфейса, к которому подключен буфер, например, адрес регистра Modbus.

Поскольку входы **dan** имеют тип <b>*any*</b>, следует строго соблюдать правила преобразования типов при проведении связей.

Если файл существует на диске, выходы инициализируются сохраненными значениями. Если файла не существует – выходы инициализируются значениями инициализации **ini**.

Запись в файл осуществляется при изменении значений на входах **dan** или по интерфейсу. Если файла на диске не существует и выходы **dan** приняли значения **ini**, то можно записать их на диск принудительно, подав команду **wr**.

Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Поэтому если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения переменных, записанные в другом файле.

При чтении содержимое файла контролируется с помощью контрольной суммы и выдается на выходы только при ее корректности. Поэтому если, например, добавить в файл новую переменную, то записанные значения для выходов сбросятся на инициализирующие **ini**.

Если при записи файла на диск происходит однократная ошибка, блок пытается переименовать текущий файл и снова произвести запись. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход **bad** инкрементируется. Следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом равным метке времени сбоя (в мс от 1 января 1970 г). Не рекомендуется его удалять, чтобы повторно не использовать потенциально сбойный сектор.

Если происходит повторный сбой записи, то блок блокируется (выход **enb** **= 0**) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе **rst**.

> [!WARNING]
> **Внимание.** При изменении числа входов блока <b>*BufSupEx*</b> файлы на диске перезаписываются.

Примеры работы с блоком приведены в [разделе](#topic-94740).

![pacore 05](https://docs.owen.ru/book_img/1903/134291.png)

*Буфер чтения/записи уставок (BufSupEx)*

<a id="topic-94731"></a>

### Счетчик времени наработки (CounterMEx)

Блок <b>*CounterMEx*</b> предназначен для сохранения в бинарный файл наработки устройств.

Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в <b>*Фоне*</b>.

**Назначение входов и выходов CounterMEx**

**Входы**

| Элемент | Описание |
| --- | --- |
| rst | Сброс ошибок записи |
| fn | Абсолютный путь и имя файла (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока [210-SD-USB](#topic-94724) (константный) |
| ask | Запись на диск |
| slv | Используется для изменения значений счетчиков, если **slv = 1**, то **cnt = mas**, **cfrn** **=** **mcfrn** |
| enbl | Работа устройства (циклический): пока **enbl = 1**, увеличивается время наработки **cfrn****,** при изменении **enbl** с **0** на **1** число включений **cnt** увеличивается на **1** |
| rst | Сброс времени наработки **cnt** (циклический) |
| frm | Формат отображения для времени наработки. Не используется |
| rfr | Сброс числа включений **cfrn** (циклический) |
| mas | Балансировка времени наработки **cnt** (циклический), если **slv** = **1**, то **cnt** = **mas** |
| mcfrn | Балансировка числа включений **cfrn** (циклический), если **slv** = **1**, то **cfrn** = **mcfrn** |

**Выходы**

| Элемент | Описание |
| --- | --- |
| next | Имя следующего файла |
| enb | Запись разрешена |
| good | Количество удачных записей |
| bad | Количество ошибок записи |
| cnt | Время наработки в секундах (циклический) |
| hour | Время наработки в формате часы (циклический) |
| min | Время наработки в формате минуты (циклический) |
| sec | Время наработки в формате секунды (циклический) |
| day | Текущий день (циклический) |
| mnth | Текущий месяц (циклический) |
| year | Текущий год (циклический) |
| cfrn | Число включений (циклический) |

Блок анализирует входы **enbl**.

На выходе **cfrn** отображается число включений устройства (количество изменений **enbl** c **0** на **1**), на выходе **cnt** отображается время наработки устройства (сколько секунд **enbl** был равен **1**).

Блок может сохранять число включений и время наработки в файл по фронту на входе **ask**. Сохраненные значения считываются из файла при инициализации.

Имя файла и путь к нему задается на входе **fnm**. Поле может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера.

Для изменения числа включений и времени наработки следует подать **1** на вход **slv**, тогда **cnt = mas**, **cfrn = mcfrn**. Это может быть полезно для синхронизации в дублированных системах.

Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Поэтому если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения наработки, записанные в другом файле.

При чтении содержимое файла контролируется с помощью контрольной суммы и выдается на выходы только при ее корректности. Поэтому если, например, добавить в файл новую переменную, то записанные значения для выходов сбросятся на инициализирующие **ini**.

Если при записи файла на диск происходит однократная ошибка, блок пытается переименовать текущий файл и снова произвести запись. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход **bad** инкрементируется. Следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом равным метке времени сбоя (в мс от 1 января 1970 г). Не рекомендуется его удалять, чтобы повторно не использовать потенциально сбойный сектор.

Если происходит повторный сбой записи, то блок блокируется до тех пор, пока ошибки не будут сброшены фронтом на входе **rst**.

> [!WARNING]
> **Внимание.** При изменении числа входов блока <b>*CounterMEx*</b> файлы на диске перезаписываются.

Пример работы с блоком приведен в [разделе](#topic-94745).

![pacore 06](https://docs.owen.ru/book_img/1903/134290.png)

*Счетчик времени наработки (CounterMEx)*

<a id="topic-94732"></a>

## Библиотека profiLogger

Запись архивов на диск контроллера организуется с помощью блоков из библиотеки <b>*profiLogger*</b>.

Добавление библиотеки в проект описано в [разделе](#topic-94728).

<a id="topic-94733"></a>

### Массив значений параметров по событию (RamFRLogger)

Блок <b>*RamFRLogger*</b> совместно с блоком [ComtradeLogger](#topic-94734) организует сохранение значений выбранных параметров в файл в течение заданного времени «до» события и в течение заданного времени «после» события.

Блок <b>*RamFRLogger*</b> формирует массив значений параметров для последующей записи на диск.

Раздел библиотеки: <b>*Архиваторы*</b>.

Блок <b>*RamFRLogger*</b> следует размещать только в <b>*Таймере*</b>.

**Назначение входов и выходов RamFRLogger**

**Входы**

| Элемент | Описание |
| --- | --- |
| trigger | Фронт срабатывания. При подаче **1** на данный вход блок начинает работать |
| befor | Время в секундах «до» события |
| after | Время в секундах «после» события |
| every | Кратность квантования. Например, если таймерный промежуток установлен **20** **мс** и **every** **= 5**, запись будет производиться каждые **100 мс** |

**Выходы**

| Элемент | Описание |
| --- | --- |
| me | Не используется |
| array | Массив накопленных значений – для соединения с блоком <b>*ComtradeLogger*</b> |
| ttime | Время срабатывания – для соединения с блоком <b>*ComtradeLogger*</b> |
| cnt | Счетчик точек |
| pnum | Количество точек для записи |
| sts | Статус подготовки лога:<br>**0** – нет ошибок;<br>**1** – идет подготовка;<br>**-1** – ошибка |

Входы/выходы проекта, которые необходимо архивировать по событию, добавляются в раздел <b>*Данные*</b> внутри блока.

Для начала формирования массива значений следует установить **1** на входе **trigger**.

Работа блоков <b>*RamFRLogger*</b> и <b>*ComtradeLogger*</b> объединена в блоке «черный ящик» [BlackBox](#topic-94737). Пример работы с блоком <b>*BlackBox*</b> в [разделе](#topic-94747).

![pacore 07](https://docs.owen.ru/book_img/1903/134289.png)

*Массив значений параметров по событию (RamFRLogger<b>)</b>*

<a id="topic-94734"></a>

### Сохранение значений параметров на диск по событию (ComtradeLogger)

Блок <b>*ComtradeLogger*</b> совместно с блоком [RamFRLogger](#topic-94733) организует сохранение значений выбранных параметров в файл в течение заданного времени «до» события и в течение заданного времени «после» события.

Блок <b>*ComtradeLogger*</b> сохраняет значения параметров в файл на диск.

Раздел библиотеки: <b>*Архиваторы*</b>.

Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в <b>*Фоне*</b>.

**Назначение входов и выходов ComtradeLogger**

**Входы**

| Элемент | Описание |
| --- | --- |
| enb | Разрешение работы блока:<br>**1** – включен;<br>**0** – выключен |
| name | Путь и начало имени файла. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока [210-SD-USB](#topic-94724) (константный) |
| array | Массив накопленных значений – для соединения с блоком <b>*RamFRLogger*</b> |
| ttime | Время срабатывания – для соединения с блоком <b>*RamFRLogger*</b> |

**Выходы**

| Элемент | Описание |
| --- | --- |
| me | Не используется |
| fname | Абсолютный путь и начало имени результирующего файла **\*.****dat** |
| sts | Статус подготовки файла:<br>**0** – блок не работает над файлом или данные для файла еще накапливаются;<br>**1** – файл успешно создан (взводится на один цикл работы блока);<br>**-1** – внутренняя ошибка при работе с массивом данных (массив не содержит данных или меток времени);<br>**-2** – проблема создания/открытия файла;<br>**-3** – неподдерживаемый формат входных данных |

Для начала записи на диск следует установить **1** на входе **enb**.

По окончании записи формируются два файла: файл с расширением **.dat** – набор значений параметров, накопленных за временной отрезок, файл с расширением **.****cfg** – служебная информация о событии.

Блок <b>*ComtradeLogger*</b> задает имена файлов так: "значение **fname**" плюс "метка времени начала записи параметров на диск в формате <b>*ГГГГ_ММ_ДД_ЧЧ_ММ_СС*</b> (без учета часового пояса)".

> [!WARNING]
> **Внимание.** Рекомендуется записывать данные на внешний накопитель, чтобы избежать изнашивания внутреннего диска контроллера.

Работа блоков <b>*RamFRLogger*</b> и <b>*ComtradeLogger*</b> объединена в блоке «черный ящик» [BlackBox](#topic-94737). Пример работы с блоком <b>*BlackBox*</b> приведен в [разделе](#topic-94747).

![pacore 08](https://docs.owen.ru/book_img/1903/134288.png)

*Сохранение значений параметров на диск по событию (ComtradeLogger<b>)</b>*

<a id="topic-94735"></a>

## Библиотека profiLoggerLight

Запись архивов на диск контроллера организуется с помощью блоков из библиотеки <b>*profiLoggerLight*</b>.

Добавление библиотеки в проект описано в [разделе](#topic-94728).

<a id="topic-94736"></a>

### Файловый архив данных (FileDpLogger)

Блок <b>*FileDpLogger*</b> предназначен для архивирования значений выбранных входов/выходов в текстовых файлах.

Раздел библиотеки: <b>*Архивы*</b>.

**Назначение входов и выходов FileDpLogger**

**Входы**

| Элемент | Описание |
| --- | --- |
| file_path | Абсолютный путь к директории, где будут храниться архивные файлы. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе **usbpath** блока [210-SD-USB](#topic-94724) (константный) |
| enb | Разрешена работа блока:<br>**0** – блок не работает;<br>**1** – блок пишет данные в буфер |
| wr | Разрешена запись на диск:<br>**0** – нет;<br>**1** – да |
| loc | Использовать локальное время для смены файлов (константный):<br>**0** – нет (использовать мировое время);<br>**1** – да |
| grp | Группировка данных по файлам (константный):<br>**NO****\_****GROUP** – каждое данное в отдельном файле;<br>**GROUP****\_****ALLINONE** – все данные в одном файле |
| frmt | Формат записей в файлах (константный):<br>**TAB_and_COMM** – формат записи с разделителем табуляция «→», в числах с плавающей точкой используется запятая «,»;<br>**COMM_and_DOT** – формат записи с разделителем запятая «,», в числах с плавающей точкой используется точка «.». Использование запятой в комментарии приведет к некорректному формату файла;<br>**TO_MSD200** – формат записи с разделителем точка с запятой «;», в числах с плавающей точкой используется запятая «,» |
| meth | Метод записи данных в файл (константный):<br>**TIMESTAMP** – запись с временными метками с заполнением пустых;<br>**INTERVAL** – запись с заданным интервалом (период архивирования по умолчанию **1** **с**) |
| intr | Интервал записи, мс. Устанавливает период архивирования. В файл записывается последнее значение входа/выхода, полученное в этом периоде. Используется только в методе **INTERVAL** (константный) |
| qqlen | Размер буфера на каждое данное: минимальное значение **10**, максимальное зависит от характеристик контроллера и объема оперативной памяти, которую при работе проекта допускается выделить для хранения буфера данных. Для расчета максимального размера очереди нужно учитывать количество данных, которое планируется записывать (см. пример [ниже)](#qqlen) (константный) |
| prt | Приоритет потока записи из буфера на диск, по умолчанию **25** (константный) |
| rst | Сброс ошибок записи: изменение с **0** на **1** сбрасывает бит **iserr**, обнуляет **err** и **lost** |

**Выходы**

| Элемент | Описание |
| --- | --- |
| lg | Указатель на блок базового типа CBaseLogger, инициализируется указателем на базовый класс блока. Не используется в программе контроллера |
| ok | Количество удачно записанных строк, значение инициализации **0** |
| lost | Количество потерянных данных из-за заполненности очередей, значение инициализации **0** |
| iserr | Была ошибка записи, значение инициализации **0** |
| err | Количество ошибок записи, значение инициализации **0** |

Данные в архив записываются по изменению с учетом свойства <b>*Зона нечувствительности*</b>. Формат, группировка и метод записи в файл выбираются на входах блока.

Входы/выходы в проекте, которые необходимо архивировать, добавляются в раздел <b>*Данные*</b> внутри блока.

Для того, чтобы блок начал запись на диск, следует установить значение **1** на входах **enb** и **wr**.

> [!WARNING]
> **Внимание.** Рекомендуется записывать данные на внешний накопитель, чтобы избежать изнашивания внутреннего диска контроллера.

Каждый день запись производится в новый файл. На входе **loc** блока можно выбрать, какое время использовать для смены файлов (мировое или локальное). Дата записи данных отображается в имени файла.

Имена файлов зависят от заданных на входе блока значений:

- для формата **TO_MSD200**;

- <b>*Logs_ALLINONE_ГГГГ_ММ_ДД.txt*</b> – для форматов **TAB_and_COMM** и **COMM_and_DOT** с группировкой всех данных в одном файле **GROUP_ALLINONE**

  ;

- <b>*Logs\_<алиас данного>\_ГГГГ_ММ_ДД.txt*</b> – для форматов **TAB_and_COMM** и **COMM_and_DOT** без группировки **NO_GROUP** (каждое данное в отдельном файле).

В заголовок таблицы по умолчанию попадают свойства входов/выходов <b>*Полный алиас*</b> и <b>*Комментарий*</b>.

> [!WARNING]
> **Внимание.** Комментарий отображается при условии, что у модуля добавлено свойство <b>*Трансляция: включить свойства входов/выходов*</b>, равное <b>*Только из разделов*</b>.

Если необходимо, чтобы комментарий не отображался, следует удалить свойство <b>*Трансляция: комментарии отдельно*</b> у раздела <b>*Данные*</b>.

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

> [!WARNING]
> **Внимание.** При изменении числа параметров в разделе <b>*Данные*</b> создается новый файл архива.

> [!WARNING]
> **Внимание.** Использование запятой в комментарии приведет к некорректному чтению файла трендом, в случае использования формата **COMM****\_****and****\_****DOT**.

> [!WARNING]
> **Внимание.** Для корректного отображения сохраненных данных в программах просмотра графиков необходимо, чтобы у входов/выходов, добавленных в раздел, было добавлено свойство <b>*Полный алиас*</b>. Алиасы должны быть уникальными в пределах раздела <b>*Данные*</b>, чтобы обеспечить уникальность имен файлов. Уникальность алиаса должна обеспечиваться без учета регистра. Если алиас отсутствует, или не уникален, то данное не будет архивироваться.

> [!WARNING]
> **Внимание.** Если блок устанавливается в таймере, то порядок выполнения всех блоков, входы/выходы которых добавлены в архив, имеет смысл выставлять либо выше, либо ниже, чем у блока архива. Так как метка времени блоков, порядок которых ниже, запишется с меткой времени текущего таймерного цикла, а те, которые выше – с меткой времени следующего цикла.

Каждый объект данных хранится в своем буфере, максимальная величина которого задается на входе блока **qqlen**. Максимальный размер очереди используется для ограничения количества оперативной памяти, которую может выделить блок для хранения буфера данных, т.к. на хранение каждого элемента очереди требуется **32** **байта** оперативной памяти.

**Пример**

Например, при <a id="qqlen"></a>**qqlen = 1000**, для хранения **64** различных показателей, потребуется **2,048 мегабайт** оперативной памяти. Если нет возможности записать данные в файл, то эта очередь заполнится через **1000 секунд** (при записи методом **INTERVAL** и показателе **int = 1000 мс**).

При возникновении ошибок записи (недостаточно памяти, память испорчена, извлечена Flash-карта и т.п.) блок установит значение **1** на выходе **iserr** (если была ошибка записи), и увеличит счетчик ошибок **err**. После двух ошибок блок прекратит запись на диск, пока ошибки не будут сброшены сигналом на входе **rst**.

Если запись остановлена (**wr = 0** или **err = 2**), но при этом разрешена работа блока (**enb = 1**), то данные копятся в буфере, пока он не достигнет максимальной величины, заданной на входе **qqlen**.

Если за время отключения записи буфер заполнится, часть архивируемых данных будет утеряна. На выходе **lost** отобразится общее количество утерянных данных по всем входам/выходам. Количество потерянных данных сбрасывается при сбросе ошибок записи сигналом на входе **rst**.

Работа блока <b>*FileDpLogger*</b> осуществляется в отдельном потоке, приоритет которого задается на входе **prt**.

> [!NOTE]
> **Примечание.** Формат **TO_MSD200** разрабатывался для визуализации в программе [График ОВЕН МСД200](https://owen.ru/documentation/1809).

В связи с особенностями работы программы *График ОВЕН МСД200* существуют следующие ограничения для обеспечения совместимости:

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

Пример работы с блоком приведен в [разделе](#topic-94746).

![pacore 09](https://docs.owen.ru/book_img/1903/134317.png)

*Файловый архив данных (FileDpLogger<b>)</b>*

<a id="topic-94737"></a>

### Черный ящик (BlackBox)

Блок BlackBox совмещает в себе работу блоков [RamFRLogger](#topic-94733) и [ComtradeLogger](#topic-94734) из библиотеки <b>*profiLogger*</b>. Этот блок сохраняет значения выбранных параметров в файл в течение заданного времени «до» события и в течение заданного времени «после» события.

Раздел библиотеки: <b>*Архиваторы*</b>.

Блок <b>*BlackBox*</b> следует размещать только в <b>*Таймере*</b>.

**Назначение входов и выходов BlackBox**

**Входы**

| Элемент | Описание |
| --- | --- |
| trigger | Фронт срабатывания. При подаче **1** на данный вход блок начинает работать |
| before | Время, в течение которого производится запись значений до срабатывания триггера |
| after | Время, в течение которого производится запись значений после срабатывания триггера |
| every | Кратность квантования. Например, если таймерный промежуток (свойство модуля <b>*Таймерный промежуток*</b>) установлен **20 мс** и **every** **= 5**, запись будет производиться каждые **100 мс**. Должно быть отлично от **0** |
| enb | Разрешение записи на диск:<br>**0** – выключена;<br>**1** – включена |
| name | Путь и начало имени файла. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока [210-SD-USB](#topic-94724) (константный) |
| priority | Приоритет потока ожидания выполнения команды |

**Выходы**

| Элемент | Описание |
| --- | --- |
| logger_sts | Статус подготовки лога в ОЗУ:<br>**0** – нет ошибок;<br>**1** – идет подготовка лога;<br>**-1** – неверное значение параметра **every** или отсутствует раздел <b>*Данные*</b> в блоке |
| me | Указатель на блок базового типа CBaseLogger, инициализируется указателем на базовый класс блока. Не используется в программе контроллера |
| fname | Абсолютный путь и начало имени результирующего файла **\*.****dat**, инициализируется **0** |
| comtrade_sts | Статус подготовки файла, инициализируется **0**:<br>**0** – блок не работает над файлом или данные для файла еще накапливаются;<br>**1** – файл успешно создан (взводится на один цикл работы блока);<br>**-1** – внутренняя ошибка при работе с массивом данных (массив не содержит данных или меток времени);<br>**-2** – проблема создания/открытия файла;<br>**-3** – неподдерживаемый формат входных данных |
| pnum | Число накопленных значений в массиве для записи в ПЗУ, инициализируется **0** |

Входы/выходы в проекте, которые необходимо архивировать по событию, добавляются в раздел <b>*Данные*</b> внутри блока.

Блок сохраняет в ОЗУ текущие значения с фиксированной частотой дискретизации в течение установленного в **before** времени.

Если на вход **trigger** подано значение больше **0**, отмечается время наступления события и пишутся значения в течение установленного в **аfter** времени.

Когда запись окончена, сформированный массив передается в фоновый поток записи массива данных в ПЗУ. Если в **enb** установлено значение **1**, формируется следующие два файла: файл с расширением **.dat** – набор значений параметров, накопленных за временной отрезок, файл с расширением **.cfg** – служебная информация о событии.

Имена файлов определяются по входу **name** плюс метка времени (без учета часового пояса) начала записи параметров на диск в формате <b>*ГГГГ_ММ_ДД_ЧЧ_ММ_СС*</b>.

> [!NOTE]
> **Примечание.** Запись рекомендуется производить на внешний накопитель, чтобы избежать изнашивания внутреннего диска контроллера.

Пример работы с блоком приведен в [разделе](#topic-94747).

![pacore 10](https://docs.owen.ru/book_img/1903/134316.png)

*Черный ящик (BlackBox)*

<a id="topic-94738"></a>

## Сохранение уставок

Сохранение уставок на диск контроллера или внешний накопитель организуется с помощью блоков [SaverEx](#topic-94729) и [BufSupEx](#topic-94730) из библиотеки <b>*paCore*</b>, а также с помощью блока [BufSupFltEx](#topic-94744) из библиотеки <b>*paModbus*</b>.

<a id="topic-94739"></a>

### Сохранение уставок из программы контроллера (SaverEx)

Сохранение уставок из программы контроллера организуется с помощью блока [SaverEx](#topic-94729).

Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Файлы для сохранения чередуются.

На вход блока **fnm** подается абсолютный путь и имя файла, куда будет осуществляться запись. Расширение файла игнорируется – на диск записываются бинарные файлы с расширениями **.****da****1** и **.****da****2**. Если оставить данное поле пустым – имя файла будет определяться автоматически по индексу блока, файл будет сохраняться в рабочую директорию контроллера.

На входах блока **typ** задаются типы данных сохраняемых параметров:

- **DI** – 8-ми битный регистр;
- **AI** – вещественное значение;
- **II** – 16-ти битный регистр.

На входах **ini** задаются значения инициализации параметров.

![pacore 11](https://docs.owen.ru/book_img/1903/134315.png)

*Конфигурация SaverEx для сохранения уставок на MicroSD-накопитель в файлах saver.da1 и saver.da2*

Если файла на диске не существует, при запуске программы входы **in** и выходы **o** примут значения, заданные на входах **ini**. На диске сохранится файл с расширением **.****da****1**. Выход **good** блока инкрементируется.

![pacore 12](https://docs.owen.ru/book_img/1903/134314.png)

*Сохранение уставок на MicroSD-накопитель. Первый запуск программы*

Далее запись на диск будет производится только по изменению значений на входах **in**.

![pacore 13](https://docs.owen.ru/book_img/1903/134313.png)

*Сохранение уставок на MicroSD-накопитель. Изменение уставок из программы*

Если файл на диске существует, при перезапуске программы входы **in** и выходы **o** примут значения, сохраненные на диске.

![pacore 14](https://docs.owen.ru/book_img/1903/134312.png)

*Сохранение уставок на MicroSD-накопитель. Перезапуск программы*

Файлы, в которые производится запись уставок – бинарные, просмотреть их содержимое нельзя.

![pacore 15](https://docs.owen.ru/book_img/1903/134311.png)

*Сохранение уставок на MicroSD-накопитель. Файлы на диске*

Поведение блока при возникновении ошибки записи описано в [разделе](#topic-94729).

При сохранении данных на внешний накопитель на вход **rst** можно завести выход флага монтирования накопителя блока [210-SD-USB](#topic-94724). Сброс ошибок **rst** выполняется по фронту перехода из **0** в **1**.

> [!NOTE]
> **Примечание.** При изменении числа входов блока <b>*SaverEx*</b> файлы на диске перезаписываются.

<a id="topic-94740"></a>

### Сохранение уставок с использованием OPC UA/Modbus (BufSupEx)

Для записи уставок с удаленного OPC UA-клиента и/или по протоколу Modbus используются блоки <b>*BufSupEx*</b>.

Работа блока <b>*BufSupEx*</b> аналогична работе блока [SaverEx](#topic-94729) и описана в [разделе](#topic-94730).

<a id="topic-94741"></a>

#### Запись уставок с удаленного OPC UA-клиента

Для записи уставок в блоки [BufSupEx](#topic-94730) с удаленного OPC UA-клиента используется блок <b>*UABufSups*</b> из библиотеки <b>*paOpcUA*</b>.

Настройка OPC UA-сервера подробно описана в документе [Обмен с верхним уровнем. Библиотека paOpcUA](https://owen.ru/product/polygon/documentation).

Блоки <b>*BufSupEx*</b> в проекте контроллера-сервера подключаются выходами **pkt** к входам **buf** блока <b>*UABufSups*</b>.

Вход **inter** блока <b>*BufSupEx*</b> можно при необходимости подключить к другому блоку протокола (например, к блокам <b>*Modbus*</b> <b>*Slave*</b> из библиотеки <b>*paModbus*</b>, см. пример в [разделе](#topic-94743)).

![pacore 16](https://docs.owen.ru/book_img/1903/134310.png)

*Запись уставок с OPC UA-клиента*

При отключении блока <b>*UABufSups*</b> (или при его отсутствии) для записи уставки с OPC UA-клиента потребуется подать импульс на входы **czap**.

Параметры на диске сохраняются в бинарных файлах **.****da****1** и **.****da****2**.

> [!NOTE]
> **Примечание.** При изменении числа входов блока <b>*BufSupEx*</b> файлы на диске перезаписываются.

Поведение блока <b>*BufSupEx*</b> при ошибках записи описано в [разделе](#topic-94730).

<a id="topic-94742"></a>

#### Синхронизация записи уставок между контроллерами по OPC UA

Для синхронизации записи уставок блоков [BufSupEx](#topic-94730) между двумя контроллерами по протоколу OPC UA требуется дублировать во второй контроллер программу (или целиком место работы), в которой добавлен блок <b>*BufSupEx*</b>.

Для этого следует перетащить на модуль второго контроллера (оба модуля должны быть в одном проекте) требуемую программу, в выпадающем меню выбрать <b>*Добавить*</b>.

Обе программы подсветятся желтым. Теперь все изменения на страницах данной программы будут одинаково применены в обоих модулях.

Настройка работы по протоколу OPC UA подробно описана в документе [Обмен с верхним уровнем. Библиотека paOpcUA](https://owen.ru/product/polygon/documentation).

![pacore 17](https://docs.owen.ru/book_img/1903/134309.png)

*Дублированные программы*

Блоки <b>*BufSupEx*</b> в данной программе следует соединить выходами **pkt** с входами **buf** блока <b>*OpcUAClient*</b> из библиотеки <b>*paOpcUA*</b>.

Входы <b>*OpcUAClient*</b>, которые отвечают за настройку обмена (IP-адреса и порты), следует задавать с помощью SQL-запросов к соответствующим свойствам модулей.

Запрос IP адреса (prop_ip):

```
"<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip"</sql>"
```

Запрос номера порта (prop_debug_port):

```
<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_debug_port"</sql>
```

Запрос пользовательского свойства <b>*Пользовательское свойство 00*</b> (prop_0):

```
<sql> SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_0"</sql>
```

(обычно используется на входах **rip** и **rprt**).

![pacore 18](https://docs.owen.ru/book_img/1903/134308.png)

*Подключение BufSupEx к OpcUAClient*

После запуска программ на обоих контроллерах, один из них следует назначить «ведущим» – отключить <b>*OpcUAClient*</b> (**enb** **= 0**), а второй «ведомым» – включить <b>*OpcUAClient*</b> (**enb** **= 1**).

Теперь при изменении уставок ведущего контроллера изменения будут дублироваться в ведомый с помощью OPC UA-клиента.

При попытке изменить уставки ведомого контроллера изменения в ведущем контроллере не применятся.

![pacore 19](https://docs.owen.ru/book_img/1903/134337.png)

*Изменение уставки с ведущего контроллера*

![pacore 20](https://docs.owen.ru/book_img/1903/134336.png)

*Ведомый контроллер*

Параметры на диске сохраняются в бинарных файлах с расширениями **.****da****1** и **.****da****2**.

> [!NOTE]
> **Примечание.** При изменении числа входов блока <b>*BufSupEx*</b> файлы на диске перезаписываются.

Поведение блока <b>*BufSupEx*</b> при ошибках записи описано в [разделе](#topic-94730).

<a id="topic-94743"></a>

#### Запись целочисленных уставок по протоколу Modbus

Для записи уставок по протоколу **Modbus** вход **inter** блока [BufSupEx](#topic-94730) подключается к выходу блока протокола <b>*Modbus*</b> <b>*TCP*</b> <b>*Slave*</b> или <b>*Modbus*</b> <b>*RTU*</b> <b>*Slave*</b> из библиотеки <b>*paModbus*</b>.

Мастер в сети Modbus может читать и записывать данные на диск. Для чтения блок <b>*BufSupEx*</b> реализует функцию **0х03**, для записи – **0х06** и **0х10**.

Вход **group** определяет Slave ID устройства (ID = **1** соответствует значению входа **0x100**).

Входы **dan** используются для записи уставок из программы контроллера. Для того, чтобы значение записалось на диск из программы, и его прочитал мастер сети Modbus, следует также подать импульс на соответствующий вход **czap**.

Входы **typ** определяют тип данных **dan**, при работе по Modbus могут принимать только значения **II**, **IO** (16-ти битный регистр), так как Modbus работает с целочисленными регистрами.

Сохранение по протоколу Modbus уставок с плавающей точкой рассмотрено в [разделе](#topic-94744).

Входы **adr** определяют адреса выделяемых регистров Modbus.

Входы **min** и **max** задают минимальное и максимальное возможное значение **dan**, при изменении значения из программы или мастером сети оно проверяется на условие соответствия этому диапазону. Значение, выходящее за этот диапазон, записано не будет.

Выходы **dan** отображают текущие значения уставок, сохраненных на диск.

Параметры на диске сохраняются в бинарных файлах с расширениями **.****da****1** и **.****da****2**.

> [!NOTE]
> **Примечание.** При изменении числа входов блока <b>*BufSupEx*</b> файлы на диске перезаписываются.

Поведение блока <b>*BufSupEx*</b> при ошибках записи описано в [разделе](#topic-94730).

Подробно настройка обмена по протоколу Modbus описана в документе [Обмен по протоколу Modbus. Библиотека paModbus](https://owen.ru/product/polygon/documentation).

![pacore 24](https://docs.owen.ru/book_img/1903/134335.png)

<i>Подключение BufSupEx к **Modbus** **TCP** **Slave**</i>

![pacore 25](https://docs.owen.ru/book_img/1903/134334.png)

*Запись уставки мастером сети Modbus*

![pacore 26](https://docs.owen.ru/book_img/1903/134333.png)

*Запись уставки из программы контроллера*

<a id="topic-94744"></a>

#### Запись уставок с плавающей точкой по протоколу Modbus (BufSupFltEx)

Для записи уставок с плавающей точкой по протоколу **Modbus** используются блоки <b>*BufSup*</b><b>*Flt*</b><b>*Ex*</b> из библиотеки <b>*paModbus*</b>.

Вход **inter** блока <b>*BufSup*</b><b>*Flt*</b><b>*Ex*</b> подключается к выходу блока протокола <b>*Modbus*</b> <b>*TCP*</b> <b>*Slave*</b> или <b>*Modbus*</b> <b>*RTU*</b> <b>*Slave*</b> из библиотеки <b>*paModbus*</b>.

Мастер в сети Modbus может читать и записывать данные на диск. Для чтения блок <b>*BufSup*</b><b>*Flt*</b><b>*Ex*</b> реализует функцию **0х03**, для записи – **0х10**.

Вход **group** определяет Slave ID устройства (ID = **1** соответствует значение входа **0x100**).

Входы **dan** используются для записи уставок из программы контроллера. Для того, чтобы значение записалось на диск из программы, и его прочитал мастер сети Modbus, следует также подать импульс на соответствующий вход **czap**.

Входы **typ** определяют тип данных **dan**, могут принимать только значения **AI**, **AO** (вещественное число).

Входы **adr** определяют адреса выделяемых регистров Modbus. Для опроса каждого значения **dan** выделяется 2 регистра Modbus.

Входы **min** и **max** задают минимальное и максимальное возможное значение **dan**, при изменении значения из программы или мастером сети оно проверяется на условие соответствия этому диапазону. Значение, выходящее за этот диапазон, записано не будет.

Выходы **dan** отображают текущие значения уставок, сохраненные на диск.

Параметры на диске сохраняются в бинарных файлах с расширениями **.****da****1** и **.****da****2**.

> [!WARNING]
> **Внимание.** При изменении числа входов блока <b>*BufSupFltEx*</b> файлы на диске перезаписываются.

Поведение блока <b>*BufSup*</b><b>*Flt*</b><b>*Ex*</b> аналогично блоку <b>*BufSupEx*</b> и описано в [разделе](#topic-94730).

Подробно настройка обмена по протоколу Modbus описана в документе [Обмен по протоколу Modbus. Библиотека paModbus](https://owen.ru/product/polygon/documentation).

![pacore 24](https://docs.owen.ru/book_img/1903/134335.png)

<i>Подключение <b>*BufSup*</b><b>*Flt*</b><b>*Ex*</b> **к** **Modbus** **TCP** **Slave**</i>

![pacore 25](https://docs.owen.ru/book_img/1903/134332.png)

*Запись уставки мастером сети Modbus*

![pacore 27](https://docs.owen.ru/book_img/1903/134331.png)

*Запись уставки из программы контроллера*

<a id="topic-94745"></a>

## Работа с счетчиком времени наработки (CounterMEx)

Для сохранения времени наработки устройств используется блок [CounterMEx](#topic-94731).

Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Файлы для сохранения чередуются.

На вход блока **fn** подается абсолютный путь и имя файла, куда будет осуществляться запись. Расширение файла игнорируется – на диск записываются бинарные файлы с расширениями **.****da****1** и **.****da****2**. Если оставить данное поле пустым – имя файла будет определяться автоматически по индексу блока, файл будет сохраняться в рабочую директорию контроллера.

Для начала отсчета времени наработки механизма следует подать **1** на вход **enbl**. Время наработки выводится на выход **cnt** в секундах. Число включений выводится на выход **cfrn**.

Чтобы записать текущее значение счетчика в файл, следует подать **1** на вход **ask**.

Если файл на диске существует, при перезапуске программы выходы **cnt** и **cfrn** инициализируются сохраненными значениями.

![pacore 28](https://docs.owen.ru/book_img/1903/134330.png)

*Счет времени наработки устройства*

![pacore 29](https://docs.owen.ru/book_img/1903/134329.png)

*Запись времени наработки устройства на диск*

![pacore 30](https://docs.owen.ru/book_img/1903/134328.png)

*Восстановление значения времени наработки после перезапуска программы*

Поведение блока при возникновении ошибки записи описано в [разделе](#topic-94731).

При сохранении данных на внешний накопитель на вход **rst** можно завести выход флага монтирования накопителя блока [210-SD-USB](#topic-94724). Сброс ошибок **rst** выполняется по фронту перехода из **0** в **1**.

> [!WARNING]
> **Внимание.** При изменении числа входов блока <b>*CounterMEx*</b> файлы на диске перезаписываются.

<a id="topic-94746"></a>

## Архивирование параметров на диск (FileDpLogger)

Для архивации параметров на диск контроллера используется блок [FileDpLogger](#topic-94736).

На вход блока **file****\_****path** подается абсолютный путь, куда будет осуществляться сохранение файла.

Формат сохранения файла определяется входами блока **grp**, **frmt**, **meth**. Подробнее см. в [разделе](#topic-94736).

Для сохранения параметров на диск периодически в формате **.****csv** следует установить следующие значения входов **grp** **=** **GROUP****\_****ALLINONE**, **frmt** **=** **TO****\_MSD200**, **meth** **= INTERVAL**.

Период архивации задается на входе **intr** в миллисекундах.

![arch 01](https://docs.owen.ru/book_img/1903/134347.png)

*Сохранение архива параметров на MicroSD-накопитель*

Параметры, которые необходимо архивировать, добавляются в раздел <b>*Данные*</b> внутри блока.

Добавить параметр в раздел можно одним из следующих способов:

1. Открыть на одной странице блок <b>*FileDpLogger*</b>, на другой странице блок с входом/выходом, который необходимо добавить. Выделить вход/выход и с нажатым **Ctrl** перетащить его на блок <b>*FileDpLogger*</b>. Отпустить, выбрать команду <b>*Добавить*</b>.
2. Открыть блок <b>*FileDpLogger*</b> в дереве (со страницы это проще всего сделать командой <b>*Показать в дереве*</b>), раскрыть его. Вход/выход перетащить в раздел <b>*Данные*</b>, выбрать команду <b>*Добавить*</b>.

Входам/выходам в проекте, которые необходимо архивировать, следует задать свойство <b>*Полный алиас*</b>. Алиас должен быть уникальным внутри раздела <b>*Данные*</b>. Алиасы отображаются в заголовке таблицы.

![arch 02](https://docs.owen.ru/book_img/1903/134346.png)

*Свойство Полный алиас параметров для архивации*

![arch 03](https://docs.owen.ru/book_img/1903/134345.png)

*FileDpLogger в дереве проекта*

Для запуска архивации следует подать **1** на входы **enb** и **wr** блока **FileDpLogger**. Количество удачных записей выводится на выходе блока **ok**.

Каждый день создается новый файл архива.

![arch 04](https://docs.owen.ru/book_img/1903/134344.png)

*Сохранение архива параметров на MicroSD-накопитель*

Просмотреть полученный архив параметров в формате **.****csv** можно через программу MS Excel. В первом столбце находится метка времени сохранения параметров, в следующих – сохраненные значения параметров.

![arch 05](https://docs.owen.ru/book_img/1903/134343.png)

*Просмотр архива параметров в MS Excel*

При описанной настройке блока **FileDpLogger** архивы параметров можно отобразить и сохранить в виде графиков в программе [График ОВЕН МСД200](https://owen.ru/documentation/1809).

![arch 06](https://docs.owen.ru/book_img/1903/134342.png)

*Отображение архива параметров в программе График ОВЕН МСД200*

Поведение блока при возникновении ошибки записи описано в [разделе](#topic-94736).

При сохранении данных на внешний накопитель на вход **rst** можно завести выход флага монтирования накопителя блока [210-SD-USB](#topic-94724). Сброс ошибок **rst** выполняется по фронту перехода из **0** в **1**.

<a id="topic-94747"></a>

## Работа с «черным ящиком» (BlackBox)

Блок «черный ящик» [BlackBox](#topic-94737) сохраняет значения выбранных параметров в файл в течение заданного времени «до» события и в течение заданного времени «после» события. Этот блок совмещает работу блоков блоков [RamFRLogger](#topic-94733) и [ComtradeLogger](#topic-94734).

На вход блока **name** подается абсолютный путь, куда будет осуществляться сохранение файла и начало имени файла. Если путь не указан – файл сохраняется в рабочую директорию контроллера.

Входы блока **before** и **after** определяют отрезок времени, в течение которого блок сохраняет значения параметров соответственно «до» и «после» события.

Вход **every** определяет периодичность записи параметров на диск и задается как количество таймерных промежутков (свойство модуля <b>*Таймерный промежуток*</b>). Например, если таймерный промежуток установлен **20 мс** и **every** **= 5**, запись будет производиться каждые **100 мс**.

Параметры, которые необходимо сохранять по событию, добавляются в раздел <b>*Данные*</b> внутри блока.

Добавить параметр в раздел можно одним из следующих способов:

1. Открыть на одной странице блок <b>*BlackBox*</b>, на другой странице блок с входом/выходом, который необходимо добавить. Выделить вход/выход и с нажатым **Ctrl** перетащить его на блок <b>*BlackBox*</b>. Отпустить, выбрать команду <b>*Добавить*</b>.
2. Открыть блок <b>*BlackBox*</b> в дереве (со страницы это проще всего сделать командой <b>*Показать в дереве*</b>), раскрыть его. Вход/выход перетащить в раздел <b>*Данные*</b>, выбрать команду <b>*Добавить*</b>.

Количество точек для сохранения рассчитывается на выходе блока **pnum**.

![blbox 01](https://docs.owen.ru/book_img/1903/134341.png)

*Сохранение параметров на MicroSD-накопитель по событию*

![blbox 02](https://docs.owen.ru/book_img/1903/134340.png)

*BlackBox в дереве проекта*

По сигналу **1** на входе **trigger** происходит сохранение массива значений параметров в ОЗУ.

Начало записи параметров на диск происходит при условии, что **enb** **= 1**.

На время подготовки лога к записи на диск на выходе **logger_sts** должно быть значение **1**.

![blbox 03](https://docs.owen.ru/book_img/1903/134339.png)

*Сохранение параметров на MicroSD-накопитель по событию. Подготовка лога*

По окончании записи блок задает на выходе **logger_sts** значение **0**. На выходе **fname** отображается имя файла, сохраненного на диск, на выходе **comtrade_sts** на один цикл работы блока задается **1**.

![blbox 04](https://docs.owen.ru/book_img/1903/134338.png)

*Сохранение параметров на MicroSD-накопитель по событию. Запись параметров на диск*

По окончании записи на диске контроллера формируются два файла:

- **\*.dat** – набор значений параметров, накопленных за временной отрезок;
- **\*.cfg** – служебная информация о событии.

![blbox 05](https://docs.owen.ru/book_img/1903/134357.png)

*Файлы на диске контроллера*

Просмотреть файлы можно в текстовом редакторе или с помощью программы Notepad++.

В файле **\*.dat** сохраняются: номер точки, метка времени в микросекундах от момента сохранения параметров «до» события, значения параметров.

В файле **\*.cfg** можно посмотреть точное время возникновения сигнала на входе **trigger** (без учета часового пояса).

![blbox 06](https://docs.owen.ru/book_img/1903/134356.png)

*Файл с данными \*.dat*

![blbox 07](https://docs.owen.ru/book_img/1903/134355.png)

*Файл со служебной информацией \*.cfg*
