web-dev-qa-db-ja.com

2つのシリアルポート(RS232およびRS422)が互いに競合しています。 / dev / ttyUSBクラッシュ

問題:シリアルポートに接続されているシリアルデバイスの電源が入っていると、Ubuntu OSは2つのシリアルポートを処理できません。この問題を克服し、私のポートがクラッシュするのを防ぐ方法は?どうすればトラブルシューティングできますか?

症状の概要:2つのシリアル-USBコンバータがPCに接続されている場合(シリアルデバイスが接続されていない場合)、すべて問題ありません。それらはttyUSB0およびttyUSB1として表示されます。ただし、シリアルデバイスを接続し、シリアルデバイスの電源を入れると、シリアルポートの1つがクラッシュします(/ devディレクトリから消えます)。これはハードウェアの問題でも配線の問題でもありません。私の頭に白髪を追加しているOSで何かが起こっています。詳細をお読みください。

LenovoラップトップでUbuntu 14.04.3を実行しています。

私は、最小限のハードウェアとソフトウェアでエラーを再現できるようになりました。以下の手順で問題を再現します。

  1. PCを起動します。
  2. PCが起動したら、dmesgを実行し、出力をファイルに保存します。 https://Pastebin.com/4fXxK1hV を参照してください
  3. 「Labjack U3」という2.0 USBデバイスを接続します。これは、この問題に非常に関係があるとは思わないが、注意する必要があるという事実です。
  4. 何も接続されていない状態でRS422をUSBデバイスに接続します。 lsusbを実行します。それはBus 003 Device 003: ID 0856:ac11 B&B Electronicsデバイスです。出力は次のとおりです。

    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. dmesgを再度実行しました。出力は次のとおりです。 https://Pastebin.com/uTGra1h7

  6. /devに移動して、ls -l | grep USBを実行します。シリアルポートが表示されます: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. RS422ポートに接続されているデバイスの電源を入れます。 /devまたはls -l | grep USBおよびlsusbの出力に変更はありません

  8. RS232をUSBコンバーターに接続します。シリアルデバイスはまだコンバーターに接続されていません。 lsusbを実行しました。それはBus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Portデバイスです。出力は次のとおりです。

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. 次に、ls -l | grep USBディレクトリで/devコマンドを実行します。出力は次のとおりです。

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. ここまではすべて問題ありません。 dmesgコマンドを実行して、トラブルシューティングのためにすべてをキャプチャします。参照: https://Pastebin.com/3kZNLtr6

  2. この時点で問題が発生します。シリアルデバイスをRS232-USBコンバーターに接続します。今まではすべて大丈夫です。シリアルデバイスの電源を入れます(通常、これはプロトタイプを制御するソフトウェアがクラッシュするポイントです)。すぐにls -l | grep USBコマンドを何度も実行します。出力は次のとおりです。

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

シリアルポートの1つを失ったことがわかります。

  1. 今、私はdmesgを実行して、より知識のある人が診断に使用できるようにします。参照してください: https://Pastebin.com/sCYXeKa9

過去5日間でテストした結論:

  • RS232およびRS422に接続されたシリアルデバイスは、一度に1つのデバイスのみが接続されている場合、製造元がマニュアルで説明しているとおりに動作します。シリアルデバイスが誤動作したり、破損したりすることはありません。一度に1つのデバイスしか接続されていない場合、そのデバイスと通信して制御でき、正しく動作します。
  • すべてのデバイスへの配線が良好です(図面とメーターを使用してダブルおよびトリプルチェック)
  • 使用していたUSBハブを取り外しましたが、ハブの障害ではないことを理解するのに長い時間がかかりました。
  • シリアルデータの読み取りに使用しているさまざまなソフトウェアパッケージを除外しました(この投稿で概説した手順がこれを証明していると感じています)。
  • この問題は、シリアルデバイスとコマンドを送受信しなくても発生することをコメントするのは興味深いことです。 RS232 to USBコンバーターに接続されたデバイスの電源を入れたとき、シリアルデバイスはまだメッセージを送信していません(または、少なくともそうだとは思わない)が、シリアルポートはオペレーティングシステムによって直ちにドロップされます。

追加情報:この質問を聞いてから先週、USBポートの1つに障害があり、動作が変わらなかった場合に備えて、USBポートへのシリアルをさらに調達しました。また、スペアユニットで電源を入れたときにポートがクラッシュする原因となるシリアルコンポーネントを交換しましたが、動作は変わりませんでした。また、別のPCを試しましたが、動作は変わりませんでした。

この問題の修正を含む回答を提供していただけますか?または、この問題のトラブルシューティング方法は?

また、情報を提供したりコマンドを実行したりできる場合は、遠慮なくお知らせください!

前もって感謝します...

マイク

1
Mike

これは電気的な問題であり、O/Sの問題ではありません。次の方法で、製造元のドキュメントに従って、デバイスのシリアルポートをUSB-RS485コンバーターのシリアル側に配線しました。

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

最終的にこの問題を解決したのは、gndからgndへの接続を切断することでした。グラウンドループがあったに違いありません。

1
Mike