VSIDL'de IP üzerinden ölçeklenebilir hizmet odaklı ara katman yazılımı (SOME/IP) eşlemelerini tanımlarken her SOME/IP mesajının kablo biçimi serileştirmesini ve yük kodlamasını açıklarsınız. SomeIpType ve SomeIpStruct tanımlarını kullanarak, AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) ve SOME/IP yığını yükü kodlama kurallarıyla (COVESA vsomeip dahil) eşleşen temel öğeleri, dizeleri, dizileri ve iç içe yerleştirilmiş yapıları modelleyebilirsiniz.
Bu sayfada, etkinlik ve yöntem eşlemeleri için type_definition bloklarında kullanılan SomeIpStruct türü tanımının nasıl yazılacağı açıklanmaktadır.
SomeIpStruct mesajı
SomeIpStruct mesajı, birden fazla alandan oluşan yapılandırılmış bir SOME/IP yükünü temsil eder. Burada tanımlanan yapı, SOME/IP aracısı tarafından ham SOME/IP baytları ile SDV protobuf mesajının alanları arasında çeviri yapmak için kullanılır.
Bir yapı tanımlarken iki ana özelliği yapılandırırsınız:
length_field_size(isteğe bağlı): Serileştirilmiş yükte yapıdan önce gelen uzunluk alanının boyutunu (bayt cinsinden) belirtir.LengthFieldSizeenum'undan kullanılan değerler arasındaZERO(uzunluk alanı yok),ONE,TWOveFOURbulunur.field(yinelenen): Yapıyı oluşturan alanların listesi.
Yapı alanlarını tanımlama
SomeIpStruct içindeki her alan için şunlar gerekir:
field_name: Alanın adı. Bu, iletinin düzgün şekilde çevrilmesi için SDV protobuf iletisinde tanımlanan ilgili alan adıyla tam olarak eşleşmelidir.field_type: Alanın SOME/IP veri türü (SomeIpType). Bu, ilkel, dize, dizi veya başka bir iç içe yerleştirilmiş yapı olabilir.
SomeIpType alan türlerini yazma
field_type bloğu, aşağıdaki varyantlardan birini kullanarak belirli veri türünü yapılandırır:
- Temel türler:
UINT8,UINT32,INT32,FLOAT32veBOOLgibi değerlerlesomeip_primitivekullanın. - Dizeler:
someip_stringkullanın ve kodlama (ör.UTF_8veyaUTF_16_LE) ve uzunluk bilgilerini (fixed_lengthveyalength_field_size) belirtin. - Diziler:
someip_arraykullanın ve uzunluk bilgileriyle (fixed_lengthveyalength_field_size) birliktearray_type'ü (başka bir yinelemeliSomeIpType) tanımlayın. - İç içe yerleştirilmiş yapılar: Başka bir yapı tanımını yinelemeli olarak yerleştirmek için
someip_structkullanın.
Örnek: Yapı türü tanımı yazma
type_definition bloğunun içine SomeIpStruct yazmaya dair pratik bir örneği aşağıda bulabilirsiniz. Bu yükte interval adlı 8 bitlik işaretsiz bir tamsayı ve counter adlı 32 bitlik işaretsiz bir tamsayı bulunur:
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
}
}
}
Karmaşık türler ekleme
Yapı içinde dinamik uzunluklu bir dize alanı ve bir dizi eklemek için alanları şu şekilde ekleyin:
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 }
}
}
}
AUTOSAR ARXML ve vsomeip yük kodlamasını eşleme
AAOS SDV'yi harici AUTOSAR elektronik kontrol birimleriyle (ECU'lar) veya COVESA vsomeip gibi SOME/IP yığınlarıyla entegre ederken, VSIDL type_definition dosyanızın, sisteminizin ARXML'sinde (SOMEIP-TRANSFORMATION-PROPS ve SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) veya vsomeip yapılandırmasında tanımlanan kablo serileştirme parametreleriyle eşleştiğinden emin olun:
AUTOSAR ARXML ve vsomeip parametresi |
VSIDL SomeIpType eşdeğeri |
Kablolu serileştirme ve yük kodlama kuralı |
|---|---|---|
sizeOfStructLengthField (0, 1,
2, 4 bayt) |
SomeIpStruct.length_field_size (ZERO,
ONE, TWO, FOUR) |
Serileştirilmiş yapı yükünden önce açık bir bayt uzunluğu öneki ekler. Uzunluk öneki olmayan sabit düzenli yapılar için ZERO olarak ayarlayın. |
sizeOfArrayLengthField (0, 1,
2, 4 bayt) |
SomeIpArray.length_field_size (ZERO,
ONE, TWO, FOUR) veya
fixed_length |
Dinamik diziler, serileştirilmiş dizi öğelerinin bayt uzunluğunu gösteren bir uzunluk alanı öneki (ONE, TWO veya FOUR bayt) gerektirir. |
sizeOfStringLengthField ve kodlama (UTF-8,
UTF-16LE, UTF-16BE) |
SomeIpString.string_encoding ve
length_field_size veya fixed_length |
Değişken uzunluklu ve sabit uzunluklu dizeler için AUTOSAR dize serileştirme kurallarıyla (bayt sırası işareti ve boş sonlandırma işleme dahil) eşleşir. |
Temel ilkel türler (uint8, uint16,
uint32, float32, boolean) |
SomeIpPrimitive (UINT8,
UINT16, UINT32, INT32,
FLOAT32, BOOL) |
Hedef protobuf alanıyla eşleşen ağ baytı sırasındaki (SOME/IP spesifikasyonuna göre varsayılan olarak büyük endian) temel değerleri kodlar. |