2 線 RS485 バス用のシンプルで信頼性の高いマスター/スレーブ プロトコルを設計しようとしています。
バス上のすべてのノードには固有のアドレスがあります。1 つのノードは、通信を開始できる唯一のノードであるマスターです。他のすべてのノードは、マスターが要求を送信するまで何も送信できません。
私は単純な「要求/応答」プロトコルについて考えていました。マスターは要求をスレーブに送信し、その応答を待ちます。その後、M は別のスレーブにリクエストを送信します。3 つのシナリオが発生する可能性があります。
- どちらのフレーム (リクエストとレスポンス) も宛先で正しく受信され、トランザクションは問題なく終了します。
- マスターからの要求がスレーブに届かない (チェックサム エラー)。タイムアウトの後、マスターは再度要求を送信します。問題ない。
- スレーブからの応答がマスターに届かない (チェックサム エラー)。タイムアウト後、マスターはリクエストを再度送信できます。
私見、最後のシナリオには問題があります。スレーブは、2 番目の要求が最初の要求とまったく同じかどうかを理解できないため、要求を 2 回処理します。リクエストが「モーターを 2 歩動かして」、「最後のリクエスト以降にスイッチが押されたら教えて」、「リレーを切り替えて」などの場合はどうなりますか?
アプリケーションレベルがプロトコルの制限を知っていて、2回送信されると危険なリクエストを回避しない限り、最も単純な「リクエスト/レスポンス」プロトコルはうまく機能しないと思います。
提案するための、シンプルで信頼できる良いプロトコルはありますか? 車輪の再発明はしたくありません。