Архив с циклической записью данных
В данном уроке ознакомимся с архивированием данных с циклической записью. Напишем 2 программы с разными зависимостями от циклов:
цикл самой программы (resource)
цикл от часов реального времени ПЛК (RTC).
Для первого варианта напишем программу на языке ST. Добавим локальную булеву переменную arc_saver. Также из окна регистров архива добавим Arch_save_arc. В паре с переменной arc_saver они будут являться «триггером» записи данных в архив. Программа будет записывать итерацию переменной с циклом в 1 минуту. Программа имеет следующий вид:

Программа archive_resource
Для того, чтобы запись происходила 1 раз в минуту, необходимо задать task с интервалом в 30 секунд в ресурсах, так как в программе идет переключение из «0» в «1» за 1 цикл и для обратного переключения необходим дополнительный цикл.

Ресурс программы
В окне регистров архива «Arch_0» добавим переменную value1_arch с типом данных «UINT».

Окно регистров архива
После загрузки программы в ПЛК инкрементируемые данные переменной value1 будут записываться в архив с периодичностью 1 раз в минуту.
Для второго варианта напишем программу на языке FBD. В данном случае будем привязываться к часам реального времени (RTC). Из «Library» добавим функциональный блок STRUCT_REAL_TIME. Переменную minute_trigger определим как кратную 1 минуте. От ее состояния определяется запись данных в архив. Добавим подмодуль «Arch_1». В программу копируем регистр Arch_1_save_arc. Также в программу добавим инкрементируюмую переменную value2 и записываюмую в архив value2_arch. Конечный вариант программы показан на рисунке ниже:

Программа archive_rtc
В ресурсах добавляем task равной 25 мс и добавляем в «Instances».

Ресурс программы
В окне регистров архива «Arch_1» добавим переменную value2_arch с типом данных «UDINT».

Окно регистров архива
После загрузки программы в ПЛК инкрементируемые данные переменной value2 будут записываться в архив с периодичностью 1 раз в минуту.