كتابة تعريف لنوع SOME/IP

عند تحديد عمليات ربط 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 (اختياري): يحدّد حجم (بالبايت) حقل الطول الذي يسبق البنية في الحمولة المتسلسلة. تشمل القيم المستخدَمة من تعداد 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
    }
  }
}

إضافة أنواع معقّدة

لتضمين حقل سلسلة ديناميكية الطول ومصفوفة داخل البنية، أضِف حقولاً على النحو التالي:

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 المستهدف