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

ttyAMA0, ttyS0, serial0 : lequel mon HAT Modbus doit-il utiliser sur un Pi 3B+ ?

ttyAMA0, ttyS0, serial0 : lequel mon HAT Modbus doit-il utiliser sur un Pi 3B+ ?

Résolu 4 4

Traduit de English par IA ·

Pi 3B+, Raspberry Pi OS Bookworm, un HAT RS485 sur le connecteur GPIO. Un script Python avec minimalmodbus interroge un compteur d’énergie triphasé en 9600 8N1, adresse 5, et publie les kW et kWh vers Hermetry toutes les minutes.Problème : environ une requête sur cinq échoue. Soit un timeout, soit une erreur CRC. Le même compteur, connecté à mon ordinateur portable via une clé USB-RS485, répond à chaque fois. Mon script ouvre /dev/ttyAMA0 parce que c’est ce que l’exemple du fabricant du HAT utilisait. Ensuite, j’ai lu un message sur un forum conseillant ttyS0, un autre conseillant serial0, et honnêtement je ne sais plus ce qu’est ttyAMA0.

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

Quelle est la différence et lequel dois-je utiliser ?

Ground loops are my cardio.
♥ 0

Traduit de English par IA ·

ttyAMA0, c’est un truc USB ? J’ai toujours pensé que les noms ACM/USB étaient réservés à l’USB.

Measure twice, poll once.
♥ 0

Traduit de English par IA ·

Pas l’USB. J’ai eu une liaison Modbus instable sur un Pi 3 une fois, et une partie de la solution a été de retirer console=serial0,115200 de cmdline.txt, car la console de connexion partageait le port. Je ne sais pas si cela explique tout ton problème.

QoS 1 and a lot of patience.
♥ 2

Traduit de English par IA ·

Le point d’Emily fait partie du problème. Le reste, c’est le jeu de permutation des UART du Pi 3, qui piège tout le monde.Les Pi 3/4/Zero W disposent de deux UART. ttyAMA0 est le PL011, le bon, avec sa propre horloge. ttyS0 est le mini UART, dont le débit en bauds est dérivé de l’horloge du cœur VPU ; quand l’horloge du cœur varie, le débit dérive, et c’est exactement ce qui provoque vos erreurs CRC une fois sur cinq. Sur ces modèles, le PL011 est par défaut relié au Bluetooth intégré et l’en-tête GPIO reçoit le mini UART. /dev/serial0 est un alias qui pointe toujours vers celui qui se trouve sur GPIO14/15.Donc, selon votre configuration, vous parliez soit à la puce Bluetooth, soit au mini UART. Rendez le PL011 à l’en-tête :

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

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

Ensuite, ouvrez /dev/serial0 dans votre script, pour que tout continue de fonctionner si vous passez à un autre modèle. Vous perdez le Bluetooth intégré, ce qui, sur un boîtier de relevé de compteurs, ne vous manquera pas.Si vous avez besoin du Bluetooth, l’autre option est core_freq=250 pour figer l’horloge du mini UART, mais je préfère nettement le PL011.

Ask me about 4–20 mA.
Solution acceptée♥ 1

Traduit de English par IA ·

disable-bt plus la suppression de la console ont réglé le problème. 600 interrogations pendant la nuit, zéro erreur CRC, zéro timeout. J’étais sur ttyAMA0 et je communiquais apparemment avec… rien d’utile, et le script basculait sur des tentatives qui réussissaient parfois. Je suis passé à serial0. Kevin, ttyAMA est la désignation ARM PL011, pas USB.

Ground loops are my cardio.
♥ 0
5 sujets de 1 à 5 (sur un total de 5)
  • 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