質問

私は、分散システム内でシリアル通信するためのシンプルなマルチドロップRS485プロトコルを書いています。私は、スレーブデバイスが応答するためには20msの窓を与えられているアドレス可能なモデルを使用しています。マスターのUCポーリング更新のための接続されたデバイスを、彼らはそれに応じて応答します。私は、チェックサムを採用し、接続されたデバイスが不正な形式のメッセージに応答しないことを保証するために必要なオーバーランの予防措置を講じてきました。この方法では、状況の約99%に有効であることが証明しているが、新しいデバイスは、通信セッションの間に導入された場合、私は、パケットを失います。ごく短い時間のためならば、「ホット」新しいデバイスに接続すると、スレーブデバイスによって監視されている信号に悪影響を及ぼします。私は、エンジニアリングのソフトウェア側でんだけど、どのように私はTCPを再作成しようとせずに、この状況を緩和することができますか?それは高速であり、我々のアプリケーション、RTOSの機能が不要のためによく仕事をしていませんので、我々は、ポーリングモデルを使用しています。私は、各CPUのサイクルを豊富に持っている、基本的な用語ではと思います。

役に立ちましたか?

解決

RS485上でパケットを送信すると、信頼性の高い通信ではありません。あなたはとにかく、パケットの失われたを処理する必要があります。もちろん、あなたはTCPを改革する必要はありません。しかし、あなたはタイムアウト監視およびシーケンス番号によって失われたパケットを検出する必要があります。単純なアプリケーションでは、これははるかにTCPの複雑さから離れ、あなたを保つものを、アプリケーションレベルで行うことができます。あなたのポーリングモデルが無効なチェックサムを持つすべてのパケットを破棄した場合、これはより少ない労力で統合される可能性があります。

あなたは、ホットプラグやデバイスを不正な動作が原因で発生することができ、衝突、かどうかを確認したい場合は、

は、おそらくいくつかの改善があります。一部のハードウェアは、独自のtransmissingをリードバックすることができます。あなたが送信されたデータとの違いを見つけて、データを受信した場合は、衝突を想定し、パケットを繰り返すことができます。これはまた、シーケンス番号のようなものが必要になります。

他のヒント

おそらく、私はあなたの質問で何かを逃しましたが、あなただけの応答が許可された時間内に、デバイスから見ていない場合、それは、ポーリングを再ようにマスターを書くことができないデバイス?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top