Akıllı Üretim

MES MQTT Entegrasyonu: Olay Odaklı İş Emirleri, Sayımlar ve Kalite

Kırılgan noktadan noktaya MES arayüzlerini olay odaklı bir MQTT ad alanıyla değiştirin. İş emirleri, sayımlar ve kalite sonuçları için topic düzenini, payload sözleşmelerini ve çalışan bir adaptörü öğrenin.

Makinelerin, bir MQTT broker'ın ve bir üretim yürütme sisteminin iş emri ve sayım alışverişi yaptığı MES MQTT entegrasyonu şeması
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

MES MQTT entegrasyonu, bir üretim yürütme sistemi (MES) ile üretim sahası arasındaki özel arayüz yığınını tek bir olay odaklı ad alanıyla değiştirir. Bu rehber; iş emirleri, üretim sayımları ve kalite sonuçları için topic'lerin nasıl yapılandırılacağını, payload'ların neler içermesi gerektiğini ve bir MES'i MQTT broker'a bağlayan küçük bir adaptörün nasıl yazılacağını gösteriyor.

MES Entegrasyonu Neden Genellikle En Zor Kısımdır?

Bir üretim yürütme sistemi neyin, hangi ekipmanda, kim tarafından ve hangi sonuçla üretildiğini takip eder. Bunu yapabilmek için makinelerden veri alması ve geri talimat göndermesi gerekir. Geleneksel olarak bu iş noktadan noktaya bağlantılarla yapılır: burada bir OPC bağlantısı, orada her dakika sorgulanan bir veritabanı tablosu, bir hat PLC'sinin ortak klasöre bıraktığı bir CSV dosyası.

Her bağlantı tek başına çalışır, ancak bir araya geldiklerinde her fabrika mühendisinin tanıdığı sorunlar ortaya çıkar:

  • İkinci bir tüketici (bir OEE panosu, bir bakım sistemi) eklemek, aynı makineye yeni bir arayüz kurmak demektir.
  • Sorgulama (polling) gecikme ve yük getirir; bir sayım ancak son sorgu kadar günceldir.
  • MES yükseltildiğinde ya da değiştirildiğinde tüm arayüzler aynı anda bozulur.
  • Gerçekte hangi verinin aktığını tek bir yerden gören kimse yoktur.

Olay odaklı yaklaşım bu durumu tersine çevirir. Makineler ve ağ geçitleri olanı, olduğu anda yayınlar. MES ihtiyaç duyduğu olaylara abone olur ve serbest bırakılan bir iş emri gibi kendi kararlarını yayınlar. Diğer sistemler MES'e dokunmadan aynı olaylara abone olur. MES'in ERP ve SCADA'ya göre nerede durduğundan emin değilseniz önce MES, ERP ve SCADA karşılaştırmasını okuyun.

MES MQTT Entegrasyonu Nasıl Çalışır?

Merkezdeki parça, her katılımcının bir istemci olarak bağlandığı bir MQTT broker'dır. Kimse doğrudan bir başkasına bağlanmaz. MES ihtiyaçlarının çoğunu üç akış karşılar:

Akış Yön Örnek topic Tipik QoS
İş emri gönderimi MES'ten hatta acme/plant1/assembly/line2/mes/order/current 1, retained
Üretim sayımları Makineden MES'e acme/plant1/assembly/line2/cell3/count 1
Makine durumu Makineden MES'e acme/plant1/assembly/line2/cell3/state 1, retained
Kalite sonuçları Test istasyonundan MES'e acme/plant1/assembly/line2/qc1/result 1
İş emri onayı Hattan MES'e acme/plant1/assembly/line2/mes/order/ack 1

Topic yolu, Unified Namespace'in omurgası olan ISA-95 ekipman hiyerarşisini (kuruluş, tesis, alan, hat, hücre) izler. Bu adlandırmanın ayrıntıları Unified Namespace nasıl kurulur yazısında ele alınıyor.

MES trafiği için özellikle iki MQTT özelliği önemlidir:

  • Retained message'lar. Güncel iş emri ve güncel makine durumu retained olarak tutulur; böylece yeniden başlayan bir HMI, MES'e sormadan ne üretmesi gerektiğini anında bilir.
  • QoS 1. Sayımlar ve kalite sonuçları kaybolmamalıdır, bu yüzden en az bir kez teslimatla yayınlanır. Bu nedenle MES'in yinelenen mesajları ele alması gerekir; bu genellikle her yayıncı için bir sıra numarası tutularak yapılır.

Değişime Dayanan Payload Sözleşmeleri

Topic'ler bir olayın nereden geldiğini, payload'lar ise ne olduğunu söyler. Her olay türü için bir sözleşme üzerinde anlaşın ve onu sürümleyin. Bir MES'in güvenebileceği bir sayım olayı şöyle görünür:

{
  "schema": "count/v1",
  "ts": "2026-10-16T08:42:13.512Z",
  "seq": 18233,
  "orderId": "WO-2026-04417",
  "material": "HSG-220-B",
  "good": 1,
  "scrap": 0,
  "source": "cell3-plc"
}

Birkaç kural bu sözleşmeleri sağlam tutar:

  1. Artışları ya da toplamları gönderin, ikisini birden değil. Sıra numaralı artışların tekilleştirilmesi kolaydır; toplamlar ise bir boşluktan sonra kolayca toparlanır. Her sinyal için birini seçin ve belgeleyin.
  2. İş emri kimliğini taşıyın. Hat, aktif iş emrini retained iş emri topic'inden zaten bilir; bu yüzden onu her olaya eklemek MES'i bir sorgudan kurtarır ve iş emri değişiminde sayımların yanlış emre yazılmasını önler.
  3. Zaman damgasını kaynakta, UTC ve milisaniye hassasiyetiyle ekleyin.
  4. Bir şema alanı ekleyin, böylece tüketiciler count/v2 sürümünü bozulmadan işleyebilir.

Python ile Çalışan Bir MES Adaptörü

MES ürünlerinin çoğu MQTT yerine bir REST API ya da veritabanı arayüzü sunar. Küçük bir adaptör ikisi arasında köprü kurar: saha olaylarına abone olup MES'i çağırır ve MES kararlarını ad alanına geri yayınlar. Aşağıdaki örnek paho-mqtt 2.x ve kendi MES API çağrınızla değiştireceğiniz yer tutucu bir post_to_mes fonksiyonu kullanıyor.

import json
import uuid

import paho.mqtt.client as mqtt

LINE = "connectmq/demo/mes-5c21/line2"   # üretimde tam ISA-95 yolunu kullanın
last_seq = {}

def post_to_mes(kind, event):
    # MES API'nize yapılan bir çağrıyla değiştirin, ör. requests.post(...)
    print(f"MES <- {kind}: {event}")

def release_order(client, order_id, material, quantity):
    order = {"schema": "order/v1", "orderId": order_id,
             "material": material, "quantity": quantity, "status": "RELEASED"}
    client.publish(f"{LINE}/mes/order/current", json.dumps(order), qos=1, retain=True)

def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code)
    client.subscribe(f"{LINE}/+/count", qos=1)
    client.subscribe(f"{LINE}/+/state", qos=1)
    client.subscribe(f"{LINE}/+/result", qos=1)
    client.subscribe(f"{LINE}/mes/order/ack", qos=1)
    release_order(client, "WO-2026-04417", "HSG-220-B", 500)

def on_message(client, userdata, msg):
    event = json.loads(msg.payload)
    kind = msg.topic.rsplit("/", 1)[-1]
    source = msg.topic.split("/")[-2]
    seq = event.get("seq")
    if seq is not None:
        key = (source, kind)
        if seq <= last_seq.get(key, -1):
            return  # QoS 1 yeniden teslimatından gelen kopya
        last_seq[key] = seq
    post_to_mes(kind, {"source": source, **event})

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
                     client_id=f"mes-adapter-{uuid.uuid4().hex[:8]}")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_forever()

Komut satırından bir sayım yayınlayarak adaptörü herkese açık MQTT test broker'ı üzerinde test edin:

mosquitto_pub -h broker.connectmq.com -p 1883 -i cell3-test-5c21 -q 1 \
  -t "connectmq/demo/mes-5c21/line2/cell3/count" \
  -m '{"schema":"count/v1","seq":1,"orderId":"WO-2026-04417","good":1,"scrap":0}'

Aynı mesajı iki kez yayınlayın; adaptör onu yalnızca bir kez iletir. Herkese açık broker'ın herkes tarafından okunabildiğini unutmayın; bu yüzden yalnızca uydurma iş emri numaraları kullanın.

Üretimde tekilleştirme durumunu (last_seq) kalıcı bir yerde saklayın, adaptörü yeniden başlarken kuyrukta biriken olayları alabilmesi için kalıcı bir oturumla (persistent session) çalıştırın ve ona kendi kimlik bilgilerini verin.

Entegrasyon Desenleri ve Tuzaklar

Komutların onaya ihtiyacı vardır. MES bir iş emrini serbest bıraktığında hat, iş emri kimliği ve durumuyla (kabul edildi, reddedildi, başladı) bir onay yayınlamalıdır. Bu olmadan MES, emrin ulaşıp ulaşmadığını bilemez. Bir yanıt topic'i ve korelasyon verisi kullanan MQTT 5 istek/yanıt mekanizması bu deseni resmileştirir.

MES'i makine döngüsünün dışında tutun. Kilitlemeler (interlock) ve güvenlik mantığı PLC'de kalır. MQTT olayları ve talimatları taşır; katı gerçek zamanlı kontrolü değil.

MES'in ad alanının kendisine dönüşmesine izin vermeyin. Her tüketici veriyi MES üzerinden okuyorsa noktadan noktaya entegrasyona geri dönmüş olursunuz. Ham olayları broker'a yayınlayın ve MES'i, saha verisi toplama araçları, OEE panoları ve historian'larla birlikte birçok aboneden biri olarak konumlandırın.

İş emri değişimlerini planlayın. Sayımların yanlış emre yazılmasının çoğu, iş emri değişiminin etrafındaki saniyelerde olur. Hattın her sayıma iş emri kimliğini eklemesini sağlayın ve MES'in bir emri yalnızca açık bir bitiş olayı aldıktan sonra kapatmasını sağlayın.

Tuzak Etkisi Önlem
Sıra numarası yok Yeniden bağlanmalardan sonra çift sayım Her yayıncı için seq, adaptörde tekilleştirme
İş emri retained değil HMI yeniden başladıktan sonra hiçbir şey göstermez Güncel emri retain ile yayınlayın
Paylaşılan client ID'ler Adaptörler birbirini bağlantıdan düşürür Her örnek için benzersiz ID
Tek bir fabrika bilgisayarında broker Bilgisayar durunca entegrasyon da durur Yönetilen bir broker kullanın

Ad Alanını Yönetilen Bir Broker Üzerinde Çalıştırmak

MES, ağ geçitleri ve panolar broker'a bağımlı hale geldiğinde, broker'ın erişilebilirliği ve güvenliği entegrasyonunuzun erişilebilirliği ve güvenliği olur. Tam yönetilen bir MQTT hizmeti, bir broker'ı kendiniz yamalama, sertifikalarını yönetme ve izleme yükünü ortadan kaldırır. ConnectMQ; TLS (8883) ve güvenli WebSocket (8084) üzerinden MQTT 3.1.1 ve 5.0, client ID'lere bağlı kimlik bilgileri ve canlı topic gezgini ile ISA-95 seviyelerine göre düzenlenmiş bir cihaz görünümü sunan bir portal sağlar; bu da sayımların ve durumların doğru hat ve hücre altında geldiğini doğrulamayı kolaylaştırır.

Makineleriniz Sparkplug B konuşuyorsa ConnectMQ bunu çözümleyip veriyi okunabilir ISA-95 topic'lerine yeniden yayınlayabilir; böylece MES adaptörü Protobuf yerine düz JSON yollarına abone olur. Daha geniş mimari tablo için akıllı üretim rehberine ve bir bulut MQTT broker'ın neler sunduğuna dair genel bakışa göz atın.

MES'inizi ConnectMQ'ya Bağlayın

app.connectmq.com adresinden kaydolun, kredi kartı gerektirmeyen ücretsiz Serverless planında bir broker oluşturun ve yukarıdaki adaptörü portaldan alacağınız YOUR_USERNAME, YOUR_PASSWORD ve YOUR_CLIENT_ID değerleriyle ona yönlendirin.

Sık Sorulan Sorular

MES'imin yerel MQTT desteğine ihtiyacı var mı?

Hayır. Birçok entegrasyon, bir tarafta MQTT, diğer tarafta MES API'si ya da veritabanıyla konuşan küçük bir adaptör kullanır. Yerel destek yalnızca adaptöre olan ihtiyacı ortadan kaldırır.

MES iş emirlerini retained message olarak mı yayınlamalı?

Evet. Hat başına güncel iş emri bir olay değil bir durumdur; bu yüzden onu retained olarak tutmak, sonradan bağlanan her istemcinin neyin çalıştığını bilmesini sağlar. İş emri geçmişi MES veritabanına aittir.

QoS 1 ile çift sayımı nasıl önlerim?

Her sayım olayına yayıncı başına bir sıra numarası ekleyin ve adaptörün daha önce işlediği her sıra numarasını atın. Alternatif olarak kümülatif toplamlar yayınlayıp farkları MES tarafında hesaplayabilirsiniz.

MQTT, MES trafiği için yeterince güvenli mi?

TLS, istemci başına benzersiz kimlik bilgileri ve client ID bağlamasını zorunlu kılan bir broker ile MQTT, fabrikadan buluta MES trafiği için uygundur. Güvenlik ve kilitleme mantığını PLC'de tutun.

İ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.