Yeni: Yapay zekâ güvenlik duvarı tüm platformu izliyor ve her olayı sade bir dille açıklıyor. Nasıl çalıştığını görün

Pi açılışta RS-485 hattına çöp bayt basıyor, enerji analizörü cevap vermeyi kesiyor

Pi açılışta RS-485 hattına çöp bayt basıyor, enerji analizörü cevap vermeyi kesiyor

Çözüldü 6 5

Selam, evde güneş paneli tarafını izlemek için bir Pi Zero 2 W + MAX485 modülü ile Eastron SDM120 sayaçtan Modbus RTU okuyorum (9600 8N1, adres 1, minimalmodbus). Değerler Hermetry’ye gidiyor, grafikler güzel.

Sorun şu: Pi her yeniden başladığında sayaç ilk birkaç dakika cevap vermiyor, script “No communication with the instrument (no answer)” hatası basıyor. Bazen sayacın kendisini de kapatıp açmam gerekiyor. Elimdeki ucuz lojik analizörle baktım, Pi açılırken hatta 115200 civarında bir sürü anlamsız bayt gidiyor, sonra 9600’deki benim sorgularım başlıyor.

MAX485’in DE ve RE pinleri birleşik, GPIO17’ye bağlı.

♥ 0

Baud rate’i 115200 yapsan, açılıştaki baytlarla aynı hızda olur, belki sorun çıkmaz?

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

Açılışta seri konsol açık olabilir. cmdline.txt’e baktın mı?

♥ 1

Baktım, şöyle:

console=serial0,115200 console=tty1 root=PARTUUID=... rootfstype=ext4 fsck.repair=yes rootwait
♥ 0

Oğuz Bey doğru yerde. Bir su pompası istasyonunda birebir aynısını yaşamıştım, iki ayrı sebebi var.

1) Linux açılış mesajlarını ve login konsolunu seri porta veriyor, 115200’deki çöp o. cmdline.txt’ten console=serial0,115200 kısmını sil. Ya da raspi-config > Interface Options > Serial Port: login shell Hayır, donanım Evet. serial-getty servisinin de kapalı olduğunu kontrol et.

2) Asıl kalıcı çözüm DE/RE pini. Pi açılırken GPIO17 bir süre tanımsız kalıyor, MAX485 vericiyi açık bırakabiliyor, hatta gelen her şey sayaca gidiyor. DE/RE’den GND’ye 10k pull-down koy, pin sürülmediği sürece modül dinleme modunda kalsın.

Bir de Zero 2 W’de serial0 varsayılan olarak mini UART’a gidiyor, onun baud’u çekirdek saatine bağlı. Bluetooth’u kapatıp PL011’i al:

# config.txt
enable_uart=1
dtoverlay=disable-bt
# script
inst = minimalmodbus.Instrument("/dev/ttyAMA0", 1)
inst.serial.baudrate = 9600
inst.serial.timeout = 0.5
inst.clear_buffers_before_each_transaction = True

Sayaç kilitlendiğinde clear_buffers da işe yarıyor, yarım kalmış bir cevabı bir sonraki sorguya taşımıyor.

Kayıtta yoksa olmamıştır.
Kabul edilen çözüm♥ 4

Çözüldü, sağ ol Esra! Konsolu kapattım, 10k pull-down’ı lehimledim, ttyAMA0’a geçtim. Pi’yi beş kere üst üste resetledim, sayaç her seferinde ilk sorguda cevap verdi.

♥ 0

Bizde de ısı sayaçlarında benzer kilitlenme vardı, sebebi buymuş demek. Kurulumu yapan firmaya iletiyorum.

Modbus sadece register'dır, ta ki olmayana kadar.
♥ 2
7 yazı görüntüleniyor – 1 ile 7 arası (toplam 7)
  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.

Sohbete katılın

Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

Paylaş