В современной автоматизации часто возникает потребность использовать микрокомпьютеры, такие как Raspberry Pi, в качестве информационных табло, дисплеев покупателя или систем визуализации производственных показателей. Основная сложность заключается в том, что 1С напрямую "не видит" устройство, подключенное по сети, как стандартное периферийное оборудование. В данной статье мы проанализируем ситуацию и разберем несколько эффективных способов реализации обмена данными между 1С и Raspberry Pi по протоколу Ethernet.
Рассмотрим самый простой с точки зрения программирования 1С вариант. Вместо того чтобы писать сложные протоколы обмена, мы можем использовать Raspberry Pi как тонкий клиент. Для этого на "малинку" устанавливается стандартный дистрибутив Linux (например, Raspberry Pi OS) и настраивается автоматический запуск RDP-клиента (например, Remmina или FreeRDP) при старте системы.
Проанализируем преимущества этого метода: мы просто открываем сеанс 1С непосредственно на Raspberry Pi. Если конфигурация позволяет, можно настроить запуск конкретной формы (обработки) в полноэкранном режиме. Это исключает необходимость написания методов обмена, так как данные отображаются "родными" средствами платформы 1С.
Этот метод считается наиболее профессиональным и гибким. Мы превращаем Raspberry Pi в веб-терминал. Разберем по шагам, как это реализовать:
chromium-browser --kiosk http://адрес_сервера_1с/page. В этом режиме браузер открывается на весь экран без адресной строки и меню.HTTPСервис. Этот сервис будет отдавать HTML-страницу с нужным нам дизайном.Рассмотрим пример логики на стороне 1С для возврата данных в формате JSON:
Функция ДанныеДляДисплеяГЕТ(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
ДанныеСтруктура = Новый Структура;
ДанныеСтруктура.Вставить("Заголовок", "Добро пожаловать!");
ДанныеСтруктура.Вставить("Сумма", 1500.50);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеСтруктура);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
Возврат Ответ;
КонецФункции
Если нам нужно более легкое решение, не нагружающее процессор Raspberry Pi тяжелым браузером, мы можем написать небольшой скрипт на языке Python, который будет слушать входящие сообщения от 1С. Выясним причину, почему это удобно: Python имеет отличные библиотеки для работы с графикой (Tkinter, PyQt) и легко принимает HTTP-запросы.
Сценарий взаимодействия будет следующим: 1С выступает инициатором связи и отправляет POST-запрос с данными на IP-адрес Raspberry Pi. Скрипт на Python принимает JSON, парсит его и обновляет текстовое поле на экране.
В 1С код отправки данных будет выглядеть так:
Процедура ОтправитьДанныеНаДисплей(ДанныеТекстом)
НТТР = Новый HTTPСоединение("192.168.1.100", 5000); // IP адрес Raspberry
Запрос = Новый HTTPЗапрос("/update");
Запрос.УстановитьТелоИзСтроки(ДанныеТекстом, КодировкаТекста.UTF8);
Попытка
Ответ = НТТР.ОтправитьДляОбработки(Запрос);
Исключение
Сообщить("Ошибка связи с дисплеем");
КонецПопытки;
КонецПроцедуры
Для распределенных систем, где Raspberry Pi может находиться за брандмауэром или иметь динамический IP, рассмотрим подробнее протокол MQTT. Это стандарт для интернета вещей (IoT).
Суть метода: устанавливается брокер сообщений (например, Mosquitto). 1С публикует сообщение в определенную "тему" (topic), например /shop/display1. Raspberry Pi подписана на эту тему и мгновенно получает данные, как только они там появляются. Для 1С существуют готовые внешние компоненты, позволяющие работать с MQTT в асинхронном режиме.
Если ваша конфигурация 1С построена на базе "Библиотеки подключаемого оборудования" (БПО), можно пойти по пути эмуляции. 1С поддерживает работу с дисплеями покупателя по протоколам Epson или Posiflex через COM-порт.
Мы можем использовать утилиту socat на стороне Linux (Raspberry Pi), которая создаст виртуальный последовательный порт и перенаправит данные из TCP-сокета в него. В 1С в настройках оборудования мы выбираем стандартный драйвер, но указываем IP-адрес и порт. Таким образом, 1С будет "думать", что работает с обычным торговым оборудованием, а скрипт на Raspberry Pi будет перехватывать эти данные, очищать их от управляющих символов протокола и выводить на экран.
При реализации любого из выбранных методов необходимо обратить внимание на следующие моменты:
Raspberry Pi OS Lite. В ней нет графической оболочки рабочего стола, что освобождает ресурсы для вашего приложения.HTTPСервиса в 1С, где в параметрах запроса будет передаваться код нажатой кнопки.Проанализируем ситуацию с выбором оборудования: если у вас еще нет Raspberry Pi, в некоторых случаях действительно проще и дешевле купить бюджетный Android-планшет и установить на него "1С:Мобильная платформа". Однако, если требуется именно промышленное решение с подключением по HDMI к большому монитору или специфическому дисплею, связка Raspberry Pi + 1С через HTTP-сервисы является наиболее стабильной и масштабируемой.