เมื่อกำหนดการแมป 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(ไม่บังคับ): ระบุขนาด (เป็นไบต์) ของ ฟิลด์ความยาวที่อยู่ก่อนโครงสร้างในเพย์โหลดที่แปลงเป็นรูปแบบข้อมูล ค่าที่ใช้ จาก EnumLengthFieldSizeได้แก่ZERO(ไม่มีฟิลด์ความยาว),ONE,TWOและFOURfield(ซ้ำ): รายการฟิลด์ที่ประกอบกันเป็นโครงสร้าง
กำหนดฟิลด์ของโครงสร้าง
แต่ละฟิลด์ภายใน 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 เป้าหมาย |