Akıllı Üretim

MQTT ile CNC Makine İzleme: İş Mili Yükü, Program ve Kullanım Oranı

CNC makinelerinden çalışma durumunu, aktif programı, iş mili yükünü ve parça sayısını nasıl toplayacağınızı, MQTT üzerinden nasıl yayınlayacağınızı ve bunları dürüst bir kullanım oranı rakamına nasıl dönüştüreceğinizi öğrenin.

İş mili yükünü ve program durumunu MQTT üzerinden bir kullanım oranı grafiğine aktaran bir işleme merkezini gösteren CNC makine izleme illüstrasyonu
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

CNC makine izleme, her talaşlı imalat atölyesinin tartıştığı soruyu yanıtlar: iş milleri günün ne kadarında gerçekten kesim yapıyor? Bu eğitimde bir CNC kontrolöründen çalışma durumunu, aktif programı, iş mili yükünü ve parça sayısını toplayacak, bunları MQTT üzerinden yayınlayacak ve güvenebileceğiniz bir kullanım oranı hesaplayacaksınız. Örnekler MTConnect kullanır; diğer kontrolörler için notlar ve eski makineler için akım sensörlü bir yedek çözüm de içerir.

CNC Makine İzleme Neden Karşılığını Verir?

Çoğu atölye kullanım oranını olduğundan yüksek tahmin eder. Meşgul görünen bir makine ilk parça kontrolünü, bir takımı, bir program düzeltmesini ya da aynı anda iki makine daha çalıştıran bir operatörü bekliyor olabilir. Veri olmadan bu boşluklar vardiyanın içinde gizlenir. Çalışma durumu saniye saniye kaydedildiğinde kayıpların deseni görünür hale gelir: belirli işlerde uzun ayar süreleri, gereğinden uzun süren ısınma çevrimleri veya malzeme geç geldiği için her öğleden sonra boşta bekleyen bir makine.

İyi bir CNC izleme, kullanım oranının ötesinde de yardımcı olur. İş mili yükü trendleri takım aşınmasını ortaya çıkarır, parça sayıları teklif hazırlama ve planlamayı besler, program adları da makine süresini belirli işlere bağlar.

Hangi Sinyaller Toplanmalı?

Sinyal Tipik kaynak Neden önemli
Çalışma durumu (ACTIVE, READY, STOPPED, INTERRUPTED, FEED_HOLD) Kontrolör Kullanım oranı ve duruş analizinin temeli
Kontrolör modu (AUTOMATIC, MANUAL, MDI, EDIT) Kontrolör Üretimi ayar ve program denemesinden ayırır
Aktif program adı Kontrolör Süreyi işlere ve parçalara bağlar
İş mili yükü (%) Kontrolör Gerçek kesimi boşta kesimden ayırır, takım aşınmasını tespit eder
İş mili devri ve ilerleme override'ı Kontrolör Programları yavaşlatan operatörleri gösterir
Parça sayısı Kontrolör veya makro değişkeni Üretim sayımı ve çevrim süresi
Alarm kodu ve mesajı Kontrolör Operatör girişi olmadan duruş nedenleri
İş mili motor akımı Harici CT sensörü Veri portu olmayan makineler için yedek çözüm

Çalışma durumu, mod, program ve parça sayısıyla başlayın. Bu dördü iş bazında kullanım oranını verir. Temeller oturduktan sonra iş mili yükünü ve alarmları ekleyin.

Kontrolörden Veri Almak

Kontrolörü nasıl okuyacağınız markaya ve yaşa bağlıdır:

  • MTConnect. Birçok modern makine bir MTConnect adaptörüyle gelir veya sonradan eklenebilir. Bir MTConnect agent, makinenin güncel durumunu HTTP üzerinden XML olarak sunar; sorgulaması kolaydır ve üreticiden bağımsızdır. MTConnect'ten MQTT'ye rehberi agent kurulumunu ayrıntılı olarak ele alır.
  • OPC UA. Birçok kontrolör bir OPC UA sunucu seçeneği sunar. Uçtaki bir OPC UA client'ı aynı değerleri okur.
  • Üretici kütüphaneleri. Bazı kontrolör aileleri durum okumak için kendi protokolünü veya kütüphanesini sağlar. Bunlar çalışır, ancak gateway kodunuzu tek bir markaya bağlar.
  • Ayrık I/O ve akım sensörleri. Ağ portu olmayan eski makineler için cycle-start lambasını kablolayın veya iş mili motor kablosuna bir akım trafosu takın. Program adlarını kaybedersiniz, ancak yine de güvenilir bir çalışma sinyali elde edersiniz.

Kaynak ne olursa olsun, uçtan sonraki desen aynıdır: değerleri tek bir JSON şemasında normalleştirin ve bir MQTT broker'a yayınlayın. Bu, panoları, OEE hesaplayıcılarını ve bakım araçlarını kontrolör markalarından bağımsız tutar.

Topic ve Payload Tasarımı

Durum için makine başına bir topic, daha yavaş değişen iş verileri için bir başka topic kullanın:

connectmq/demo/<your-id>/plant1/machining/cnc01/state
connectmq/demo/<your-id>/plant1/machining/cnc01/job
{
  "execution": "ACTIVE",
  "mode": "AUTOMATIC",
  "spindle_load": 42.5,
  "spindle_speed": 8000,
  "part_count": 117,
  "alarm": null,
  "ts": "2026-10-16T09:14:05Z"
}

Durum mesajını retained olarak yayınlayın; böylece her yeni abone her makinenin mevcut durumunu hemen öğrenir. Atölyede zaten Sparkplug B çalıştırıyorsanız ConnectMQ bu payload'ları çözüp connectmq/factory1/production/line1/cnc1/telemetry gibi ISA-95 topic'lerine yeniden yayınlayabilir; böylece iki konvansiyon bir arada var olabilir.

MTConnect'ten MQTT'ye Gateway Oluşturun

Bu Python gateway'i her saniye bir MTConnect agent'ın /current uç noktasını sorgular, yapılandırdığınız veri öğelerini çıkarır ve yalnızca bir şey değiştiğinde, ayrıca her 30 saniyede bir heartbeat olarak mesaj yayınlar. Veri öğesi ID'lerinizi bulmak için bir tarayıcıda http://<agent>:5000/probe adresini açın.

import json
import time
import urllib.request
import xml.etree.ElementTree as ET
from datetime import datetime, timezone

import paho.mqtt.client as mqtt

AGENT_URL = "http://192.168.10.50:5000/current"
TOPIC = "connectmq/demo/k2m8q4/plant1/machining/cnc01/state"

# JSON alan adlarını /probe çıktısındaki dataItemId değerleriyle eşleyin
DATA_ITEMS = {
    "execution": "exec",
    "mode": "mode",
    "program": "pgm",
    "spindle_load": "Sload",
    "spindle_speed": "Srpm",
    "part_count": "pc",
}
NUMERIC = {"spindle_load", "spindle_speed", "part_count"}


def read_agent():
    with urllib.request.urlopen(AGENT_URL, timeout=3) as resp:
        root = ET.fromstring(resp.read())
    by_id = {el.get("dataItemId"): el.text for el in root.iter() if el.get("dataItemId")}
    result = {}
    for field, item_id in DATA_ITEMS.items():
        value = by_id.get(item_id)
        if value in (None, "UNAVAILABLE"):
            result[field] = None
        elif field in NUMERIC:
            result[field] = float(value)
        else:
            result[field] = value
    return result


def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code)


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="cnc01-gw-k2m8q4")
client.on_connect = on_connect
client.will_set(TOPIC, json.dumps({"execution": "OFFLINE"}), qos=1, retain=True)
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_start()

def fingerprint(data):
    # Sürekli değişen alanları yok say; yalnızca gerçek durum değişimlerini yayınla
    return {k: v for k, v in data.items() if k not in ("spindle_load", "spindle_speed")}


last_fp, last_time = None, 0.0
while True:
    try:
        data = read_agent()
    except Exception as exc:  # agent kapalı veya ağ sorunu
        data = {"execution": "UNAVAILABLE", "error": str(exc)}
    fp = fingerprint(data)
    if fp != last_fp or time.time() - last_time > 30:
        data["ts"] = datetime.now(timezone.utc).isoformat()
        client.publish(TOPIC, json.dumps(data), qos=1, retain=True)
        last_fp, last_time = fp, time.time()
    time.sleep(1)

İki ayrıntı önemlidir. Birincisi, iş mili yükü ve devri sürekli dalgalandığı için değişim kontrolünün dışında tutulur; yine de her durum değişimi ve heartbeat ile birlikte gönderilir. Takım aşınması için bir yük trendine ihtiyacınız varsa bunu sabit bir hızla ayrı bir load topic'inde yayınlayın. İkincisi, Last Will mesajı gateway çökerse makineyi OFFLINE olarak işaretler; böylece ölü bir gateway asla çalışan bir makineyle karıştırılmaz.

Çıktıyı herhangi bir terminalden izleyin:

mosquitto_sub -h broker.connectmq.com -p 1883 -i cnc-viewer-k2m8q4 -t "connectmq/demo/k2m8q4/plant1/machining/+/state" -v

Durumu Kullanım Oranına Dönüştürmek

Kullanım oranı, verimli durumda geçen sürenin mevcut süreye bölümüdür. Durumları açıkça tanımlayın, çünkü "çalışıyor" farklı kişiler için farklı anlamlara gelir:

  1. Kesim: Çalışma durumu ACTIVE, mod AUTOMATIC. Verimli süre budur.
  2. Program denemesi veya ayar: MANUAL veya MDI modunda ACTIVE çalışma ya da ayar adlandırma kuralınıza uyan bir program adı.
  3. Hazır ama boşta: Alarm olmadan READY veya STOPPED. Genellikle operatör, malzeme veya muayene bekleniyordur.
  4. İlerleme bekletme veya kesinti: Operatör çevrimi duraklatmıştır. Çoğu zaman bir kalite kontrolü veya talaş sorunudur.
  5. Alarm: Aktif bir alarm. Bakım takibi için planlanır.
  6. Çevrimdışı: Veri yok. Boşta olarak değil, bilinmiyor olarak değerlendirin.

Her durum geçişini zaman damgasıyla saklayan bir abone, vardiya başına durum bazında süreleri toplayabilir. Aynı olay akışı makine duruş takibini besler; parça sayılarını ve ideal çevrim sürelerini eklediğinizde ise OEE'ye dönüşür. Her makine türü için genel desen makine durum izleme yazısında anlatılıyor.

CNC Veri Toplamadaki Tuzaklar

  • READY'yi çalışıyor saymak. Programı yüklenmiş ve kapısı kapalı bir makine üretim yapmıyordur. Yalnızca AUTOMATIC modda ACTIVE kesim olarak sayılır.
  • Parça sayacı sıfırlamaları. Operatörler iş değişiminde sayacı sık sık sıfırlar. Sıfırlamaların açıklanabilmesi için her sayımla birlikte program adını kaydedin ve üretimi mutlak değerlerden değil, artışlardan hesaplayın.
  • Saat kayması. Zaman damgasını panoda değil, senkronize saatli (NTP) gateway'de basın; aksi halde durum süreleri makineler arasında yanlış olur.
  • Çok hızlı sorgulama. Durum için /current uç noktasını saniyede bir sorgulamak fazlasıyla yeterlidir. Daha hızlı sorgulama, kullanım oranı doğruluğunu artırmadan agent üzerindeki yükü artırır.
  • Ağ segmentasyonu. Makine ağları çoğu zaman izoledir. Gateway'i bir bacağı makine ağında olan ve broker'a 8883 portu üzerinden yalnızca giden bağlantı kuran bir PC'de çalıştırın; böylece internetten hiçbir şey kontrolörlere ulaşamaz.

Tek Makineden Tüm Atölyeye

En çok planlama tartışmasına yol açan iki ya da üç makineyle başlayın. Rakamlar operatörlerin gördüğüyle örtüştüğünde aynı payload şemasıyla atölyenin geri kalanına yaygınlaştırın. Tüm makineler tek bir topic ağacına yayın yaptığı için plant1/machining/+/state gibi wildcard içeren tek bir abonelik atölye panosunu besler; üretim hattı izleme panosu eğitimi bunun Grafana ile nasıl kurulacağını gösterir.

Üretim için genel broker'dan özel bir broker'a geçin. ConnectMQ gibi barındırılan bir MQTT broker, her gateway'e 8883 portunda TLS üzerinden kendi kimlik bilgilerini verir; portalın cihaz görünümü ise makineleri ISA-95 seviyesine göre gruplar, böylece hangi gateway'lerin bağlı olduğunu bir bakışta görebilirsiniz. Portaldaki eşik tabanlı uyarı kuralları, örneğin bir limitin üzerindeki iş mili yükünü işaretleyebilir. Önce hareketli parçaları anlamak istiyorsanız MQTT broker'ın ne olduğunu okuyun; daha geniş bir resim için akıllı üretim rehberine bakın.

CNC Makinelerinizi ConnectMQ ile İzlemeye Başlayın

app.connectmq.com adresinde kaydolun, kredi kartı gerekmeden ücretsiz Serverless planında bir broker oluşturun ve yukarıdaki gateway'deki host, port ve kimlik bilgilerini değiştirin. İlk makineniz bir saat içinde kullanım oranı verisi göndermeye başlayabilir.

Sık Sorulan Sorular

Bir CNC makinesini izlemek için MTConnect gerekli mi?

Hayır. MTConnect pratik ve üreticiden bağımsızdır, ancak OPC UA, üretici kütüphaneleri veya iş mili motorundaki basit bir akım sensörü de işe yarar. MQTT tarafı aynı kalır.

Akım sensöründen elde edilen kullanım oranı ne kadar doğrudur?

İş milinin ne zaman döndüğünü güvenilir şekilde söyler; bu da kesim için iyi bir göstergedir. Programı veya modu söyleyemez, bu yüzden ayar ve boşta kesim üretim gibi görünebilir.

CNC izleme ne kadar bant genişliği kullanır?

Çok az. Durum mesajları birkaç yüz bayttır ve değişimde artı bir heartbeat ile gönderilir; bu yüzden büyük bir atölye bile yalnızca mütevazı bir mesaj hızı üretir.

Ağ portu olmayan eski makineleri izleyebilir miyim?

Evet. Cycle-start veya çevrimde lambasını bir ESP32'nin ya da küçük bir PLC'nin dijital girişine bağlayın veya bir akım trafosu kullanın ve çalışma durumunu MQTT üzerinden yayınlayın.

İlgili yazılar

OEE vs TEEP vs OOE: Hangi Metriği Kullanmalısınız?

OEE, OOE ve TEEP aynı performans ve kalite faktörlerini paylaşır, ancak farklı zaman tabanlarına göre ölçer. Bu karşılaştırma tek bir örnek üzerinden ilerliyor ve her metriğin ihtiyaç duyduğu MQTT sinyallerini listeliyor.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.