Skip to content

Сервис для сбора данных по протоколу MTConnect, их отправки в Apache Kafka и управления через REST API

License

Notifications You must be signed in to change notification settings

iwtcode/MTConnect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MTConnect Service

alt text alt text alt text alt text alt text alt text

Сервис для сбора данных по протоколу MTConnect, отправки в Apache Kafka и управления через REST API

✨ Ключевые возможности

  • 🚀 Потоковая передача в Kafka: Все данные со станков в реальном времени отправляются в топик Apache Kafka для дальнейшей обработки и аналитики
  • 🕹️ Управляемый опрос: Запускайте и останавливайте мониторинг для каждого станка индивидуально через REST API с настраиваемым интервалом
  • 💾 Персистентность: Состояния подключений и опроса сохраняются в базе данных PostgreSQL, что позволяет автоматически восстанавливать их после перезапуска сервиса.
  • 🌐 REST API: Удобный HTTP API для получения актуальных данных, проверки доступности станков и управления процессами опроса
  • 🐳 Простота развертывания: Готовая конфигурация docker-compose.yml для быстрого запуска Apache Kafka и сопутствующих сервисов
  • 🎛️ Веб-интерфейс для Kafka: Встроенный Kafka UI для удобного просмотра топиков и сообщений
  • 🔧 Универсальность: Автоматическое извлечение и кэширование метаинформации из /probe для корректной интерпретации данных с различных станков

🏗️ Архитектура

┌─────────────────┐      ┌─────────────────┐      ┌──────────────────┐
│   Управляющий   ├─────▸│     Сервис      │◂─────┤    MTConnect     │
│    REST API     │      │    MTConnect    │      │    Endpoints     │
│   (Gin-Gonic)   │      │    (Go App)     │      │   (XML-данные)   │
└─────────────────┘      └───────┬───┬─────┘      └──────────────────┘
        ▴                        │   │      (Polling)
        │                        │   └─────────────────────┐
        │                        ▾                         ▾
┌───────┴─────────┐      ┌─────────────────┐      ┌──────────────────┐
│  Пользователь / │      │  PostgreSQL     │      │   Apache Kafka   │
│     Система     │      │  (Состояния     │      │   (Потоковая     │
│  (Управление)   │      │  подключений)   │      │   обработка)     │
└─────────────────┘      └─────────────────┘      └──────────────────┘

📦 Установка

1️⃣ Клонирование репозитория

git clone https://github.com/iwtcode/MTConnect.git
cd MTConnect

2️⃣ Конфигурация приложения

Откройте файл .env и при необходимости измените его

# Database
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=1234
DB_NAME=mtconnect_db

# App
APP_PORT=8080
GIN_MODE=debug

# Kafka
KAFKA_BROKER=localhost:9092
KAFKA_TOPIC=mtconnect_data

# Logger
LOGGER_ENABLE=true
LOGGER_LOGS_DIR=./logs
LOGGER_LOG_LEVEL=DEBUG
LOGGER_SAVING_DAYS=7

3️⃣ Установка cppagent

https://github.com/mtconnect/cppagent/releases/tag/v2.5.0.11

4️⃣ Запуск симуляторов станков

Скопируйте файл pkg\agent\random_simulator.rb в agent-2.5.0.11-win64\simulator

cd agent-2.5.0.11-win64\simulator
ruby random_simulator.rb

5️⃣ Запуск MTConnect agent

cd agent-2.5.0.11-win64\bin
agent.exe debug ..\demo\agent\agent.cfg

6️⃣ Запуск Apache Kafka

cd MTConnect
docker-compose up

После запуска Веб-интерфейс Kafka

Либо просмотреть сообщения сервера можно в реальном времени командой:
docker-compose exec kafka kafka-console-consumer --bootstrap-server localhost:9092 --topic mtconnect_data

7️⃣ Запуск приложения

# Windows
./build/windows_mtc.exe

# Linux
./build/linux_mtc

# MacOS
./build/macos_mtc

# Golang
go run cmd/app/main.go

🔌 API

Создание подключения

POST /connect
curl -X POST http://localhost:8080/api/v1/connect \
-H "Content-Type: application/json" \
-d '{
    "endpoint_url": "http://localhost:5001/Mazak",
    "model": "Mazak VRX C600"
}'
{
    "status": "ok",
    "connection_info": {
        "session_id": "870c5240-de93-4584-b411-37aa915cbc1d",
        "config": {
            "endpoint_url": "http://localhost:5001/Mazak",
            "model": "Mazak VRX C600",
            "manufacturer": "Mazak"
        },
        "created_at": "2025-08-28T12:19:21.2303802+03:00",
        "last_used": "2025-08-28T12:19:21.2303802+03:00",
        "use_count": 1,
        "is_healthy": true
    }
}

Получение списка активных подключений

GET /connect
curl http://localhost:8080/api/v1/connect
{
    "status": "ok",
    "pool_size": 2,
    "connections": [
        {
            "session_id": "bba81cc3-ad26-4e0b-9336-a8cc8bf54238",
            "config": {
                "endpoint_url": "http://localhost:5001/OKUMA",
                "model": "Okuma MTConnect Adapter",
                "manufacturer": "OKUMA"
            },
            "created_at": "2025-08-28T12:19:00.4920414+03:00",
            "last_used": "2025-08-28T12:19:00.4920414+03:00",
            "use_count": 1,
            "is_healthy": true
        },
        {
            "session_id": "870c5240-de93-4584-b411-37aa915cbc1d",
            "config": {
                "endpoint_url": "http://localhost:5001/Mazak",
                "model": "Mazak VRX C600",
                "manufacturer": "Mazak"
            },
            "created_at": "2025-08-28T12:19:21.2303802+03:00",
            "last_used": "2025-08-28T12:19:21.2303802+03:00",
            "use_count": 1,
            "is_healthy": true
        }
    ]
}

Проверка состояния подключения конкретного станка

POST /connect/check
curl -X POST http://localhost:8080/api/v1/connect/check \
-H "Content-Type: application/json" \
-d '{
    "session_id": "870c5240-de93-4584-b411-37aa915cbc1d"
}'
{
    "status": "healthy",
    "connection_info": {
        "session_id": "870c5240-de93-4584-b411-37aa915cbc1d",
        "config": {
            "endpoint_url": "http://localhost:5001/Mazak",
            "model": "Mazak VRX C600",
            "manufacturer": "Mazak"
        },
        "created_at": "2025-08-28T12:19:21.2303802+03:00",
        "last_used": "2025-08-28T12:22:33.978361+03:00",
        "use_count": 2,
        "is_healthy": true
    }
}

Запуск сбора данных

POST /polling/start
curl -X POST http://localhost:8080/api/v1/polling/start \
-H "Content-Type: application/json" \
-d '{
    "session_id": "870c5240-de93-4584-b411-37aa915cbc1d",
    "interval": 1000
}'
{
    "status": "ok",
    "message": "Polling started for session 870c5240-de93-4584-b411-37aa915cbc1d"
}

Остановка сбора данных

POST /polling/stop
curl -X POST http://localhost:8080/api/v1/polling/stop \
-H "Content-Type: application/json" \
-d '{
    "session_id": "870c5240-de93-4584-b411-37aa915cbc1d"
}'
{
    "status": "ok",
    "message": "Polling stopped for session 870c5240-de93-4584-b411-37aa915cbc1d"
}

Удаление подключения

DELETE /connect
curl -X DELETE http://localhost:8080/api/v1/connect \
-H "Content-Type: application/json" \
-d '{
    "session_id": "870c5240-de93-4584-b411-37aa915cbc1d"
}'
{
    "status": "ok",
    "message": "Session 870c5240-de93-4584-b411-37aa915cbc1d disconnected successfully"
}

🔧 Структура проекта

MTConnect/
├── cmd/app/                      # Главная точка входа приложения (main.go)
├── internal/
│   ├── app/                      # Сборка и запуск приложения с помощью Fx для DI
│   ├── config/                   # Логика загрузки конфигурации из .env
│   ├── adapters/
│   │   ├── handlers/             # Обработчики HTTP-запросов (слой API на Gin)
│   │   └── repositories/         # Реализации репозиториев (PostgreSQL)
│   ├── domain/                   # Основные бизнес-сущности (entities) и модели (models)
│   ├── interfaces/               # Go-интерфейсы для всех слоев (контракты)
│   ├── services/                 
│   │   ├── kafka/                # Продюсер для Apache Kafka
│   │   └── mtconnect_service/    # Основная бизнес-логика: управление подключениями, опрос, парсинг
│   └── usecases/                 # Сценарии использования, связывающие API и сервисный слой
├── pkg/
│   ├── client/                   # Клиентская библиотека для API
│   └── models/                   # Публичные модели для использования в клиенте
├── tools/
│   └── build/                    # Скрипт для сборки исполняемых файлов
├── build/                        # Папка с готовыми исполняемыми файлами
├── .env                          # Файл конфигурации
├── docker-compose.yml            # Файл для запуска Kafka и Kafka-UI
├── LICENSE
└── README.md

🆘 Поддержка

📝 Лицензия

Проект распространяется под лицензией MIT

Copyright (c) 2025 iwtcode

About

Сервис для сбора данных по протоколу MTConnect, их отправки в Apache Kafka и управления через REST API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published