Saat menentukan pemetaan middleware berorientasi layanan (SOME/IP) yang skalabel melalui IP
di VSIDL, Anda menjelaskan serialisasi format kabel dan encoding payload dari
setiap pesan SOME/IP. Dengan menggunakan definisi SomeIpType dan SomeIpStruct, Anda dapat memodelkan primitif, string, array, dan struct bertingkat yang cocok dengan AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) dan aturan encoding payload stack SOME/IP (termasuk COVESA vsomeip).
Halaman ini berfokus pada cara menulis definisi jenis SomeIpStruct, yang digunakan dalam blok type_definition untuk pemetaan peristiwa dan metode.
Pesan SomeIpStruct
Pesan SomeIpStruct merepresentasikan payload SOME/IP terstruktur yang terdiri dari
beberapa kolom. Struktur yang ditentukan di sini digunakan oleh broker SOME/IP untuk menerjemahkan antara byte SOME/IP mentah dan kolom pesan protobuf SDV.
Saat menentukan struct, Anda mengonfigurasi dua properti utama:
length_field_size(opsional): Menentukan ukuran (dalam byte) kolom panjang yang mendahului struct dalam payload yang diserialisasi. Nilai yang digunakan dari enumLengthFieldSizemencakupZERO(tanpa kolom panjang),ONE,TWO, danFOUR.field(berulang): Daftar kolom yang membentuk struct.
Menentukan kolom struct
Setiap kolom di dalam SomeIpStruct memerlukan:
field_name: Nama kolom. Nama ini harus sama persis dengan nama kolom terkait yang ditentukan dalam pesan protobuf SDV untuk memastikan terjemahan pesan yang tepat.field_type: Jenis data SOME/IP kolom (SomeIpType). Ini bisa berupa primitif, string, array, atau struct bertingkat lainnya.
Menulis jenis kolom SomeIpType
Blok field_type mengonfigurasi jenis data tertentu menggunakan salah satu varian berikut:
- Jenis primitif: Gunakan
someip_primitivedengan nilai sepertiUINT8,UINT32,INT32,FLOAT32, danBOOL. - String: Gunakan
someip_stringdan tentukan encoding (misalnya,UTF_8atauUTF_16_LE) dan informasi panjang (fixed_lengthataulength_field_size). - Array: Gunakan
someip_arraydan tentukanarray_type(yang merupakanSomeIpTyperekursif lain), beserta informasi panjang (fixed_lengthataulength_field_size). - Struct bertingkat: Gunakan
someip_structuntuk menyematkan definisi struct lain secara rekursif.
Contoh: Menulis definisi jenis struct
Berikut adalah contoh praktis cara menulis SomeIpStruct di dalam blok
type_definition. Payload ini berisi bilangan bulat 8-bit tanpa tanda bernama
interval dan bilangan bulat 32-bit tanpa tanda bernama 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
}
}
}
Menambahkan jenis kompleks
Untuk menyertakan kolom string panjang dinamis dan array di dalam struct, tambahkan kolom seperti ini:
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 }
}
}
}
Memetakan encoding payload AUTOSAR ARXML dan vsomeip
Saat mengintegrasikan SDV AAOS dengan unit kontrol elektronik (ECU) AUTOSAR eksternal
atau stack SOME/IP seperti COVESA vsomeip, pastikan VSIDL type_definition
Anda cocok dengan parameter serialisasi melalui kabel yang ditentukan dalam ARXML
(SOMEIP-TRANSFORMATION-PROPS dan SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS)
atau konfigurasi vsomeip sistem Anda:
Parameter AUTOSAR ARXML dan vsomeip |
Setara dengan VSIDL SomeIpType |
Aturan serialisasi melalui kabel dan encoding payload |
|---|---|---|
sizeOfStructLengthField (0, 1,
2, 4 byte) |
SomeIpStruct.length_field_size (ZERO,
ONE, TWO, FOUR) |
Menambahkan awalan panjang byte eksplisit sebelum payload struct yang diserialisasi. Tetapkan ke ZERO untuk struktur tata letak tetap tanpa
awalan panjang. |
sizeOfArrayLengthField (0, 1,
2, 4 byte) |
SomeIpArray.length_field_size (ZERO,
ONE, TWO, FOUR) atau
fixed_length |
Array dinamis memerlukan awalan kolom panjang (ONE,
TWO, atau FOUR byte) yang menunjukkan panjang byte
elemen array yang diserialisasi. |
sizeOfStringLengthField dan encoding (UTF-8,
UTF-16LE, UTF-16BE) |
SomeIpString.string_encoding dan
length_field_size atau fixed_length |
Mencocokkan aturan serialisasi string AUTOSAR (termasuk tanda urutan byte dan penanganan penghentian null) untuk string dengan panjang variabel dan panjang tetap. |
Jenis dasar primitif (uint8, uint16,
uint32, float32, boolean) |
SomeIpPrimitive (UINT8,
UINT16, UINT32, INT32,
FLOAT32, BOOL) |
Mengenkode nilai primitif dalam urutan byte jaringan (big-endian secara default sesuai spesifikasi SOME/IP) yang cocok dengan kolom protobuf target. |