Nouveau : le pare-feu IA surveille toute la plateforme et explique chaque incident en termes simples. Découvrez comment ça marche

Arduino ile SDM120 enerji analizörünü Modbus RTU’dan okuyamıyorum, sürekli zaman aşımı

Arduino ile SDM120 enerji analizörünü Modbus RTU’dan okuyamıyorum, sürekli zaman aşımı

Résolu 5 3

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?

Sahadan selamlar.
♥ 2

preTransmission ve postTransmission fonksiyonlarını tanımladınız mı? Onlar olmadan MAX485 hiç göndermez.

Ağ geçidi yine bağlanıyor…
♥ 0

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.

Sahadan selamlar.
♥ 0

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.

Kayıtta yoksa olmamıştır.
Solution acceptée♥ 6

Üçü 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.

Sahadan selamlar.
♥ 0

2400 baud’u ben de bilmiyordum, not aldım.

Ağ geçidi yine bağlanıyor…
♥ 0
6 sujets de 1 à 6 (sur un total de 6)
  • Vous devez être connecté pour répondre à ce sujet.

Rejoignez la discussion

Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

Partager