基本的な SOME/IP 変換は、AUTOSAR サービスと統合するための更新可能なソリューションを提供するように設計されました。ブローカーの主な課題は、コンパイル時に不明なメッセージと RPC 呼び出しを変換することでした。この問題を解決するために、ランタイム更新では、新しいユニットタイプが導入されるのと同様に、SDV サービスの動的な追加または更新を想定しています。
この動的変換のソリューションは、ランタイム型情報(RTTI)に基づいています。ブローカーは、インストールされているすべてのサービス バンドルから構成を使用し、その構成のデータスキームを使用してリフレクション ベースの変換を行います。
RTTI ベースの変換は柔軟性がありますが、プリコンパイルされたメソッドよりも本質的に遅くなります。負荷の高いデータパスを最適化するには、変換をバイパスする手法を使用します。
SDV では、大量のメッセージや頻繁なメッセージの消費をサポートするために、変換をバイパスして SOME/IP 形式のバイトをコンシューマ サービス バンドルに転送できます。
サービス バンドルは SOME/IP 形式のペイロードを処理します。ペイロードを使用することも、ペイロードを protobuf に変換することもできます。
変換をバイパスするには、
SOME/IP マッピング ファイルのイベントに message_translation_mode: INTERPRET_AS_BYTES を指定します。samples/some_ip/catalog/integration_test/byte_forward_someip.vsidl
の例をご覧ください。
変換方法のトレードオフ
変換方法を選択する際は、次のトレードオフを考慮してください。
システムとのやり取り: 他の SDV サービスは、元の形式の詳細がわからないと、SOME/IP 形式で転送されたバイトを解釈できません。たとえば、SDV テレメトリーでは、このようなメッセージの個々のフィールドを処理できません。
追加の作業: SOME/IP 形式の元のペイロードを変換するには、サービス バンドルのデベロッパーによる追加の作業が必要です。
ライブラリ ジェネレータ
SDV には、SOME/IP 形式を変換するための自動ジェネレータが用意されています。このジェネレータは、リフレクションなしで直接変換できるように、利用可能なメッセージ定義とマッピングに基づいてライブラリを作成します。転送された SOME/IP バイトを使用するサービス バンドルは、生成されたライブラリを使用できます。
推奨事項: ジェネレータは、OEM がプロジェクトのパフォーマンス要件内で変換できないパフォーマンス クリティカルなイベントを特定した場合にのみ使用してください。このような場合、OEM には RTTI ベースの変換に使用される protobuf 定義と SOME/IP マッピングの両方がすでに存在している必要があります。この同じ構成をジェネレータの入力として使用できます。詳細については、core_services/tools/someip_translation_generator/
ディレクトリの README.md ファイルをご覧ください。