Akıllı Üretim

MQTT ile Gerçek Zamanlı SPC: Canlı Kontrol Grafikleri ve Kontrol Dışı Alarmları

Ölçümleri MQTT ile akıtın, Python'da X-bar ve R kontrol limitlerini hesaplayın, her yeni alt gruba Western Electric kurallarını uygulayın ve kontrol dışı noktaları saniyeler içinde canlı bir dashboard'da gösterin.

MQTT üzerinden akıtılan, üst ve alt kontrol limitleri ile vurgulanmış kontrol dışı noktalar içeren gerçek zamanlı SPC kontrol grafiği
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

Gerçek zamanlı SPC, istatistiksel proses kontrolü haftalık bir tablo çalışmasından üretim sahasında canlı bir sinyale dönüştürür. Bu rehberde ölçümleri MQTT ile akıtacak, Python'da X-bar ve R kontrol limitlerini hesaplayacak, her yeni alt grubu Western Electric kurallarına göre kontrol edecek ve kontrol dışı noktaları ölçümden saniyeler sonra canlı bir dashboard'da göstereceksiniz.

SPC Neden Gerçek Zamanlı Olmalı

İstatistiksel proses kontrol, normal ve ortak sebepli değişkenliği; aşınmış bir takım, yeni bir malzeme partisi veya sıcaklık değişimi gibi özel sebeplerden ayırır. Amacı, parçalar spesifikasyon dışına çıkmadan önce tepki vermektir. Grafikler vardiya sonunda elle girilen değerlerle güncellenirse bu amaç boşa çıkar: o zamana kadar proses saatlerce kaymış olabilir.

Üretimde IoT kalite kontrolü yazısında anlatıldığı gibi ölçümler zaten hat içi ölçüm cihazlarından akıyorsa beklemek için bir sebep yoktur. Küçük bir servis, kontrol grafiğini sürekli güncel tutabilir ve ilk kural ihlalinde operatörü uyarabilir.

Beş Dakikada SPC Temelleri

Bu rehber, küçük alt gruplar halinde (burada art arda beş parça) alınan ölçümlere uygun klasik X-bar ve R grafiğini kullanır.

Her alt grup için şunları hesaplarsınız:

  • X-bar: beş değerin ortalaması. Prosesin merkezini izler.
  • R: açıklık (maksimum eksi minimum). Kısa vadeli değişkenliği izler.

Kontrol altındaki ilk alt grup setinden (genellikle 20 ila 25) genel ortalamayı (X-double-bar) ve ortalama açıklığı (R-bar) hesaplarsınız; ardından alt grup boyutu 5 için standart sabitleri kullanarak kontrol limitlerini bulursunuz:

Grafik Merkez çizgisi Üst kontrol limiti Alt kontrol limiti
X-bar X-double-bar X-double-bar + A2 x R-bar X-double-bar - A2 x R-bar
R R-bar D4 x R-bar D3 x R-bar

n = 5 için sabitler A2 = 0.577, D3 = 0 ve D4 = 2.114'tür.

Kontrol limitleri spesifikasyondan değil, prosesin kendisinden gelir. Bir proses yeterli değilse kontrol altındayken bile spesifikasyon dışı parça üretebilir; ve her parça hâlâ tolerans içindeyken kontrol dışı olabilir. Gerçek zamanlı SPC'nin tam olarak karşılığını verdiği yer bu ikinci durumdur.

Kontrol dışı sinyal kuralları

Kural Sinyal Tipik sebep
1 Bir nokta kontrol limitinin dışında Ani özel sebep: yanlış ayar, kırık takım
2 Art arda üç noktadan ikisi aynı tarafta 2 sigma dışında Başlayan bir kayma
3 Art arda beş noktadan dördü aynı tarafta 1 sigma dışında Daha küçük, kalıcı bir kayma
4 Art arda sekiz nokta merkez çizgisinin aynı tarafında Proses ortalaması değişmiş

Bunlar Western Electric kurallarıdır. Dördünü birden uygulamak hassasiyeti artırır ama yanlış alarm oranını da yükseltir; bu yüzden birçok tesis kural 1 ve 4 ile başlar.

Mimari

gauge / simulator --> .../station40/measurement --> MQTT broker
                                                       |
                                    SPC service (Python) subscribes
                                                       |
             .../station40/spc/limits (retained)  +  .../station40/spc/point
                                                       |
                                       live dashboard subscribes (WSS)

Bu rehberde her şey broker.connectmq.com adresindeki genel MQTT test broker'ında çalışır. Verilerinizin başkalarınınkiyle karışmaması için rastgele bir kimlik seçin ve her topic'te kullanın.

Adım 1: Bir Ölçüm İstasyonunu Simüle Edin

Henüz bağlı bir ölçüm cihazınız yoksa bu simülatör saniyede iki kez bir delik çapı yayınlar. 200 parçadan sonra, takım aşınması veya termal genleşmenin yol açtığı türden yavaş, yukarı yönlü bir kayma başlatır.

import json
import random
import time
from datetime import datetime, timezone
import paho.mqtt.client as mqtt

TOPIC = "connectmq/demo/3d9c57/line3/station40/measurement"
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="spc-sim-3d9c57")
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_start()

part = 0
while True:
    part += 1
    drift = max(0, part - 200) * 0.00004
    value = random.gauss(22.000 + drift, 0.003)
    msg = {"ts": datetime.now(timezone.utc).isoformat(timespec="milliseconds"),
           "serial": f"A3-{part:06d}", "value": round(value, 4)}
    client.publish(TOPIC, json.dumps(msg), qos=1)
    time.sleep(0.5)

Adım 2: Gerçek Zamanlı SPC Servisi

Servis beşli alt gruplar toplar, kontrol limitlerini hesaplamak için ilk 25 alt grubu kullanır (Faz I), limitleri retained bir mesaj olarak yayınlar ve ardından her yeni alt grubu kurallara göre değerlendirir (Faz II). Değerlendirilen her alt grup, varsa ihlallerle birlikte bir nokta olarak yayınlanır.

import json
import statistics
from collections import deque
import paho.mqtt.client as mqtt

BASE = "connectmq/demo/3d9c57/line3/station40"
N = 5
PHASE1_SUBGROUPS = 25
A2, D3, D4 = 0.577, 0.0, 2.114

buffer = []
phase1 = []
limits = None
history = deque(maxlen=8)  # son X-bar değerleri

def zone(x):
    sigma = (limits["ucl_x"] - limits["cl_x"]) / 3
    return (x - limits["cl_x"]) / sigma

def check_rules(xbar, r):
    v = []
    if not limits["lcl_x"] <= xbar <= limits["ucl_x"]:
        v.append("rule1_xbar")
    if r > limits["ucl_r"]:
        v.append("rule1_range")
    z = [zone(x) for x in history]
    for side in (1, -1):
        if len(z) >= 3 and sum(1 for s in z[-3:] if s * side > 2) >= 2:
            v.append("rule2")
        if len(z) >= 5 and sum(1 for s in z[-5:] if s * side > 1) >= 4:
            v.append("rule3")
        if len(z) == 8 and all(s * side > 0 for s in z):
            v.append("rule4")
    return sorted(set(v))

def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(f"{BASE}/measurement", qos=1)

def on_message(client, userdata, msg):
    global limits
    buffer.append(json.loads(msg.payload))
    if len(buffer) < N:
        return
    values = [m["value"] for m in buffer]
    serials = [buffer[0]["serial"], buffer[-1]["serial"]]
    buffer.clear()
    xbar, r = statistics.fmean(values), max(values) - min(values)

    if limits is None:
        phase1.append((xbar, r))
        if len(phase1) == PHASE1_SUBGROUPS:
            xbb = statistics.fmean(x for x, _ in phase1)
            rbar = statistics.fmean(rr for _, rr in phase1)
            limits = {"cl_x": xbb, "ucl_x": xbb + A2 * rbar, "lcl_x": xbb - A2 * rbar,
                      "cl_r": rbar, "ucl_r": D4 * rbar, "lcl_r": D3 * rbar, "n": N}
            client.publish(f"{BASE}/spc/limits", json.dumps(limits), qos=1, retain=True)
            print("limits", limits)
        return

    history.append(xbar)
    violations = check_rules(xbar, r)
    point = {"xbar": round(xbar, 5), "range": round(r, 5),
             "serials": serials, "violations": violations,
             "in_control": not violations}
    client.publish(f"{BASE}/spc/point", json.dumps(point), qos=1)
    if violations:
        client.publish(f"{BASE}/spc/alarm", json.dumps(point), qos=1, retain=True)
        print("OUT OF CONTROL", point)

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="spc-service-3d9c57")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_forever()

Simülatörü ve servisi iki terminalde çalıştırın. 125 parçadan sonra (yaklaşık bir dakika) limitler görünür. 200. parçadan kısa süre sonra kayma başlar ve tipik olarak yaklaşık yüz parça içinde kural 4, kural 3 veya kural 2 ihlallerini görürsünüz; bu sırada her bir parça hâlâ tipik bir spesifikasyonun rahatça içindedir. SPC'nin vermek için tasarlandığı erken uyarı tam olarak budur.

Adım 3: Canlı Bir SPC Dashboard'u

MQTT destekli her dashboard spc/limits ve spc/point topic'lerine abone olabilir. Aşağıdaki MQTT.js betiği, bir tarayıcı dashboard'unun yapacağı gibi Secure WebSocket üzerinden bağlanan ve her alt grubu kontrol limitleri arasındaki bir konum olarak yazdırıp ihlalleri işaretleyen minimal bir canlı görünümdür. npm install mqtt ile kurun ve Node.js 18 veya üzeriyle çalıştırın.

const mqtt = require("mqtt");

const BASE = "connectmq/demo/3d9c57/line3/station40/spc";
const client = mqtt.connect("wss://broker.connectmq.com:8084/mqtt", {
  clientId: "spc-dash-3d9c57",
  protocolVersion: 5,
});

let limits = null;

client.on("connect", () => {
  client.subscribe([`${BASE}/limits`, `${BASE}/point`], { qos: 1 });
  console.log("connected, waiting for limits...");
});

client.on("message", (topic, payload) => {
  const data = JSON.parse(payload.toString());
  if (topic.endsWith("/limits")) {
    limits = data;
    console.log(`LCL ${data.lcl_x.toFixed(4)}  CL ${data.cl_x.toFixed(4)}  UCL ${data.ucl_x.toFixed(4)}`);
    return;
  }
  if (!limits) return;
  const width = 41;
  const span = limits.ucl_x - limits.lcl_x;
  let pos = Math.round(((data.xbar - limits.lcl_x) / span) * (width - 1));
  const outside = pos < 0 || pos > width - 1;
  pos = Math.min(Math.max(pos, 0), width - 1);
  const line = Array(width).fill(" ");
  line[Math.floor(width / 2)] = "|";
  line[pos] = outside ? "X" : data.in_control ? "o" : "!";
  const flags = data.violations.length ? data.violations.join(",") : "";
  console.log(`[${line.join("")}] ${data.xbar.toFixed(4)} R=${data.range.toFixed(4)} ${flags}`);
});

Limitler retained olduğu için dashboard, SPC servisinden çok sonra başlasa bile doğru şekilde çizer. Bir web sayfasında aynı kod MQTT.js'in tarayıcı derlemesiyle çalışır ve konsol yerine bir grafik kütüphanesini besler. Kuralları ayarlarken spc/point ve spc/alarm topic'lerini izlemek için ConnectMQ portalının canlı topic gezgini de kullanışlıdır.

Gerçek Zamanlı SPC Sinyallerine Tepki Vermek

Kimsenin üzerine bir şey yapmadığı bir grafik süsten ibarettir. Alarmları açmadan önce hat ekibiyle her sinyalin ne anlama geldiği ve ardından ne olacağı konusunda anlaşın. X-bar grafiğinde bir kural 1 ihlali genellikle son parçaların ve makine ayarının hemen kontrol edilmesini gerektirir. Merkez çizgisinin bir tarafında kural 4 dizisi, takım aşınması veya termal genleşme gibi kademeli bir kaymaya işaret eder; bu durumda tepki bir takım ofset ayarı veya daha erken bir takım değişimi olabilir. R grafiğinde bir kural 1 ihlali değişkenliğin arttığı anlamına gelir; bu da çoğu zaman gevşek bir fikstür, hasarlı bir takım kenarı veya tutarsız malzemeye işaret eder.

Bu tepkileri her karakteristik için kısa bir kontrol dışı eylem planına yazın ve grafiğin yanında gösterin. SPC sinyallerini takım aşınması izleme kaynaklı iş mili verileriyle ilişkilendirmek, kimse makineye dokunmadan önce bir kaymanın takımla ilgili olup olmadığını doğrulamanın iyi bir yoludur. Zamanla kaydedilen sebepler ve tepkiler sistemin en değerli parçası haline gelir; çünkü hangi özel sebeplerin tekrarladığını ve hangi proses iyileştirmelerinin onları kalıcı olarak ortadan kaldıracağını gösterirler.

Üretime Hazır Hale Getirmek

  1. Limitleri kalıcı hale getirin. Hesaplanan limitleri bir veritabanında veya yapılandırma dosyasında saklayın ve yalnızca bir proses değişikliğinden sonra bilinçli olarak yeniden hesaplayın; bir kayma sırasında asla otomatik olarak değil.
  2. Bilinen özel sebepleri Faz I verilerinden çıkarın. Referans döneminde bir takım kırıldıysa limitleri hesaplamadan önce o alt grupları kaldırın.
  3. Her karakteristik ve reçete için bir grafik. Farklı ürünler farklı limitlere ihtiyaç duyar; reçeteyi topic'e veya payload'a ekleyin.
  4. Tepkiyi kaydedin. Bir alarm çaldığında operatörün ne bulduğunu ve ne yaptığını kaydedin. Tepki planı olmayan SPC sadece bir grafiktir.
  5. Özel bir broker kullanın. Kalite verileri gizlidir. Portaldan alınan kimlik bilgileri ve 8883 portunda TLS veya 8084 portunda WSS ile bir barındırılan MQTT broker'a geçin.
  6. Bir ağ aksaklığından sonra alt grupların eksik verilerden oluşmaması için ölçümlerde QoS 1 kullanın.

Gerçek zamanlı SPC, izlenebilirlikle de doğal olarak bağlantılıdır: her nokta kendi alt grubunun seri numarası aralığını taşıdığından, proses kontrol dışıyken tam olarak hangi parçaların üretildiğini bilirsiniz. Üretim izlenebilirlik sistemi rehberi bu ilişkinin nasıl saklanacağını gösterir. Tesis veri mimarisine daha geniş bir bakış için akıllı üretim rehberine göz atın.

SPC Verilerinizi ConnectMQ Üzerinden Akıtın

ConnectMQ; ölçüm cihazlarınıza, SPC servisinize ve dashboard'larınıza TLS, tarayıcı dashboard'ları için WebSocket erişimi, retained mesajlar ve canlı bir topic gezgini içeren tek ve güvenli bir MQTT 5 omurgası sunar. Kredi kartı gerekmeden app.connectmq.com adresinde ücretsiz Serverless planıyla başlayın.

Sık Sorulan Sorular

Gerçek zamanlı SPC nedir?

Kontrol grafiklerinin ve kural kontrollerinin her ölçüm geldiğinde otomatik olarak güncellendiği istatistiksel proses kontroldür; böylece kontrol dışı durumlar vardiya sonunda değil, saniyeler içinde işaretlenir.

Kontrol limitlerini hesaplamak için kaç alt gruba ihtiyacım var?

Kararlı bir prosesten 20 ila 25 alt grup yaygın kılavuz değerdir. Hesaplamadan önce bilinen özel sebeplerden etkilenen alt grupları çıkarın.

Kontrol limitleri spesifikasyon limitleriyle aynı mıdır?

Hayır. Kontrol limitleri prosesin gerçekte ne yaptığını, spesifikasyon limitleri ise müşterinin ne istediğini tanımlar. Farklı şekilde hesaplanır ve kullanılırlar.

Önce hangi Western Electric kurallarını etkinleştirmeliyim?

Limitlerin dışındaki tek bir nokta ve merkez çizgisinin bir tarafındaki sekiz nokta kurallarıyla başlayın. Operatörler alarmlara güvendiğinde bölge kurallarını ekleyin.

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