Napisz definicję typu SOME/IP

Podczas definiowania mapowań skalowalnego oprogramowania pośredniczącego zorientowanego na usługi przez IP (SOME/IP) w VSIDL opisujesz serializację formatu transmisji i kodowanie ładunku każdego komunikatu SOME/IP. Korzystając z definicji SomeIpType i SomeIpStruct, możesz modelować typy proste, ciągi znaków, tablice i zagnieżdżone struktury, które są zgodne z zasadami kodowania ładunku stosu AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) i SOME/IP (w tym COVESA vsomeip).

Na tej stronie dowiesz się, jak napisać definicję SomeIpStruct typu, która jest używana w blokach type_definition do mapowania zdarzeń i metod.

Wiadomość SomeIpStruct

Komunikat SomeIpStruct reprezentuje uporządkowany ładunek SOME/IP składający się z wielu pól. Zdefiniowana tutaj struktura jest używana przez brokera SOME/IP do tłumaczenia między surowymi bajtami SOME/IP a polami wiadomości SDV protobuf.

Podczas definiowania struktury konfigurujesz 2 główne właściwości:

  • length_field_size (opcjonalnie): określa rozmiar (w bajtach) pola długości, które poprzedza strukturę w zserializowanym ładunku. Użyte wartości z wyliczenia LengthFieldSize obejmują ZERO (brak pola długości), ONE, TWO i FOUR.
  • field (powtarzane): lista pól, które składają się na strukturę.

Definiowanie pól struct

Każde pole w sekcji SomeIpStruct musi zawierać:

  • field_name: nazwa pola. Musi ona dokładnie odpowiadać nazwie odpowiedniego pola zdefiniowanej w komunikacie SDV protobuf, aby zapewnić prawidłowe tłumaczenie komunikatu.
  • field_type: typ danych SOME/IP pola (SomeIpType). Może to być typ prosty, ciąg znaków, tablica lub inna zagnieżdżona struktura.

Typy pól Write SomeIpType

Blok field_type konfiguruje konkretny typ danych za pomocą jednego z tych wariantów:

  • Typy proste: użyj someip_primitive z wartościami takimi jak UINT8, UINT32, INT32, FLOAT32 i BOOL.
  • Ciągi znaków: użyj someip_string i określ kodowanie (np. UTF_8 lub UTF_16_LE) oraz informacje o długości (fixed_length lub length_field_size).
  • Tablice: użyj someip_array i zdefiniuj array_type (czyli kolejny rekurencyjny SomeIpType) wraz z informacjami o długości (fixed_length lub length_field_size).
  • Zagnieżdżone struktury: użyj znaku someip_struct, aby rekurencyjnie osadzić inną definicję struktury.

Przykład: pisanie definicji typu struktury

Oto praktyczny przykład, jak napisać SomeIpStruct w bloku type_definition. Ten ładunek zawiera 8-bitową liczbę całkowitą bez znaku o nazwie interval i 32-bitową liczbę całkowitą bez znaku o nazwie counter:

type_definition {
  # No length field precedes this struct
  length_field_size: ZERO

  # First field: interval
  field {
    field_name: "interval"
    field_type {
      someip_primitive: UINT8
    }
  }

  # Second field: counter
  field {
    field_name: "counter"
    field_type {
      someip_primitive: UINT32
    }
  }
}

Dodawanie typów złożonych

Aby uwzględnić w strukturze pole ciągu znaków o dynamicznej długości i tablicę, dodaj pola w ten sposób:

field {
  field_name: "status_message"
  field_type {
    someip_string {
      string_encoding: UTF_8
      length_field_size: FOUR
    }
  }
}
field {
  field_name: "measurements"
  field_type {
    someip_array {
      length_field_size: FOUR
      array_type { someip_primitive: FLOAT32 }
    }
  }
}

Mapowanie kodowania ładunku AUTOSAR ARXML i vsomeip

Podczas integrowania AAOS SDV z zewnętrznymi elektronicznymi jednostkami sterującymi (ECU) AUTOSAR lub stosami SOME/IP, takimi jak COVESA vsomeip, upewnij się, że plik VSIDL type_definition jest zgodny z parametrami serializacji przewodowej zdefiniowanymi w pliku ARXML systemu (SOMEIP-TRANSFORMATION-PROPS i SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) lub w konfiguracji vsomeip:

AUTOSAR ARXML i parametr vsomeip Odpowiednik VSIDL SomeIpType Reguła serializacji i kodowania ładunku
sizeOfStructLengthField (0, 1, 2, 4 bajtów) SomeIpStruct.length_field_size (ZERO, ONE, TWO, FOUR) Dodaje jawny prefiks z liczbą bajtów przed serializowanym ładunkiem struktury. ZERO oznacza struktury o stałym układzie bez prefiksu długości.
sizeOfArrayLengthField (0, 1, 2, 4 bajtów) SomeIpArray.length_field_size (ZERO, ONE, TWO, FOUR) lub fixed_length Tablice dynamiczne wymagają prefiksu pola długości (ONE, TWO lub FOUR bajty) wskazującego długość bajtową serializowanych elementów tablicy.
sizeOfStringLengthField i kodowanie (UTF-8,UTF-16LE, UTF-16BE) SomeIpString.string_encoding i length_field_size lub fixed_length Zgodność z regułami serializacji ciągów znaków AUTOSAR (w tym z obsługą znacznika kolejności bajtów i zakończenia znakiem null) w przypadku ciągów znaków o zmiennej i stałej długości.
Podstawowe typy pierwotne (uint8, uint16,uint32, float32, boolean) SomeIpPrimitive (UINT8, UINT16, UINT32, INT32, FLOAT32, BOOL) Koduje wartości pierwotne w kolejności bajtów sieci (domyślnie big-endian zgodnie ze specyfikacją SOME/IP) pasującej do docelowego pola protobuf.