1

これがばかげた質問であれば、気にしないでください。しかし、答えを見つけようとしてしばらく時間を費やしましたが、確かなものは何も得られませんでした. これはハードウェアの問題かもしれませんが、最初にここで試してみることにしました。

シリアル通信は 1 対 1 でしか機能しませんか? これが思いついた理由は、シリアルポートで通信をリッスンしているarduinoボードがあったためです。ポートにもPythonスクリプトフィードバイトがありました。しかし、arduino のシリアル モニタを開くたびに、python スクリプトとの接続に失敗しました。シリアル モニタは、小さなテキスト入力フィールドとの通信用にシリアル ポートにも接続します。

それで、取引は何ですか?シリアル通信は、単一のクライアントと単一のサーバー間でのみ機能しますか? 複数のクライアントがサーバーに書き込む方法はありますか? あなたの提案に感謝します。

4

3 に答える 3

1

編集: RS-485 のことは忘れていました。以下の私の説明は、RS-232 に限定されています。これは、より「さまざまな」シリアル ポートです。'jdr5ca' が指摘しているように、RS-485 は説明されている問題に対するより優れた代替手段です。

オリジナル: zmo の回答を少し拡張すると、ハードウェア レベルでシリアルを共有することが可能であり、以前にも行われましたが、実際にはめったに行われません。

同様に、ソフトウェア ドライバ レベルでも理論的に共有することは可能ですが、ハードウェア レベルと同様の問題、つまり衝突を防ぐためにリンクを「共有」する方法などの問題が発生します。

「典型的な」セットアップは、互いに 1:1 で接続された 2 つのシリアル (ハードウェア) デバイスです。それぞれが、リンク上でデータの送受信を管理する単一のソフトウェア プロセスを実行します。

複数のプロセス間で (いずれかの側で) シリアル リンクを共有することが望ましい場合、リンクを管理するソフトウェア プロセスは、受信したデータを各読み取りプロセスに渡すことも管理する必要があります (各プロセスが読み取ったデータを追跡します)。また、「書き込み」中にリンクへのアクセスを取得する送信プロセスを調停します。

リンクの両端に複数の読み取り/書き込みプロセスがある場合、両端のプロセス間の通信を調整するために何らかのメタシグナリングの配置が必要になる可能性があるため、これらすべてのハンドシェイク/調整が深くなります。

あなたのニーズとそのようなものの見方に応じて、本当の混乱または楽しい挑戦のいずれかです.

于 2013-06-06T00:20:07.443 に答える
1

1 台のサーバー (デスクトップ コンピューターなど) と通信する複数のクライアント (Arduino など) は、一般的にシリアル バリアントで行われます。

RS-485

これは、1 つのシリアル ポートを介して 1 台のコンピュータに多数のデバイスを接続する産業環境で広く使用されている簡単な方法です。このタイプの配置は、マルチドロップとも呼ばれます。これは、1 本のケーブルが建物の周りに張り巡らされており、T 字型のケーブルが各デバイスにタップインおよびドロップされているためです。

このためのハードウェアは広く入手可能です。コンピュータにハードウェア インターフェイスを提供する USB シリアル アダプタを購入できます。プログラム的には、ポートは RS232 ポートのように見えます。Arduino の場合は、トランシーバー チップを追加するだけです。シリアル トランシーバーの海が存在します。

485 インターフェイスを備えたコンピューターの USB アダプターの例 Element14 の RS485 トランシーバー チップの例

すべてのデバイスは、同時にリッスンしている同じバス上でハングします。使用される単純な通信プロトコルは、すべてのコマンドの前にデバイス アドレスを追加するだけです。例えば:

  • 001SETLIGHT1 <- Arduino「001」にライトをオンにするように指示します
  • 013SETLIGHT0 <-「013」にライトをオフにするように指示します

ケーブルにぶら下がっているデバイスは、アドレスで始まらないコマンドを無視します。デバイスが応答すると、そのアドレスが付加されます。

  • 001SETLIGHT1DONE <-コマンドが受信され実行されたというデバイス「001」からの応答

応答内のアドレスにより、受信側はどのデバイスが話しているかを知ることができます。

于 2013-06-06T04:30:26.043 に答える