Endüstriyel IoT

Sparkplug B ve Unified Namespace: Endüstriyel IoT Verisini MQTT Üzerinde Yapılandırmak

Sparkplug B endüstriyel MQTT'ye katı bir oturum ve payload modeli kazandırırken Unified Namespace tesis verinize tek ve okunabilir bir yuva sunar. İkisinin nasıl birbirini tamamladığını, topic tasarımı ipuçları ve canlı örneklerle anlatıyoruz.

Kurumdan iş hücresine uzanan fabrika hiyerarşisinin MQTT topic'lerine eşlenmesiyle Sparkplug B ve Unified Namespace'i gösteren görsel
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

Sparkplug B ve Unified Namespace, MQTT üzerine kurulan neredeyse her Endüstriyel IoT projesinde gündeme gelen iki fikirdir. Bu yazıda Unified Namespace'in ne olduğunu, ISA-95 hiyerarşisinin nasıl bir topic yapısına dönüştüğünü, Sparkplug B topic namespace'inin ve payload'unun nasıl çalıştığını ve iki yaklaşımın birbirini nasıl tamamladığını öğreneceksiniz. Bu arada broker.connectmq.com'a gerçek ISA-95 ve Sparkplug B mesajları da yayınlayacaksınız.

MQTT temelleri size yeniyse önce MQTT broker'ın ne olduğunu okuyun.

Sorun: Noktadan Noktaya Spagetti

Tipik bir tesiste PLC'ler, SCADA, bir MES, bir historian, bir kalite sistemi ve bir ERP bulunur. Geleneksel olarak her sistem diğerleriyle kendi noktadan noktaya bağlantısı üzerinden konuşur. Yeni bir dashboard ekleyin, üç yeni entegrasyona ihtiyacınız olur. Bir PLC tag'ini değiştirin, aşağı akışta bir şeyler bozulur.

MQTT taşıma tarafını çözer: her üretici bir broker'a yayın yapar, her tüketici abone olur. MQTT'nin sizin yerinize karar vermediği şey ise topic'lerin nasıl adlandırılacağı ve payload'ların nasıl biçimlendirileceğidir. Unified Namespace ve Sparkplug B tam olarak bu boşluğu doldurur.

Unified Namespace Nedir?

Unified Namespace (UNS), tüm işletmenin mevcut durumunun tek, olay güdümlü ve hiyerarşik bir görünümüdür. Her sistemden veri istemek yerine her sistem bildiğini broker üzerindeki ortak bir topic ağacına yayınlar ve her tüketici ihtiyaç duyduğu kısma abone olur.

İyi bir UNS'yi üç özellik tanımlar:

  • Tek doğruluk kaynağı. Her makinenin, hattın ve siparişin en güncel değeri tek bir yerde yaşar.
  • İşletmeye göre yapılandırılmış. Topic'ler fiziksel ve organizasyonel hiyerarşiyi izler; böylece insanlar bir tag listesine ihtiyaç duymadan veriyi bulabilir.
  • İstisna bazlı raporlama. Üreticiler bir şey değiştiğinde yayın yapar; retained message'lar da yeni subscriber'lara mevcut durumu anında verir.

Topic Yapısı Olarak ISA-95

Bir UNS'yi yapılandırmanın en yaygın yolu ISA-95 ekipman hiyerarşisidir. Her seviye bir topic seviyesi olur:

Enterprise / Site / Area / Line / WorkCell / <data class>
acme       / izmir / machining / line1 / cnc1 / telemetry

Topic Tasarım Tablosu

ISA-95 seviyesi Örnek değer Topic seviyesi Tasarım ipucu
Enterprise (Kurum) acme 1 Sabit, kısa şirket tanımlayıcısı
Site (Saha) izmir 2 Tesis veya lokasyon başına bir tane
Area (Alan) machining 3 Departman veya üretim alanı
Line (Hat) line1 4 Üretim hattı veya proses hücresi
WorkCell (İş hücresi) cnc1 5 Makine, robot veya istasyon
Veri sınıfı telemetry, state, alarms, cmd 6 Hızlı veriyi olaylardan ve komutlardan ayırır

Birkaç pratik kural:

  • Küçük harfli ASCII kullanın, boşluk kullanmayın ve görünen adlar yerine kalıcı ID'ler tercih edin.
  • Derinliği öngörülebilir tutun. Tüketiciler bir sahadaki tüm alarmları almak için acme/izmir/+/+/+/alarms gibi wildcard'lara güvenir.
  • Komutları kendi dallarında (cmd) tutun; böylece telemetriden ayrı olarak güvenceye alınıp denetlenebilirler.
  • Yeni bir dashboard'un mevcut değeri anında görmesi için durum mesajlarını retained olarak yayınlayın.

Deneyin: ISA-95 JSON Mesajı Yayınlayın

broker.connectmq.com'un public alanı en fazla 8 topic seviyesine izin verir; bu yüzden uzun bir önek yerine kısa ve rastgele bir önek kullanın. Bir terminalde abone olun:

mosquitto_sub -h broker.connectmq.com -p 1883 -i uns-a1b2-sub \
  -t "a1b2/acme/#" -v

Başka bir terminalden bir makine ölçümü yayınlayın:

mosquitto_pub -h broker.connectmq.com -p 1883 -i uns-a1b2-cnc1 -q 1 \
  -t "a1b2/acme/izmir/machining/line1/cnc1/telemetry" \
  -m '{"spindleSpeed":12000,"temperature":41.7,"status":"RUNNING"}'

Subscriber topic'i ve JSON payload'u yazdırır. Public alandaki her şey herkes tarafından okunabilir; bu yüzden orada asla gerçek üretim verisi yayınlamayın.

Sparkplug B Nedir?

Sparkplug B, Eclipse Foundation bünyesinde sürdürülen ve MQTT'nin açık bıraktığı üç şeyi tanımlayan açık bir spesifikasyondur: sabit bir topic namespace'i, ikili (binary) bir payload formatı ve bir durum yönetimi modeli. SCADA ve host uygulamalarının cihazları otomatik olarak keşfedebilmesi ve verinin güncel mi yoksa bayat mı olduğunu her zaman bilebilmesi için tasarlanmıştır.

Sparkplug B Topic Namespace'i

Her Sparkplug B topic'i şu deseni izler:

spBv1.0/{group_id}/{message_type}/{edge_node_id}/{device_id}

group_id edge node'ları gruplar (örneğin bir tesis), edge_node_id gateway veya edge cihazıdır, isteğe bağlı device_id ise o edge node'un arkasındaki bir PLC veya sensördür.

Mesaj türü Gönderen Amaç
NBIRTH Edge node Node çevrimiçi olur ve tüm metriklerini bildirir
NDEATH Broker (Will olarak) Node beklenmedik şekilde çevrimdışı oldu
DBIRTH Edge node Node'un arkasındaki bir cihaz metrikleriyle çevrimiçi olur
DDEATH Edge node Bir cihaz çevrimdışı oldu
NDATA / DDATA Edge node Node veya cihaz için değişen metrik değerleri
NCMD / DCMD Host uygulaması Bir node'a veya cihaza yazma komutları
STATE Host uygulaması Birincil host'un çevrimiçi olup olmadığını duyurur

NDEATH mesajı, edge node bağlandığında MQTT Last Will olarak kaydedilir; böylece bağlantı koparsa broker onu otomatik olarak yayınlar. Tüketiciler de o node'un tüm verisini bayat olarak işaretler.

Payload: Protobuf, Alias'lar ve Sıra Numaraları

Sparkplug B payload'ları Google Protocol Buffers ile kodlanır. Bir payload bir zaman damgası, bir sıra numarası ve bir metrik listesi içerir; her metriğin bir adı, isteğe bağlı sayısal bir alias'ı, bir veri tipi, bir zaman damgası ve bir değeri vardır.

Temel mekanizmalar:

  • Doğum sertifikaları. NBIRTH ve DBIRTH, her metriği tam adı ve veri tipiyle içerir. Sonraki DDATA mesajları yalnızca sayısal alias'ı ve yeni değeri gönderebilir; bu da paketleri küçük tutar.
  • Sıra numaraları. Bir edge node'dan gelen her mesaj, 0'dan 255'e kadar giden ve başa saran bir seq değeri taşır. Host bir boşluk görürse bir mesajın kaybolduğunu anlar ve yeni doğum sertifikaları istemek için bir rebirth komutu (NCMD) gönderebilir.
  • bdSeq. Bir doğum/ölüm sıra numarası, her NDEATH'i aynı oturumun NBIRTH'üne bağlar; böylece eski bir ölüm sertifikası daha yeni bir oturumu silemez.

Yukarıdaki ölçümün aynısı, bir Sparkplug B DDATA payload'unun JSON gösterimi olarak:

{
  "timestamp": 1760600000000,
  "seq": 1,
  "metrics": [
    { "name": "temperature", "timestamp": 1760600000000, "dataType": "Double", "value": 41.7 }
  ]
}

Sparkplug B ve Unified Namespace: Rakip Değil, Tamamlayıcı

Boyut Sparkplug B ISA-95 Unified Namespace
Topic yapısı Sabit: spBv1.0/group/type/node/device Serbest, işletme hiyerarşisine göre modellenir
Payload Tipli metriklerle Protobuf Genellikle sizin tanımladığınız JSON
Durum farkındalığı Yerleşik (birth, death, STATE) Bir gelenek, genellikle retained message'lar
Okunabilirlik Bir decoder gerektirir İnsan tarafından okunabilir topic'ler ve payload'lar
En uygun olduğu yer Edge'den SCADA'ya, cihaz keşfi, güvenilir durum Kurum genelinde erişim, analitik, BT tüketicileri

Pratikte birçok tesis ikisini birlikte kullanır. Edge node'lar Sparkplug B konuşur; çünkü makinelere yakın noktada güvenilir durum ve verimli payload'lar sağlar. Veri daha sonra okunabilir JSON olarak ISA-95 yapısındaki bir namespace'e yeniden yayınlanır; MES, dashboard'lar ve BT uygulamaları da onu Protobuf'a hiç dokunmadan tüketir. İşin zor kısmı bu çeviri katmanıdır ve broker'ın yardımcı olabileceği yer de tam burasıdır.

ConnectMQ, Sparkplug B ve ISA-95 Topic'lerini Nasıl Ele Alır?

ConnectMQ, Endüstriyel IoT desteği yerleşik olan yönetilen bir MQTT broker'dır:

  • ISA-95 algılama. Trafiğinizdeki ISA-95 ve Unified Namespace topic yapılarını tanır.
  • Sparkplug B çözme. Sparkplug B mesajlarını algılar ve hem Protobuf hem de JSON payload'ları çözer.
  • ISA-95'e yeniden yayınlama. Sparkplug B verisi bir ISA-95 yapısına yeniden yayınlanabilir; örneğin spBv1.0/factory1/DDATA/line1/cnc1, herhangi bir subscriber'ın okuyabileceği düz bir JSON payload ile connectmq/factory1/production/line1/cnc1/telemetry olur.
  • Portal görünümleri. Portalın Devices görünümü ekipmanınızı ISA-95 seviyelerine göre düzenler; eşik alarm kuralları ve alarm günlüğü ise örneğin bir iş mili sıcaklığı bir limiti aştığında tepki vermenizi sağlar.

Deneyin: Sparkplug B Girer, Okunabilir Telemetri Çıkar

a1b2plant gibi benzersiz bir grup ID'si kullanın. Önce hem Sparkplug topic'ine hem de yeniden yayınlanan dala abone olun:

mosquitto_sub -h broker.connectmq.com -p 1883 -i spb-a1b2-sub -v \
  -t "spBv1.0/a1b2plant/#" -t "connectmq/a1b2plant/#"

Ardından JSON Sparkplug B payload'lu bir DDATA mesajı yayınlayın:

mosquitto_pub -h broker.connectmq.com -p 1883 -i spb-a1b2-edge -q 1 \
  -t "spBv1.0/a1b2plant/DDATA/line1/cnc1" \
  -m '{"timestamp":1760600000000,"seq":1,"metrics":[{"name":"temperature","timestamp":1760600000000,"dataType":"Double","value":41.7}]}'

Bunu broker.connectmq.com üzerinde test ettiğimizde subscriber orijinal Sparkplug B mesajını ve connectmq/a1b2plant/.../line1/cnc1/telemetry altında {"temperature":41.7,"timestamp":1760600000000} payload'lu ikinci bir mesajı aldı. Aşağı akıştaki araçlar artık connectmq/a1b2plant/+/+/+/telemetry filtresine abone olup makine başına temiz JSON alabilir.

Üretim için portalda dedicated bir broker oluşturun ve 8883 portunda TLS üzerinden YOUR_USERNAME, YOUR_PASSWORD ve YOUR_CLIENT_ID ile bağlanın. Her kiracının topic'leri diğer kiracılardan ve public alandan izoledir. Kimlik bilgileri ve TLS rehberliği için MQTT güvenliği en iyi uygulamaları yazısına bakın.

İlk UNS'niz İçin Tasarım Kontrol Listesi

  1. İlk cihaz bağlanmadan önce ISA-95 seviyeleri ve adlandırma kuralları üzerinde uzlaşın.
  2. Hangi veri sınıflarına (telemetry, state, alarms, cmd) ihtiyacınız olduğuna karar verin ve bunları tutarlı tutun.
  3. Birth/death farkındalığına ihtiyaç duyduğunuz edge tarafında Sparkplug B, diğer herkes için okunabilir bir ISA-95 dalı kullanın.
  4. Durum ve alarmlar için QoS 1 kullanın; artı ve eksiler için MQTT QoS seviyeleri yazısına bakın.
  5. Mevcut durum için retained message'lar kullanın, payload'ları küçük ve tipli tutun.
  6. Sizinle birlikte büyüyebilecek bir broker seçin; kriterler IoT MQTT broker nasıl seçilir yazısında.

ConnectMQ ile Başlayın

Yukarıdaki her iki örneği de şu anda public broker üzerinde deneyebilirsiniz. İzole topic'ler, ISA-95 cihaz görünümleri ve eşik alarmlarıyla gerçek bir Unified Namespace kurmak için app.connectmq.com adresinden kaydolun. Serverless planı ücretsizdir, kredi kartı gerektirmez; tesisiniz canlıya geçtiğinde Dedicated, BYOC veya Self Managed Enterprise'a ölçeklenebilirsiniz.

Sık Sorulan Sorular

Sparkplug B ile Unified Namespace aynı şey mi?

Hayır. Sparkplug B, MQTT üzerinde topic'ler, payload'lar ve oturum durumu için bir spesifikasyondur; Unified Namespace ise tüm işletme verisini tek bir hiyerarşide düzenlemeye yönelik bir mimari desendir. İkisi birlikte iyi çalışır.

Sparkplug B mesajlarını Protobuf decoder olmadan okuyabilir miyim?

Doğrudan okuyamazsınız, çünkü payload ikili formattadır. ConnectMQ, Sparkplug B Protobuf ve JSON payload'larını çözer ve bunları okunabilir JSON olarak bir ISA-95 topic yapısına yeniden yayınlayabilir.

Bir ISA-95 topic hiyerarşisi ne kadar derin olmalı?

Enterprise, Site, Area, Line ve WorkCell ile birlikte bir veri sınıfı altı seviye eder; bu da çoğu tesise uygundur. Wildcard aboneliklerin öngörülebilir çalışması için derinliği tutarlı tutun.

Sparkplug B, MQTT 5 gerektirir mi?

Hayır. Sparkplug B, MQTT 3.1.1 üzerinde çalışır ve genellikle bu şekilde kurulur. ConnectMQ hem MQTT 3.1.1'i hem de MQTT 5.0'ı desteklediği için Sparkplug edge node'ları ve daha yeni client'lar aynı broker'ı paylaşabilir.

İlgili yazılar

CODESYS MQTT Client: PLC Değişkenlerini Bir Broker'a Yayınlama

CODESYS IIoT MQTT Client kütüphanesini PLC değişkenlerini JSON olarak yayınlayacak şekilde yapılandırın, broker.connectmq.com üzerinde doğrulayın, ardından kimlik bilgileri ve TLS içeren özel bir broker'a geçin.

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.