Система контроля и управления доступом на базе панели Weintek и считывателя RFID меток
Содержание
1. Введение
В данном проекте мы реализуем простую систему контроля и управления доступом на базе панели Weintek.
Наша СКУД будет управлять турникетом-"вертушкой" как её видят пользователи.
Примечание: Можно было реализовать простой вариант: электромагнит, который "отпускает" на 5 секунд (которых, по идее, достаточно для открывания двери) и доводчик для закрытия двери, но мы решили усложнить задачу и выбрали турникет-вертушку, в котором надо определять "вход" и "выход".
В качестве ориентира взят алгоритм работы турникета трипода тумбового, только вместо двух RFID считывателей (один на вход, второй на выход) мы используем один – зачем плодить сущности, когда мы может узнать входил ли пользователь или нет.
Примеры турникетов триподов
Алгоритм работы нашего турникета прост:
- пользователь прикладывает карточку, если он есть в списке вошедших, то ему открывается турникет на выход;
- если пользователя нет в списке вошедших, то его RFID метка ищется в базе данных пользователей, если он есть базе данных и не заблокирован, то ему открывается турникет на выход.
Для реализации такого турникета нам понадобятся:
- панель оператора Weintek (любая с поддержкой базы данных рецептов, мы использовали cMT2108X);
- коммуникационный модуль с дискретными входами/выходами (он нам нужен только для связи панели с дискретными входами/выходами, это может быть ПЛК Siemens S7-1200, Weintek iR-ETN с модулями в/в или iR-ETN40R и т.п.);
- RFID считыватель (мы использовали Matrix-III мод. RD_ALL от Iron Logic)
Реализацию электромеханической части турникета мы оставляем за рамками нашего примера.
Структурно наш комплекс будет следующим:
- RFID считыватель передает считанный штрих-код в панель;
- панель проверяет полученный штрих-код на соответствующие разрешения и дает соответствующие команды (через переменные, протокол передачи данных) исполнительному модулю ввода/вывода;
- исполнительный модуль преобразует команды панели в соответствующие сигналы (токовые, потенциальные, управляет реле и т.п.) на выходах и передает соответствующие состояния входов в панель.
Структурная схема СКУД
Для имитации электромеханической части нашего турникеты мы используем часть нашего стенда, состоящую из двух ламп (индикаторы разрешения на вход и выход) и двух переключателей (имитирующих проворот вертушки нашего турникета).
Имитатор турникета
В нашей панели будет три окна:
- журнал (основное окно для отображения информации по текущей RFID метке и списке вошедших):
- архив (каждый вход/выход фиксируем с меткой времени, глубина архива - 7 дней);
- редактор (в этом окне можно редактировать список пользователей/сотрудников, которым разрешен вход)
Пользовательские окна
Переключение окон будет осуществляться кнопками в нижней части каждого экрана.
Для быстрого определения открытого в данный момент окна в правом верхнем углу каждой кнопки расположен соответствующий индикатор.
2. Проект
Приступим к созданию проекта.
Запустим EasyBuilder Pro, создадим новый проект для нашей панели cMT2108X.
Откроем окно "Системные параметры" и на вкладке "Устройства"добавим два устройства добавим два устройства:
- BARCODE Scanner/Keyboard для RFID считывателя,
- Siemens S7 1200 S7 1500 (Absolute Addressing) (Ethernet) для модуля ввода/вывода (в качестве модуля мы будем использовать ПЛК Siemens S7-1200 без программы, нам от него нужен только набор дискретных входов/выходов).
Список устройств в окне "Системные параметры"
Обоим устройствам дадим более простые и короткие имена RFID и dev_control соответственно.
Сделаем соответствующие настройки для устройств RFID и dev_control.
Настройки устройства RFID
2.1 Адресные метки
Для удобства оперирования адресами переменных создадим для них адресные метки.
Адресные метки
Пояснение адресных меток для устройства dev_control:
- lamp_in – дискретный выход, индикатор разрешения на вход (+ разрешение проворота вертушки на вход);
- lamp_out - дискретный выход, индикатор разрешения на выход (+ разрешение проворота вертушки на выход);
- switch_in - дискретный вход, связан с датчиком проворота вертушки на вход;
- switch_out – дискретный выход, связан с датчиком проворота вертушки на выход;
2.2 База данных рецептов
База данных рецептов – удобное средство хранения табличных данных. Отдельное удобство доставляет функция SQL запросов в макросах (правда поддерживается только оператор SELECT), что позволит нам просто получить нужную выборку. Мы будем хранить там список сотрудников.
Нам понадобятся две таблицы:
- users – полный список сотрудников;
- acrive_users – список вошедших сотрудников.
Таблица users
В таблице users создадим следующие поля:
- user_name – имя сотрудника, тип Unicode на 20 символов, через библиотеку меток можно задать заголовок столбца на кириллице (у нас это ФИО);
- id – идентификационный номер сотрудника (это номер считывается с его карточки), тип ASCII на 25 символов;
- blocked – флаг блокировки сотрудника на вход, тип 16-bit Unsigned (тип BOOL отсутствует).
Таблица active_users
В таблице active_users создадим следующие поля:
- date– дата входа сотрудника, тип ASCII на 11 символов, через библиотеку меток можно задать заголовок столбца на кириллице (у нас это Дата);
- time – время входа сотрудника, тип ASCII на 9 символов, через библиотеку меток можно задать заголовок столбца на кириллице (у нас это Время);
- user_name – имя сотрудника, тип Unicode на 20 символов, через библиотеку меток можно задать заголовок столбца на кириллице (у нас это ФИО);
- id - идентификационный номер сотрудника (это номер считывается с его карточки), тип ASCII на 25 символов;
2.3 Архив
Все события входа/выхода мы будем собирать в архив. Для этого воспользуемся подсистемой "Выборка данных".
Выборка данных нашего архива
Создадим выборку данных со следующими параметрами:
- имя: archive
- типы выборки – триггерная;
- триггер – режим "OFF ->ON", в качестве триггера укажем адресную метку archve_write (формировать ее значение будем в макросе);
- файл истории – все записи в одном файле, имя файла;
- имя файла истории – "skud_archive";
- файлы выборки будем хранить в памяти панели (максимум 10 000 записей);
- срок хранения записей ограничим 7 днями.
В выборке данных укажем следующие переменные:
- action_type – тип действия сотрудника ("вход" или "выход"), формируется в макросе;
- HMI_USER_NAME – ФИО сотрудника.
Переменные в выборке данных
2.4 Макросы
Всего у нас будет три макроса:
- calc_barcode – основной макрос, вычисляет разрешение на вход/выход сотрудника;
- update_recipe – обновляет данные в карточке сотруднике после её редактирования;
- barcode_status_reset - после прокручивания турникета сбрасываем всё, что касается текущего пользователя.
Список макросов
Все макросы вызываются через механизм триггеров:
- макрос calc_barcode вызывается по триггеру FLAG0 (индикатор успешного считывания данных с карточки) устройства RFID ;
- макрос barcode_status_reset вызывается по триггерам от дискретных входов проворота вертушки (адресные метки switch_in и switch_out);
Триггеры
2.5 Окна
Как уже ранее упоминалось для пользователя всего три окна, но в проекте мы создали четыре окна. Одно окно используется как фон (background) для остальных.
Выбор фона для окна
Само окно фона имеет следующий вид.
Окно – фон (background)
Окно фона содержит следующие объекты, необходимые на всех пользовательских окнах:
- поле вывода считанного ID с карточки сотрудника;
- текстовое описание состояния RFID считывателя;
- дата и время;
- область для персонального содержимого пользовательских окон;
- кнопки перехода между пользовательскими окнами
Рассмотрим каждое окно подробнее.
2.5.1 Окно "Журнал"
Первое, что видит пользователь после включения панели это окно со списком вошедших сотрудников.
Если сотрудник получил разрешение на вход, то он добавляется в список вошедших.
Если сотрудник получил разрешение на выход, то он удаляется из списка вошедших.
Окно "Журнал"
Окно "Журнал" содержит следующие блоки:
- поле отображения считанного штрих-кода;
- поле отображения ФИО по считанному штрих-коду;
- текущий статус от RFID считывателя;
- текущие дата и время;
- результат проверки считанного штрих-кода по базе данных сотрудников (проход разрешен, ID заблокирован, неизвестный ID);
- список вошедших сотрудников (ФИО и штрих-код), содержит поле для фильтрации (объект "Просмотрщик рецептов", привязанный к таблице active_users);
- индикаторы команд исполнительному модулю ввода/вывода (разрешить выход/вход);
- кнопки переключения окон.
Индикаторы команд исполнительному модулю работают следующим образом:
- если считанная карточка числится в списке вошедших, то формируется команда разрешения на выход;
- если считанная карточка числится в общем списке сотрудников и не числится в списке вошедших и сотрудник не заблокирован, то формируется команда разрешения на вход;
- если считанная карточка числится в общем списке сотрудников и не числится в списке вошедших, и сотрудник не заблокирован, то формируется команда разрешения на вход, и сотрудник не совершил вход (проворот вертушки) и к считывателю прикладывается карточка, то вокруг индикатора текущего разрешения появляется мигающая красная рамка, обращающая внимание на то, что сначала необходимо выполнить текущее разрешение (войти или выйти) и только потом прикладывать карточку к считвателю;
Индикаторы разрешения на вход/выход
Каждое окно содержит невидимую кнопку (объект "Числовая кнопка"), которая записывает номер окна (номера записываются степенями двойки: 1, 2, 4 и т.п.) в определенный регистр (адресная метка CURR_WINDOW), на кнопках расположены индикаторы (объект "Битовый индикатор"), которые привязаны к первому биту адресной метки CURR_WINDOW.
Индикаторы открытого окна на кнопках
Настройки кнопки для записи номера окна
Результат проверки считанного штрих-кода по базе данных сотрудников – это объект "Числовой индикатор", у которого 4 состояния и текст берется из библиотеки текстовых меток.
Текстовый индикатор
Текстовая метка
Значение переменной barcode_status формируется в макросе.
2.5.2 Окно "Архив"
Это окно позволяет просматривать время и дату входа и выхода сотрудников в разные дни.
Окно "Архив"
Окно "Журнал" содержит следующие блоки:
- поле отображения считанного штрих-кода;
- текущий статус от RFID считывателя;
- текущие дата и время;
- список событий (вход/выход, время, ФИО), объект "Таблица выборки";
- выпадающий список для выбора дня, за который необходимо отобразить архив, объект "Список опций";
- кнопки переключения окон.
Основными объектом в этом окне является "Таблица выборки" (для отображения архива) и "Список опций" (для выбора даты, ха которую необходимо просмотреть архив).
Объекты имеет следующий настройки:
- у объекта "Таблица выборки" управление историей привязано к переменной archive_monitor;
- у объекта "Список опций" параметр "Монитор" привязан к переменной archive_monitor, на вкладке "Источник данных" в качестве источника данных выбрано "Даты данных журнала", тип указан "Выборка данных" и в качестве объекта выборки данных указана наша выборка archive;
Объекты "Таблица выборки" и "Список опций" для отображения архива
2.5.3 Окно "Редактор"
Это окно предназначено для редактирования общего списка сотрудников.
Каждая учетная запись содержит:
- ID (номер, который считывается с персональной карточки сотрудника);
- ФИО сотрудника;
- блокировка пользователя (временный запрет на вход);
Окно "Редактор"
Окно "Редактор" содержит следующие блоки:
- поле отображения считанного штрих-кода;
- текущий статус от RFID считывателя;
- текущие дата и время;
- список сотрудников (штрих-код, ФМО, статус блокировки);
- справочная информация по списку сотрудников (общее количество строк, номер выбранной строки);
- команды управления списком сотрудников (добавить строку в список, обновить выбранную строку, удалить выбранную строку, удалить все строки в списке);
- данные из полей выбранной строки (штрих-код, ФИО, статус блокировки);
- результат выполнения команд из блока 6;
- кнопки переключения окон.
В блоке 7 (желтый текст) отображаются значения полей выбранной в данный момент строки в списке (выбор нужной строки осуществляется касанием нужной строки).
Редактирование записи осуществляется следующим образом:
- для ID карточки, то необходимо:
- выбрать подлежащую редактированию строку;
- приложить карточку к считывателю;
- дождаться успешного считывания ID карточки;
- не убирая карточку от считывателя нажать кнопку "Обновить";
- для изменения ФИО сотрудника
- выбрать подлежащую редактированию строку;
- в поле ФИО (желтый текст) вписать новое значение;
- нажать кнопку "Обновить";
- для блокировки/разблокировки сотрудника;
- выбрать подлежащую редактированию строку;
- изменить состояние флажка "Заблокирован", коснувшись его;
- нажать кнопку "Обновить".
Для добавления новой записи необходимо нажать кнопку "Добавить" и потом отредактировать согласно методике выше.
Для удаления записи необходимо нажать кнопку "Удалить".
Для удаления всех записей необходимо нажать кнопку "Удалить все".
Примечание: для исключения случайного удаления эти действие можно снабдить всплывающим окном с подтверждением действия.
Небольшая видео-демонстрация нашего проекта.
Архив проекта для подробного изучения доступен по ссылке.
Все вопросы и обсуждения - на нашем форуме.
Видео о панелях Weintek на нашем Rutube канале.