modbus adres
elimdeki rölenin hex adreslerini desimal adrese çevirip 40001 ekleyerek haberleşebilirken. örneğin 8080 hex adresli veriyi 10 sisteme çevirip 40001 ekleyince okuyamıyorum.muhtemelen adres değeri bir aralığın dışında . ne yapmam gerekiyor. prensibi yazarsanız sevinirim iyi çalışmalar…
Modbus adresleri cihaz üreticileri tarafından farklı standartlarda verilebilir. En yaygın kullanım şekli aşağıdaki tabloda sol baştaki sütundur.
1-9999 0000 to 270E Read-Write Discrete Output Coils
10001-19999 0000 to 270E Read-Only Discrete Input Contacts
30001-39999 0000 to 270E Read-Only Analog Input Registers
40001-65535 0000 to 270E Read-Write Analog Output Holding Registers
Bu tablodan anlayacağınız gibi dört register alanı mevcuttur. Bazı üreticiler ise adresleri Hex olarak vermektedir. Yukarıdaki tabloda orta sütunda görebilirsiniz. Gördüğünüz Hex olarak verildiğinde dört register alanınında adresleri aynıdır. Hex olarak adres veren cihaz üreticisi register bölgesini de ifade etmek zorundadır.
Örneğin: 10A Holding register şeklinde ifade edilen adres: 40001 + 266(10A) = 40267’dir. 10A Input register şeklinde ifade edilen adres: 30001 + 266(10A) = 30267’dir.
Hex bir sayının decimal karşılığını WinTr ile bulabilirsiniz. Modbus adresinin yazıldığı yere “h 10A” yazıp enter’a bastığınızda 266 olarak hesaplayacaktır.
Bazı üreticiler ise Hex adresi verirken bölge ifade etmemek için yukarıdaki formüldeki toplam değeri hex olarak ifade eder. Örneğin: 9D4B adresinin karşılığı 40267’dir. Bu üretici register adresini direkt olarak vermiştir. 40267 ile 40001 toplamaya kalkarsak 80268 sonucuna varırız. Buda 65535 olan 16 bit sayı sınırını aşar. Böyle bir register adresi olması imkansızdır.
Sizin sorunuzun cevabı da budur. Hex 8080 decimal karşılığı 32896’dir. Bu sayı 40001 ile toplanamaz. Direkt olarak adres verilmiştir.
Modbus hakkında çok değerli bilgiler veren bu siteyi ziyaret ediniz. http://www.simplymodbus.ca/FAQ.htm
Bir kaç saatinizi ayırıp modbus konusunda uzman olabilirsiniz.
Was this answer helpful?
LikeDisliketeşekkür ederim…
Was this answer helpful?
LikeDislike.40001 eklediğim aralıktaki verilerde sorun yok ancak 300001-399999 arasında verilmiş direk adresleri bir türlü okuyamıyorum.ayrıca gönderdiğiniz linkteki tabloda 300001-399999 aralığı sadece okunabilir özellikte olmasına rağmen elimdeki ürün register tablosunda32….. adreslerin hepsiokuma yazma işaretlenmiş.Salih hocam ne yapmam gerekiyor ?ilginize teşekkür ederim…
Was this answer helpful?
LikeDislike300001 adreslerini 30001 şeklinde aradan bir sıfır eksilterek yazabilirsin. 30001 – 39999 arasındaki adresler input register alanıdır. Sadece okunan adreslerdir. Ürünün register tablosunda yanlış yazılmış.