Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

ttyAMA0, ttyS0, serial0: Welches davon sollte mein Modbus-HAT auf einem Pi 3B+ verwenden?

ttyAMA0, ttyS0, serial0: Welches davon sollte mein Modbus-HAT auf einem Pi 3B+ verwenden?

Gelöst 4 4

Von English mit KI übersetzt ·

Pi 3B+, Raspberry Pi OS Bookworm, ein RS485-HAT auf dem GPIO-Header. Python mit minimalmodbus fragt einen Dreiphasen-Energiezähler mit 9600 8N1, Adresse 5, ab und veröffentlicht jede Minute kW und kWh an Hermetry.Problem: etwa jede fünfte Abfrage schlägt fehl. Entweder ein Timeout oder ein CRC-Fehler. Derselbe Zähler antwortet auf meinem Laptop über einen USB-RS485-Stick jedes Mal. Mein Skript öffnet /dev/ttyAMA0, weil das Beispiel des HAT-Herstellers so war. Dann habe ich einen Forenbeitrag gelesen, der ttyS0 empfiehlt, und einen anderen, der serial0 empfiehlt, und jetzt weiß ich ehrlich gesagt nicht mehr, was ttyAMA0 überhaupt ist.

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

Was ist der Unterschied und welches davon brauche ich?

Ground loops are my cardio.
♥ 0

Von English mit KI übersetzt ·

Ist ttyAMA0 so etwas wie USB? Ich dachte immer, ACM/USB-Namen seien für USB.

Measure twice, poll once.
♥ 0

Von English mit KI übersetzt ·

Nicht USB. Ich hatte einmal instabiles Modbus auf einem Pi 3, und ein Teil der Lösung war, console=serial0,115200 aus cmdline.txt zu entfernen, weil die Login-Konsole den Port mitbenutzte. Ob das dein ganzes Problem ist, weiß ich aber nicht.

QoS 1 and a lot of patience.
♥ 2

Von English mit KI übersetzt ·

Emilys Hinweis ist ein Teil davon. Der Rest ist das UART-Durcheinander beim Pi 3, das alle erwischt.Der Pi 3/4/Zero W hat zwei UARTs. ttyAMA0 ist der PL011, der gute mit eigenem Takt. ttyS0 ist der Mini-UART, dessen Baudrate aus dem Takt des VPU-Kerns abgeleitet wird. Wenn sich der Kerntakt ändert, driftet die Baudrate, und genau dann bekommst du deine CRC-Fehler im Verhältnis eins zu fünf. Bei diesen Modellen ist der PL011 standardmäßig mit dem integrierten Bluetooth verbunden, und der GPIO-Header bekommt den Mini-UART. /dev/serial0 ist ein Alias, der immer auf denjenigen zeigt, der auf GPIO14/15 liegt.Je nach Konfiguration hast du also entweder mit dem Bluetooth-Chip oder mit dem Mini-UART gesprochen. Gib den PL011 dem Header zurück:

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

sudo systemctl disable hciuart
# und console=serial0,115200 aus /boot/firmware/cmdline.txt entfernen
sudo reboot

Öffne dann /dev/serial0 in deinem Skript, damit es auch bei einem Wechsel auf ein anderes Modell weiter funktioniert. Du verlierst das integrierte Bluetooth, was du in einer Zählerstand-Box aber nicht vermissen wirst.Falls du Bluetooth brauchst, wäre die andere Option core_freq=250, um den Takt für den Mini-UART festzusetzen, aber ich hätte lieber den PL011.

Ask me about 4–20 mA.
Akzeptierte Lösung♥ 1

Von English mit KI übersetzt ·

disable-bt plus das Entfernen der Konsole hat es gelöst. 600 Abfragen über Nacht, null CRC-Fehler, null Timeouts. Ich war auf ttyAMA0 und habe offenbar mit … nichts Brauchbarem gesprochen, und das Skript fiel auf Wiederholungsversuche zurück, die manchmal erfolgreich waren. Ich habe auf serial0 umgestellt. Kevin, ttyAMA ist die ARM-PL011-Benennung, nicht USB.

Ground loops are my cardio.
♥ 0
Ansicht von 5 Beiträgen – 1 bis 5 (von insgesamt 5)
  • 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.

Teilen