組み込みからコンピュータへの通信に適したRS232ベースのプロトコル



Good Rs232 Based Protocols



解決:

いくつかの組み込みシステムプロトコル(それらのいくつかは非常に単純です)は、以下を含む組み込みシステム:一般的なプロトコルにリストされています。

  • Tiny Embedded Network(TEN)
  • ネットワーク組み込みシステム(MINES)用のマイクロコントローラーインタープリター
  • さらに別のスケーラブルプロトコル(YASP)
  • ローカル相互接続ネットワーク(LIN)
  • シリアルサーボコントローラー(SSC)
  • ロボットオペレーティングシステムシリアル(rosserial)
  • ネット文字列
  • さまざまなフィールドバス
  • Modbus
  • コントローラエリアネットワーク(CAN)
  • フィルマタ(ありがとう、ジッピー!)

おそらく、これらのプロトコルの1つは、そのままの状態で、またはわずかな調整を加えるだけで、アプリケーションに適しています。




私はあなた自身の投票を行い、それを可能な限り単純に保ちます。

私はさまざまな制御アプリケーション用の多くのシリアルプロトコルを扱ってきましたが、いくつかのことを扱ってきました。 できる 以下を含めることをお勧めします。



  • 他の場所で使用されていない開始文字と停止文字
  • ある種のチェックサム/エラーチェック
  • 特に双方向通信が必要な場合は、フロー制御/シグナリングのいくつかの方法。

非常に基本的な例として、データをASCII文字に変換し、次のように開始/停止文字内に貼り付けることができます。

バイト値0x7Aを送信する場合、送信されるデータは(7A)になります。ここで、()は選択された開始/停止文字であり、7とAは2つのASCII文字です。 OK、それは多くのオーバーヘッドを追加します、しかしそれはあなたが基本的なターミナルソフトウェアでデバッグできることを意味します。


データがXBeesを通過する場合は、モジュールをエスケープ文字を使用してAPIモードにし、データを論理パケットに分割し、APIモードでXBeeに渡されたパケットがそのまま到着するか、または到着するという事実を利用する必要があります。全くない。 1〜255バイトのチャンクの送信を中心にプロトコルを設計し、XBeeモジュールが各チャンク内でデータを配信する方法について心配するようにします。個々のパケットまたはパケット間の細分化の整合性を維持することについて心配する必要はありません。 Digiモジュールはそれをうまく処理します。あなたが心配する必要がある最大のことは、パケットを送信するノードがそれが配信されなかったと信じて交換を送信したとしても、受信者はとにかくそれを取得する可能性があるという事実です-おそらくそれが交換を取得した後でも。片側が「マスター」になるようにプロトコルを設計すると、物事が最も簡単になる場合があります。マスターがデータを要求した場合、スレーブはそれを1回送信する必要があり、マスターがデータを取得するかどうかについて心配する必要はありません。マスターが必要なデータを取得できない場合、マスターは再度要求できます。



スレーブはある種のシーケンス番号をデータに割り当て、マスターはスレーブが状態を変更する要求にシーケンス番号を割り当てる必要があります。マスターの要求が「シーケンス番号がXXXより大きい最初のアイテムを送信する」の形式であり、スレーブによる各データアイテムには、独自のシーケンス番号と前のアイテムのシーケンス番号が含まれている場合(連続して番号が付けられていない場合) )、遅れて到着するパケットにより、スレーブは冗長にデータをマスターに送信する可能性がありますが、マスターは結果として生じる遅れて到着する応答を無視するのに問題はありません。スレーブは、シーケンス番号が以前の要求よりも小さい状態変更要求を受信した場合、受信される前でも優先されたため、その要求を無視する必要があります。