عند تحديد عمليات ربط SOME/IP لبرامج وسيطة قابلة للتوسيع وموجّهة نحو الخدمة عبر بروتوكول الإنترنت (IP) في VSIDL، يمكنك وصف تسلسل التنسيق السلكي وتشفير الحمولة لكل رسالة SOME/IP. باستخدام تعريفَي SomeIpType وSomeIpStruct، يمكنك تصميم نماذج للعناصر الأساسية والسلاسل والمصفوفات والبِنى المتداخلة التي تتطابق مع AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) وقواعد ترميز حمولة حزمة SOME/IP (بما في ذلك vsomeip من COVESA).
تركّز هذه الصفحة على كيفية كتابة تعريف من النوع SomeIpStruct، والذي يتم استخدامه في كتل type_definition لعمليات ربط الأحداث والطرق.
رسالة SomeIpStruct
تمثّل رسالة SomeIpStruct حمولة بيانات منظَّمة من SOME/IP تتألف من حقول متعددة. يستخدم وسيط SOME/IP البنية المحدّدة هنا للترجمة بين وحدات بايت SOME/IP الأولية وحقول رسالة SDV protobuf.
عند تحديد بنية، يمكنك ضبط خاصيتَين رئيسيتَين:
-
length_field_size(اختياري): يحدّد حجم (بالبايت) حقل الطول الذي يسبق البنية في الحمولة المتسلسلة. تشمل القيم المستخدَمة من تعدادLengthFieldSizeZERO(بدون حقل طول) و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
}
}
}
إضافة أنواع معقّدة
لتضمين حقل سلسلة ديناميكية الطول ومصفوفة داخل البنية، أضِف حقولاً على النحو التالي:
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 بترميز حمولة vsomeip
عند دمج AAOS SDV مع وحدات تحكّم إلكترونية خارجية في 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 المستهدف |