Как реализовать подключение к СКУД Sigur из 1С по протоколу TCP?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция систем контроля и управления доступом (СКУД) с платформой 1С — это классическая задача для автоматизации учета рабочего времени и оперативного управления доступом на объект. Одной из самых популярных систем в этой сфере является Sigur (ранее известная как «Сфинкс»). Основная сложность заключается в том, что 1С не имеет встроенных механизмов для прямой работы с низкоуровневыми TCP-сокетами или COM-портами. В этой статье мы подробно разберем, как обойти это ограничение и настроить полноценное взаимодействие между учетной системой и контроллером безопасности.

Анализ протокола взаимодействия OIF

Для начала проанализируем, как именно происходит общение с сервером Sigur. Система использует открытый протокол интеграции — OIF (Open Integration Format). Это текстовый протокол, работающий поверх TCP, обычно на порту 3312. Работа с ним напоминает взаимодействие с почтовым сервером: мы отправляем текстовую команду и получаем ответ в виде статуса.

Рассмотрим стандартный сценарий санкционирования прохода:

  1. Авторизация: Сначала необходимо представиться серверу. Команда выглядит так: LOGIN 1.8 user pass, где 1.8 — версия протокола, а user/pass — данные оператора с правами на «Доступ по протоколу OIF».
  2. Подтверждение: Сервер должен вернуть строку OK.
  3. Команда действия: Например, для разблокировки турникета используется ALLOWPASS 1 ANONYMOUS IN (разблокировать точку доступа №1 для входа).
  4. Завершение: Получение подтверждения OK от сервера.

Метод 1: Использование COM-объекта Winsock

Рассмотрим наиболее простой программный способ реализации TCP-соединения через старый, но проверенный компонент MSWinsock.Winsock. Этот метод подходит, если ваша 1С работает в 32-битном окружении (например, на старом сервере или клиенте).

Проанализируем пример кода для установления соединения:


Процедура ПодключитьсяКСКУД(ПараметрыПодключения)
    Попытка
        Контроллер = Новый COMОбъект("MSWinsock.Winsock");
    Исключение
        Сообщить("Компонент Winsock не зарегистрирован в системе!");
        Возврат;
    КонецПопытки;

    Контроллер.RemoteHost = СокрЛП(ПараметрыПодключения.Адрес); 
    Контроллер.RemotePort = СокрЛП(ПараметрыПодключения.Порт); // Обычно 3312
    
    Контроллер.Connect();
    
    // Здесь должна быть логика ожидания состояния Connect (состояние 7)
    // И последующая отправка данных методом .SendData()
КонецПроцедуры

Важное примечание: Выясним причину, по которой этот метод может не подойти. Компонент MSWinsock является 32-битным. Если ваш сервер 1С работает в 64-битном режиме, попытка создать этот COMОбъект завершится ошибкой. В этом случае нам потребуются альтернативные подходы.

Метод 2: Использование возможностей .NET Framework через COM-обертку

Если нам необходимо решение, работающее в 64-битной среде, мы можем использовать библиотеку System.Net.Sockets из состава .NET Framework. В 1С это реализуется либо через специализированные внешние компоненты, либо через NetObjectTo1C.

Разберем алгоритм работы с TcpClient:

  1. Создаем объект TcpClient.
  2. Устанавливаем соединение с IP-адресом сервера Sigur.
  3. Получаем поток NetworkStream для записи и чтения.
  4. Преобразуем нашу текстовую команду (например, LOGIN...) в массив байтов (важно использовать кодировку UTF-8).
  5. Записываем данные в поток и читаем ответ.

Использование .NET позволяет избежать проблем с регистрацией старых ActiveX компонентов и обеспечивает более стабильную работу современной платформы 1С.

Метод 3: Использование HTTP API (REST)

Современные версии сервера Sigur поддерживают работу не только через сырые TCP-сокеты, но и через HTTP API. Это самый «чистый» способ интеграции с точки зрения 1С, так как нам не нужны никакие внешние компоненты.

Рассмотрим преимущества этого метода:

Пример реализации запроса к API Sigur:


Соединение = Новый HTTPСоединение(СерверСКУД, ПортAPI, Логин, Пароль);
Запрос = Новый HTTPЗапрос("/api/v1/points/1/unlock"); // Пример пути API
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);

Если Ответ.КодСостояния = 200 Тогда
    // Обрабатываем успешное открытие
КонецЕсли;

Мониторинг событий в реальном времени

Часто задача стоит не только в том, чтобы «открыть дверь», но и в том, чтобы фиксировать проходы сотрудников. Для этого в протоколе OIF предусмотрен режим подписки. Разберем, как это реализовать.

Выясним, как работает команда SUBSCRIBE. После ее отправки сервер Sigur не закрывает соединение, а начинает транслировать в него каждое событие (поднесение карты, открытие двери). Чтобы 1С могла «слушать» эти данные, необходимо организовать Фоновое задание. Это задание будет постоянно висеть в памяти, ожидать данные из сокета и при их появлении записывать информацию в документ РегистрацияПроходов или соответствующий регистр сведений.

Безопасность и настройки сервера

Проанализируем настройки на стороне самого Sigur. Для того чтобы 1С смогла подключиться, недостаточно знать IP и порт. В настройках программного обеспечения СКУД необходимо:

  1. Создать оператора со специальными правами.
  2. В настройках сетевого доступа разрешить IP-адресу сервера 1С подключаться к порту 3312.
  3. Убедиться, что в лицензии Sigur активирован модуль «Интеграция» (хотя базовые функции OIF часто доступны по умолчанию).

Итоги и рекомендации

Подведем итог нашему анализу. Если перед вами стоит задача интеграции:

Выбор конкретного метода зависит от архитектуры вашей системы и требований к скорости реакции оборудования. Использование внешних компонент типа Native API является наиболее надежным и современным способом для реализации низкоуровневого обмена данными в среде 1С:Предприятие 8.3.

← На главную