Модуль Snapshot
Модуль Snapshot предназначен для сохранения текущих значений сигналов Alpha.Server и их свойств в файл-срез, а также для восстановления сохраненных значений из этого файла. В контексте ПЛК данный механизм позволяет сохранять значения сигналов в памяти контроллера в момент его отключения путем записи файла-среза. После включения питания модуль восстанавливает значения из сформированного файла-среза. При этом в DevStudio для каждого сигнала можно настроить свойство операции сохранения, а в памяти контроллера файл-срез формируется автоматически в соответствии с заранее подготовленным файлом-шаблоном.
Модуль Snapshot поддерживает сохранение значений сигналов по тегам или индексам. В данном примере используются индексы. Этот способ ускоряет поиск сигналов в Alpha.Server и обеспечивает более эффективную генерацию файлов-срезов. Использование индексов позволяет записывать сигналы в файл-срез или исключать их из него сразу группами, а не по отдельности.
Для формирования списка индексов необходимо создать пользовательский тип атрибута в пространстве имен. В данном примере используется ранее созданное пространство имен MyLib. Из панели элементов необходимо добавить Тип атрибута, заполнить его свойства и добавить атрибуты, как показано на рисунке ниже.

Тип атрибута
В данном примере:
-
Index_1 – название индекса;
-
Заголовок – пользовательское свойство, назовём механизм «SNAPMOD 1500»;
-
Атрибут «Индекс для модуля Snapshot» используется для хранения значения индекса. Поле Значение не заполняется.
-
Атрибут Свойство конфигурации используется для хранения номера пользовательского свойства. Номер можно выбрать произвольный, но отличный от тех, которые используются в Alpha.Server.
Далее необходимо в Alpha.Server контроллера перейти в приложение Application. Для сохранения сигналов необходимо задать созданный атрибут. В данном примере используется 8 переменных и простая логика, представленная на рисунке ниже. Переменная var_8 каждую секунду увеличивается на единицу.

Пример настройки атрибута
В окне атрибутов каждому сигналу присваивается значение ранее созданного атрибута «SNAPMOD 1500». Это значение служит универсальным индексом для группировки сигналов в итоговом файле-срезе.

Параметры атрибутов
Допускается использовать один универсальный индекс для всех сигналов либо использовать несколько индексов для внутренней группировки итогового файла-среза. Тип переменной при этом не имеет значения. Индекс не зависит от конкретного имени переменной, допускается задание произвольных значений. В данном примере создается несколько индексов:
-
Для переменной var_1 задан индекс «BOOLS».
-
Для переменных var_2 и var_3 задан индекс «WORDS».
-
Для переменных var_4 и var_6 задан индекс «FLOATS».
-
Для переменной var_5 задан индекс «NAMES».
-
Переменная var_7 остается без индекса, чтобы исключить ее сохранение.
-
Для переменной var_8 задан индекс «Counts».
-
Переменные var_9 – var_12 имеют один общий универсальный атрибут «Saves».

Индексы переменных
Далее необходимо перейти в пространство Alpha.Server контроллера и добавить из панели элементов модуль Snapshot, расположенный по пути: Служебные модули → Модуль Snapshot. В свойствах модуля необходимо указать параметры в соответствии с рисунком ниже.

Свойства модуля Snapshot
В Application контроллера необходимо реализовать логику автоматической загрузки файла срезов с использованием сервисных сигналов. Для этого следует применить готовую логику из блока Service, представленного в приложении к документу «Модуль Snapshot».

Блок Service
В данной папке ключевое значение имеет логика, прописанная по пути: Service.Modules.Snapshot Module.Control.

Блок Control
Далее необходимо подготовить шаблон файла-среза. Для этого требуется использовать пример XML-файла шаблона из приложения к документу «Модуль Snapshot». Файл шаблон расположен по пути FSModule\Templates\template.xml. Его необходимо настроить в соответствии с конфигурацией DevStudio, указав все используемые индексы.

Настройка файла-среза
Далее необходимо импортировать подготовленный шаблон файла среза в контроллер. Для этого в программе Конфигуратор АБАК ПЛК необходимо подключиться к контроллеру и загрузить конфигурационные файлы через меню: Контроллер → Альфа Платформа → Загрузка конфигурационных файлов.

Контроллер → Альфа платформа
При этом потребуется указать папку импорта. По умолчанию допускается загрузить файлы сразу для компонентов domain.agent, net.agent, alpha.server, а также папка snapshots. Если выбрать только папку, содержащую файл template.xml, будет загружен только этот файл.

Загрузка конфигурационных файлов
При наличии резервного контроллера необходимо повторить процедуру импорта файла на резервном контроллере.
После успешного импорта выполнить развертывание конфигурации. Вывести все переменные в OPC Explorer для просмотра. Задать требуемые значения переменных. Убедиться, что переменная var_8 увеличивается на единицу каждую секунду.

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

Результат перезагрузки контроллеров
Сам файл-срез формируется в памяти контроллера и имеет вид, представленный на рисунке ниже.

Файл-срез
Данный файл-срез сгенерирован в соответствии с конфигурацией DevStudio и имеет структуру с разделением по индексам. При необходимости данный файл-срез может быть выгружен с помощью дополнительных сервисных сигналов модуля Snapshot. Для добавления новых сигналов в состав сохраняемых данных ПЛК достаточно указать один из атрибутов для требуемых переменных. Указанный атрибут также может быть задан для типовых блоков внутри пространства имен, что позволяет избежать ручного назначения атрибутов при тиражировании большого количества однотипных логических блоков.