İçeriğe geç
Proxus 2.0.1 2.0 geçişinden sonra lisans ve giriş düzeltmeleri Sürüm notları

Ücretsiz araç

Modbus register dönüştürücü

Cihazdan okuduğunuz ham register değerlerini yapıştırın; 16, 32 ve 64 bit tam sayı, dört byte ve word sırasının hepsinde float ve metin karşılıklarını tek seferde görün. Doğru okuma, cihazın gösterdiği değerle örtüşen okumadır.

0x4366 0x8000 → 230,5 V

Onluk ya da 0x4366, 4366h biçiminde hex. Değerleri cihazın gönderdiği sırayla boşluk, virgül ya da yeni satırla ayırın.

Register tipi

İsteğe bağlı. Dokümandaki 40101 gibi bir referans ya da 100 gibi sıfırdan başlayan adres.

İsteğe bağlı. Register haritasındaki çarpan; ör. değer onda bir hassasiyetle geliyorsa 0,1.

Çözülen değerler

Her register tek başına

Tek bir 16 bit register: işaretsiz, işaretli, hex, bitler ve iki byte’ının karakter karşılığı.

#Hexuint16int16İkilikASCII
10x436617254172540100 0011 0110 0110Cf
20x800032768-327681000 0000 0000 0000··

İki register’dan 32 bit değerler

Yan yana her register çifti, dört sıranın hepsiyle. Gerçek bir cihazın göndereceği aralıktaki float değerler işaretlenir.

Sırafloat32int32uint32Byte’lar (MSB önce)
Register 1-2 · 0x4366 0x8000
ABCDBig-endian230,51130790912113079091243 66 80 00
CDABWord swap-2,4178e-41-2147466394214750090280 00 43 66
BADCByte swap2,3021767e+231715667072171566707266 43 00 80
DCBALittle-endian1,1791628e-388414787841478700 80 66 43

Dört register’dan 64 bit değerler

Art arda her dört register; double değerler ve 64 bit sayaçlar için.

64 bit değerleri görmek için en az dört register girin.

Metin (ASCII)

Model adı, seri numarası ve yazılım sürümü çoğu zaman register başına iki karakter olarak tutulur.

Önce yüksek byte
Cf··
Önce düşük byte (byte swap)
fC··

Temel bilgiler

Modbus register’ları nasıl okunur?

Bir Modbus register’ı 16 bitlik tek bir word’dür. Tek ondalıklı bir sıcaklıktan 64 bitlik bir enerji sayacına kadar her değer bu word’lerden oluşur.

Holding ve input register’lar
Holding register’lar 03 fonksiyon koduyla okunur; cihaz izin veriyorsa 06 ya da 16 ile yazılır. Set değerleri, ayarlar ve birçok enerji analizöründe ölçümler de burada durur. Input register’lar 04 fonksiyon koduyla okunur ve yalnızca okunabilir. Değerin hangi tabloda olduğunu register haritası söyler.
40001 mi, 0 mı?
Dokümanlar holding register’ları çoğu zaman 40001’den, input register’ları 30001’den numaralar. Baştaki rakam tabloyu belirtir, kalan basamaklar 1’den sayar. İstekte ise sıfırdan başlayan adres gider; 40001 adres 0, 40101 adres 100 demektir. Bazı kılavuzlar adresi doğrudan yazar. Tüm değerler bir register kaymış görünüyorsa adresi bir eksik ya da bir fazla deneyin.
Daha geniş değerler
32 bitlik bir tam sayı ya da float iki register, 64 bitlik bir sayaç ya da double dört register kaplar. Metinde her register’a iki karakter düşer. Veri tipini, uzunluğu ve iyi bir dokümanda byte sırasını register haritası verir.

Örnek dönüşüm

0x4366 0x8000 nasıl 230,5 olur?

Bir enerji analizörü L1 gerilimi için iki holding register döndürüyor: 0x4366 0x8000. Register haritasında veri tipi float32, sıra big-endian yazıyor. Dönüştürücü bu değerlerle açılır.

  1. Register’lardan byte’lara 0x4366 0x8000 → 43 66 80 00
  2. Byte’lardan bitlere 0100 0011 0110 0110 1000 0000 0000 0000
  3. İşaret, 1 bit 0 → pozitif
  4. Üs, 8 bit 10000110 = 134; 134 − 127 = 7
  5. Mantis, 23 bit 1 + 0x668000 ÷ 2^23 = 1,80078125
  6. Değer 1,80078125 × 2^7 = 230,5

Analizör word sırasını ters gönderirse

Düşük word’ü önce gönderen bir analizör aynı ölçümü 0x8000 0x4366 olarak döndürür. Bu byte’lar big-endian okunursa -2,4178e-41 çıkar; hiçbir analizör böyle bir değer göstermez. CDAB (word swap) olarak okunduğunda yine 230,5 elde edilir.

Byte ve word sırası

Aynı değer neden dört farklı biçimde gelir?

Modbus tek bir register’ın içindeki sırayı belirler: önce yüksek byte. Bir register’dan geniş değerler için bir şey söylemez; çiftin hangi register’ının önce geleceğine her üretici kendisi karar vermiştir. Little-endian işlemcili cihazlar çoğu zaman düşük word’ü önce gönderir. Byte swap ve tamamen little-endian sıra daha seyrektir, ama sahada karşınıza çıkar.

Doğru sıra nasıl anlaşılır?

Kontrol edebileceğiniz bir değeri okuyun: analizör ekranındaki gerilim ya da şebeke frekansı gibi. Değeri burada çözün; doğru sıra fiziksel olarak anlamlı sonucu veren sıradır. 230,5 V doğrudur; 2,3021767e+23 ya da -2,4178e-41 yanlıştır. Bir cihaz genellikle tüm 32 bit değerlerinde aynı sırayı kullanır; kontrol ettiğiniz tek bir değer gerisini de belirler.

Sıra Diğer adı 230,5 hatta nasıl gelir
ABCD Big-endian, önce yüksek word 0x4366 0x8000
CDAB Word swap, önce düşük word 0x8000 0x4366
BADC Byte swap 0x6643 0x0080
DCBA Little-endian 0x0080 0x6643

Dönüştürücünün ötesinde

Byte sırasını bir kez ayarlayın, her değer doğru gelsin

Dönüştürücü tek bir register’ı çözmenize yardım eder. Proxus ise Modbus TCP cihazlarını, TCP üzerinden RTU ve ASCII cihazlarını doğrudan Edge Gateway’den okur; her register’ı veri tipiyle birlikte adı olan bir veri noktasına dönüştürür.

  • Dokümandaki 40001 gibi adresleri olduğu gibi girersiniz; istekte gidecek adrese dönüşümü Proxus yapar.
  • Byte sırası cihaz profilinde bir kez ayarlanır; o profili kullanan her cihaz aynı şekilde çözülür.
  • Enerji analizörleri, sürücüler ve inverterler için açık register haritaları her register’ın adresini, veri tipini, byte sırasını ve çarpanını verir.
Register haritalarına göz atın

Sık sorulanlar

Modbus hakkında en çok sorulan sorular.

Modbus nedir?
Modbus, sahadaki cihazların veri alışverişi için 1979’dan beri kullanılan açık bir haberleşme protokolüdür. Bir istemci (PLC, SCADA ya da Edge Gateway) cihaza adres ve fonksiyon kodu gönderir; cihaz 16 bitlik register’larla ya da tek bitlik coil’lerle cevap verir. Enerji analizörlerinin, sürücülerin, inverterlerin ve PLC’lerin çoğu Modbus TCP ya da Modbus RTU konuşur.
Modbus register nasıl okunur?
Önce cihazın register haritasından değerin adresini, register tipini ve veri tipini bulun. Holding register’lar 03, input register’lar 04 fonksiyon koduyla okunur; tek istekte en fazla 125 register gelir. Dokümanda 40101 yazıyorsa istekte 100 adresi gönderilir. Değer iki register’a yayılıyorsa ikisini birden okuyup veri tipine ve byte sırasına göre birleştirin; bu sayfadaki dönüştürücü sonucu her sırayla gösterir.
Modbus’ta float değer nasıl dönüştürülür?
İki 16 bitlik register’ı yan yana koyup dört byte elde edin ve IEEE 754 tek hassasiyetli float olarak okuyun. 0x4366 ve 0x8000 register’ları 43 66 80 00 byte’larını verir; bu da 230,5 eder. Sonuç anlamsız derecede büyük, küçük ya da NaN çıkıyorsa cihaz başka bir sıra kullanıyordur. Önce word swap (CDAB), sonra byte swap (BADC) ve little-endian (DCBA) deneyin.
Word swap (CDAB) ne demek?
Cihazın 32 bitlik bir değerin düşük word’ünü önce gönderdiği anlamına gelir. 0x43668000 değeri 0x4366 0x8000 yerine 0x8000 0x4366 olarak gelir. Big-endian sıraya ABCD, bu sıraya CDAB denir. Register haritalarında aynı şey “word swapped”, “low word first” ya da “little-endian word order” diye geçer.
40001 adresi neden 0 olarak gönderilir?
40001 gösteriminde baştaki 4 holding register tablosunu belirtir, kalan basamaklar 1’den sayar. Bu yüzden 40001 ilk holding register’dır ve istekte 0 adresiyle gider; 40101 ise 100 demektir. 30001 de ilk input register’dır. 400001 gibi altı basamaklı referanslar aynı kurala uyar ve 9998’in üstündeki adreslere ulaşır.