Problema : Meu sistema operacional Ubuntu não consegue lidar com duas portas seriais quando os dispositivos seriais conectados às portas seriais estão ligados. como superar esse problema e evitar que minha porta trave? Como eu mesmo soluciono isso?
Sinopse dos sintomas : Quando os dois conversores serial para USB estão conectados ao PC (sem nenhum dispositivo serial conectado a eles), tudo está bem; eles aparecem como ttyUSB0 e ttyUSB1. No entanto, assim que conecto dispositivos seriais a eles e ligo os dispositivos seriais, uma das portas seriais falha (desaparece do diretório /dev). Este não é um problema de hardware ou de fiação. Algo está acontecendo no sistema operacional que está adicionando cabelos grisalhos à minha cabeça.... Você poderia ajudar? Por favor, leia para mais detalhes.
Estou executando o Ubuntu 14.04.3 em um laptop Lenovo.
Estou em um ponto em que posso recriar o erro com o menor número de peças de hardware e software. As etapas abaixo recriam o problema:
Eu ligo o PC.
Assim que o PC é ativado, eu corro
dmesg
e salvo a saída em um arquivo. Veja https://pastebin.com/4fXxK1hVEu conecto um dispositivo USB 2.0 chamado "Labjack U3". Este é um fato que não acredito ser muito relevante para este assunto, mas deve ser observado.
Eu conecto o RS422 ao dispositivo USB sem nada conectado a ele. eu corro
lsusb
. É oBus 003 Device 003: ID 0856:ac11 B&B Electronics
aparelho. A saída é: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`
Corri
dmesg
de novo. A saída está aqui: https://pastebin.com/uTGra1h7Eu vou
/dev
e corrols -l | grep USB
. A porta serial aparece: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
Eu ligo o dispositivo conectado à porta RS422. Não há mudança na saída de
/dev
ouls -l | grep USB
elsusb
Eu conecto o conversor RS232 para USB. O dispositivo serial ainda não está conectado ao conversor. eu corri
lsusb
. É oBus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
aparelho. A saída é: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
em seguida, executo o
ls -l | grep USB
comando no/dev
diretório. Aqui está a saída: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
Até este ponto está tudo OK. Eu corro o
dmesg
comando para capturar tudo para solução de problemas. Veja: https://pastebin.com/3kZNLtr6Neste ponto é onde o problema aparece. Eu conecto um dispositivo serial ao conversor RS232 para USB. Até agora tudo ainda está OK. Eu ligo o dispositivo serial (normalmente este é o ponto onde o software que controla meu protótipo falha). Eu imediatamente executo o
ls -l | grep USB
comando várias vezes. Aqui está a saída: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`
Você pode ver que perdi uma das minhas portas seriais!
Agora eu corro
dmesg
para uma pessoa mais experiente para usar para diagnóstico. Consulte: https://pastebin.com/sCYXeKa9
Conclusões testadas a que cheguei nos últimos 5 dias:
- Os dispositivos seriais conectados ao RS232 e RS422 funcionam exatamente como o fabricante descreve nos manuais quando apenas um dos dispositivos é conectado por vez. Os dispositivos seriais não estão funcionando mal ou quebrados de forma alguma. Se apenas um dispositivo estiver conectado por vez, posso me comunicar com ele e controlá-lo, e ele se comportará corretamente.
- A fiação para todos os dispositivos é boa (verificação dupla e tripla usando desenhos e medidor)
- Eu removi o hub USB que estava usando e demorei muito para descobrir que não era culpa do hub.
- Descartei os vários pacotes de software que estou usando para ler os dados seriais (sinto que as etapas descritas nesta postagem provam isso).
- É interessante comentar que esse problema ocorre sem que eu sequer envie ou receba comandos para os dispositivos seriais! Quando ligo o dispositivo conectado ao conversor RS232 para USB, o dispositivo serial ainda não está enviando mensagens (ou pelo menos não acredito que esteja), mas a porta serial é imediatamente descartada pelo sistema operacional.
Informações adicionais: Na última semana, desde que fiz esta pergunta, adquiri mais portas seriais para USB, caso uma delas esteja com defeito e o comportamento não tenha mudado. Também substituí o componente serial que causa a falha da porta quando ligada por uma unidade sobressalente, e o comportamento não mudou. Também tentei um PC diferente e o comportamento não mudou.
Você pode fornecer uma resposta com uma correção para esse problema? Ou como solucionar esse problema?
Além disso, se eu puder fornecer qualquer informação ou executar algum comando, não hesite em me avisar!
Este foi um problema elétrico e não um problema de sistema operacional. Liguei a porta serial do dispositivo ao lado serial do conversor USB para RS485 conforme a documentação do fabricante, da seguinte maneira:
O que acabou resolvendo esse problema foi desconectar a conexão gnd to gnd. Deve ter havido um loop de terra.