Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

ttyAMA0, ttyS0, serial0: ¿cuál debería usar mi HAT Modbus en una Pi 3B+?

ttyAMA0, ttyS0, serial0: ¿cuál debería usar mi HAT Modbus en una Pi 3B+?

Resuelto 4 4

Traducido del English por IA ·

Pi 3B+, Raspberry Pi OS Bookworm, un HAT RS485 en el header GPIO. Un script en Python con minimalmodbus consulta un medidor de energía trifásico a 9600 8N1, dirección 5, y publica kW y kWh en Hermetry cada minuto.Problema: aproximadamente una de cada cinco consultas falla. Puede ser un timeout o un error CRC. El mismo medidor, conectado a mi portátil mediante un adaptador USB-RS485, responde siempre. Mi script abre /dev/ttyAMA0 porque eso es lo que usaba el ejemplo del fabricante del HAT. Luego leí un foro que recomendaba ttyS0, otro que recomendaba serial0, y sinceramente ya no sé qué es ttyAMA0.

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

¿Cuál es la diferencia y cuál debo usar?

Ground loops are my cardio.
♥ 0

Traducido del English por IA ·

¿ttyAMA0 es algo USB? Siempre pensé que los nombres ACM/USB eran para USB.

Measure twice, poll once.
♥ 0

Traducido del English por IA ·

No es USB. Una vez tuve Modbus inestable en una Pi 3 y parte de la solución fue quitar console=serial0,115200 de cmdline.txt, porque la consola de inicio de sesión compartía el puerto. No estoy seguro de que sea todo tu problema.

QoS 1 and a lot of patience.
♥ 2

Traducido del English por IA ·

Lo que dice Emily es parte del asunto. El resto es el lío de UART de la Pi 3, que atrapa a todo el mundo.La Pi 3/4/Zero W tiene dos UART. ttyAMA0 es la PL011, la buena, con su propio reloj. ttyS0 es la mini UART, cuya velocidad en baudios se deriva del reloj del núcleo VPU; cuando el reloj del núcleo cambia, la velocidad se desvía y obtienes exactamente tus errores CRC de uno de cada cinco. En esos modelos, la PL011 está conectada por defecto al Bluetooth integrado y el conector GPIO recibe la mini UART. /dev/serial0 es un alias que siempre apunta a la que está en GPIO14/15.Así que, según tu configuración, estabas hablando con el chip Bluetooth o con la mini UART. Devuelve la PL011 al conector:

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

sudo systemctl disable hciuart
# y elimina console=serial0,115200 de /boot/firmware/cmdline.txt
sudo reboot

Después, abre /dev/serial0 en tu script, para que siga funcionando si cambias a otro modelo. Pierdes el Bluetooth integrado, que en una caja de lectura de contadores no vas a echar de menos.Si necesitas Bluetooth, la otra opción es core_freq=250 para fijar el reloj de la mini UART, pero prefiero la PL011.

Ask me about 4–20 mA.
Solución aceptada♥ 1

Traducido del English por IA ·

disable-bt más quitar la consola lo solucionó. 600 consultas durante la noche, cero errores CRC, cero timeouts. Estaba usando ttyAMA0 y aparentemente hablaba con… nada útil, y el script recurría a reintentos que a veces funcionaban. Lo cambié a serial0. Kevin, ttyAMA es la nomenclatura ARM PL011, no USB.

Ground loops are my cardio.
♥ 0
Viendo 5 entradas – de la 1 a la 5 (de un total de 5)
  • Debes estar registrado para responder a este debate.

Únete a la conversación

Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

Compartir