Dijital İkiz

7 Pratik Adımda Dijital İkiz Nasıl Oluşturulur

İlk dijital ikizinizi oluşturmak için yedi adımlı pratik bir süreç: kapsamı belirleyin, varlığı modelleyin, MQTT topic'lerini tasarlayın, canlı veri akıtın, broker'ı güvenceye alın, görselleştirin ve geçmiş ekleyin.

Bir varlığın kapsamının belirlenmesinden canlı MQTT verisine ve 3D panoya kadar dijital ikizin nasıl oluşturulacağını gösteren yedi adımlı yol haritası
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

Dijital ikizin nasıl oluşturulacağını bilmek, bir platform seçmekten çok disiplinli bir sırayı izlemekle ilgilidir: kapsamla, modelle, bağla, görselleştir, sakla, iyileştir. Bu rehber yedi pratik adımı ele alır ve her teknik adım için çalışan kod içerir; sonunda MQTT üzerinden tarayıcı görünümüne veri akıtan canlı bir varlık ikiziniz ve üretime giden net bir yolunuz olacak.

Tanımlar ve genel resim için dijital ikiz teknolojisi rehberine bakın.

Başlamadan Önce

Takip etmek için çok az şeye ihtiyacınız var:

  • pip install "paho-mqtt>=2.0" ile Python 3.9 veya üzeri.
  • Görüntüleyici için npm install mqtt ile Node.js.
  • İsteğe bağlı: hızlı testler için Mosquitto komut satırı istemcileri.

Uygulamalı bölümlerde broker.connectmq.com adresindeki herkese açık MQTT test broker'ını kullanıyoruz. Hesap gerektirmez, ancak orada yayınlanan her şeyi başkaları da okuyabilir; bu yüzden demo verisi ve benzersiz bir topic öneki kullanın. Aşağıdaki bdt-4w8 değerini kendi rastgele ID'nizle değiştirin.

Adım 1: Kararı ve Kapsamı Tanımlayın

Teknolojiyle değil, ikizin iyileştireceği kararla başlayın. "Dolum hattındaki plansız duruşları azaltmak" iyi bir hedeftir. "Bir fabrika ikizi oluşturmak" ise değildir, çünkü net bir kullanıcısı veya başarı ölçütü yoktur.

Şunları yazın:

  1. Kullanıcı: ikize kim bakacak veya onun üzerinden aksiyon alacak.
  2. Karar: ikizle neyi farklı yapacaklar.
  3. Varlık kapsamı: başlangıç için tek bir makine veya küçük bir grup.
  4. Başarı ölçütü: mevcut temel değeri olan bir KPI.

İlk ikizlerin çoğu varlık ikizi, yani temel sinyalleriyle tek bir makine olmalıdır. Dijital ikiz türleri rehberi, bu kapsamın neden genellikle en hızlı sonucu verdiğini açıklar.

Adım 2: Varlığı Modelleyin

İkizin varlık hakkında bilmesi gerekenleri listeleyin ve her öğeyi sınıflandırın:

Öğe Örnek Değişme sıklığı Kaynak
Kimlik ve meta veri Model, seri numarası, konum Nadiren Varlık kaydı
Durum Çalışıyor, boşta, arıza, mod Olaylarda PLC
Proses değerleri Sıcaklık, basınç, hız Sürekli PLC veya sensörler
Sayaçlar Çevrimler, sağlam parçalar, retler Sürekli PLC
Alarmlar Aşırı sıcaklık, düşük seviye Olaylarda PLC
Komutlar (sonra) Ayar noktası, başlat, durdur İstek üzerine İkiz veya operatör

Ardından varlığı bir hiyerarşiye yerleştirin. ISA-95 seviyeleri (kurum, saha, alan, hat, hücre) güçlü bir varsayılandır, çünkü tesislerin nasıl organize edildiğine ve insanların ekipmanı nasıl aradığına uyar. Bu eğitimde varlığımız site1/filling/line2/filler1 konumundaki bir dolum makinesidir.

Adım 3: Topic'leri ve Payload'ları Tasarlayın

Topic'ler modeli bir adres alanına dönüştürür. Temiz bir kalıp, veri türlerini birbirinden ayırır; böylece tüketiciler yalnızca ihtiyaç duydukları veriye abone olur:

connectmq/demo/bdt-4w8/site1/filling/line2/filler1/state      retained, QoS 1
connectmq/demo/bdt-4w8/site1/filling/line2/filler1/telemetry  not retained, QoS 0
connectmq/demo/bdt-4w8/site1/filling/line2/filler1/status     Last Will, retained

Özel bir broker'da connectmq/demo/bdt-4w8 önekini kaldırır ve kurum adınızla başlarsınız. İleride sıkıntıyı önleyen payload kuralları:

  • Alan adlarında açık birimler içeren JSON (temp_c, flow_lpm).
  • Her mesajda bir kaynak zaman damgası.
  • Durum mesajları yalnızca değişiklikleri değil, güncel durumun tamamını içerir; böylece retained bir mesaj kendi başına yeterlidir.

Tesis genelinde bir ad alanına büyümeyi planlıyorsanız Sparkplug B ve Unified Namespace rehberini şimdi okuyun; tutarlı başlamak, sonradan yeniden adlandırmaktan çok daha kolaydır.

Adım 4: Veri Kaynağını Bağlayın

Gerçek bir hatta bir uç ağ geçidi PLC'yi okur (çoğunlukla OPC UA veya üreticiye özel bir protokol üzerinden) ve MQTT'ye yayınlar. Bu eğitimde bir Python betiği dolum makinesini simüle eder ve tam olarak bir ağ geçidinin yayınlayacağı veriyi yayınlar.

import json
import random
import time
from datetime import datetime, timezone

import paho.mqtt.client as mqtt

BASE = "connectmq/demo/bdt-4w8/site1/filling/line2/filler1"
CLIENT_ID = f"bdt-4w8-filler1-{random.randint(1000, 9999)}"


def now():
    return datetime.now(timezone.utc).isoformat(timespec="seconds")


def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code)
    client.publish(f"{BASE}/status", "online", qos=1, retain=True)


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=CLIENT_ID)
client.will_set(f"{BASE}/status", "offline", qos=1, retain=True)
client.on_connect = on_connect
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_start()

good, rejects, mode = 0, 0, "running"
try:
    while True:
        if random.random() < 0.02:
            mode = "fault" if mode == "running" else "running"
        if mode == "running":
            good += random.randint(4, 6)
            rejects += 1 if random.random() < 0.05 else 0
        telemetry = {"ts": now(), "fill_temp_c": round(random.gauss(21.5, 0.3), 2),
                     "flow_lpm": round(random.gauss(118, 2), 1) if mode == "running" else 0.0}
        state = {"ts": now(), "mode": mode, "good_count": good, "reject_count": rejects}
        client.publish(f"{BASE}/telemetry", json.dumps(telemetry), qos=0)
        client.publish(f"{BASE}/state", json.dumps(state), qos=1, retain=True)
        time.sleep(1)
except KeyboardInterrupt:
    client.publish(f"{BASE}/status", "offline", qos=1, retain=True)
    client.loop_stop()
    client.disconnect()

Akışı başka bir terminalden doğrulayın:

mosquitto_sub -h broker.connectmq.com -p 1883 -i bdt-4w8-check -t "connectmq/demo/bdt-4w8/#" -v

Adım 5: Broker'ı Seçin ve Güvenceye Alın

Broker, her ikiz bileşeninin bağlandığı merkezdir; bu yüzden ilk günden itibaren ona üretim altyapısı gibi davranın. Kontrol edilecek gereksinimler:

  1. Her bağlantı için TLS, ayrıca tarayıcı görüntüleyicileri için TLS üzerinden WebSocket.
  2. Her ağ geçidi, görüntüleyici ve servis için ayrı kimlik bilgileri.
  3. Message expiry, reason code'lar veya paylaşımlı abonelikler istiyorsanız MQTT 5 desteği.
  4. Büyüme yolunuz için yeterli bağlantı ve mesaj kapasitesi.
  5. Çalışma süresi, yamalar ve sertifikalardan sorumlu biri.

Kendi broker'ınızı çalıştırmak, bu beşinin tamamını üstlenmek demektir. ConnectMQ gibi tam yönetilen bir MQTT servisi bunları karşılar: portalda bir broker oluşturursunuz ve 8883 portunda TLS, 8084 portunda Secure WebSocket ile birlikte otomatik üretilmiş bir kullanıcı adı, parola ve client ID alırsınız. Simülatörü buraya taşımak üç satırlık bir değişikliktir:

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="YOUR_CLIENT_ID")
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set()

Ardından 8883 portu üzerinden broker host'unuza bağlanın. MQTT güvenliği en iyi uygulamaları rehberi, sıkılaştırma kontrol listesinin geri kalanını kapsar.

Adım 6: İkizi Görselleştirin

Bir ikiz, insanlar ona baktığında değer kazanır. Basit bir canlı görünümle başlayın, veriler güvenilir hale geldiğinde 3D ekleyin. Bu Node.js betiği, en son durumu tutan ve bayat veriyi işaretleyen bir terminal "ikiz görünümü"dür; bir tarayıcı panosunun kullanacağı mantığın aynısıdır:

import mqtt from "mqtt";

const BASE = "connectmq/demo/bdt-4w8/site1/filling/line2/filler1";
const twin = { status: "unknown", state: {}, telemetry: {}, lastSeen: 0 };

const client = mqtt.connect("mqtts://broker.connectmq.com:8883", {
  clientId: "bdt-4w8-view-" + Math.random().toString(16).slice(2, 8),
  protocolVersion: 5,
});

client.on("connect", () => client.subscribe(`${BASE}/#`, { qos: 1 }));
client.on("message", (topic, payload) => {
  const kind = topic.split("/").pop();
  twin.lastSeen = Date.now();
  if (kind === "status") twin.status = payload.toString();
  else twin[kind] = JSON.parse(payload.toString());
});

setInterval(() => {
  const ageS = twin.lastSeen ? Math.round((Date.now() - twin.lastSeen) / 1000) : null;
  const stale = ageS === null || ageS > 10;
  const { mode = "-", good_count = 0, reject_count = 0 } = twin.state;
  console.clear();
  console.log(`Filler1  [${twin.status}]${stale ? "  STALE" : ""}`);
  console.log(`Mode: ${mode}   Good: ${good_count}   Rejects: ${reject_count}`);
  console.log(`Fill temp: ${twin.telemetry.fill_temp_c ?? "-"} C   Flow: ${twin.telemetry.flow_lpm ?? "-"} l/min`);
  console.log(`Last update: ${ageS ?? "-"} s ago`);
}, 1000);

Betiği view.mjs olarak kaydedin ve node view.mjs komutuyla çalıştırın. Tarayıcıda bunun yerine wss://broker.connectmq.com:8084/mqtt ile bağlanın ve aynı durumu bir sayfaya veya 3D sahneye aktarın; Three.js dijital ikiz eğitimi değerlerin bir 3D modele nasıl bağlanacağını gösterir, WebSocket üzerinden MQTT rehberi ise tarayıcı bağlantısını açıklar.

Adım 7: Geçmiş ve Alarmlar Ekleyin, Yinelemeye Devam Edin

Canlı bir görünüm "ne oluyor" sorusunu yanıtlar. "Neden" ve "sırada ne var" sorularını yanıtlamak için şunları ekleyin:

  • Geçmiş: telemetriyi bir zaman serisi veritabanına yazan Telegraf gibi bir abone veya küçük bir betik.
  • Alarmlar: temel değerler üzerinde eşik kuralları. ConnectMQ portalı eşik alarm kuralları ve bir alarm günlüğü içerir; kendi alarm sisteminizi kurmadan önce oldukça işe yarar.
  • Geri bildirim: veri kalitesi kanıtlandıktan sonra, ayar noktalarını ikizden değiştirmek için onay mesajlı komut topic'leri.

Ardından 1. adımdaki KPI'ı ölçün ve bir sonraki kapsama karar verin. Dijital ikiz olgunluk modeli bu ilerlemeyi planlamanıza yardımcı olur; dijital ikiz mimarisi rehberi ise yol boyunca ekleyeceğiniz bileşenleri ele alır.

Sık Yapılan Hatalar

Hata Sonuç Nasıl önlenir
Tüm fabrikayla başlamak Herhangi bir değer elde etmeden önce aylarca entegrasyon Önce tek bir varlığı kapsamak
Tutarsız topic adları Wildcard abonelikler bozulur, ileride yeniden çalışma gerekir Hiyerarşiyi 2. adımda sabitlemek
Zaman damgası veya birim olmaması Güvenilmez geçmiş ve analitik 3. adımdaki payload kuralları
Paylaşılan kimlik bilgileri İstemciler birbirini düşürür, denetim izi kalmaz Her istemci için tek bir kimlik
Bayat veri göstergesi olmaması Kullanıcılar eski değerlere güvenir Son görülme zamanını ve Last Will'i izlemek

Dijital İkizinizi ConnectMQ Üzerinde Oluşturun

Artık kapsamdan canlı görünüme kadar bir dijital ikizin nasıl oluşturulacağını biliyorsunuz. Prototipi broker.connectmq.com üzerinde geliştirin, gerçek veri geldiğinde özel kimlik bilgilerine geçin. Kredi kartı gerekmeden ücretsiz bir ConnectMQ Serverless broker oluşturun ve ilk varlığınızı bugün bağlayın.

Sık Sorulan Sorular

Bir dijital ikiz oluşturmak ne kadar sürer?

Veri erişimi çözüldükten sonra canlı veriye ve basit bir görünüme sahip ilk varlık ikizi birkaç gün içinde çalışır hale gelebilir. Geçmiş, analitik ve 3D birkaç hafta ekler; çok sayıda varlığa ölçeklenmek ise entegrasyon çabasına bağlıdır.

Dijital ikiz oluşturmak için 3D modele ihtiyacım var mı?

Hayır. Etkili ikizlerin çoğu panodur. 3D, mekânsal kavrayışa ve iletişime yardımcı olur, ancak veri temeli çalıştıktan sonra eklenebilir.

Bir dijital ikiz hangi protokolü kullanmalı?

MQTT hafif olduğu ve birçok tüketicinin tek bir akışı paylaşmasına izin verdiği için canlı veri dağıtımında yaygın bir tercihtir. Ağ geçitleri çoğu zaman OPC UA veya PLC protokollerini okur ve MQTT'ye yayınlar.

Platform lisansı olmadan dijital ikiz oluşturabilir miyim?

Evet. Standart bir MQTT broker, geçmiş ve görselleştirme için açık kaynak araçlar ve net bir topic tasarımı, yetenekli bir ikiz için yeterlidir.

İlgili yazılar

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.