Ignition MQTT entegrasyonu, bir Sparkplug B mimarisi kurmanın en popüler yollarından biridir: bir Ignition Edge gateway tag'leri yayınlar, merkezi bir Ignition gateway bunları tüketir ve arada bir MQTT broker durur. Bu eğitimde MQTT Transmission ve MQTT Engine modüllerini yerleşik broker yerine harici bir broker'a göre yapılandıracak, bir tag klasörünü Sparkplug B olarak yayınlayacak, bunların tüketen tarafta tag olarak belirdiğini görecek ve çözülen veriyi bağımsız olarak doğrulayacaksınız. Bir saat içinde çalışır hale getirmeyi bekleyebilirsiniz.
Ignition MQTT Modülleri
Ignition için MQTT modülleri Cirrus Link tarafından geliştirilir ve Inductive Automation aracılığıyla dağıtılır. Burada üç tanesi önemlidir:
| Modül | Rolü | Tipik konumu |
|---|---|---|
| MQTT Transmission | Ignition tag'lerini Sparkplug B olarak yayınlar (edge node) | Ignition Edge veya bir saha gateway'i |
| MQTT Engine | Sparkplug B'ye abone olur ve Ignition tag'leri oluşturur (primary host) | Merkezi veya kontrol merkezi gateway'i |
| MQTT Distributor | Ignition içinde çalışan bir MQTT broker | İsteğe bağlı; burada harici bir broker ile değiştiriliyor |
MQTT Distributor yerine harici bir broker kullanmak, mesajlaşma katmanınızı Ignition gateway'inin yaşam döngüsünden ayırır. Gateway yeniden başlatmaları, yükseltmeleri ve lisanslama artık broker'ı durdurmaz; Python servisleri, historian'lar veya diğer SCADA sistemleri gibi Ignition dışındaki client'lar da aynı broker'a eşit koşullarda bağlanır. Bir bulut MQTT broker, özellikle edge sahalarının merkezi gateway'e doğrudan bir ağ yolu olmadığında faydalıdır.
Ön Koşullar
- Ignition 8.1 veya üzeri: Transmission için bir gateway (edge) ve Engine için bir gateway (host). Bir laboratuvar ortamında her iki modül aynı gateway'de çalışabilir.
- Config > System > Modules > Install or Upgrade a Module üzerinden kurulan MQTT Transmission ve MQTT Engine modülleri. Lisans olmadan, sıfırlanabilen deneme modunda çalışırlar.
- Bir MQTT broker. Laboratuvar için broker.connectmq.com adresindeki herkese açık broker; üretim için kimlik bilgileri olan özel bir broker.
- Her iki gateway'den TCP 1883 (test) veya 8883 (TLS) portuna giden erişim.
Adım 1: MQTT Transmission'ı Broker'a Yönlendirin
- Ignition gateway web arayüzünde Config > MQTT Transmission > Settings sayfasını açın.
- Servers sekmesinde varsayılan sunucuyu düzenleyin veya yeni bir tane oluşturun:
- Name:
connectmq - URL: laboratuvar için
tcp://broker.connectmq.com:1883, üretim içinssl://YOUR_BROKER_HOST:8883 - Username ve Password: herkese açık broker için boş; üretim için
YOUR_USERNAMEveYOUR_PASSWORD
- Name:
- Transmission'ın trafiği broker'lar arasında bölmemesi için yerel bir MQTT Distributor'a işaret eden tüm sunucu girişlerini kaldırın veya devre dışı bırakın.
- Kaydedin. Sunucu durumu birkaç saniye içinde connected olarak değişmelidir.
Let's Encrypt sertifikalı TLS için Ignition ile birlikte gelen Java trust store normalde zinciri doğrular; bu yüzden genellikle bir CA dosyası yüklemeniz gerekmez. Modül sürümünüz bir client ID alanı sunuyorsa ve broker'ınız client ID'leri kimlik bilgilerine bağlıyorsa, verilen YOUR_CLIENT_ID değerini oraya girin; her modül bağlantısının kendi kimlik bilgilerine ve client ID'sine ihtiyacı vardır.
Adım 2: Edge Tag'lerini Oluşturun
MQTT Transmission, yapılandırılmış bir tag yolu altında bulunan tag'leri yayınlar; varsayılan olarak bu, varsayılan tag sağlayıcısındaki Edge Nodes klasörüdür. Altındaki klasör seviyeleri Sparkplug tanımlayıcılarına eşlenir:
[default]Edge Nodes/
cmqdemo-4kz9/ <- Sparkplug Group ID (herkese açık broker'da benzersiz)
Line1/ <- Edge Node ID
Filler/ <- Device ID
Temperature (Float, memory veya OPC tag'i)
Speed (Int4)
Running (Boolean)
Count (Int8)
Herkese açık broker'da her Sparkplug topic'i spBv1.0 ile başlar; bu yüzden diğer kullanıcılarla çakışmamak için cmqdemo-4kz9 gibi rastgele bir Group ID seçin ve gerçek proses değerleri yerine memory veya simülatör tag'leri kullanın: orada yayınlanan her şey herkes tarafından okunabilir.
Transmitters sekmesinde varsayılan transmitter'ın default tag sağlayıcısını ve Edge Nodes tag yolunu kullandığını ve Primary Host ID değerinin, örneğin IgnitionHost olarak ayarlandığını kontrol edin. Bir primary host ID ayarlandığında edge node yayın yapmadan önce host'un STATE mesajını bekler ve host yeniden çevrimiçi olduğunda birth mesajlarını tekrar yayınlar.
Adım 3: MQTT Engine'i Primary Host Olarak Yapılandırın
- Config > MQTT Engine > Settings sayfasını açın.
- General sekmesinde Primary Host ID değerini aynı değere,
IgnitionHostolarak ayarlayın. Engine, STATE mesajını retained bir mesaj olarak yayınlar; bu da edge node'lara bir host'un dinlediğini bildirir. - Servers sekmesinde aynı broker'ı ekleyin. Üretimde Transmission tarafından ayrı bir kimlik bilgisi seti kullanın: iki gateway'deki iki modül, iki ayrı MQTT client'ıdır.
- Namespaces sekmesinde varsayılan Sparkplug B namespace'ini etkin bırakın.
Kaydedin ve Designer'ı açın. MQTT Engine tag sağlayıcısı altında dört tag'in tamamı ve değerleriyle birlikte Edge Nodes/cmqdemo-4kz9/Line1/Filler klasörünü bulacaksınız. Edge tarafında Temperature değerini değiştirin; Engine tag'i bir an içinde onu takip eder.
Adım 4: Ignition MQTT Trafiğini Bağımsız Olarak Doğrulayın
Bir şeyler ters gittiğinde yalnızca Ignition'ın değil broker'ın bakış açısını da görmek istersiniz. Sparkplug B payload'ları Protobuf ile kodlanmıştır, bu yüzden ham bir abone ikili veri gösterir; ancak topic'ler tek başına çok şey anlatır:
mosquitto_sub -h broker.connectmq.com -p 1883 -i ign-watch-4kz9 \
-t 'spBv1.0/cmqdemo-4kz9/#' -t 'spBv1.0/STATE/#' -v
Sırasıyla şunları görmelisiniz: host'un STATE mesajı, Line1 için NBIRTH, Filler için DBIRTH ve ardından tag değerleri her değiştiğinde DDATA mesajları. Veri olmadan tekrarlanan birth mesajları görüyorsanız edge node sürekli yeniden bağlanıyordur; bunun nedeni genellikle bir client ID çakışmasıdır.
Payload'ları kendi kodunuzda çözmek için Python ile Sparkplug B çözme eğitimini izleyin. Özel bir ConnectMQ broker'ında bunu portal sizin için yapar: canlı topic gezgini Sparkplug B'yi okunabilir metriklere çözer ve broker Sparkplug verilerini ISA-95 tarzı topic'lere yeniden yayınlayabilir. Örneğin spBv1.0/factory1/DDATA/line1/cnc1, connectmq/factory1/production/line1/cnc1/telemetry olarak yeniden yayınlanır; böylece Sparkplug konuşmayan panolar ve betikler düz topic'lere abone olabilir.
Bir Bakışta Sparkplug Mesaj Akışı
| Mesaj | Yayınlayan | Amaç | Retained |
|---|---|---|---|
| STATE | MQTT Engine (primary host) | Host çevrimiçi veya çevrimdışı | Evet |
| NBIRTH / DBIRTH | MQTT Transmission | Tipleri ve güncel değerleriyle tam metrik listesi | Hayır |
| NDATA / DDATA | MQTT Transmission | Yalnızca değişen değerler | Hayır |
| NDEATH | Broker, edge node'un Last Will'i olarak | Edge node çevrimdışı | Hayır |
| DDEATH | MQTT Transmission | Cihaz çevrimdışı | Hayır |
| NCMD / DCMD | MQTT Engine | Yazmalar ve rebirth istekleri | Hayır |
Bu tabloyu anlamak Ignition MQTT bulmacalarının çoğunu çözer. Engine'deki tag'ler NDEATH ile bayatlar ve Engine'den gelen bir rebirth isteği bir kesintiden sonra her şeyi yeniler. Sparkplug B payload rehberi metrik yapısını derinlemesine açıklıyor.
Üretime Geçiş
Gerçek bir sahayı bağlamadan önce:
- TLS'li özel bir broker kullanın. URL'leri
ssl://...:8883olarak değiştirin ve her modül örneği için verilen kimlik bilgilerini kullanın. - Anlamlı Group ve Edge Node ID'leri seçin. Bunlar isim alanınızın omurgası olur; saha ve hat adlarıyla uyumlu hale getirin.
- Transmission'ı ayarlayın. DDATA'nın gerçek değişiklikleri taşıması için Ignition'da tag ölü bantları kullanın ve güvenilmez bağlantılar için Transmission'daki store-and-forward seçeneklerini değerlendirin.
- Broker limitlerini tasarımınızla karşılaştırın. Sparkplug veri için QoS 0, STATE ve death mesajları için QoS 1 ve ayrıca retained STATE kullanır. Bağlantı sayılarını planlayın: her gateway'deki her modül örneği bir client'tır.
- Yazmaları kısıtlayın. Engine, DCMD aracılığıyla edge tag'lerine yazabilir. Buna izin verilip verilmeyeceğine karar verin ve edge'de yazılabilir tag'leri sınırlayın.
- Host'u ve edge'leri izleyin. Yalnızca proses değerlerinde değil, NDEATH'te ve STATE'in çevrimdışına geçmesinde de alarm üretin.
Her kontrol merkezinde broker işletmemeyi tercih ediyorsanız, bir barındırılan MQTT broker olarak ConnectMQ sertifikaları, güncellemeleri ve taşkın korumasını sizin yerinize yönetir. Daha geniş SCADA tasarım soruları için SCADA sistemlerinde MQTT ve MQTT ile endüstriyel IoT rehberine bakın.
Sorun Giderme
- Sunucu disconnected gösteriyor. Yanlış URL şeması (
tcp://ilessl://), porttaki güvenlik duvarı veya yanlış kimlik bilgileri. - Edge bağlı ama birth yok. Transmission'da Primary Host ID ayarlı ancak Engine bağlı değil veya farklı bir ID kullanıyor; bu yüzden edge STATE'i bekliyor.
- Birth mesajları birkaç saniyede bir tekrarlanıyor. İki client aynı client ID'yi paylaşıyor veya iki Transmission örneği aynı Group ve Edge Node ID'lerini yayınlıyor.
- Engine tag'leri kötü kalite gösteriyor. Edge NDEATH gönderdi veya host hiç gelmeyen bir rebirth istedi. Edge gateway'in günlüklerini kontrol edin.
- Herkese açık broker'da hiçbir şey yok. Herkese açık broker limitlerinin testinize uyduğunu kontrol edin: client başına saniyede 10 mesaj ve mesaj başına 64 KB.
Ignition'ı ConnectMQ'ya Bağlayın
Ignition gateway'lerinize Sparkplug B'yi sizin için çözen, paylaşımlı ve her zaman açık bir broker verin. app.connectmq.com adresinde kredi kartı gerektirmeden ücretsiz bir Serverless broker oluşturun, URL'yi ve kimlik bilgilerini MQTT Transmission ve Engine'e yapıştırın ve tag'lerinizin topic gezgininde belirmesini izleyin. Önce denemek mi istiyorsunuz? Herkese açık MQTT test broker'ı yukarıdaki laboratuvar kurulumuyla çalışır.
Sık Sorulan Sorular
Harici bir broker kullanıyorsam MQTT Distributor'a ihtiyacım var mı?
Hayır. MQTT Transmission ve MQTT Engine'i harici broker'a yönlendirin ve Distributor sunucu girişlerini devre dışı bırakın veya kaldırın.
Ignition, Sparkplug B yerine düz JSON yayınlayabilir mi?
MQTT Transmission, Sparkplug B etrafında kurulmuştur. Özel JSON topic'leri için Cirrus Link ayrı bir modül sunar ya da standart bir MQTT client ile gateway betiklerinden yayın yapabilirsiniz.
MQTT Engine tag'lerim neden bayatlıyor?
Genellikle edge node bağlantısı koptuğu ve NDEATH mesajı yayınlandığı için ya da host ve edge farklı Primary Host ID'leri kullandığı için. Her iki taraftaki sunucu durumunu kontrol edin.
Ücretsiz plan Sparkplug B'yi destekliyor mu?
Evet. Sparkplug, ücretsiz Serverless planın bağlantı ve mesaj boyutu limitleri dahilinde desteklediği QoS 0 ve 1 ile retained mesajlara ihtiyaç duyar.



