Wenn Sie in VSIDL SOME/IP-Zuordnungen (Scalable service-oriented middleware over IP) definieren, beschreiben Sie die Struktur der SOME/IP-Nutzlast. Sie beschreiben die Struktur mit der Nachricht SomeIpType, mit der Sie Primitive, Strings, Arrays und komplexe Strukturen modellieren können.
Auf dieser Seite wird beschrieben, wie Sie eine SomeIpStruct-Typdefinition schreiben, die in type_definition-Blöcken für Ereignis- und Methodenzuordnungen verwendet wird.
SomeIpStruct-Nachricht
Eine SomeIpStruct-Nachricht stellt eine strukturierte SOME/IP-Nutzlast dar, die aus mehreren Feldern besteht. Die hier definierte Struktur wird vom SOME/IP-Broker verwendet, um zwischen unformatierten SOME/IP-Byte und den Feldern einer SDV-Protobuf-Nachricht zu übersetzen.
Beim Definieren einer Struktur konfigurieren Sie zwei Haupteigenschaften:
length_field_size(optional): Gibt die Größe (in Byte) des Längenfelds an, das der Struktur in der serialisierten Nutzlast vorangestellt ist. Verwendete Werte aus derLengthFieldSize-Enumeration sindZERO(kein Längenfeld),ONE,TWOundFOUR.field(wiederholt): Eine Liste von Feldern, aus denen die Struktur besteht.
Strukturfelder definieren
Für jedes Feld in SomeIpStruct ist Folgendes erforderlich:
field_name: Der Name des Felds. Dieser muss genau mit dem entsprechenden Feldnamen übereinstimmen, der in der SDV-Protobuf-Nachricht definiert ist, um eine korrekte Nachrichtenübersetzung zu gewährleisten.field_type: Der SOME/IP-Datentyp des Felds (SomeIpType). Dies kann ein primitiver Typ, ein String, ein Array oder eine andere verschachtelte Struktur sein.
SomeIpType-Feldtypen schreiben
Mit dem Block field_type wird der spezifische Datentyp mit einer der folgenden Varianten konfiguriert:
- Primitive Typen: Verwenden Sie
someip_primitivemit Werten wieUINT8,UINT32,INT32,FLOAT32undBOOL. - Strings:Verwenden Sie
someip_stringund geben Sie die Codierung (z. B.UTF_8,UTF_16_LE) und die Längeninformationen (fixed_lengthoderlength_field_size) an. - Arrays:Verwenden Sie
someip_arrayund definieren Siearray_type(ein weiteres rekursivesSomeIpType) zusammen mit Längeninformationen (fixed_lengthoderlength_field_size). - Verschachtelte Strukturen:Verwenden Sie
someip_struct, um rekursiv eine weitere Strukturdefinition einzubetten.
Beispiel: Definition eines Strukturtyps schreiben
Hier ist ein praktisches Beispiel dafür, wie Sie ein SomeIpStruct in einem type_definition-Block schreiben. Diese Nutzlast enthält eine vorzeichenlose 8-Bit-Ganzzahl namens interval und eine vorzeichenlose 32-Bit-Ganzzahl namens 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
}
}
}
Komplexe Typen hinzufügen
Wenn Sie ein Stringfeld mit dynamischer Länge und ein Array in die Struktur einfügen möchten, fügen Sie Felder so hinzu:
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 }
}
}
}