4

分散システム内のシリアル通信用の単純なマルチドロップ RS485 プロトコルを作成しています。スレーブ デバイスが応答するために 20 ミリ秒のウィンドウが与えられるアドレス可能なモデルを使用しています。マスター uC は、接続されたデバイスを更新のためにポーリングし、それに応じて応答します。チェックサムを採用し、必要なオーバーラン予防策を講じて、接続されたデバイスが不正な形式のメッセージに応答しないようにします。この方法は、約 99% の状況で有効であることが証明されていますが、通信セッション中に新しいデバイスが導入されると、パケットが失われます。新しいデバイスを「ホット」に差し込むと、非常に短時間だけでも、スレーブ デバイスによって監視されている信号に悪影響が及びます。私はエンジニアリングのソフトウェア側にいます。しかし、TCP を再作成しようとせずにこの状況を緩和するにはどうすればよいでしょうか? ポーリング モデルを使用するのは、RTOS 機能を必要とせず、高速であり、アプリケーションで適切に機能するためです。基本的に考えて、各CPUに豊富なサイクルがあります。

4

2 に答える 2

8

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

ホットプラグやデバイスの誤動作が原因である可能性のある衝突をチェックしたい場合は、おそらくいくつかの改善があります。一部のハードウェアでは、独自の送信を読み戻すことができます。送信データと受信データの違いを見つけた場合は、衝突を想定してパケットを繰り返すことができます。これには、一種のシーケンス番号も必要になります。

于 2010-08-31T05:51:05.537 に答える
1

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

于 2010-08-31T06:10:13.983 に答える