Проблема: CAN-шина — чёрный ящик для инженера
CAN bus (Controller Area Network) — стандарт для связи между контроллерами в автомобилях, станках, роботах. Оборудование на заводе генерирует тысячи фреймов в секунду, но извлечь из них полезную информацию без специальных инструментов — задача не из лёгких. Традиционные подходы требуют:
- Установки ПО типа PCAN-View или SocketCAN
- Ручного анализа hex-дампов
- Написания скриптов на Python/C++ для фильтрации
Когда на конвейере внезапно падает скорость или робот выдаёт ошибку, каждый час простоя стоит тысячи долларов. Инженеру нужно быстро подключиться, считать идентификаторы ошибок и принять решение. AI-агент ASI Biont решает эту задачу: он подключается к CAN-шине через python-can, анализирует фреймы в реальном времени и автоматически реагирует на нештатные ситуации.
Решение: AI сам пишет интеграцию с CAN bus
ASI Biont использует два способа подключения к CAN:
1. Через industrial_command tool (быстрый доступ к базовым операциям)
AI отправляет команды с протоколом can:
- send_frame — отправить кадр с заданным ID и данными
- read_frame — прочитать последний кадр из буфера
- monitor_bus — включить мониторинг всех фреймов на заданный период
2. Через execute_python (гибкая логика, анализ и уведомления)
AI пишет Python-скрипт с библиотекой python-can, который выполняется в облачном sandbox (доступны все перечисленные библиотеки). Скрипт может:
- Подписаться на определённые CAN ID
- Декодировать данные по DBC-файлу
- Отправлять алерты в Telegram через requests.post
- Логировать тренды в CSV и строить графики через matplotlib
Как это выглядит в чате: Пользователь пишет: «Подключись к CAN-шине через интерфейс PCAN-USB, канал 0, 500 кбит/с. Считай все фреймы с ID 0x18F00500 (крутящий момент двигателя) в течение 1 минуты и пришли график в Telegram». AI за секунды генерирует код, выполняет его и возвращает результат.
Конкретный сценарий: мониторинг CAN-шины станка с ЧПУ
Допустим, на заводе стоит станок Haas VF-2 с CAN-шиной, передающей параметры шпинделя. Нам нужно:
1. Подключиться к шине (Linux, интерфейс slcan0)
2. Отфильтровать фреймы с ID 0x210 (скорость шпинделя, RPM)
3. Если RPM превышает 12000 — отправить уведомление в Telegram
4. Записать все значения в лог-файл
Шаг 1. Установка bridge.py (если используется COM-порт или USB-to-CAN)
Для доступа к локальному CAN-интерфейсу на Windows/macOS/Linux пользователь скачивает bridge.py из дашборда ASI Biont (Devices → Create API Key). Запускает:
pip install pyserial requests websockets
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud 115200
Bridge соединяется с облаком через WebSocket — это единственный канал связи. AI отправляет команды через industrial_command, bridge транслирует их в python-can.
Шаг 2. AI пишет скрипт для execute_python
Пользователь в чате: «Подключись к CAN через slcan0, 500 кбит/с. Читай фреймы с ID 0x210, декодируй как uint16 в big-endian. Если значение > 12000, отправь мне в Telegram сообщение. Также нарисуй график за последние 30 секунд».
AI генерирует и выполняет такой код (выполняется в sandbox):
import can
import numpy as np
import matplotlib.pyplot as plt
import requests
from io import BytesIO
# Настройки Telegram
BOT_TOKEN = "ваш_токен"
CHAT_ID = "ваш_chat_id"
def send_telegram(text, photo=None):
if photo:
requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendPhoto",
data={"chat_id": CHAT_ID, "caption": text},
files={"photo": BytesIO(photo)})
else:
requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
data={"chat_id": CHAT_ID, "text": text})
# Подключение к CAN
bus = can.interface.Bus(channel='slcan0', bustype='socketcan', bitrate=500000)
rpm_data = []
timestamps = []
for i in range(100):
msg = bus.recv(timeout=1.0)
if msg and msg.arbitration_id == 0x210:
rpm = int.from_bytes(msg.data[0:2], 'big')
rpm_data.append(rpm)
timestamps.append(i)
if rpm > 12000:
send_telegram(f"⚠️ RPM превысил 12000: {rpm} об/мин")
if len(rpm_data) >= 30:
# Строим график
plt.figure(figsize=(8,4))
plt.plot(timestamps[-30:], rpm_data[-30:], 'r-')
plt.title("RPM шпинделя (ID 0x210)")
plt.xlabel("Время (сек)")
plt.ylabel("RPM")
buf = BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
send_telegram("Последние 30 значений RPM", photo=buf.getvalue())
plt.close()
bus.shutdown()
Важно: в sandbox нет бесконечных циклов (таймаут 30 с), поэтому цикл ограничен 100 итерациями. Для длительного мониторинга используйте industrial_command monitor_bus, который работает через bridge и может висеть дольше.
Шаг 3. Результат
Через секунду после запроса в Telegram приходит:
RPM шпинделя (ID 0x210) — последние 30 секунд(с графиком)
⚠️ RPM превысил 12000: 12450 об/мин
Инженер видит проблему и может сразу отдать команду на снижение оборотов: «Отправь на CAN ID 0x220 данные 04 00 00 00 — команда остановки шпинделя». AI выполняет send_frame и станок останавливается.
Почему это выгодно?
| Традиционный подход | С ASI Biont |
|---|---|
| Писать код вручную: знать python-can, DBC-файлы, Telegram API | Описать задачу текстом — AI сам генерирует и выполняет код |
| Настраивать инфраструктуру: сервер, очереди, веб-хуки | Всё работает из облака — нужен только bridge или прямая CAN-карта |
| Анализировать hex-дампы в HEX-редакторе | AI расшифровывает данные по сигналам и рисует графики |
| Реагировать на аварию через 1 час | Уведомление приходит за секунды |
Подводные камни и советы
- Выбор интерфейса: Для физического подключения используйте конвертеры PCAN-USB, USBtin, или встроенный SocketCAN в Linux. Bridge поддерживает только COM-порты (RS-232/RS-485) — для USB CAN-адаптеров используйте execute_python с python-can напрямую на Linux (sandbox имеет доступ к сети, но не к локальным портам). Если CAN-адаптер подключается через USB-COM, его можно пробросить через bridge.
- Битрейт: Укажите правильный битрейт (125k, 250k, 500k, 1M). Неправильный — получите ошибки кадров.
- DBC-файлы: Если у вас есть описание сигналов (DBC), попросите AI считать его: «Используй файл engine.dbc из моего хранилища». AI поддерживает загрузку файлов и парсинг через
dbcpy(доступен в sandbox). - Безопасность: CAN-шина не имеет шифрования. Не подключайтесь к критическим системам без согласования с безопасниками.
Заключение
Интеграция CAN bus с ASI Biont превращает «чёрный ящик» в прозрачный, управляемый через естественный язык поток данных. Инженеру больше не нужно писать код — достаточно описать задачу в чате, и AI-агент сам подключается к шине, декодирует сигналы, строит отчёты и отправляет алерты. Это сокращает время отладки с часов до минут и снижает риск человеческой ошибки.
Попробуйте сами: перейдите на asibiont.com, создайте API-ключ, скачайте bridge и напишите в чат: «Подключись к CAN-шине через slcan0, 500 кбит/с, отслеживай ID 0x100 и 0x200, при сообщении с первым — включи реле, при втором — отправь уведомление». AI сделает всё за вас.
Комментарии