web-dev-qa-db-ja.com

デバイスを開かずに、シリアルポートが実際にデータを送信しているかどうかを確認するにはどうすればよいですか?

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

シリアルラインはハートビートによって開かれているため、シリアルデバイスを開いて自分でデータを読み取ることはできません。

だから私はいくつかの間接的な手がかりを探し始めました。これまでに見つけた唯一の違いは、/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の内容に関するドキュメントが見つからないため、行の最後にリストされている信号がケーブルの接続/切断の意味を持っていると判断する自信がありません。信号の存在は、指定された信号が「今」オンになっている(または最近過去にあったか?) Serial HOWTO は、ケーブルが接続されているときに存在する追加の信号(CTSフロー制御信号、DSR「通信の準備ができている」、CD「別のモデムに接続されている」)がすべて「入力"方向。したがって、反対側で誰かが生きている必要があります。

信号の意味がシリアルHOWTOで説明されていると仮定すると、たとえばCD信号の存在に基づいて判断を下すことができます。しかし、私は本当にわかりません。

だから質問は:私の方法は「正しい」ですか、または私が知らないより良いオプションがありますか?

編集:私はいくつかの追加の観察を行い、同僚と話をしました。回線の終端での信号の存在または不在は、両端でのシリアルポートアクティビティの非常に優れた指標であることがわかります。 ただし、ケーブルの物理的な存在を示すものではありません。シリアルポートへの書き込みプログラムが存在する場合は常に、発信信号が存在していました(RTS | DTR)。反対側が書き込み中のとき、着信信号が存在しました(CTS | DSR | CD)。どちらの側も通信しない場合、信号はまったくありません(ケーブルが存在しないことを必ずしも意味しません)。正確な信号は ケーブルの配線 に依存することを忘れないでください(「部分的なハンドシェイクによるヌルモデム」があります)。

10
Peter Kovac

RS232には、いかなる種類の「ケーブルの存在」インジケータもありません。送信信号またはメタデータ(制御)信号を受信して​​いるだけ、または受信していない-それだけです。着信信号(CTS | DSR | CD)を受信すると、ケーブルが接続されていることがわかります。着信信号を受信しない場合、ケーブルの状態は不確定であり、追加のハードウェアソリューションなしで接続されているかどうか、またはリモートデバイスとの何らかの交換を実行しているかどうかを判断する方法はありません。

通常のアプローチは、ある種の「キープアライブ」送信を実行することです(メタデータだけでも-たとえばDTRを一時的に設定してCTSを期待する)。ただし、ケーブルの両端でソフトウェアによって使用されるプロトコルの規律がそのようなアイドル交換を禁止している場合、先に進むためにはんだごてを使用することにかなりこだわりました.

あなたが試すかもしれないのは、パイプをセットアップし、ソフトウェアと物理デバイス(両端)の間でデータを転送し、それをカプセル化し、パイプがアイドル状態の場合に「接続チェック」を実行する、一種の追加の「デーモン」です。

エンドポイントデバイスがハードウェア制御を使用しない場合は、ホスト側のプラグ内でCTSを使用してDTRをショートし、ホスト側で「ハードウェア制御」を使用できます。 DTRを生成するとCTSが自動的に駆動され、ケーブルが存在する場合は送信が可能になるため、送信に影響はありません。一方、ケーブルがない場合、システムはこのイベントに適切な方法でCTSの欠如に反応します。タイムアウトを生成するか、ケーブルが接続されるまで送信を一時停止します。

5
SF.

相手側にデバイスが接続されていることを示すプレゼンスインジケータがありますが、これはオプションであり、送信はプレゼンス信号の有無に関係なく機能します。

0
Toughy