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

ttyAMA0, ttyS0, serial0: Modbus HAT'im Pi 3B+ üzerinde hangisini kullanmalı?

ttyAMA0, ttyS0, serial0: Modbus HAT'im Pi 3B+ üzerinde hangisini kullanmalı?

Çözüldü 4 4

Yapay zekâ tarafından English dilinden çevrildi ·

Pi 3B+, Raspberry Pi OS Bookworm, GPIO başlığında bir RS485 HAT. Python’da minimalmodbus ile üç fazlı bir enerji sayacını 9600 8N1, adres 5 üzerinden sorguluyorum ve her dakika kW ve kWh değerlerini Hermetry’ye yayınlıyorum.Sorun: yaklaşık beş sorgudan biri başarısız oluyor. Ya zaman aşımı ya da CRC hatası. Aynı sayaç, dizüstü bilgisayarımdaki bir USB-RS485 çubuğunda her seferinde yanıt veriyor. Betiğim /dev/ttyAMA0 dosyasını açıyor, çünkü HAT üreticisinin örneği bunu kullanmış. Sonra bir forum gönderisinde ttyS0, başka birinde serial0 kullanılmasını önerildiğini okudum ve artık ttyAMA0’ın tam olarak ne olduğunu gerçekten bilmiyorum.

minimalmodbus.NoResponseError: No communication with the instrument (no answer)
minimalmodbus.InvalidResponseError: Checksum error in rtu mode: 'x8ax1f' instead of 'x0exc4' .

Aradaki fark nedir ve hangisini kullanmalıyım?

Ground loops are my cardio.
♥ 0

Yapay zekâ tarafından English dilinden çevrildi ·

ttyAMA0 bir USB şey mi? ACM/USB adlarının USB için olduğunu hep düşünmüştüm.

Measure twice, poll once.
♥ 0

Yapay zekâ tarafından English dilinden çevrildi ·

Hayır, USB değil. Bir keresinde bir Pi 3’te düzensiz Modbus yaşadım ve çözümün bir parçası, giriş konsolu portu paylaştığı için console=serial0,115200 ifadesini cmdline.txt dosyasından çıkarmaktı. Ama bunun senin sorununun tamamı olup olmadığını bilmiyorum.

QoS 1 and a lot of patience.
♥ 2

Yapay zekâ tarafından English dilinden çevrildi ·

Emily’nin bahsettiği kısım da bunun bir parçası. Geri kalanı herkesi yakalayan Pi 3 UART karmaşası.Pi 3/4/Zero W’de iki UART var. ttyAMA0, kendi saatine sahip iyi olan PL011. ttyS0 ise mini UART; baud hızı VPU çekirdek saatinden türetiliyor, dolayısıyla çekirdek saati kaydığında baud sapıyor ve tam olarak beşte bir oranındaki CRC hatalarınızı alıyorsunuz. Bu modellerde PL011 varsayılan olarak onboard Bluetooth’a bağlı, GPIO başlığı ise mini UART’ı alıyor. /dev/serial0, GPIO14/15’te hangisi varsa her zaman ona işaret eden bir takma addır.Yani yapılandırmanıza bağlı olarak ya Bluetooth çipiyle ya da mini UART ile konuşuyordunuz. PL011’i başlığa geri verin:

# /boot/firmware/config.txt (Bookworm)
enable_uart=1
dtoverlay=disable-bt

sudo systemctl disable hciuart
# ve console=serial0,115200 satırını /boot/firmware/cmdline.txt dosyasından kaldırın
sudo reboot

Ardından betiğinizde /dev/serial0 dosyasını açın; başka bir modele geçerseniz de çalışmaya devam eder. Onboard Bluetooth’u kaybedersiniz, ama bir sayaç okuma kutusunda bunu özlemezsiniz.Bluetooth’a ihtiyacınız varsa diğer seçenek, mini UART için saati sabitlemek üzere core_freq=250 kullanmak, ama ben PL011’e sahip olmayı tercih ederim.

Ask me about 4–20 mA.
Kabul edilen çözüm♥ 1

Yapay zekâ tarafından English dilinden çevrildi ·

disable-bt ve konsolun kaldırılması sorunu çözdü. Gece boyunca 600 sorgu, sıfır CRC hatası, sıfır zaman aşımı. Görünüşe göre ttyAMA0 üzerinden hiçbir işe yaramayan bir şeyle konuşuyormuşum ve script yeniden deneme mekanizmasına geçiyormuş, bu da bazen başarısız oluyormuş. serial0’a geçirdim. Kevin, ttyAMA, USB değil, ARM PL011 adlandırmasıdır.

Ground loops are my cardio.
♥ 0
5 yazı görüntüleniyor – 1 ile 5 arası (toplam 5)
  • 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ş