Тестовая программа. Несанкционированный доступ ============================================== Напишем простую программу контроля доступа. В данном уроке мы используем модуль архива, но подход к нему будет немного другим. Основную программу напишем на языке ST для более удобного включения записей в архив. Итак, для начала добавим модуль архива *1.х: archive_0* и в нем подмодуль *1.0.х: Arch_0*. Основную программу назовем *test_enter*. Создаем переменную *Door_alarm*, которая будет представлять собой включение/выключение системы контроля доступа. Добавим переменные *Door1*, *Door2*, *Door3*, *Door4*. Состояние переменной *Door_status* будет результатом логического "ИЛИ" всех дверей. Далее создаём функциональный блок на языке ST и назовем его *archivator*. .. note:: Для создания функционального блока необходимо левой клавишой мыши нажать в облась проекта и выбрать из списка "Function block". Название блока пишется в "POU Name", в "Language" выбирается язык программирования. Для добавления функционального блока в программу необходимо зажать левой клавишей мыши в область наименования и перетащить в редактируемую область программы, задать название для него. В данный функциональный блок добавим регистр *Arch_0_save_arc* с типом данных *UINT*. Также туда добавим уже созданные переменные *Door1*, *Door2*, *Door3*, *Door4*. Для каждого статуса дверей создаем переменную для записи в архив - *Door1_arc*, *Door2_arc*, *Door3_arc*, *Door4_arc*. Осталось решить с какой цикличностью будет происходить запись в архив. В нашем случае выберем цикл в 2 секунды, то есть если система контроля доступа включена, начинается запись в архив данных о статусе дверей с периодичностью в 2 секунды. Для этого в программе *test_enter* добавим функциональный блок STRUCT_REAL_TIME и выберем оттуда только SEC_TIME. Даем наименование функциональному блоку - *real_time* и добавим переменную *seconds* в формате USINT. Далее с помощью функционального блока MOD вычисляем кратность переменной *seconds* к 2 и переписываем его. Функциональный блок *archivator* добавим в основную программу и даем название *arch*. Реализация программы представлена на рисунках ниже. .. figure:: img/22.png :width: 600 :align: center *Основная программа test_enter* .. figure:: img/23.png :width: 600 :align: center *Функциональный блок archivator* .. figure:: img/24.png :width: 600 :align: center *Окно регистров архива* Проверка программы: включаем систему контроля с помощью *DOOR_ALARM*, стартует запись в архив с цикличностью 2 секунды. "Открываем" и "закрываем" любые двери, информация о статусе дверей записывается в архив. .. figure:: img/gif9.gif :width: 600 :align: center *Реализация программы* Результат открытия/закрытия дверей по времени можно увидеть на графике архивов. .. figure:: img/25.png :width: 600 :align: center *Графики архива*