Modbus register’larını her saniye mi göndermeli, değişince mi? Gateway yazılımında kararsızım
Tez projemde bir Pi 4 gateway yazıyorum. RS-485 üzerinden 3 Modbus RTU cihazı okuyor: bir elektromanyetik debimetre (anlık debi ve toplam, float, 2 register) ve iki PT100 transmitter. pymodbus ile her saniye hepsini okuyup her saniye v1/gw/telemetry ile gönderiyorum.
Danışmanım „her saniye göndermek saçma“ dedi ama nasıl yapmam gerektiğini söylemedi 🙂 Sorularım: register değişince mi gönderilir, periyodik mi? Değişmeyen bir değer için cihazın hâlâ yaşadığını nasıl anlarım? Bir de debimetrenin float değeri bazen 1.4e-38 gibi saçma geliyor.
Her saniye göndermek mesaj kotasını hızlı yer, cihaz başına ayda 2.5 milyonun üstü.
Binalarda biz sıcaklık için 1 dakikalık periyot kullanıyoruz, yetiyor.
Ama debimetrede kısa süreli tepeleri kaçırmamam lazım, onu nasıl yapacağım?
Okumayı hızlı, göndermeyi seyrek yap, ikisi ayrı şeyler. Biz su tarafında böyle kuruyoruz:
- Pi her saniye okumaya devam etsin.
- Her değer için bir ölü bant: PT100’de 0.2 °C, debide %1 gibi. Değer son gönderilenden ölü banttan fazla saparsa gönder.
- Hiç değişmese bile her 5 dakikada bir heartbeat olarak gönder.
- Tepeler için anlık debiye güvenme, debimetrenin toplam (totalizer) register’ını gönder. Arada ne olursa olsun toplam kaybolmaz, Hermetry’de increase ile saatlik hacmi alırsın.
Mesaj sayısı için: bir mesajın içinde kaç kayıt olduğu önemli değil, mesaj başına sayılıyor. Değişenleri biriktirip 30 saniyede bir ts’li dizi olarak tek mesajda gönderirsen hem kotaya hem detaya iyi gelir.
1.4e-38 kelime sırası. İki 16 bitlik register’ı ters birleştiriyorsun. Debimetrenin dokümanına bak, çoğu CDAB kullanıyor:
import struct
hi, lo = rr.registers[0], rr.registers[1]
abcd = struct.unpack(">f", struct.pack(">HH", hi, lo))[0]
cdab = struct.unpack(">f", struct.pack(">HH", lo, hi))[0]
Kota hesabı burada: Mesaj kotası ve kullanım
Heartbeat’i seçerken offline alarmı düşün. Profilin Inactivity timeout’u varsayılan 600 saniye, heartbeat bundan kısa olmalı yoksa sessiz ama sağlam bir cihaz için alarm açılır.
Teşekkürler Hakan Bey, Esra Hanım. Ölü bant 0.2 °C ve %1, heartbeat 5 dakika, 30 saniyede bir toplu gönderim. Debimetre CDAB’ymiş, değerler düzeldi. Bir günde mesaj sayısı 86 binden 3 bin civarına indi, danışmanım da mutlu.
Kelime sırasını anlamanın en kolay yolu: debimetrenin ekranında bilinen bir değer varken iki birleştirmeyi de yazdır, hangisi ekranla tutuyorsa o.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

