Arduino ile SDM120 enerji analizörünü Modbus RTU’dan okuyamıyorum, sürekli zaman aşımı
Selam. Yazılımcıyım, donanım tarafında acemiyim. Evde bir SDM120 tek faz enerji analizörü var, Arduino Uno + MAX485 modülü ile okuyup Ethernet shield üzerinden Hermetry’ye göndermek istiyorum. ModbusMaster kütüphanesini kullanıyorum, SoftwareSerial pin 8/9, DE ve RE birleşik pin 3’te. 9600 baud, slave ID 1.
uint8_t r = node.readHoldingRegisters(0x0000, 2);
Serial.println(r, HEX); // her seferinde E2
E2 kütüphanede “response timed out” demek. A ve B’yi ters de bağladım, değişmedi. Analizörün ekranı normal çalışıyor. Neyi kaçırıyorum?
preTransmission ve postTransmission fonksiyonlarını tanımladınız mı? Onlar olmadan MAX485 hiç göndermez.
Tanımlı, gönderirken pin 3’ü HIGH, sonra LOW yapıyor. Osiloskobum yok ama modülün TX LED’i yanıp sönüyor.
Bu cihazı geçen yıl bir müşteride okudum, üç tane tuzağı var, büyük ihtimalle üçüne birden takıldınız 🙂
1. Baud: SDM120 fabrikadan 2400 baud geliyor, 9600 değil. Menüden değiştirmediyseniz 2400 kullanın, 8N1.
2. Fonksiyon kodu: ölçümler input register’larda, holding’de değil. Yani FC04, readInputRegisters. Gerilim 30001 yani adres 0x0000, akım 0x0006, aktif güç 0x000C, toplam aktif enerji 0x0156.
3. Veri tipi: her değer iki register’lık 32 bit float, büyük sonlu (yüksek word önce).
float regsToFloat(uint16_t hi, uint16_t lo) {
uint32_t v = ((uint32_t)hi << 16) | lo;
float f; memcpy(&f, &v, 4); return f;
}
if (node.readInputRegisters(0x0000, 2) == node.ku8MBSuccess) {
float volts = regsToFloat(node.getResponseBuffer(0), node.getResponseBuffer(1));
}
Bir de istekler arasında en az 100-200 ms bekleyin, ucuz analizörler peş peşe sorguya kızıyor. Hermetry’ye gönderirken enerjiyi kümülatif kWh olarak gönderin, günlük tüketimi orada “increase” ile alırsınız.
Üçü de doğruymuş 😅 Baud 2400 yapınca E2 gitti, E1 (illegal function) geldi, readInputRegisters’a geçince 229,8 V okudum. Enerji register’ını da ekledim, kwh olarak gidiyor. Çok sağ ol Esra.
2400 baud’u ben de bilmiyordum, not aldım.
- You must be logged in to reply to this topic.
Join the conversation
Sign in to ask and answer, like helpful posts and mark the reply that solved your problem. Every contribution earns points and levels.

