Интеграция OPC-UA (SCADA/DCS) с AI-агентом ASI Biont: пошаговое руководство по автоматизации промышленных процессов

Введение

Промышленные системы управления — SCADA и DCS — десятилетиями работают в изолированных контурах. Инженеры АСУ ТП пишут скрипты на Python, настраивают OPC-UA-клиенты и вручную тянут данные в Excel или SQL-базы. Но что, если вместо ручного скриптинга вы просто скажете AI-агенту: «Подключись к OPC-UA-серверу на 192.168.1.100, прочитай температуру реактора и отправь в Telegram при превышении 80°C»? Именно это позволяет сделать ASI Biont — AI-агент, который сам пишет код интеграции под ваше устройство. В этой статье мы разберём, как подключить OPC-UA-сервер (SCADA/DCS) к ASI Biont, какие сценарии автоматизировать и почему это снижает порог входа для инженеров.

Что такое OPC-UA и зачем его подключать к AI-агенту?

OPC-UA (Open Platform Communications Unified Architecture) — это открытый стандарт промышленной связи, который используется для обмена данными между SCADA-системами, DCS, ПЛК и датчиками. В отличие от классического OPC-DCOM, OPC-UA работает через TCP/IP, поддерживает шифрование, аутентификацию и модель адресного пространства (теги, объекты, методы). По данным OPC Foundation (opcfoundation.org), более 4500 компаний по всему миру используют OPC-UA в своих решениях. Подключение такого сервера к AI-агенту позволяет:
- Автоматически читать теги (температура, давление, уровень) и анализировать тренды.
- Писать значения в теги для управления оборудованием (например, аварийное отключение насоса).
- Интегрировать данные с внешними сервисами: Telegram, Notion, Google Sheets, базами данных.
- Заменить ручной скриптинг на диалог с AI: вы описываете задачу, AI пишет код и выполняет его.

Как ASI Biont подключается к OPC-UA-серверу?

ASI Biont использует два основных механизма для работы с OPC-UA:
1. industrial_command tool — AI отправляет команду industrial_command(protocol='opcua', command='read_variable', params={'url': 'opc.tcp://192.168.1.100:4840', 'node_id': 'ns=2;s=Temperature'}). Этот вызов выполняется в облаке и возвращает значение тега.
2. execute_python — AI пишет полноценный Python-скрипт с библиотекой opcua-asyncio (asyncua), который выполняется в sandbox-окружении ASI Biont. Скрипт может читать/писать теги, подписываться на изменения, сохранять данные в PostgreSQL или отправлять в Telegram.

Важно: OPC-UA-сервер должен быть доступен из интернета (если он находится в локальной сети, используйте VPN или Hardware Bridge для туннелирования). ASI Biont не имеет прямого доступа к локальной сети пользователя — все запросы идут через облако.

Пошаговая настройка

  1. Опишите задачу в чате: «Подключись к OPC-UA-серверу на opc.tcp://192.168.1.100:4840, прочитай значение тега Temperature и запиши в переменную». AI сам выберет способ — либо через industrial_command, либо через execute_python.
  2. AI пишет код: Если используется execute_python, AI генерирует скрипт с asyncua, выполняет его в sandbox и возвращает результат.
  3. Результат в чате: AI показывает прочитанное значение, подтверждает запись или сообщает об ошибке.

Пример кода: чтение тега OPC-UA через execute_python

Ниже приведён реальный Python-скрипт, который ASI Biont может сгенерировать и выполнить. Он подключается к OPC-UA-серверу, читает тег температуры и выводит результат. Обратите внимание: в sandbox нет while True — код выполняется один раз и завершается в течение 30 секунд.

import asyncio
from asyncua import Client

async def read_opcua_tag():
    url = "opc.tcp://192.168.1.100:4840"
    node_id = "ns=2;s=Temperature"
    async with Client(url=url) as client:
        node = client.get_node(node_id)
        value = await node.read_value()
        print(f"Значение тега {node_id}: {value}")
        return value

result = asyncio.run(read_opcua_tag())

Что делает этот код?

  • Подключается к OPC-UA-серверу по адресу opc.tcp://192.168.1.100:4840.
  • Читает значение узла с идентификатором ns=2;s=Temperature.
  • Выводит результат в консоль sandbox.

Сценарий 1: Аварийное отключение оборудования при превышении температуры

Представьте: на заводе есть реактор, температура в котором не должна превышать 80°C. AI-агент может:
1. Подключиться к OPC-UA-серверу.
2. Прочитать тег Reactor_Temperature.
3. Если значение > 80°C, записать в тег Emergency_Stop значение True (или 1).
4. Отправить уведомление в Telegram.

Пример кода (выполняется через execute_python):

import asyncio
from asyncua import Client
import requests

TELEGRAM_TOKEN = "ваш_токен"
CHAT_ID = "ваш_chat_id"

def send_telegram(message):
    url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
    requests.post(url, json={"chat_id": CHAT_ID, "text": message})

async def emergency_check():
    url = "opc.tcp://192.168.1.100:4840"
    async with Client(url=url) as client:
        temp_node = client.get_node("ns=2;s=Reactor_Temperature")
        stop_node = client.get_node("ns=2;s=Emergency_Stop")
        temp = await temp_node.read_value()
        if temp > 80.0:
            await stop_node.write_value(True)
            send_telegram(f"⚠️ Авария! Температура {temp}°C превышает 80°C. Оборудование отключено.")
        else:
            print(f"Температура в норме: {temp}°C")

asyncio.run(emergency_check())

Результат: AI запускает этот скрипт (вручную или по расписанию), и при превышении температуры оборудование отключается автоматически. Никакого ручного мониторинга.

Сценарий 2: Мониторинг температуры/давления через чат

Вы можете в любой момент спросить в чате: «Какая сейчас температура в реакторе?» AI выполнит industrial_command(protocol='opcua', command='read_variable', params={'url': '...', 'node_id': '...'}) и мгновенно ответит. Например:

Пользователь: «Прочитай давление в трубопроводе P-101»
AI: Значение тега ns=2;s=Pressure_P101: 12.5 бар

Это удобно для оперативного контроля без открытия SCADA-клиента.

Сценарий 3: Автоматическое логирование в базу данных

AI может настроить периодический сбор данных с OPC-UA-сервера и запись в PostgreSQL. Для этого используется execute_python с библиотеками asyncua и asyncpg. Пример кода:

import asyncio
from asyncua import Client
import asyncpg

DATABASE_URL = "postgresql://user:pass@localhost:5432/scada_logs"

async def log_data():
    conn = await asyncpg.connect(DATABASE_URL)
    url = "opc.tcp://192.168.1.100:4840"
    async with Client(url=url) as client:
        temp_node = client.get_node("ns=2;s=Temperature")
        temp = await temp_node.read_value()
        await conn.execute(
            "INSERT INTO temperature_log (value, timestamp) VALUES ($1, NOW())",
            temp
        )
    await conn.close()
    print(f"Записано значение {temp}")

asyncio.run(log_data())

Результат: Данные автоматически сохраняются в базу, и вы можете строить графики или анализировать тренды через BI-инструменты.

Сценарий 4: Интеграция с Notion и Telegram

Допустим, вы хотите, чтобы AI создавал отчёт в Notion о состоянии оборудования каждую смену и отправлял сводку в Telegram. ASI Biont может:
1. Прочитать несколько тегов (температура, давление, уровень).
2. Сформировать Markdown-отчёт.
3. Отправить его в Telegram через requests.post к api.telegram.org.
4. Создать страницу в Notion через Notion API (используя requests).

Пример фрагмента (без полного кода из-за объёма):

import requests

# Отправка в Telegram
requests.post(f"https://api.telegram.org/bot{TOKEN}/sendMessage", json={"chat_id": ID, "text": report})

# Создание в Notion (через Notion API)
headers = {"Authorization": "Bearer secret_...", "Content-Type": "application/json"}
data = {"parent": {"database_id": "..."}, "properties": {"Title": {"title": [{"text": {"content": "Отчёт за смену"}}]}}}
requests.post("https://api.notion.com/v1/pages", headers=headers, json=data)

Почему это выгодно?

  • Снижение порога входа: Инженеру не нужно знать Python или asyncua — достаточно описать задачу на естественном языке.
  • Скорость: AI пишет код за секунды, а не часы, как при ручной разработке.
  • Гибкость: Подключите любое устройство через execute_python — не только OPC-UA, но и Modbus, MQTT, HTTP API, BACnet, Siemens S7, CAN bus и другие.
  • Автоматизация рутины: Мониторинг, логирование, уведомления — всё настраивается в чате без написания скриптов вручную.

Заключение

OPC-UA-сервер — это не просто точка сбора данных, а ворота к интеллектуальной автоматизации. ASI Biont позволяет подключиться к любому OPC-UA-серверу (SCADA, DCS) через диалог в чате, читать и писать теги, интегрировать данные с Telegram, Notion, базами данных и запускать сценарии аварийного отключения. Вам не нужно ждать обновлений от вендора или писать сложные скрипты — AI сделает всё за вас.

Попробуйте сами: Зайдите на asibiont.com, создайте API-ключ, скачайте bridge.py (если нужно для локального доступа) и в чате напишите: «Подключись к моему OPC-UA-серверу на opc.tcp://192.168.1.100:4840 и прочитай все теги». Убедитесь, что промышленная автоматизация может быть простой и быстрой.

← Все статьи

Комментарии