Akıllı Üretim

MQTT, Grafana ve Node-RED ile Üretim Hattı İzleme Paneli

Adım adım bir üretim hattı izleme paneli kurulumu: istasyonlar durum ve sayımları MQTT üzerinden yayınlar, Telegraf bunları saklar, Grafana veya Node-RED de canlı bir hat görünümüne dönüştürür.

MQTT verileriyle beslenen istasyon durum kutucukları, parça sayaçları ve bir OEE göstergesi içeren üretim hattı izleme paneli
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

Bir üretim hattı izleme paneli, ham makine sinyallerini amirlere hattın çalışıp çalışmadığını, kaç sağlam parça ürettiğini ve nerede zaman kaybettiğini söyleyen tek bir ekrana dönüştürür. Bu eğitimde istasyon verilerini MQTT üzerinden yayınlayacak, Telegraf ve InfluxDB ile saklayacak ve paneli Grafana'da kuracaksınız; küçük hatlar için daha hafif bir Node-RED alternatifi de var. Her şey gerçek bir broker'a karşı çalıştığı için adımları bir dizüstü bilgisayardan takip edebilirsiniz.

İyi Bir Üretim Hattı Paneli Neleri Gösterir?

Herhangi bir bağlantı yapmadan önce ekranın neyi yanıtlaması gerektiğine karar verin. Çoğu hat paneli, insanların vardiya sırasında gerçekten sorduğu bir avuç soru yerine PLC'nin sunduğu her tag'i gösterdiği için başarısız olur.

Sahadaki soru İhtiyacınız olan sinyal Tipik bileşen
Her istasyon şu anda çalışıyor mu? state (RUNNING, IDLE, DOWN, SETUP) Renk kodlu durum kutucukları
Vardiya planına uyuyor muyuz? Sağlam sayısı, plan sayısı Büyük rakam ve ilerleme çubuğu
Hurda nereden geliyor? İstasyon başına ret sayısı İstasyona göre çubuk grafik
Darboğaz hangi istasyon? Gerçek hız ve ideal hız Hız farkına göre sıralı tablo
Hattın genel sağlığı nasıl? Kullanılabilirlik, performans, kalite Üç alt çubuklu OEE göstergesi
Son bir saatte bizi ne durdurdu? Zaman damgalı durum değişiklikleri Durum zaman çizelgesi

İlk sürümü bu altı soruyla sınırlı tutun. Amirler sayılara güvendikten sonra daha fazlasını isteyecektir; güven de sayımların sahada gördükleriyle eşleşmesinden gelir.

Mimari: İstasyondan Ekrana

Veri yolu kısadır ve her parça değiştirilebilir:

  1. Her istasyon (PLC ağ geçidi, uç PC veya mikrodenetleyici), durumu her değiştiğinde ve en az birkaç saniyede bir MQTT broker'a küçük bir JSON durum mesajı yayınlar.
  2. Telegraf hattın topic'lerine abone olur ve her mesajı InfluxDB'ye zaman serisi olarak yazar.
  3. Grafana InfluxDB'yi sorgular ve panelleri çizer.
  4. İsteğe bağlı olarak bir Node-RED akışı aynı topic'lere abone olur ve hattın yanındaki bir televizyonda hafif bir panel çalıştırır.

Broker, istasyonları tüketicilerden ayıran merkezdir. Bu role yeniyseniz bir MQTT broker'ın ne yaptığını anlatan yazı temelleri kapsıyor. Her tüketici bağımsız olarak abone olduğu için daha sonra istasyonlara dokunmadan bir historian, bir andon panosu veya bir OEE hesaplayıcısı ekleyebilirsiniz.

Adım 1: Topic Yapısını Tasarlayın

Öngörülebilir bir topic ağacı ileride saatler kazandırır. Panelin wildcard'larla hat ve istasyona göre filtreleyebilmesi için ISA-95 tarzı bir hiyerarşi kullanın:

connectmq/demo/<your-id>/line1/<station>/status

Örneğin connectmq/demo/a7f3k9/line1/filler/status. Payload tek bir JSON nesnesidir:

{
  "state": "RUNNING",
  "good": 1842,
  "reject": 17,
  "rate": 58.5,
  "ideal_rate": 60,
  "ts": 1792137600
}

Sayımlar vardiya boyunca kümülatiftir; bu da verileri sağlam kılar: bir mesaj kaybolsa bile bir sonraki yine doğru toplamı taşır. Hızlar dakikadaki parça sayısıdır. Birden fazla tesise yayıldığınızda hattın önüne kurum ve saha seviyesi ekleyin.

Adım 2: İstasyonları Simüle Edin

Gerçek hat bağlanmadan önce paneli kurmak için bu Python simülatörünü çalıştırın. paho-mqtt 2.x ve broker.connectmq.com adresindeki ücretsiz genel MQTT broker'ı kullanır. Genel alan herkes tarafından okunabildiği için a7f3k9 değerini kendi rastgele kimliğinizle değiştirin.

import json
import random
import time

import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo/a7f3k9/line1"
STATIONS = {"filler": 60, "capper": 62, "labeler": 65, "packer": 58}

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="line1-sim-a7f3k9")
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_start()

counters = {name: {"good": 0, "reject": 0, "state": "RUNNING"} for name in STATIONS}

try:
    while True:
        for name, ideal in STATIONS.items():
            c = counters[name]
            # Occasionally change state to make the dashboard interesting
            roll = random.random()
            if c["state"] == "RUNNING" and roll < 0.03:
                c["state"] = random.choice(["DOWN", "IDLE"])
            elif c["state"] != "RUNNING" and roll < 0.25:
                c["state"] = "RUNNING"

            rate = 0.0
            if c["state"] == "RUNNING":
                rate = round(ideal * random.uniform(0.85, 1.0), 1)
                made = int(rate / 12)  # roughly 5 seconds of production
                rejects = 1 if random.random() < 0.04 else 0
                c["good"] += made - rejects
                c["reject"] += rejects

            payload = {
                "state": c["state"],
                "good": c["good"],
                "reject": c["reject"],
                "rate": rate,
                "ideal_rate": ideal,
                "ts": int(time.time()),
            }
            client.publish(f"{PREFIX}/{name}/status", json.dumps(payload), qos=1, retain=True)
        time.sleep(5)
except KeyboardInterrupt:
    client.loop_stop()
    client.disconnect()

Her beş saniyede yayın yapan dört istasyon, genel broker'ın istemci başına saniyede 10 mesaj sınırının oldukça altında kalır. Retain bayrağı, vardiya ortasında bağlanan bir panelin her istasyonun bilinen son durumunu anında alması anlamına gelir. Akışı bir terminalden doğrulayın:

mosquitto_sub -h broker.connectmq.com -p 1883 -i viewer-a7f3k9 -t "connectmq/demo/a7f3k9/line1/+/status" -v

Adım 3: Verileri Telegraf ve InfluxDB ile Saklayın

Telegraf'ın MQTT tüketicisi her mesajı bir InfluxDB noktasına dönüştürür ve topic ayrıştırma, hat ile istasyonu tag olarak çıkarır. Bunu telegraf.conf olarak kaydedin:

[agent]
  interval = "5s"
  flush_interval = "5s"

[[inputs.mqtt_consumer]]
  servers = ["tcp://broker.connectmq.com:1883"]
  topics = ["connectmq/demo/a7f3k9/line1/+/status"]
  client_id = "telegraf-a7f3k9"
  qos = 1
  data_format = "json"
  json_string_fields = ["state"]
  json_time_key = "ts"
  json_time_format = "unix"

  [[inputs.mqtt_consumer.topic_parsing]]
    topic = "connectmq/demo/+/+/+/status"
    measurement = "_/_/_/_/_/measurement"
    tags = "_/_/_/line/station/_"

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "YOUR_INFLUX_TOKEN"
  organization = "plant"
  bucket = "line"

Her nokta, line=line1 ve station=filler tag'leri ile state, good, reject, rate ve ideal_rate alanlarıyla status ölçümüne düşer. Üretim için sunucuyu ssl://broker.connectmq.com:8883 olarak değiştirin ve username = "YOUR_USERNAME", password = "YOUR_PASSWORD" ile size verilen client_id değerini ekleyin. Diğer seçenekler Telegraf MQTT consumer rehberinde ele alınıyor.

Adım 4: Üretim Hattı İzleme Panelini Grafana'da Kurun

Grafana'da InfluxDB'yi veri kaynağı olarak ekleyin (Flux sorgu dili) ve şu panelleri oluşturun.

İstasyon durum kutucukları. Değer eşlemeleriyle bir Stat paneli kullanın: RUNNING yeşil, IDLE sarı, DOWN kırmızı, SETUP mavi.

from(bucket: "line")
  |> range(start: -5m)
  |> filter(fn: (r) => r._measurement == "status" and r._field == "state")
  |> last()
  |> group(columns: ["station"])

Bu vardiyadaki sağlam parçalar. Sayımlar kümülatif olduğu için son değer toplamdır:

from(bucket: "line")
  |> range(start: today())
  |> filter(fn: (r) => r._measurement == "status" and r._field == "good" and r.station == "packer")
  |> last()

Hat çıktısı olarak hattaki son istasyonu (burada paketleyici) kullanın; her istasyonda saymak çift sayıma yol açar.

Gerçek hız ve ideal hız. İstasyon başına rate ve ideal_rate gösteren bir Time series paneli darboğazı bir bakışta gösterir: çalışırken gerçek hızı idealinin en çok altında kalan istasyon.

Durum zaman çizelgesi. state alanıyla beslenen Grafana State timeline paneli, vardiya boyunca her istasyon için duruma göre renklendirilmiş bir çubuk sunar; hattın ne zaman ve nerede durduğunu görmenin en hızlı yolu budur.

OEE göstergesi. İlk sürüm için OEE'yi ayrı bir abonede hesaplayıp sonucu line1/oee topic'ine yayınlayın, ardından bu topic'i grafiğe dökün. Hesaplama OEE nasıl hesaplanır yazısında açıklanıyor; gerçek zamanlı OEE izleme eğitimi ise hazır bir abone içeriyor. Hesaplamayı Grafana dışında bir kez yapmak, her ekranın aynı sayıyı göstermesini sağlar.

Tek Bir Hat İçin Node-RED Alternatifi

Yalnızca bir hattın yanında bir televizyona ihtiyacınız varsa ve zaman serisi veritabanı istemiyorsanız Node-RED daha hızlıdır. Sunucu broker.connectmq.com ve port 1883 (üretimde TLS ve kimlik bilgilerinizle 8883) olacak şekilde bir mqtt-broker yapılandırma düğümü ayarlayın, ardından şunları ekleyin:

  1. connectmq/demo/a7f3k9/line1/+/status topic'ine abone olan, çıktısı ayrıştırılmış JSON nesnesi olarak ayarlanmış bir mqtt in düğümü.
  2. İstasyon adını msg.topic.split("/")[4] ile çıkarıp doğru bileşene yönlendiren bir function düğümü.
  3. Durum için Dashboard 2.0 ui-text bileşenleri, hız için ui-gauge bileşenleri ve sağlam sayımlar için bir ui-chart.

Bunun bedeli geçmiş verilerdir: Node-RED anı iyi gösterir ama bir historian değildir. Birçok tesis ikisini birlikte çalıştırır; hat ekranında Node-RED, vardiya değerlendirmesinde Grafana. Node-RED OEE paneli yazısı bu yaklaşımı daha ileri götürüyor.

Yaygın Tuzaklar ve Çözümleri

  • Sayımlar vardiya ortasında sıfırlanıyor. Bir PLC veya ağ geçidi yeniden başlatması sayacını temizler. Vardiya başlangıç değerini uçta saklayın ya da sıfırlamaların negatif üretim oluşturmaması için panelde nonNegative: true ile difference() kullanın.
  • Kutucuklar eskimiş RUNNING gösteriyor. Bir istasyon çevrimdışı olursa retained mesajı hâlâ RUNNING der. Kutucuğa ts alanını ekleyip 30 saniyeden eskiyse gri renklendirin veya OFFLINE yayınlayan bir MQTT Last Will mesajı kullanın.
  • Yinelenen client ID'ler. Aynı client ID'ye sahip iki Telegraf örneği birbirini sürekli düşürür. Her istemcinin benzersiz bir kimliğe ihtiyacı vardır.
  • Çok fazla panel. Ekran sahadaki televizyonda kaydırma gerektiriyorsa fazla kalabalıktır. Ayrıntıları bir alt detay paneline taşıyın.

Demodan Üretime Geçiş

Genel broker kurulum yapmak için mükemmeldir, ancak topic'leri herkese görünür. Gerçek bir hat için özel bir broker'a geçin: yönetilen bir MQTT broker bir sunucuyu yamalama ve ölçeklendirme işini ortadan kaldırır, bulut MQTT broker ise uzaktaki amirlerin ve genel merkezin aynı paneli görmesini sağlar. ConnectMQ ile broker'ı portalda oluşturur, bir kullanıcı adı, parola ve client ID alır ve simülatör, Telegraf ve Node-RED'de yalnızca bağlantı ayarlarını değiştirirsiniz. Portalın canlı topic gezgini, boş bir Grafana panelinde hata ayıklamaya başlamadan önce her istasyonun yayın yaptığını doğrulamak için kullanışlıdır.

Ücretsiz Serverless plan 25'e kadar bağlantıyı destekler; bu da ağ geçidi, Telegraf ve birkaç paneliyle bir pilot hattı karşılar. Daha büyük tesisler, daha fazla hat devreye girdikçe genellikle ücretli Serverless plana veya bir Dedicated kümeye geçer. Daha geniş strateji için akıllı üretim rehberine bakın.

ConnectMQ ile Başlayın

app.connectmq.com adresinde kredi kartı gerekmeden Serverless planda ücretsiz bir broker oluşturun, istasyonlarınızı ve Telegraf'ı ona yönlendirin ve bugün özel altyapı üzerinde çalışan bir üretim hattı paneline sahip olun.

Sık Sorulan Sorular

Üretim hattı paneli için Grafana mı yoksa Node-RED mi kullanmalıyım?

Geçmiş verilere, vardiya karşılaştırmalarına ve çok sayıda kullanıcıya ihtiyacınız olduğunda Grafana'yı; tek bir hatta hızlı bir canlı ekran için Node-RED'i kullanın. Birçok ekip ikisini de aynı MQTT topic'lerinden çalıştırır.

İstasyonlar durumu ne sıklıkla yayınlamalı?

Her durum değişikliğinde hemen yayınlayın ve her 5 ila 10 saniyede bir heartbeat gönderin. Bu, broker'ı boğmadan kutucukları güncel tutar.

PLC'leri doğrudan bağlayabilir miyim?

Çoğu PLC, tag'leri okuyup broker'a JSON yayınlayan bir uç ağ geçidine (Node-RED, bir protokol dönüştürücü veya PLC'nin kendi MQTT istemcisi) ihtiyaç duyar. Veriler MQTT'ye ulaştıktan sonra panel, nereden geldiğiyle ilgilenmez.

Genel broker gerçek üretim verileri için güvenli mi?

Hayır. broker.connectmq.com'un genel alanı herkes tarafından okunabilir; bu yüzden onu yalnızca testler için kullanın ve üretim verilerini kimlik bilgileri ve TLS ile korunan özel bir ConnectMQ broker'a taşıyı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.