Endüstriyel protokoller

Modbus'ta 32 bit float: ABCD, CDAB, BADC ve DCBA bayt sıraları

Tamamen geçerli bir yazmaç çiftinin neden anlamsız bir sayıya dönüştüğü, IEEE 754 tek duyarlığın iki yazmaca nasıl bölündüğü ve doğru bayt ile kelime sırasının nasıl bulunacağı.

Tek sayı, dört bayt

32 bitlik IEEE 754 tek duyarlıklı bir sayının bir işaret biti, 8 bitlik bir üssü ve 23 bitlik bir kesri vardır. En anlamlıdan en az anlamlıya doğru dört bayt olarak yazıldığında 123,456 değeri 42 F6 E9 79 olur. Bu baytlara A, B, C ve D diyelim.

Bir Modbus yazmacı yalnızca 16 bit taşır; bu yüzden sayı iki yazmaca bölünür. Modbus, bir yazmaç içindeki iki baytın sırasını sabitler (hatta önce yüksek bayt), ancak 32 bitlik bir değerin yüksek yarısını hangi yazmacın taşıyacağını söylemez. Her üretici kendi kararını verir; sorun da buradan başlar.

Dört yaygın yerleşim

YerleşimYaygın adİlk yazmaçİkinci yazmaç
ABCDBüyük uçlu (big-endian)0x42F60xE979
CDABKelime yer değiştirmiş0xE9790x42F6
BADCHer kelime içinde bayt yer değiştirmiş0xF6420x79E9
DCBAKüçük uçlu (little-endian)0x79E90xF642

Adlar birer gelenektir ve farklı üreticiler aynı yerleşim için farklı sözcükler kullanır. Bir cihazı bir etikete güvenmek yerine, tablodaki gibi gerçek yazmaç içerikleriyle tanımlayın.

Yanlış sıra neye benzer?

Cihaz 123,456 değerini CDAB (E979 42F6) olarak gönderiyor ancak yazılımınız ABCD olarak çözüyorsa sonuç hafifçe değil, saçma biçimde yanlış çıkar:

Cihazın gönderdiğiHattaki yazmaçlarABCD olarak çözülünce
ABCD42F6 E979123,456
CDABE979 42F6−1,88 × 10²⁵
BADCF642 79E9−9,86 × 10³²
DCBA79E9 F6421,52 × 10³⁵

Astronomik büyüklükte değerler veya yalnızca gerçek değer küçük olduğu için makul görünen değerler, bayt ya da kelime sırasının yanlış olduğuna güçlü bir işarettir. İkinci durumda dikkatli olun: yanlış bir sıra bazı girdiler için yine de inandırıcı bir sayı üretebilir; bu yüzden tek bir başarılı okuma kanıt değildir.

Doğru sırayı nasıl bulursunuz?

  1. Bildiğiniz bir değeri okuyun. Kendi yazdığınız bir set değerini veya ortam sıcaklığı gibi bariz değeri olan bir büyüklüğü kullanın.
  2. Dört yerleşimi de çözün. İki yazmaç değerini PLC veri tipi dönüştürücüye yapıştırıp dört sonucu karşılaştırın. Yalnızca biri mantıklı çıkacaktır.
  3. İkinci bir değerle doğrulayın. Farklı büyüklükte, proses izin veriyorsa negatif bir değer seçin; çünkü yanlış bir yerleşim özel değerlerde doğru olanla çakışabilir.
  4. Kaydedin. Yerleşimi, o cihaz ve blok için yazmaç haritasına; adres, veri tipi ve ölçeklemenin yanına yazın.

Bazı cihazlar kelime sırası için bir yapılandırma ayarı sunar. Sizinki sunuyorsa bunu bilerek değiştirin ve ayarı belgeleyin; çünkü bir ürün yazılımı sıfırlaması varsayılana dönüş getirebilir.

Aynı sorun float’larla sınırlı değildir

  • INT32 ve UINT32 aynı dört yerleşime sahiptir ve aynı biçimde yanlış çıkar: 1’er 1’er artması gerekirken 65.536 atlayan bir sayaç genellikle kelime sırası sorunudur.
  • 64 bitlik değerler (double, büyük sayaçlar) dört yazmaca yayılır ve daha da fazla permütasyona izin verir. Aynı disiplinle ele alın.
  • Metinler yazmaç başına iki karakter paketler; bir yazmaç içindeki karakter sırası da cihazlar arasında farklı olabilir.

Float tahmin etmek yerine tam sayıyı ölçekleyin

Birçok saha cihazı sorunu, belgelenmiş bir ölçekle 16 bitlik bir tam sayı sunarak önler; örneğin 2345 değeri 23,45 °C anlamına gelir. Bu, yanlış gitme yollarının sayısını yarıya indirir. Seçme şansınız varsa tam sayı ve ölçeği tercih edin; ölçeği yalnızca bir kez, uçta uygulayın ve çarpanı yazmaç haritasına yazın. Endüstriyel veri dönüştürücü yazmaç verisine ölçekleme uygular ve sonucu CSV veya JSON olarak dışa aktarır.

Sonraki adım

Modbus adresleme ve fonksiyon kodlarının temellerinden başlayın; ardından bayt sırasını, işaretliliği ve ölçeklemeyi her devreye almanın parçası yapmak için yazmaç haritası doğrulama kontrol listesini kullanın.

BİR SONRAKİ ADIM

Hesaplamadan uygulamaya.

Makinenizi, veri akışınızı veya üretim hedefinizi birlikte değerlendirelim. Birkaç cümleyle durumunuzu yazın; ASP Dijital ekibi size e-posta ile dönsün.

ASP Dijital ile görüşün