Сохранение уставок на диск контроллера или внешний накопитель организуется с помощью блоков SaverEx и BufSupEx из библиотеки paCore, а также с помощью блока BufSupFltEx из библиотеки paModbus.
Сохранение уставок из программы контроллера (SaverEx)
Сохранение уставок из программы контроллера организуется с помощью блока SaverEx.
Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Файлы для сохранения чередуются.
На вход блока fnm подается абсолютный путь и имя файла, куда будет осуществляться запись. Расширение файла игнорируется – на диск записываются бинарные файлы с расширениями .da1 и .da2. Если оставить данное поле пустым – имя файла будет определяться автоматически по индексу блока, файл будет сохраняться в рабочую директорию контроллера.
На входах блока typ задаются типы данных сохраняемых параметров:
DI – 8-ми битный регистр;
AI – вещественное значение;
II – 16-ти битный регистр.
На входах ini задаются значения инициализации параметров.

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

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

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

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

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

Сохранение уставок с использованием OPC UA/Modbus (BufSupEx)
Для записи уставок с удаленного OPC UA-клиента и/или по протоколу Modbus используются блоки BufSupEx.
Работа блока BufSupEx аналогична работе блока SaverEx и описана в разделе.
Запись уставок с удаленного OPC UA-клиента
Для записи уставок в блоки BufSupEx с удаленного OPC UA-клиента используется блок UABufSups из библиотеки paOpcUA.
Настройка OPC UA-сервера подробно описана в документе Обмен с верхним уровнем. Библиотека paOpcUA.
Блоки BufSupEx в проекте контроллера-сервера подключаются выходами pkt к входам buf блока UABufSups.
Вход inter блока BufSupEx можно при необходимости подключить к другому блоку протокола (например, к блокам Modbus Slave из библиотеки paModbus, см. пример в разделе).

При отключении блока UABufSups (или при его отсутствии) для записи уставки с OPC UA-клиента потребуется подать импульс на входы czap.
Параметры на диске сохраняются в бинарных файлах .da1 и .da2.

Поведение блока BufSupEx при ошибках записи описано в разделе.
Синхронизация записи уставок между контроллерами по OPC UA
Для синхронизации записи уставок блоков BufSupEx между двумя контроллерами по протоколу OPC UA требуется дублировать во второй контроллер программу (или целиком место работы), в которой добавлен блок BufSupEx.
Для этого следует перетащить на модуль второго контроллера (оба модуля должны быть в одном проекте) требуемую программу, в выпадающем меню выбрать Добавить.
Обе программы подсветятся желтым. Теперь все изменения на страницах данной программы будут одинаково применены в обоих модулях.
Настройка работы по протоколу OPC UA подробно описана в документе Обмен с верхним уровнем. Библиотека paOpcUA.

Блоки BufSupEx в данной программе следует соединить выходами pkt с входами buf блока OpcUAClient из библиотеки paOpcUA.
Входы OpcUAClient, которые отвечают за настройку обмена (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>
Запрос пользовательского свойства Пользовательское свойство 00 (prop_0):
<sql> SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_0"</sql>
(обычно используется на входах rip и rprt).

После запуска программ на обоих контроллерах, один из них следует назначить «ведущим» – отключить OpcUAClient (enb = 0), а второй «ведомым» – включить OpcUAClient (enb = 1).
Теперь при изменении уставок ведущего контроллера изменения будут дублироваться в ведомый с помощью OPC UA-клиента.
При попытке изменить уставки ведомого контроллера изменения в ведущем контроллере не применятся.


Параметры на диске сохраняются в бинарных файлах с расширениями .da1 и .da2.

Поведение блока BufSupEx при ошибках записи описано в разделе.
Запись целочисленных уставок по протоколу Modbus
Для записи уставок по протоколу Modbus вход inter блока BufSupEx подключается к выходу блока протокола Modbus TCP Slave или Modbus RTU Slave из библиотеки paModbus.
Мастер в сети Modbus может читать и записывать данные на диск. Для чтения блок BufSupEx реализует функцию 0х03, для записи – 0х06 и 0х10.
Вход group определяет Slave ID устройства (ID = 1 соответствует значению входа 0x100).
Входы dan используются для записи уставок из программы контроллера. Для того, чтобы значение записалось на диск из программы, и его прочитал мастер сети Modbus, следует также подать импульс на соответствующий вход czap.
Входы typ определяют тип данных dan, при работе по Modbus могут принимать только значения II, IO (16-ти битный регистр), так как Modbus работает с целочисленными регистрами.
Сохранение по протоколу Modbus уставок с плавающей точкой рассмотрено в разделе.
Входы adr определяют адреса выделяемых регистров Modbus.
Входы min и max задают минимальное и максимальное возможное значение dan, при изменении значения из программы или мастером сети оно проверяется на условие соответствия этому диапазону. Значение, выходящее за этот диапазон, записано не будет.
Выходы dan отображают текущие значения уставок, сохраненных на диск.
Параметры на диске сохраняются в бинарных файлах с расширениями .da1 и .da2.

Поведение блока BufSupEx при ошибках записи описано в разделе.
Подробно настройка обмена по протоколу Modbus описана в документе Обмен по протоколу Modbus. Библиотека paModbus.



Запись уставок с плавающей точкой по протоколу Modbus (BufSupFltEx)
Для записи уставок с плавающей точкой по протоколу Modbus используются блоки BufSupFltEx из библиотеки paModbus.
Вход inter блока BufSupFltEx подключается к выходу блока протокола Modbus TCP Slave или Modbus RTU Slave из библиотеки paModbus.
Мастер в сети Modbus может читать и записывать данные на диск. Для чтения блок BufSupFltEx реализует функцию 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 отображают текущие значения уставок, сохраненные на диск.
Параметры на диске сохраняются в бинарных файлах с расширениями .da1 и .da2.

Поведение блока BufSupFltEx аналогично блоку BufSupEx и описано в разделе.
Подробно настройка обмена по протоколу Modbus описана в документе Обмен по протоколу Modbus. Библиотека paModbus.


