เขียนคำจำกัดความประเภท SOME/IP

เมื่อกำหนดการแมป Scalable Service-Oriented Middleware over IP (SOME/IP) ใน VSIDL คุณจะอธิบายการซีเรียลไลซ์รูปแบบการส่งผ่านข้อมูลและการเข้ารหัสเพย์โหลดของ ข้อความ SOME/IP แต่ละข้อความ การใช้คำจำกัดความ SomeIpType และ SomeIpStruct คุณสามารถสร้างโมเดลของไพรมิทีฟ สตริง อาร์เรย์ และโครงสร้างที่ซ้อนกันซึ่งตรงกับ ARXML ของ AUTOSAR (SOMEIP-TRANSFORMATION-PROPS) และเพย์โหลดของสแต็ก SOME/IP กฎการเข้ารหัส (รวมถึง COVESA vsomeip)

หน้านี้มุ่งเน้นที่วิธีเขียนคำจำกัดความประเภท SomeIpStruct ซึ่งใช้ในบล็อก type_definition สำหรับการแมปเหตุการณ์และวิธีการ

ข้อความ SomeIpStruct

ข้อความ SomeIpStruct แสดงเพย์โหลด SOME/IP ที่มีโครงสร้างซึ่งประกอบด้วยฟิลด์หลายรายการ โครงสร้างที่กำหนดไว้ที่นี่จะใช้โดยโบรกเกอร์ SOME/IP เพื่อ แปลระหว่างไบต์ SOME/IP ดิบกับฟิลด์ของข้อความ SDV protobuf

เมื่อกำหนดโครงสร้าง คุณจะกำหนดค่าพร็อพเพอร์ตี้หลัก 2 รายการ ได้แก่

  • length_field_size (ไม่บังคับ): ระบุขนาด (เป็นไบต์) ของ ฟิลด์ความยาวที่อยู่ก่อนโครงสร้างในเพย์โหลดที่แปลงเป็นรูปแบบข้อมูล ค่าที่ใช้ จาก Enum LengthFieldSize ได้แก่ ZERO (ไม่มีฟิลด์ความยาว), ONE, TWO และ FOUR
  • field (ซ้ำ): รายการฟิลด์ที่ประกอบกันเป็นโครงสร้าง

กำหนดฟิลด์ของโครงสร้าง

แต่ละฟิลด์ภายใน SomeIpStruct ต้องมีข้อมูลต่อไปนี้

  • field_name: ชื่อฟิลด์ ต้องตรงกันทุกประการกับ ชื่อฟิลด์ที่เกี่ยวข้องซึ่งกำหนดไว้ในข้อความ SDV protobuf เพื่อให้มั่นใจว่า การแปลข้อความถูกต้อง
  • field_type: ประเภทข้อมูล SOME/IP ของฟิลด์ (SomeIpType) ซึ่งอาจเป็น ไพรม์ สตริง อาร์เรย์ หรือโครงสร้างที่ซ้อนกันอีก

เขียนประเภทฟิลด์ SomeIpType

บล็อก field_type จะกำหนดค่าประเภทข้อมูลที่เฉพาะเจาะจงโดยใช้ตัวแปรใดตัวแปรหนึ่งต่อไปนี้

  • ประเภทดั้งเดิม: ใช้ someip_primitive กับค่าต่างๆ เช่น UINT8, UINT32, INT32, FLOAT32 และ BOOL
  • สตริง: ใช้ someip_string และระบุการเข้ารหัส (เช่น UTF_8 หรือ UTF_16_LE) และข้อมูลความยาว (fixed_length หรือ length_field_size)
  • อาร์เรย์: ใช้ someip_array และกำหนด array_type (ซึ่งเป็น SomeIpType แบบเรียกซ้ำอีกรายการ) พร้อมกับข้อมูลความยาว (fixed_length หรือ length_field_size)
  • โครงสร้างที่ซ้อนกัน: ใช้ someip_struct เพื่อฝังคำจำกัดความของโครงสร้างอื่น แบบเรียกซ้ำ

ตัวอย่าง: เขียนคำจำกัดความประเภทโครงสร้าง

ต่อไปนี้เป็นตัวอย่างการเขียน SomeIpStruct ภายในบล็อก type_definition เพย์โหลดนี้มีจำนวนเต็มแบบ 8 บิตที่ไม่ใช่ค่าลบชื่อ interval และจำนวนเต็มแบบ 32 บิตที่ไม่ใช่ค่าลบชื่อ 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
    }
  }
}

เพิ่มประเภทที่ซับซ้อน

หากต้องการรวมฟิลด์สตริงแบบความยาวแบบไดนามิกและอาร์เรย์ภายใน struct ให้เพิ่มฟิลด์ดังนี้

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 }
    }
  }
}

แมปการเข้ารหัสเพย์โหลด ARXML และ vsomeip ของ AUTOSAR

เมื่อผสานรวม SDV ของ AAOS กับหน่วยควบคุมอิเล็กทรอนิกส์ (ECU) ของ AUTOSAR ภายนอก หรือสแต็ก SOME/IP เช่น COVESA vsomeip โปรดตรวจสอบว่า VSIDL type_definition ตรงกับพารามิเตอร์การซีเรียลเลสชันแบบมีสายที่กำหนดไว้ใน ARXML ของระบบ (SOMEIP-TRANSFORMATION-PROPS และ SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) หรือการกำหนดค่า vsomeip

พารามิเตอร์ AUTOSAR ARXML และ vsomeip เทียบเท่า VSIDL SomeIpType กฎการเข้ารหัสเพย์โหลดและการทำให้เป็นอนุกรมแบบมีสาย
sizeOfStructLengthField (0, 1, 2, 4 ไบต์) SomeIpStruct.length_field_size (ZERO, ONE, TWO, FOUR) เติมคำนำหน้าความยาวไบต์ที่ชัดเจนก่อนเพย์โหลดของโครงสร้างที่ซีเรียลไลซ์ หากต้องการตั้งค่าเป็น ZERO สำหรับโครงสร้างเลย์เอาต์คงที่ที่ไม่มี คำนำหน้าความยาว
sizeOfArrayLengthField (0, 1, 2, 4 ไบต์) SomeIpArray.length_field_size (ZERO, ONE, TWO, FOUR) หรือ fixed_length อาร์เรย์แบบไดนามิกต้องมีคำนำหน้าฟิลด์ความยาว (ONE, TWO หรือ FOUR ไบต์) ซึ่งระบุความยาวเป็นไบต์ ขององค์ประกอบอาร์เรย์ที่ซีเรียลไลซ์
sizeOfStringLengthField และการเข้ารหัส (UTF-8, UTF-16LE, UTF-16BE) SomeIpString.string_encoding และ length_field_size หรือ fixed_length ตรงกับกฎการซีเรียลไลซ์สตริง AUTOSAR (รวมถึงเครื่องหมายลำดับไบต์ และการจัดการการสิ้นสุดด้วยค่าว่าง) สำหรับสตริงที่มีความยาวผันแปรและความยาวคงที่
ประเภทฐานดั้งเดิม (uint8, uint16, uint32, float32, boolean) SomeIpPrimitive (UINT8, UINT16, UINT32, INT32, FLOAT32, BOOL) เข้ารหัสค่าดั้งเดิมในลำดับไบต์ของเครือข่าย (ค่าเริ่มต้นคือ Big-Endian ตามข้อกำหนด SOME/IP) ที่ตรงกับฟิลด์ Protobuf เป้าหมาย