web-dev-qa-db-fra.com

Deux ports série (RS232 et RS422) en conflit. / dev / ttyUSB crash

Problème : Le système d'exploitation Ubuntu ne peut pas gérer deux ports série lorsque les périphériques série connectés aux ports série sont sous tension. Comment surmonter ce problème et empêcher mon port de tomber en panne? Comment puis-je le résoudre?

Résumé des symptômes : Lorsque les deux convertisseurs série-USB sont connectés au PC (sans aucun périphérique série connecté), tout va bien; ils apparaissent comme ttyUSB0 et ttyUSB1. Cependant, dès que j'y connecte des périphériques série et que je les allume, l'un des ports série se bloque (il disparaît du répertoire/dev). Ce n'est pas un problème de matériel ou de câblage. Quelque chose se passe dans le système d'exploitation qui ajoute des cheveux gris dans ma tête ... Pourriez-vous s'il vous plaît aider? Veuillez lire la suite pour plus de détails.

J'utilise Ubuntu 14.04.3 sur un ordinateur portable Lenovo.

Je suis à un point où je suis capable de recréer l'erreur avec le moins de matériel et de logiciel. Les étapes ci-dessous recréent le problème:

  1. Je démarre le PC.
  2. Une fois que le PC est allumé, je lance dmesg et enregistre la sortie dans un fichier. Voir https://Pastebin.com/4fXxK1hV
  3. Je branche un périphérique USB 2.0 appelé "Labjack U3". C’est un fait qui, à mon avis, n’est pas très pertinent en la matière, mais doit être noté.
  4. Je connecte RS422 à un périphérique USB sans rien y connecter. Je lance lsusb. C'est le périphérique Bus 003 Device 003: ID 0856:ac11 B&B Electronics. La sortie est:

    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 004: ID 04f2:b44d Chicony Electronics Co., Ltd Bus 001 Device 003: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 003: ID 0856:ac11 B&B Electronics Bus 003 Device 002: ID 0cd5:0003 LabJack Corporation U3 Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

  5. J'ai de nouveau exécuté dmesg. La sortie est ici: https://Pastebin.com/uTGra1h7

  6. Je vais à /dev et lance ls -l | grep USB. Le port série apparaît: constructor@constructor-pc:~$ cd /dev constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0

  7. J'allume le périphérique connecté au port RS422. Il n'y a aucun changement dans la sortie de /dev ou ls -l | grep USB et lsusb

  8. Je connecte le convertisseur RS232 en USB. Le périphérique série n'est pas encore connecté au convertisseur. J'ai couru lsusb. C'est le périphérique Bus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port. La sortie est:

constructor@constructor-pc:/dev$ lsusb Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 004: ID 04f2:b44d Chicony Electronics Co., Ltd Bus 001 Device 003: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]

Bus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 003: ID 0856:ac11 B&B Electronics Bus 003 Device 002: ID 0cd5:0003 LabJack Corporation U3 Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

  1. je lance ensuite la commande ls -l | grep USB dans le répertoire /dev. Voici la sortie:

constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 crw-rw---- 1 root dialout 188, 1 Nov 21 18:47 ttyUSB1

  1. Jusque là tout va bien. J'exécute la commande dmesg pour tout capturer pour le dépannage. Voir: https://Pastebin.com/3kZNLtr6

  2. C'est à ce stade que le problème apparaît. Je connecte un périphérique série au convertisseur RS232 vers USB. Jusqu'à présent, tout est encore OK. J'allume le périphérique série (normalement, c'est le point où le logiciel contrôlant mon prototype se bloque). Je lance immédiatement la commande ls -l | grep USB plusieurs fois. Voici la sortie:

constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0 constructor@constructor-pc:/dev$ ls -l | grep USB crw-rw-rw- 1 root dialout 188, 0 Nov 21 16:36 ttyUSB0

Vous pouvez voir que j'ai perdu l'un de mes ports série!

  1. Maintenant, je lance dmesg pour une personne plus avertie à utiliser pour le diagnostic. Veuillez consulter: https://Pastebin.com/sCYXeKa9

Conclusions testées auxquelles je suis parvenue au cours des 5 derniers jours:

  • Les périphériques série connectés aux RS232 et RS422 fonctionnent exactement comme décrit par le fabricant dans les manuels lorsqu'un seul des périphériques est branché à la fois. Les périphériques série ne fonctionnent pas mal ou ne fonctionnent pas. Si un seul périphérique est branché à la fois, je peux communiquer avec lui et le contrôler, et il se comporte correctement.
  • Le câblage de tous les appareils est bon (double et triple vérification à l'aide de dessins et d'un compteur)
  • J'ai retiré le hub USB que j'utilisais et il a fallu beaucoup de temps pour comprendre que ce n'était pas la faute du hub.
  • J'ai exclu les différents logiciels que j'utilise pour lire les données série (je pense que les étapes décrites dans cette publication le prouvent).
  • Il est intéressant de noter que ce problème se produit sans que je puisse même envoyer ou recevoir des commandes aux périphériques série! Lorsque j'allume le périphérique connecté au convertisseur RS232 vers USB, le périphérique série n'envoie pas encore de messages (ou du moins, je ne le crois pas), mais le port série est immédiatement abandonné par le système d'exploitation.

Informations additionnelles: Au cours de la dernière semaine écoulée depuis que j'ai posé cette question, j'ai acheté davantage de ports série à USB au cas où l'un d'entre eux serait défectueux, et le comportement n'a pas changé. J'ai également remplacé le composant série qui provoque le blocage du port lorsqu'il est allumé avec une unité de rechange et le comportement n'a pas changé. J'ai aussi essayé un autre PC et le comportement n'a pas changé.

Pouvez-vous s'il vous plaît fournir une réponse avec un correctif à ce problème? Ou comment résoudre ce problème?

De plus, si je peux fournir des informations ou exécuter des commandes, n'hésitez pas à me le faire savoir!

Merci d'avance...

Mike

1
Mike

Il s’agissait d’un problème électrique et non pas d’un problème d’exploitation. J'ai câblé le port série du périphérique au côté série du convertisseur USB vers RS485 conformément à la documentation du fabricant, de la manière suivante:

Tx- to Rx- Tx+ to Rx+ Rx- to Tx- Rx+ to Tx+ gnd to gnd

Ce qui a fini par résoudre ce problème a été de déconnecter le lien entre les contacts. Il devait y avoir une boucle de masse.

1
Mike