デバイスを開かずにシリアルポートが実際にデータを転送しているかどうかはどうすればわかりますか?

デバイスを開かずにシリアルポートが実際にデータを転送しているかどうかはどうすればわかりますか?

シリアルラインと2つのイーサネットネットワークカードを介して接続された高可用性クラスタ(Heartbeat)があります。壊れたシリアルラインを認識する監視スクリプトを設定したいです(基本的に同じ問題はSOへの回答しかし、私はそのような一般的な答えに満足していません)。

Heartbeatはシリアルラインを開いているので、単にシリアルデバイスを開いてデータを直接読み取ることはできません。

だから間接的な手がかりを探し始めました。これまで私が見つけた唯一の違いは内容です/proc/tty/driver/serial。接続後の様子は以下の通りです。

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2722759 rx:2718165 brk:1 RTS|CTS|DTR|DSR|CD

接続が切断されたとき:

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2725233 rx:2720703 brk:1 RTS|DTR

/proc/tty/driver/serialの内容に関する文書が見つからなかったため、行の末尾に記載されている信号がケーブルの接続/切断の意味を意味するかどうかはわかりません。 。私は、シグナルの存在が、与えられたシグナルが「今」オンになっていることを意味すると仮定できます(または最近の過去でしたか?)。これシリーズガイドケーブルが接続されたときに存在する追加の信号(CTSフロー制御信号、DSR「通信準備完了」、CD「モデムが別の信号に接続されました」)が「入力」方向にあることを示します。だから反対側に誰かが生きなければなりません。

信号の意味がSerial HOWTOに記載されていると仮定すると、CD信号の有無に基づいて決定を下すことができます。しかし、よくわかりません。

質問は次のとおりです。私のアプローチは「正しい」ですか?それとも私が知らない他のより良いオプションがありますか?

編集する: 私はいくつかの追加の観察を行い、同僚と話をしました。ライン端の信号の有無は、両端のシリアルポート活動を示す良好な指標であることがわかった。ただし、これはケーブルの物理的な存在を示していません。プログラムがシリアルポートに書き込むたびに発信信号(RTS | DTR)が発生します。相手が書くときに着信信号(CTS | DSR | CD)があります。どちらも通信しない場合には信号がまったくありません(これが必ずしもケーブルが存在しないという意味ではありません)。正確な信号は次に依存することを忘れないでください。ケーブル配線(私は「部分ハンドシェイク付きヌルモデム」を持っています)。

ベストアンサー1

RS232には「ケーブル付き」インジケータはありません。転送またはメタデータ(制御)信号を受信または受信できないだけです。それが皆さんが知っているすべてです。着信信号(CTS | DSR | CD)を受信すると、ケーブルが接続されていることがわかります。着信信号がまったく受信されないと、ケーブルの状態は不確実になり、追加のハードウェアソリューションやリモートデバイスとの一種の交換なしにケーブルが接続されているかどうかを知る方法はありません。

一般的なアプローチは、一種の「接続を維持する」転送を実行することです(メタデータだけでも - たとえば、一時的にDTRを設定し、CTSを期待する)。ただし、ケーブルの両端にあるソフトウェアがこのアイドル交換を禁止するプロトコル規則を使用している場合は、続行するためにはんだごてを使用してください。

あなたが試すことができるのは、パイプを設定し、ソフトウェアと物理デバイス(両端)の間でデータを渡し、それをカプセル化し、パイプがアイドル状態のときに「接続確認」を実行する一種の追加の「悪魔」です。 。

非常に一般的なソリューションを追加します。エンドポイントデバイスがハードウェア制御を使用していない場合は、ホスト側ヘッダ内でCTSをDTRに短縮し、ホスト側で「ハードウェア制御」を使用できます。 DTRを生成すると、CTSが自動的に駆動されるため、ケーブルがあっても影響を受けない転送が可能になります。同時にケーブルがない場合、システムはタイムアウトを生成したり、ケーブルが接続されるまで送信を一時停止するなど、イベントに適した方法でCTSの不足に反応します。

おすすめ記事