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:
- Kesim: Çalışma durumu ACTIVE, mod AUTOMATIC. Verimli süre budur.
- Program denemesi veya ayar: MANUAL veya MDI modunda ACTIVE çalışma ya da ayar adlandırma kuralınıza uyan bir program adı.
- Hazır ama boşta: Alarm olmadan READY veya STOPPED. Genellikle operatör, malzeme veya muayene bekleniyordur.
- İlerleme bekletme veya kesinti: Operatör çevrimi duraklatmıştır. Çoğu zaman bir kalite kontrolü veya talaş sorunudur.
- Alarm: Aktif bir alarm. Bakım takibi için planlanır.
- Ç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
/currentuç 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.



