Basit Bir şekilde ModBus Haberleşmesi

Başlatan Mucit23, 14 Ekim 2019, 21:42:03

Mucit23

Adres kısmında nasıl bir hata yapıyor olabilirim? Adresi yanlış giriyorum sorun bu.

SimplyModbus'da ILLEGAL DATA ADRESS için aşağıdaki gibi bir açıklama mevcut.
Alıntı YapThe data address received in the query is not an allowable address for the slave. More specifically, the combination of reference number and transfer length is invalid. For a controller with 100 registers, a request with offset 96 and length 4 would succeed, a request with offset 96 and length 5 will generate exception 02.

Adres aralığı dökümandaki gibi doğrudan yazılıyormu yada herhangi bir ofset vs mi ekleniyor emin değilim. Fakat Doğrudan yazınca hata alıyorum. Adres değerleri dökümanda desimal olarak verilmiş. Ben HEX karşılığını gönderiyorum.

Yardımcı olabilecek biri var mı?

fahri-

#16
Masterdan gönderdiğin tüm datalar hex kodunda olursa kafan karışmaz sanıyorum.
Decimal veya hex farketmez. işlemcinden gönderdiğin data sonuçta karşıya hex olarak gidecek. 100Decimal göndermekle 64Hex göndermek aynı şey.
Slave'i sorguladığında sana cevap dönüyorsa slave adresin yanlış değildir. Sorgulamanda hata vardır. Çünkü adres yanlışsa slave, bu benim adresim değil der ve cevap vermez.
İlegal data adres demek, sorguladığın okumak istediğin data adresinin slave de olmaması demek. Yani yanlış data adres sorguluyorsun.

Mucit23

Evet aynen öyle Slave adres doğru. Adresi değişince sensör hiç cevap vermiyor. Sorun dediğiniz gibi. Sorgulama yaptığım adres yanlış muhtemelen ama anlamıyorum. Elimdeki dökümanda adresler net bir şekilde belirtilmiş. Sensörle ilgili başka bir döküman da bulamadım. Hatta aynı yapıda bir oksijen sensörünün manualine baktım. Primary Measueement Channel adresleri aynı. Request ve repsonse için örnek de vermişler. Benim yaptığım sorgular aynı. Sensörün manualinin farklı olabileceğinden şüphelenmeye başladım.

Dün gece Hamilton firmasının destek kısmına mail attım sorunumu yazdım. Bugün teknik bir yetkilinin benimle ilgileneceğini belirten bir cevap yazdılar.

Bakalım ordan ne çıkacak. 

fahri-

Eğer adresler manuelde yanlışsa holding registerları sırasıyla tarayan ufak bir rutin yaz. Sırayla okusun, Biraz zaman alır ama bulunur.

Cemre.

QModMaster isimli yazılım ile USB RS485 dönüştürücü kullanarak kolayca denemeler yapabilirsiniz.

Mucit23

Hamiltondan bana bu şekilde bir uyarı geldi. Aşağıdaki açıklamaları dikkate almam gerektiğini söylüyorlar


Verilen açıklamada "Bazı Modbus Master Protokollerinde Register sayacı 0 dan başlar. Genellikle Modbus Master Yazılımı bu addreslemeyi çevirir."

Demek istediğini anladım fakat Burda Modbus Master Yazılımı SimplyModbus gibi bir yazılım. Veya doğrudan STM32 ile gönderiyorum. Ne göndersem o gidiyor. Ama dediğini bir deneyeyim. İlginç bir durum.

Mucit23

Sanırım sorunu çözdüm.  :)  Aynen mailde belirttikleri gibi Okumak istenen Adres - 1 yapmak gerekiyormuş. Şimdi İllegal Data Adress hatası düzeldi. 2090 Nolu Adresten Sorgulama yaptığımda Aşağıdaki cevabı alıyorum şuanda.

01 03 14 10 00 00 00 A1 84 40 F6 00 00 00 00 00 00 00 00 00 00 41 60 64 B0

2090 Nolu Adres için Manual'de aşağıdaki gibi bir açıklama mevcut.


Reg3 ve Reg4 PH değeri olması gerekiyor açıklamaya göre. Yani 0x40F6A184 değeri lazım bana. Eğer sıralama yanlış olmadıysa anlık PH değeri bu olması gerekir. Bunu float olarak çevirdiğimde 7.7072163 yapar ki Buda Bekleme Sıvısının PH değeri olsa gerek.

Her okuma yaptığımda Bu değer değişiyor. Okunan değer 7.69-7.70 arası değişiyor. 

Aynı Şekilde PMC6 yı da okuyarak Sıcaklık verilerine de ulaştım. Cevap yazan arkadaşlara teşekkürler.