Введение
Промышленные контроллеры (PLC) и удалённые терминалы (RTU) на базе протокола Modbus/TCP — основа современной автоматизации. Они управляют станками, насосами, конвейерами, климатическими системами, собирая терабайты данных ежедневно. Однако эти данные часто остаются «сырыми»: инженеры вручную анализируют тренды, настраивают пороги срабатывания и пишут скрипты для каждого нового датчика. AI-агент ASI Biont меняет подход: он подключается к PLC напрямую через Modbus/TCP, читает регистры и катушки, анализирует историю и предсказывает отказы до того, как они произойдут. В этой статье мы разберём, как ASI Biont интегрируется с PLC/RTU, какие сценарии автоматизации открываются и почему это выгоднее традиционного программирования.
Что такое Modbus/TCP и зачем подключать его к AI?
Modbus/TCP — открытый промышленный протокол, работающий поверх TCP/IP. Он позволяет читать и записывать данные в регистры (holding registers, input registers) и катушки (coils, discrete inputs) контроллера. Большинство современных PLC (Siemens S7-1200, Schneider M221, Mitsubishi FX5U, WAGO, Beckhoff) поддерживают Modbus/TCP «из коробки» или через шлюз. RTU (Remote Terminal Unit) в нефтегазовой и энергетической отраслях также используют этот протокол для передачи телеметрии.
Подключение AI-агента к PLC даёт возможность:
- Автоматически анализировать тренды температуры, давления, вибрации, тока.
- Предсказывать выход параметров за пределы нормы (predictive maintenance).
- Управлять выходами (включение/выключение насосов, клапанов) по заданным условиям.
- Создавать сложные сценарии, которые невозможно реализовать внутри самого PLC (например, интеграция с погодными API, Telegram-уведомления, машинное обучение).
Как ASI Biont подключается к Modbus/TCP (PLC, RTU)
ASI Biont использует встроенный инструмент industrial_command для работы с Modbus/TCP. Никаких панелей управления или кнопок «добавить устройство» — пользователь просто описывает в чате задачу, и AI-агент сам пишет код на Python с библиотекой pymodbus, выполняет его в защищённом sandbox-окружении на сервере (Railway) и возвращает результат.
Поддерживаемые команды industrial_command для Modbus/TCP
| Команда | Назначение | Пример ответа |
|---|---|---|
read_registers |
Чтение holding registers (адрес, количество) | [42, 100, 255] |
write_register |
Запись одного holding register (адрес, значение) | {'success': True} |
read_coils |
Чтение катушек (адрес, количество) | [True, False, True] |
write_coil |
Установка катушки (адрес, True/False) | {'success': True} |
Пример: чтение температуры с PLC и отправка в Telegram
Пользователь пишет в чате:
«Подключись к PLC по Modbus/TCP на IP 192.168.1.100, порт 502. Прочитай регистры с адреса 40001 по 40010 (температура датчиков). Если какой-то выше 85°C, отправь мне уведомление в Telegram. Мой chat_id: 123456789, токен бота: 123:ABC»
AI-агент выполняет следующий сценарий:
1. Вызывает industrial_command(protocol='modbus', command='read_registers', ip='192.168.1.100', port=502, address=40001, count=10).
2. Получает массив значений.
3. Проверяет каждое значение на превышение порога 85.
4. Если есть превышение — пишет Python-скрипт с requests.post к Telegram Bot API и выполняет его через execute_python.
Пример кода, который генерирует AI (выполняется в sandbox):
import requests
# Данные от PLC (получены через industrial_command ранее)
temperatures = [82.3, 87.1, 79.5, 91.2, 76.8]
threshold = 85.0
chat_id = "123456789"
token = "123:ABC"
alerts = []
for idx, temp in enumerate(temperatures):
if temp > threshold:
alerts.append(f"Датчик {40001 + idx}: {temp}°C — превышение!")
if alerts:
message = "\n".join(alerts)
url = f"https://api.telegram.org/bot{token}/sendMessage"
payload = {"chat_id": chat_id, "text": message}
requests.post(url, json=payload)
Результат: AI сам написал код, отправил его на выполнение, и Telegram-уведомления работают без единой строки кода со стороны пользователя.
Альтернативные способы: execute_python с pymodbus
Если нужно выполнить более сложный анализ (например, построить график тренда или обучить модель), AI может использовать execute_python напрямую с библиотекой pymodbus:
from pymodbus.client import ModbusTcpClient
client = ModbusTcpClient('192.168.1.100', port=502)
client.connect()
# Чтение 20 holding registers начиная с адреса 40001
response = client.read_holding_registers(address=0, count=20, unit=1)
if not response.isError():
values = response.registers
print("Сырые данные:", values)
# Здесь можно запустить numpy/scipy анализ, построить график matplotlib и сохранить в PDF
client.close()
Важно: execute_python выполняется в облаке (не на устройстве пользователя), поэтому для работы с COM-портами или локальными ресурсами используется Hardware Bridge. Для Modbus/TCP это не требуется — PLC доступен по сети.
Конкретный сценарий: предиктивное обслуживание насосной станции
Рассмотрим реальный кейс. На предприятии есть PLC (WAGO 750-881), который управляет тремя насосами и собирает данные:
- Holding Register 40001: давление на входе (бар)
- Holding Register 40002: давление на выходе (бар)
- Holding Register 40003: ток двигателя насоса #1 (А)
- Holding Register 40004: ток двигателя насоса #2 (А)
- Coil 00001: состояние насоса #1 (1 — включён)
- Coil 00002: состояние насоса #2 (1 — включён)
Задача: предсказать износ подшипников насоса по току
Пользователь даёт команду AI:
«Каждый час читай ток насоса #1 (register 40003). Строй скользящее среднее за 8 часов. Если среднее отклонение от базового значения (10 А) превышает 15%, отправляй предупреждение в Telegram и записывай событие в локальный CSV-файл»
AI-агент:
1. Первым вызовом industrial_command читает текущее значение регистра 40003.
2. Сохраняет его в историю (в sandbox-памяти, но можно записать в CSV через execute_python).
3. Вызывает industrial_command снова через час (по расписанию, которое задаёт пользователь в чате).
4. После 8 замеров вычисляет скользящее среднее с помощью numpy.
5. Сравнивает с базой, генерирует уведомление.
Пример скрипта для расчёта (выполняется в sandbox):
import numpy as np
import csv
from io import StringIO
# Гипотетические данные (в реальности берутся из industrial_command)
history = [10.2, 10.5, 11.0, 11.8, 12.3, 13.1, 14.0, 15.2]
base_current = 10.0
threshold = 0.15 # 15%
moving_avg = np.mean(history[-8:])
deviation = (moving_avg - base_current) / base_current
if deviation > threshold:
print(f"Тревога: отклонение {deviation*100:.1f}% превышает порог")
# Отправка в Telegram (через requests.post)
# Запись в CSV (через openpyxl или csv)
csv_buffer = StringIO()
writer = csv.writer(csv_buffer)
writer.writerow(["timestamp", "current", "deviation"])
writer.writerow(["2026-07-13 14:00", moving_avg, deviation])
# Далее можно сохранить файл в sandbox и отдать пользователю
Почему ASI Biont выгоднее традиционного подхода?
| Критерий | Традиционный подход | ASI Biont |
|---|---|---|
| Написание кода | Инженер пишет скрипт на Python/C++ вручную, отлаживает, деплоит | Пользователь описывает задачу словами, AI генерирует и выполняет код |
| Время интеграции | Часы–дни | Секунды–минуты |
| Гибкость | Каждое новое устройство требует нового кода | AI адаптируется под любое устройство через диалог |
| Обучение | Требуются навыки программирования и знания протокола | Достаточно понимать, что нужно сделать |
| Масштабирование | Нужно переписывать код при изменении схемы | AI перестраивает логику по текстовой команде |
Заключение
Интеграция промышленных контроллеров (PLC, RTU) с AI-агентом ASI Biont через Modbus/TCP открывает новые возможности для автоматизации: от простого мониторинга до сложного предиктивного обслуживания. Вам не нужно писать код вручную — просто опишите задачу в чате, и AI-агент сам подключится к устройству, прочитает регистры, проанализирует данные и выполнит нужные действия. Это сокращает время внедрения с дней до минут и делает промышленную аналитику доступной каждому инженеру.
Попробуйте сами: подключите ваш PLC к ASI Biont на asibiont.com и начните получать прогнозы и уведомления уже сегодня.
Комментарии