Промышленные сети RS-485 — это стандарт де-факто для связи на заводах, в энергетике и ЖКХ. Счетчики электроэнергии, контроллеры задвижек, датчики температуры и давления — все они часто «говорят» именно по RS-485. Но до недавнего времени чтобы собрать с них данные или управлять ими, приходилось писать собственные скрипты, разбираться в протоколах Modbus RTU, DLMS или просто в бинарных командах. AI-агент ASI Biont меняет это: теперь достаточно описать задачу на естественном языке, и AI сам напишет код интеграции, подключится к устройству через Hardware Bridge и начнет сбор данных или управление. В этой статье — реальный гайд, как это работает.
Что такое RS-485 и почему это важно для AI-автоматизации
RS-485 — это дифференциальный последовательный интерфейс, позволяющий подключать до 32 устройств на одну витую пару на расстоянии до 1200 метров. Он используется в промышленных контроллерах (PLC), приборах учета (электросчетчики, теплосчетчики), исполнительных механизмах (задвижки, клапаны) и датчиках (температуры, давления, уровня).
Типичная проблема: на объекте есть 20 счетчиков Меркурий 230 или Энергомера, которые нужно опрашивать каждый час, сохранять показания в базу и отправлять отчет в Telegram. Раньше для этого требовался разработчик, знающий Modbus RTU или DLMS/COSEM, плюс сервер для cron-задач. С ASI Biont вы просто пишете в чат: «Подключись к счетчикам на RS-485 через COM3, опрашивай каждый час, сохраняй в PostgreSQL и пришли мне график потребления». AI-агент сам сгенерирует код, запустит его и будет выполнять задачу.
Как ASI Biont подключается к RS-485: Hardware Bridge и COM-порт
ASI Biont работает в облаке (на Railway), поэтому для доступа к локальным COM-портам используется Hardware Bridge — небольшой Python-скрипт bridge.py, который вы запускаете на своем ПК (Windows/Linux/macOS). Он соединяется с AI-агентом через WebSocket (единственный канал связи) и выполняет команды чтения/записи в COM-порт.
Почему именно такой способ?
- Безопасность: bridge не открывает порты в интернет, соединение инициируется изнутри вашей сети.
- Гибкость: можно подключать любое количество COM-портов, менять baud rate на лету.
- Простота: не нужно настраивать VPN или статический IP.
Пошаговая настройка:
1. Зайдите в дашборд ASI Biont → Devices → Create API Key. Скопируйте токен.
2. Скачайте bridge.py (кнопка «Скачать bridge»).
3. Установите зависимости: pip install pyserial requests websockets.
4. Запустите bridge:
bash
python bridge.py --token=YOUR_TOKEN --ports=COM3 --baud 9600
Если несколько портов: --ports=COM3,COM5.
5. В чате с AI-агентом напишите: «Подключись к COM3 через bridge, скорость 9600, проверь связь командой HELP».
После этого ASI Biont может отправлять и принимать данные через COM-порт с помощью инструмента industrial_command:
- industrial_command(protocol='serial://', command='serial_write_and_read', arguments={'data': '48454c500a'}) — отправить HELP и прочитать ответ.
Реальный сценарий: сбор данных с энергомониторинга
Задача: На заводе установлены 5 счетчиков электроэнергии Меркурий 230 ART-03 PQRSIN, подключенных к преобразователю интерфейсов USB-RS485. Нужно ежечасно снимать показания активной энергии (A+, кВт·ч) и отправлять в Telegram, если потребление превышает 100 кВт.
Что делает AI-агент:
1. Подключается к COM3 через bridge (baud 9600, 8N1).
2. Отправляет Modbus RTU-запрос на чтение регистра 0x0010 (активная мощность) для каждого счетчика.
3. Парсит ответ, извлекает значение в кВт.
4. Если значение > 100, отправляет сообщение в Telegram через API.
5. Сохраняет историю в CSV (или PostgreSQL).
Пример диалога в чате:
Пользователь: «Подключись к счетчикам Меркурий 230 на COM3, baud 9600. Счетчики имеют Modbus-адреса 1, 2, 3, 4, 5. Читай регистр 0x0010 (активная мощность) каждый час. Если мощность > 100 кВт, отправь мне в Telegram. Сохраняй историю в файл energy_log.csv.»
AI-агент генерирует и выполняет код. Вот как выглядит сгенерированный скрипт (он выполняется в sandbox, но команды к bridge уходят через industrial_command):
import requests
import time
import csv
from datetime import datetime
# Параметры
TELEGRAM_TOKEN = "ваш_токен"
CHAT_ID = "ваш_chat_id"
MODBUS_IDS = [1, 2, 3, 4, 5]
REGISTER = 0x0010 # регистр активной мощности
BAUD = 9600
PORT = "COM3"
def send_telegram(message):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
data = {"chat_id": CHAT_ID, "text": message}
requests.post(url, data=data)
def read_modbus_register(device_id, reg_addr):
# Формируем Modbus RTU запрос: адрес 0x03 (read holding registers), 2 байта
# Для Меркурий 230 используется функция 0x03, адрес регистра 2 байта
import struct
# CRC16 Modbus
def crc16(data):
crc = 0xFFFF
for byte in data:
crc ^= byte
for _ in range(8):
if crc & 0x0001:
crc = (crc >> 1) ^ 0xA001
else:
crc >>= 1
return struct.pack('<H', crc)
request = bytearray()
request.append(device_id) # адрес устройства
request.append(0x03) # функция чтения holding registers
# адрес регистра (2 байта, big-endian)
request.append((reg_addr >> 8) & 0xFF)
request.append(reg_addr & 0xFF)
# количество регистров (1 регистр = 2 байта)
request.append(0x00)
request.append(0x01)
request.extend(crc16(request))
# Отправляем через industrial_command
# Эта команда будет отправлена bridge, который запишет в COM3 и прочитает ответ
hex_data = request.hex()
# В реальности здесь вызов industrial_command, но для примера показываем логику
# response = industrial_command(protocol='serial://', command='serial_write_and_read', arguments={'data': hex_data, 'port': PORT, 'baud': BAUD})
# Парсим ответ (первые 2 байта - адрес и функция, затем байт длины, данные, CRC)
# Для упрощения считаем, что ответ получен и распарсен
# Возвращаем значение регистра
return 0 # заглушка
while True:
for dev_id in MODBUS_IDS:
power = read_modbus_register(dev_id, REGISTER)
timestamp = datetime.now().isoformat()
with open('energy_log.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow([timestamp, dev_id, power])
if power > 100:
send_telegram(f"⚠️ Счетчик {dev_id}: мощность {power} кВт превысила 100 кВт!")
time.sleep(1) # пауза между запросами
time.sleep(3600) # пауза час
Важно: В sandbox не допускаются бесконечные циклы (таймаут 30 секунд). Для длительных задач AI-агент использует внешние триггеры или планировщик. В данном примере цикл показан для иллюстрации логики, но в реальности AI-агент настраивает опрос через внешний сервис (например, cron + execute_python).
Сценарий 2: управление задвижками через RS-485
Оборудование: Контроллер задвижки (например, AUMA или Элсиб) с Modbus RTU. Команды: открыть (регистр 0x0001 = 1), закрыть (0x0001 = 0), статус (регистр 0x0002).
Задача от пользователя: «Подключись к контроллеру задвижки на COM5, baud 19200, адрес 10. Если температура в цехе > 35°C, закрой задвижку. Если < 20°C, открой. Статус пиши в лог.»
AI-агент:
1. Читает температуру из другого источника (например, датчик на ESP32 по MQTT).
2. Сравнивает с порогами.
3. Отправляет Modbus-команду на запись регистра.
Пример кода (фрагмент):
# Формируем Modbus RTU запрос на запись регистра (функция 0x06)
def write_modbus_register(device_id, reg_addr, value):
request = bytearray()
request.append(device_id)
request.append(0x06) # write single register
request.append((reg_addr >> 8) & 0xFF)
request.append(reg_addr & 0xFF)
request.append((value >> 8) & 0xFF)
request.append(value & 0xFF)
# CRC
crc = crc16(request)
request.extend(crc)
# Отправка через industrial_command...
Сценарий 3: мониторинг температуры на складе
Оборудование: Датчик температуры PT100 с преобразователем RS-485 (протокол Modbus RTU).
Задача: «Опрашивай датчик на COM4, baud 9600, адрес 1, регистр 0x0000 (температура в градусах Цельсия). Если температура выходит за диапазон 2-8°C, отправь уведомление в Telegram. Строй график за сутки.»
AI-агент:
- Настраивает периодический опрос.
- При превышении порога отправляет alert.
- В конце дня генерирует график matplotlib и отправляет его в Telegram.
Почему это выгодно: AI вместо программиста
Традиционная интеграция RS-485 требует:
- Знания Modbus RTU, DLMS/COSEM или другого протокола.
- Написания кода на Python/C++ с pyserial.
- Настройки crond/systemd для периодического запуска.
- Обработки ошибок (CRC, таймауты).
С ASI Biont:
- Вы описываете задачу на русском или английском.
- AI-агент сам выбирает протокол, формирует запросы, парсит ответы, обрабатывает ошибки.
- Bridge обеспечивает безопасное соединение с COM-портом из облака.
- Результат — работающая интеграция за минуты, а не дни.
Заключение
RS-485 — это «рабочая лошадка» промышленной автоматизации. Подключив его к ASI Biont, вы получаете возможность управлять счетчиками, задвижками, датчиками и любым другим оборудованием через естественный язык. Никакого ручного кодирования — только диалог с AI.
Попробуйте сами: зайдите на asibiont.com, создайте API-ключ, скачайте bridge, подключите свое RS-485 устройство и напишите в чат: «Собери данные с моего счетчика и пришли отчет». Убедитесь, насколько это быстро и удобно.
Комментарии