SOME/IP türü tanımı yazma

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. LengthFieldSize enum'undan kullanılan değerler arasında ZERO (uzunluk alanı yok), ONE, TWO ve FOUR bulunur.
  • 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, FLOAT32 ve BOOL gibi değerlerle someip_primitive kullanın.
  • Dizeler: someip_string kullanın ve kodlama (ör. UTF_8 veya UTF_16_LE) ve uzunluk bilgilerini (fixed_length veya length_field_size) belirtin.
  • Diziler: someip_array kullanın ve uzunluk bilgileriyle (fixed_length veya length_field_size) birlikte array_type'ü (başka bir yinelemeli SomeIpType) tanımlayın.
  • İç içe yerleştirilmiş yapılar: Başka bir yapı tanımını yinelemeli olarak yerleştirmek için someip_struct kullanı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.