Ü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
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.
- Register’lardan byte’lara 0x4366 0x8000 → 43 66 80 00
- Byte’lardan bitlere 0100 0011 0110 0110 1000 0000 0000 0000
- İşaret, 1 bit 0 → pozitif
- Üs, 8 bit 10000110 = 134; 134 − 127 = 7
- Mantis, 23 bit 1 + 0x668000 ÷ 2^23 = 1,80078125
- 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.
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.
Modbus ve cihaz bağlantısı hakkında daha fazlası