SOME/IP-Typdefinition schreiben

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 der LengthFieldSize-Enumeration sind ZERO (kein Längenfeld), ONE, TWO und FOUR.
  • 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_primitive mit Werten wie UINT8, UINT32, INT32, FLOAT32 und BOOL.
  • Strings:Verwenden Sie someip_string und geben Sie die Codierung (z. B. UTF_8, UTF_16_LE) und die Längeninformationen (fixed_length oder length_field_size) an.
  • Arrays:Verwenden Sie someip_array und definieren Sie array_type (ein weiteres rekursives SomeIpType) zusammen mit Längeninformationen (fixed_length oder length_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 }
    }
  }
}