4

TCP ソケットまたはシリアル ポートのどちらを介して通信しているかに関係なく、同じプロトコルを使用するデバイスと通信しようとしています。いずれにせよ、これは ASCII コマンド ベースのインターフェイスであり、プロンプトでコマンドを入力し、その後に改行を入力すると、改行で応答が返され、その後に新しいプロンプトが表示されます。

> IDENTIFY
DEVICE_TYPE_RESPONSE
> TEST POWER
OK
>

プログラムは、新しいプロンプトを取得するまでブロックできますし、ブロックする必要がありますが、デバイスが突然死した場合に永遠に待たないように、タイムアウトが必要です。そのタイムアウトは、ネットワーク障害で誤ってフラグを立てないように秒単位にする必要がありますが、プロンプト文字を取得した後、秒単位で待機するように強制するべきではありません。

基礎となる通信層が何であるかを気にしないように、インターフェイスを抽象化する方法が欲しいです。開いているソケットまたは開いているシリアル ポートのいずれかを渡すだけで、すべてが発生します。これを行う良い方法はありますか?できれば Python 2.6 で実行できます。

4

2 に答える 2

2

プロトコルの実装を変更せずに、TCP またはシリアル ポートをトランスポートとして使用できるようにするプロトコルを Twisted に実装できます。Twisted では、タイムアウト/遅延コールバックを設定することもできます。

于 2012-04-12T17:08:15.960 に答える
0

Pythonのシリアルパッケージは、 TCP/IPブリッジを介したシリアルを含む多くの便利なものを提供します。ASCII / Telnetを使用して通信する場合は、Simple Serial to Network(TCP / IP)リダイレクタで「--convert」オプションを使用することをお勧めします。

また、Linux環境でのシリアルポートデータのTCP/IPへの変換に関するこの他の関連する質問もご覧ください。

于 2013-01-31T11:24:51.750 に答える