Endüstriyel IoT

Sparkplug B Veri Tipleri ve Metrik Property'leri Referansı

Her Sparkplug B veri tipine, her birinin taşındığı Protobuf alanına, Quality gibi metrik property'lerine, metrik bayraklarına ve DataSet'lere dair; çözülmüş örnekler ve yaygın dönüşüm hatalarıyla pratik bir referans.

Kodları, Protobuf değer alanları ve metrik property'leriyle Sparkplug B veri tipleri referans tablosu
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 veri tipleri, 8 bit işaretli bir tamsayıdan satır ve sütunlardan oluşan tam bir tabloya kadar her metrik değerinin tam olarak nasıl kodlandığını tanımlar. Bu referans her veri tipi kodunu kullandığı Protobuf alanıyla birlikte listeliyor, metrik property'lerini ve kalite kodlarını açıklıyor ve gerçek trafiği incelerken her tipi tanıyabilmeniz için çözülmüş örnekler gösteriyor.

Sparkplug'ın Neden Kendi Veri Tipleri Var?

JSON'da sayılar, dizeler ve boolean'lar bulunur. Endüstriyel sistemler bundan daha fazla kesinliğe ihtiyaç duyar. Bir PLC register'ı işaretsiz 16 bit bir tamsayı olabilir, bir sayaç 64 bit işaretsiz bir değer olabilir ve bir zaman damgası sıradan bir sayıyla karıştırılmamalıdır. Sparkplug B her metriğe açık bir datatype kodu verir; böylece dünyanın öbür ucundaki bir host uygulaması değeri edge node'un amaçladığı şekilde birebir yorumlar.

Veri tipi, birth mesajlarında her metrik için bildirilir. Veri mesajları bunu atlayabilir; bu yüzden tüketiciler, Sparkplug B payload rehberimizde anlatıldığı gibi veri tiplerini birth mesajlarından saklar.

Skaler Sparkplug B Veri Tipleri

Kod Ad Protobuf değer alanı Notlar
0 Unknown yok Yer tutucu, geçerli metriklerde görünmemeli
1 Int8 int_value İşaretli, işaretsiz bir alanda ikiye tümleyen
2 Int16 int_value İşaretli, ikiye tümleyen
3 Int32 int_value İşaretli, ikiye tümleyen
4 Int64 long_value İşaretli, uint64 içinde ikiye tümleyen
5 UInt8 int_value İşaretsiz
6 UInt16 int_value İşaretsiz
7 UInt32 int_value İşaretsiz
8 UInt64 long_value İşaretsiz
9 Float float_value 32 bit IEEE 754
10 Double double_value 64 bit IEEE 754
11 Boolean boolean_value true veya false
12 String string_value UTF-8 metin
13 DateTime long_value Unix epoch'tan bu yana milisaniye, UTC
14 Text string_value Daha uzun metin, String ile aynı kodlama
15 UUID string_value Dize biçiminde UUID
16 DataSet dataset_value Tipli sütun ve satırlardan oluşan tablo
17 Bytes bytes_value Ham binary veri
18 File bytes_value MetaData ile tanımlanan dosya içeriği
19 Template template_value Kullanıcı tanımlı tip veya örnek

20 ve 21 kodları (PropertySet ve PropertySetList) metrik değerleri için değil, property değerleri için kullanılır.

İşaretli tamsayı tuzağı

Sparkplug'daki en yaygın çözme hatası, işaretli tamsayıları doğrudan okumaktır. int_value işaretsiz 32 bit bir alan olduğu için -5 değerindeki bir Int32 4294967291 olarak, -1 değerindeki bir Int64 ise long_value içinde 18446744073709551615 olarak gelir. Tüketici, bildirilen veri tipine göre ikiye tümleyen uygulamalıdır. Edge node'lar kodlarken bunun tersini yapmalıdır. Bir dashboard aniden dört milyar derecelik bir sıcaklık gösteriyorsa, sebep neredeyse her zaman budur.

DateTime bir sayı değildir

Bir DateTime metriği ile bir Int64 metriği aynı alanı kullanır, ancak farklı anlamlar taşır. DateTime'ı UTC olarak epoch'tan bu yana milisaniye kabul edin ve görüntülemek için dönüştürün. Asla saniye göndermeyin ve asla yerel saat göndermeyin.

Dizi Veri Tipleri

Sparkplug, skaler tiplerin dizilerini de tanımlar. Bunlar bytes_value içinde paketlenmiş little-endian değerler olarak taşınır; Sparkplug 3.0 bu kodlamayı kesin olarak açıklar (başka nelerin netleştirildiğini görmek için Sparkplug 3.0 karşılaştırmamıza bakın).

Kod Ad Kod Ad
22 Int8Array 29 UInt64Array
23 Int16Array 30 FloatArray
24 Int32Array 31 DoubleArray
25 Int64Array 32 BooleanArray
26 UInt8Array 33 StringArray
27 UInt16Array 34 DateTimeArray
28 UInt32Array

Dizi desteği ürünler arasında farklılık gösterir. Farklı üreticiler arasında dizilere bağımlıysanız, her iki ucu da aynı broker'a bağlayarak onları erkenden test edin.

Metrik Bayrakları

Her metrik, tüketicilerin onu nasıl ele alacağını değiştiren boolean bayraklar taşıyabilir:

Bayrak Anlamı Tüketici davranışı
is_null Metrik var ama değeri yok Null veya kötü kalite olarak gösterin, yerine sıfır koymayın
is_historical Değer geçmişe ait, örneğin store and forward Saklayın, canlı değerin üzerine yazmayın
is_transient Değer historian'a kaydedilmemeli Gösterin, saklamayın

Metriklerin ayrıca payload zaman damgasından ayrı, isteğe bağlı bir timestamp alanı vardır. Değerin kaynakta ne zaman örneklendiğini kaydetmek için bunu kullanın.

Metrik Property'leri

Bir metrik bir PropertySet taşıyabilir: anahtarlar ve tipli değerlerden oluşan paralel listeler. Property değerleri aynı veri tipi kodlarını, artı iç içe yapılara izin veren PropertySet (20) ve PropertySetList (21) kodlarını kullanır.

Quality property'si

Spesifikasyonun tanımlı bir anlam verdiği tek property, bir Int32 olan Quality'dir:

Değer Anlamı
192 İyi
0 Kötü
500 Bayat (stale)

Quality değeri 0 olan bir metrik alan host, bir değer mevcut olsa bile onu kötü olarak göstermelidir. Birçok edge platformu, alttaki cihazla iletişimi kaybettiğinde ancak node'u bağlı tutmaya devam ettiğinde Quality değerini 500 yapar.

Diğer yaygın property'ler

Mühendislik birimleri, aralıklar, açıklamalar ve görüntüleme biçimleri sıklıkla property olarak taşınır, ancak anahtar adları spesifikasyonun parçası değil, her platformun kendi geleneğidir. Edge node'larınız genelinde bir property sözlüğü üzerinde anlaşın; aksi takdirde host uygulamanız aynı kavramı farklı anahtarlar altında görür.

DataSet'ler

DataSet, tek bir metriğin içindeki küçük, tipli bir tablodur. Bir sütun sayısı, sütun adları, her sütun için bir veri tipi kodu ve bir satır listesi içerir. Her satır değeri sınırlı bir alan kümesi kullanır: int, long, float, double, boolean veya string.

Çözüldüğünde, bir reçete parametre tablosu şöyle görünebilir:

{
  "name": "Recipe/Steps",
  "datatype": 16,
  "datasetValue": {
    "numOfColumns": 3,
    "columns": ["Step", "Temperature", "Duration"],
    "types": [3, 9, 7],
    "rows": [
      { "elements": [{ "intValue": 1 }, { "floatValue": 180.0 }, { "intValue": 600 }] },
      { "elements": [{ "intValue": 2 }, { "floatValue": 220.0 }, { "intValue": 300 }] }
    ]
  }
}

DataSet'ler, bir arada kalması gereken ilişkili değer grupları için kullanışlıdır. Yapılandırılmış ekipman modelleri için ise genellikle template'ler daha uygundur; Sparkplug template'leri ve UDT'ler yazısına bakın.

Çözülmüş Örnekler

İşte birkaç veri tipi ve bir Quality property'si içeren bir birth parçası, çözüldükten sonra göreceğiniz hâliyle:

[
  { "name": "Pump/Running", "alias": 1, "datatype": 11, "booleanValue": true },
  { "name": "Pump/Speed", "alias": 2, "datatype": 9, "floatValue": 1475.0,
    "properties": { "keys": ["Quality"], "values": [{ "type": 3, "intValue": 192 }] } },
  { "name": "Pump/StartCount", "alias": 3, "datatype": 8, "longValue": "18342" },
  { "name": "Pump/LastService", "alias": 4, "datatype": 13, "longValue": "1789000000000" },
  { "name": "Pump/Offset", "alias": 5, "datatype": 2, "intValue": 4294967286 },
  { "name": "Pump/Serial", "alias": 6, "datatype": 12, "stringValue": "P-0042" }
]

Int16 offset'e dikkat edin: ham 4294967286 değeri, ikiye tümleyen uygulandıktan sonra -10'dur. Ayrıca bazı JSON gösterimlerinin, JavaScript'te hassasiyet kaybını önlemek için 64 bit değerleri dize olarak gösterdiğine dikkat edin.

Veri Tiplerini Pratikte Kontrol Etmek

Veri tiplerini doğrulamanın en hızlı yolu çözülmüş birth mesajlarını okumaktır. ConnectMQ, portaldaki topic gezgininde Sparkplug B'yi çözer; böylece kod yazmadan bir NBIRTH veya DBIRTH açıp her metriğin veri tipini ve değerini kontrol edebilirsiniz. Otomatik kontroller için, Python ile Sparkplug B çözme eğitimimizdeki decoder kodları adlara eşler ve işaretli dönüşümü yapar.

Herkese açık MQTT test broker'ında test ederken rastgele bir grup ID'si kullanın ve oradaki her şeyin herkes tarafından okunabildiğini unutmayın.

Edge Node Yapılandırması İçin Veri Tipi Kontrol Listesi

  1. Her Sparkplug tipini kaynak register tipiyle eşleştirin; her şeyi Double'a genişletmeyin.
  2. Asla negatife düşmeyen sayaçlar için işaretsiz tipler kullanın.
  3. Zaman damgaları için her zaman UTC milisaniye cinsinden DateTime kullanın.
  4. Kaynağı node'dan bağımsız olarak arızalanabilen metriklerde Quality ayarlayın.
  5. Bir değer mevcut olmadığında sıfır yerine is_null kullanın.
  6. Store and forward verisini historical olarak işaretleyin.
  7. Tüm edge node'larda property anahtar adları üzerinde anlaşın.
  8. Yaygınlaştırmadan önce dizileri, DataSet'leri ve template'leri uçtan uca test edin.

Veri Tipleri Nereye Oturur?

Doğru veri tipleri, Sparkplug verisinin tag başına düzeltmeler gerekmeden historian'ları, SCADA'yı ve bir Unified Namespace'i beslemesini sağlar. Mimari rehberlik için MQTT ile Endüstriyel IoT rehberine bakın. Standartlara uygun her MQTT broker bu payload'ları taşır; bunları ayrıca çözen tam yönetilen bir MQTT servisi ise doğrulamayı çok hızlandırır.

ConnectMQ ile Başlayın

app.connectmq.com adresinde kredi kartı gerekmeden ücretsiz bir Serverless broker oluşturun. Edge node'unuzu bağlayın ve her metriğin veri tipini, değerini ve kalitesini ConnectMQ topic gezgininde kontrol edin.

Sık Sorulan Sorular

Kaç tane Sparkplug B veri tipi var?

Spesifikasyon 1'den 19'a kadar kodlarla skaler tipleri, 20 ve 21 numaralı property set tiplerini ve 22'den 34'e kadar dizi tiplerini tanımlar. 0 kodu Unknown'dur.

Negatif Sparkplug değerim neden devasa bir sayı olarak görünüyor?

İşaretli tamsayılar işaretsiz Protobuf alanlarında saklanır. Bildirilen veri tipine göre ikiye tümleyen uygulayın veya bunu sizin yerinize yapan bir decoder kullanın.

Sparkplug'da Quality 192 ne anlama gelir?

İyi kalite anlamına gelir. Quality property'si iyi için 192, kötü için 0 ve bayat için 500 kullanır.

Veri mesajlarında Sparkplug veri tipleri zorunlu mu?

Birth mesajlarında zorunlu, NDATA ve DDATA'da ise isteğe bağlıdır. Tüketiciler her metriğin veri tipini birth'ten hatırlamalıdır.

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