أنواع بيانات مشتركة، تتبادل بها وحدات مكدس الاتصال الـ PDUs وذاكرات التخزين المؤقت والقنوات.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: claude-opus-5-5 · الجهد: high · درجة الحرارة: غير قابل للتحكم · الموجّه: 6cf9f0457dd9المصدرأسئلة مفتوحة (1)
المرساة السببية: R20-11صالح اعتبارًا من R20-11مُركَّب حديثًا لهذا الإصدار من المواصفة.
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
أنواع بيانات مشتركة، تتبادل بها وحدات مكدس الاتصال الـ PDUs وذاكرات التخزين المؤقت والقنوات.
توفر الوحدة comstack عبر ComStack_Types.h الأنواع المشتركة التي تستخدمها كافة طبقات مكدس اتصال Classic لعنونة وتبادل الـ PDUs: PduIdType كمقبض، وPduLengthType كطول، وPduInfoType مع مؤشر بيانات الحمولة النافعة ومؤشر بيانات التعريف والطول ([SWS_COMTYPE_00011]). تنسخ بروتوكولات النقل الـ PDUs الكبيرة مجزأةً عبر StartOfReception وCopyRxData وCopyTxData. وتُبلغ عن حالة ذاكرة التخزين المؤقت باستخدام BufReq_ReturnType، بينما يتحكم RetryInfoType في التأكيد وإعادة المحاولة ([SWS_COMTYPE_00012]). القيد الأهم: يعتمد عرض PduIdType وPduLengthType على تكوين EcuC ويتم توليده.
تُعرّف الوحدة comstack مخزون الأنواع المشترك لمكدس اتصال Classic. ينتمي إلى ذلك PduIdType وPduLengthType وPduInfoType وBufReq_ReturnType وRetryInfoType بالإضافة إلى معرفات القنوات والشبكات الجزئية، وجميعها متاحة عبر ComStack_Types.h ([SWS_COMTYPE_00011]، [SWS_COMTYPE_00038]). تستخدم واجهات النواقل وبروتوكولات النقل وPduR ووحدات التشخيص وRTE نفس الأنواع؛ وتستوردها RTE صراحةً (SWS RTE ص. 833).
تعتمد المقابض والأطوال على التكوين. PduIdType هو uint8 أو uint16، وPduLengthType هو uint8 أو uint16 أو uint32؛ كلاهما يُولّد من تكوين EcuC ([SWS_COMTYPE_00005]، [SWS_COMTYPE_00008]). تختار كل وحدة موفرة معرفات المقابض الخاصة بها بنفسها. يجب أن تكون فريدة فقط لكل API؛ ويقوم PduR بترجمتها على طول مسار التوجيه (ECU Configuration ص. 156).
يجمع PduInfoType بين مؤشر بيانات الحمولة النافعة ومؤشر بيانات التعريف والطول. وبذلك يحمل هذا الهيكل أوامر الإرسال ودلالات الاستقبال وTrigger Transmit. يتم نسخ الـ PDUs الكبيرة مجزأة: يستدعي بروتوكول النقل بشكل متكرر عبر PduR الدالة CopyTxData للطبقة العليا (SWS PduR ص. 109). يبدأ الاستقبال بـ StartOfReception ويستمر مع CopyRxData.
مخطط تتابع: يسحب بروتوكول النقل بيانات الإرسال في حلقة تكرارية من DCM؛ ويتبع التأكيد في النهاية. المصادر: SWS PduR ص. 109
BUFREQ_E_BUSY: لا توجد ذاكرة تخزين مؤقت مؤقتًا أو البيانات غير كافية؛ يُسمح بإعادة الاستدعاء.
BUFREQ_E_OVFL: لا توجد ذاكرة تخزين مؤقت بالطول المطلوب.
BUFREQ_E_NOT_OK: إلغاء.
يتحكم RetryInfoType في التأكيد وإعادة المحاولة عند إرسال TP باستخدام TP_DATACONF وTP_CONFPENDING وTP_DATARETRY إلى جانب الإزاحة TxTpDataCnt ([SWS_COMTYPE_00027]، [SWS_COMTYPE_00037]).
تُكمل أنواع المعرفات الأخرى هذا المخزون. يحدد NetworkHandleType (uint8) قناة اتصال. ويختار TPParameterType كلاً من STmin أو Block Size أو التحكم في عرض النطاق الترددي للتعديل ([SWS_COMTYPE_00031]). تم اشتقاق PNCHandleType في R20-11 من uint8 ([SWS_COMTYPE_00036])؛ وتذكر نسخة R23-11 بخلاف ذلك uint16 (SWS ComStackTypes ص. 17).
الدور: مخزون الأنواع المشترك لمكدس الاتصال
لا تقدم الوحدة comstack أي خدمات خاصة بها. إنها تُعرّف أنواع البيانات التي تتواصل بها وحدات مكدس اتصال Classic مع بعضها البعض. ينتمي إلى ذلك PduIdType وPduLengthType وPduInfoType وBufReq_ReturnType وTpDataStateType وRetryInfoType وTPParameterType وNetworkHandleType وPNCHandleType. وهي متاحة عبر ComStack_Types.h ([SWS_COMTYPE_00011]، [SWS_COMTYPE_00037]، [SWS_COMTYPE_00038]). اجتهاد: وبالتالي لا تمتلك الوحدة نفسها أي سلوك وقت تشغيل. سؤال Q-766338989232e06a (مفتوح) لا تنشأ التسلسلات والحالات واستجابات الأخطاء إلا في الوحدات التي تستخدم هذه الأنواع في واجهاتها.
لذلك يمر حد النظام عبر المكدس بأكمله. تستخدم نفس الأنواع:
واجهات النواقل مثل CanIf وبروتوكولات النقل مثل CanTp (SWS CanIf ص. 87)،
PduIdType هو عدد صحيح صفري الأساس في النطاق 0…<PduIdmax>. يعتمد عرضه (uint8 أو uint16) على الحد الأقصى لعدد الـ PDUs التي تديرها وحدة برمجية مفردة. تنشئه أداة المولد من القيمة المكونة في الطبقة الافتراضية EcuC في ComStack_Cfg.h ([SWS_COMTYPE_00005]). تحدد المعلمة المرتبطة PduIdTypeEnum القاعدة: يكفي UINT8 ما دامت لا توجد وحدة تعالج أكثر من 256 PDU، وإلا يلزم UINT16 (ECU Configuration ص. 153).
وبالمثل، يتشكل PduLengthType اعتمادًا على التكوين كـ uint8 أو uint16 أو uint32. المعيار الحاسم هو الحد الأقصى لطول الـ PDUs التي ترسلها وحدة تحكم إلكترونية ([SWS_COMTYPE_00008]). وتشتق بروتوكولات النقل أيضًا الأطوال من EcuC: يحدد CanTp الحد الأقصى لطول الإرسال لـ N-PDU من معلمة EcuC المسماة PduLength (SWS CanTp ص. 60).
تجمع واجهات برمجة التطبيقات (APIs) الخاصة بالمكدس بين أمرين: مؤشر إلى ذاكرة التخزين المؤقت لبيانات الـ PDU، ومعرف مقبض (Handle-ID) يحدد الـ PDU التي ينتمي إليها هذا المؤشر. تختار الوحدة الموفرة قيمة معرف المقبض بحرية. وهكذا يمكن أن تنتقل نفس الـ PDU من Com بمعرف 5 إلى PduR ومن PduR بمعرف 19 إلى CanIf. يجب أن يكون المعرف فريدًا فقط ضمن نطاق صلاحية الـ API المعنية (ECU Configuration ص. 156). ولكي تتمكن وحدتان من الإشارة إلى نفس الـ PDU، توجد في تكوين الوحدة الافتراضية EcuC الحاوية المستقلة عن الوحدات EcucPduCollection (ECU Configuration ص. 154). يحدد PduR مسار التوجيه عبر المعرف المصدري ومعرفات الوجهة، ويقوم بتحويل المعرفات وتمرير قيمة PduInfoType دون تغيير (SWS PduR ص. 33).
يشير MetaDataPtr إلى بيانات التعريف مثل معرف CAN أو معرف المقبس (Socket-ID) أو عناوين التشخيص. يتم تكوين طولها ونوعها بشكل ثابت لكل PDU؛ والعناصر التي تزيد عن 8 بت تكون بترتيب البايتات الخاص بالمنصة.
يحدد SduLength من النوع PduLengthType طول SDU بالبايت.
يحمل نفس الهيكل عدة أشكال من التفاعل:
أمر الإرسال: يمرر <Mod>_Transmit(TxPduId, const PduInfoType*) الطول ومؤشر البيانات ومؤشر بيانات التعريف ويعيد E_OK أو E_NOT_OK (SWS CanIf ص. 87).
دلالة الاستقبال:<Mod>_RxIndication(RxPduId, const PduInfoType*). في CanNm، يكون مؤشر البيانات صالحًا فقط حتى عودة الدلالة (SWS CanNm ص. 73).
Trigger Transmit:PduInfoPtr هو دخل وخرج. عند الاستدعاء يحتوي SduLength على حجم ذاكرة التخزين المؤقت المتاح، وعند العودة يحتوي على طول البيانات المنسوخة (SWS CanIf ص. 107). وفي أمر الإرسال السابق، تمرر الطبقة العليا الطول فقط؛ ويشير SduDataPtr حينئذٍ إلى NULL (SWS CanIf ص. 158).
ذاكرة التخزين المؤقت لبروتوكول النقل: النسخ المجزأ بدلاً من التمرير الكامل
لا يتم تمرير الـ PDUs الكبيرة ككتلة واحدة. يسحب المرسل البيانات مجزأة: يُطلق DCM عبر PduR الدالة CanTp_Transmit. ثم يستدعي CanTp بشكل متكرر PduR_CanTpCopyTxData، والتي يتم توجيهها إلى Dcm_CopyTxData. وفي النهاية يتبع PduR_CanTpTxConfirmation وDcm_TpTxConfirmation (SWS PduR ص. 109). بالنسبة لمعلمات CopyTxData ينطبق الآتي:
يوفر info ذاكرة التخزين المؤقت للوجهة وعدد البايتات المراد نسخها.
قيمة SduLength بمقدار 0 تبلغ فقط عن تغيير الحالة في المعلمة retry أو تستعلم عن كمية البيانات المتاحة؛ ويجوز حينئذٍ أن يكون SduDataPtr هو NULL_PTR (SWS PduR ص. 93).
يُبلغ availableDataPtr عن بيانات الإرسال المتبقية. وتحدد وحدات TP ذات طول الحمولة النافعة الديناميكي، مثل FrIsoTp، إطارات Consecutive Frames التالية بناءً على ذلك (SWS LdCom ص. 34).
مخطط تتابع: عند إرسال TP، يسحب بروتوكول النقل البيانات في حلقة تكرارية عبر PduR من الطبقة العليا؛ ولا يتبع التأكيد إلا بعد الجزء الأخير. المصادر: SWS PduR ص. 109، SWS PduR ص. 93، [SWS_COMTYPE_00012]
يتم الاستقبال في ثلاث خطوات:
يفتح StartOfReception الاتصال. يحمل info بيانات First Frame أو Single Frame مع بيانات التعريف، أو يكون NULL_PTR إذا لم يتوفر أي منهما. ويذكر TpSduLength الطول الإجمالي. وعبر bufferSizePtr يبلغ المستقبل عن ذاكرة التخزين المؤقت الشاغرة لديه؛ ويحسب بروتوكول النقل Block Size بناءً على ذلك (SWS PduR ص. 92).
يوفر كل استدعاء لـ CopyRxData الجزء التالي من I-PDU ويكتب ذاكرة التخزين المؤقت المتبقية (SWS PduR ص. 91).
تختتم RxIndication الاستقبال.
إذا تم تمرير TP-PDU عبر بوابة (gatewayed) بالإضافة إلى ذلك، فإن PduR يقوم بتخزينها مؤقتًا بنفسه لأن DCM لا يعلم شيئًا عن التمرير عبر البوابة (SWS PduR ص. 112).
يوضح الرسم التوضيحي الخاص ببروتوكول النقل J1939 التفاعل بشكل ملموس:
لكل كتلة، يتم طلب الحزمة الأولى بـ TP_DATACONF، والحزم اللاحقة بـ TP_CONFPENDING.
إذا فُقدت TP.DT، يبدأ النقل مجددًا عند الحزمة الأولى للكتلة. ولهذا الغرض يُضبط TP_DATARETRY، ويحتوي TxTpDataCnt على الإزاحة إلى بداية الكتلة (SWS J1939Tp ص. 55).
لا يُقيّم كل مستخدم المعلمة: في LdCom، ووفقًا للمواصفة، لا تتم معالجة retry بواسطة LdCom ولا بواسطة طبقته العليا (SWS LdCom ص. 34).
يحفظ PNCHandleType معرف Partial Network Cluster وتم اشتقاقه في R20-11 من uint8 ([SWS_COMTYPE_00036]). وتذكر وثيقة R23-11 في المقابل uint16 (SWS ComStackTypes ص. 17). ينطبق المتطلب على R20-11. يوضح إيقاف تشغيل PNC المتزامن في ComM سياق استخدام معرفات PNC (SWS ComM ص. 171).
يحدد TPParameterType معلمة بروتوكول النقل المراد تغيير قيمتها ([SWS_COMTYPE_00031]):
TP_STMIN: Separation Time،
TP_BS: Block Size،
TP_BC: التحكم في عرض النطاق الترددي لبروتوكول نقل FlexRay.
يظهر Block Size وSTmin على سبيل المثال في إطار التحكم في التدفق (Flow-Control-Frame) لبروتوكول نقل FlexRay-AR (SWS FrArTp ص. 47).
BUFREQ_E_NOT_OK (1): يتعذر الوصول إلى المخزن المؤقت.
BUFREQ_E_BUSY (2): لا يتوفر مخزن مؤقت مؤقتًا؛ ينبغي على الطالب إعادة المحاولة بعد فترة معينة.
BUFREQ_E_OVFL (3): يتعذر توفير مخزن مؤقت بالطول المطلوب.
تعين الواجهات هذه القيم على النحو التالي:
CopyTxData: إذا لم تكن بيانات الإرسال كافية، فلن يتم نسخ أي شيء ويتم إرجاع BUFREQ_E_BUSY؛ ويُسمح للطبقة السفلية بإعادة استدعاء الدالة (SWS PduR ص. 93). في تسلسل المخزن المؤقت المقسم لصفحات (Paged-Buffer) الخاص بـ DCM، يحدث BUFREQ_E_BUSY بالتناوب مع تجهيز الصفحة التالية (SWS DCM ص. 481).
StartOfReception: يرفض BUFREQ_E_NOT_OK الاتصال ويقطع الاستقبال؛ ويبقى bufferSizePtr دون تغيير. ويقطع BUFREQ_E_OVFL العملية لعدم توفر مخزن مؤقت بالطول المطلوب. وفي حالة BUFREQ_OK دون وجود مخزن مؤقت بالحجم المطلوب، يتم الإبلاغ عن حجم مخزن مؤقت قدره 0 (SWS DCM ص. 273).
CopyRxData: يعني BUFREQ_E_NOT_OK أنه لم يتم نسخ أي شيء بسبب حدوث خطأ (SWS PduR ص. 91).
خطأ في الإرسال في TP: تتم المعالجة عبر TP_DATARETRY مع الإزاحة TxTpDataCnt ([SWS_COMTYPE_00027]).
TriggerTransmit: يعني E_NOT_OK أنه لم يتم نسخ أي شيء. ولا يجوز حينئذٍ استخدام PduInfoPtr لأنه قد يكون NULL أو غير صالح (SWS CanIf ص. 107).
تحدد الوحدات المستخدمة الفحوصات الإضافية بنفسها. أمثلة:
يتحقق DoIP_SoAdTpCopyRxData عند تفعيل اكتشاف أخطاء التطوير مما إذا كان قد تم استدعاء DoIP_Init مسبقًا (SWS DoIP ص. 77).
يُرجع FrIf_Transmit في الحالة FRIF_STATE_OFFLINE القيمة E_NOT_OK (SWS FrIf ص. 68).
العديد من هذه الدوال قابلة لإعادة الدخول (reentrant) لمعرفات PDU المختلفة فقط، وليس لنفس المعرف (SWS DoIP ص. 75).
مخطط توضيحي لمعالجة إعادة المحاولة (موضح أيضًا للإصدار R20-11)
دليل تم إنشاؤه بواسطة الذكاء الاصطناعي بناءً على المتطلبات ومواضع الوثائق المقدمة في الحمولة؛ وتأتي بعض مواضع الوثائق المقتبسة من إصدارات لاحقة (R23-11 إلى R25-11). المعيار الإلزامي للإصدار R20-11 هو المتطلبات SWS_COMTYPE_*.
Communication Stack Types (ComStack_Types)
Standardized types, PDU identifiers, lengths, and buffer request types (PduIdType, PduLengthType, PduInfoType, BufReq_ReturnType) used across all communication layers.
Typen — Übersicht
typedef PduIdTypeThis type is used within the entire AUTOSAR Com Stack except for bus drivers.
typedef PduLengthTypeThis type shall be used within the entire AUTOSAR Com Stack of an ECU except for bus drivers.
struct PduInfoTypeVariables of this type shall be used to store the basic information about a PDU of any type, namely a pointer variable...
typedef PNCHandleTypeUsed to store the identifier of a partial network cluster.
enum TPParameterTypeSpecify the parameter to which the value has to be changed (BS or STmin).
enum BufReq_ReturnTypeVariables of this type shall be used to store the result of a buffer request.
enum TpDataStateTypeVariables of this type shall be used to store the state of TP buffer.
struct RetryInfoTypeVariables of this type shall be used to store the information about Tp buffer handling.
typedef NetworkHandleTypeVariables of the type Network Handle Type shall be used to store the identifier of a communication channel.
Variables of this type shall be used to store the basic information about a PDU of any type, namely a pointer variable pointing to its SDU (payload), a pointer to Meta Data of the PDU, and the corresponding length of the SDU in byt es.
Variables of this type shall be used to store the basic information about a PDU of any type, namely a pointer variable pointing to its SDU (payload), a pointer to Meta Data of the PDU, and the corresponding length of the SDU in byt es.
gemini-3.8-flash-low· 2026-10-13 · الأصل الألماني