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 wyliczeniaLengthFieldSizeobejmująZERO(brak pola długości),ONE,TWOiFOUR.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_primitivez wartościami takimi jakUINT8,UINT32,INT32,FLOAT32iBOOL. - Ciągi znaków: użyj
someip_stringi określ kodowanie (np.UTF_8lubUTF_16_LE) oraz informacje o długości (fixed_lengthlublength_field_size). - Tablice: użyj
someip_arrayi zdefiniujarray_type(czyli kolejny rekurencyjnySomeIpType) wraz z informacjami o długości (fixed_lengthlublength_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. |