يحول هذا البرنامج ملف DBC إلى عدد من التنسيقات المختلفة.
Can-FD غير مدعوم حاليًا .
يرجى النظر في التبرع للمشروع إذا وجدت أنه مفيد. يتطلب هذا المشروع دعمك للمتابعة. إذا كنت بحاجة إلى دعم مدفوع ، فيرجى الاتصال بـ Mailto: [email protected].
كما ترون من خلال الملاحظة الكبيرة أعلاه ، لا يتم دعم Can-FD حاليًا ، ومن المحتمل ألا يكون ذلك (لفترة من الوقت). المشكلة هي أن Can-FD يتيح رسائل أعلى من 64 بت ، وهذا المشروع والرمز الذي تم إنشاؤه منه يجعل افتراض أن 8 بتات مخصصة للرسالة العلبة.
DBCC هو برنامج لتحويل ملف DBC في المقام الأول إلى رمز C الذي يمكن أن يؤدي إلى تسلسل الرسائل وتهريبها إلى هياكل تمثل هذه الرسائل والإشارات. من الممكن أيضًا طباعة المعلومات الواردة في الهيكل.
راجع ملف الترخيص للحصول على تفاصيل ترخيص هذا البرنامج ، يتم إصداره بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. التبعيات ، إذا كانت مرتبطة ، قد يكون لها ترخيص خاص بها ومجموعة من القيود الخاصة بها إذا تم بناؤها.
ينشأ ملف المصادر MPC.C و MPC.H من مشمع محلل مكتوب في C يسمى MPC ويتم ترخيصهم بموجب ترخيص BSD للفقرة 3.
للبناء ، تحتاج فقط إلى مترجم C (C99) وجعله (ربما جعل GNU ، لا أبذل أي جهد لدعم تطبيقات أخرى). برنامج DBCC نفسه مكتوب في ما ينبغي أن يكون محمولًا مع التبعية الخارجية الوحيدة هي مكتبة منصاتك C.
يجب أن تكون قادرًا على الكتابة:
make
للبناء ، يتم إنتاج قابلة للتنفيذ تسمى "DBCC". لاختبار إجراء الاختبارات ، مطلوب xmllint.
-n لتحديد إصدار الإخراج الذي قد يمنحك إمكانية الوصول إلى السلوك السابق إذا تم تنفيذ التوافق المتخلف. يمكنك تحديد الإصدار لاستخدامه في سطر الأوامر مع خيار -n . سيتم استخدام أحدث إصدار افتراضيًا.
الإصدار 1:
الإرث/السلوك الأصلي. لاحظ أن هذا لا يزال لن يوفر إخراجًا مستقرًا ، ولكن سيكون لديه فرصة أفضل لعدم إجراء تغييرات.
الإصدار 2:
أحدث إصدار
أسماء التعداد مؤهلة مع اسم الرسالة CAN
أسماء وظائف الترميز/فك الشفرة مؤهلة أيضًا مع اسم الرسالة
يمكن لمولد الرمز إنشاء رمز لتفكيك رسالة (تحويل بعض البايت إلى بنية بيانات) ، وفك تشفير رسالة (قم بتطبيق الحد الأدنى من القيم في التحجيم/الإزاحة إلى القيم في بنية البيانات) ، ويمكن القيام بالعكس (الحزمة/الترميز).
يمكنك إلقاء نظرة على الكود الذي تم إنشاؤه من ملفات DBC داخل المشروع لفهم كيفية عمله.
إذا كنت ترغب في معالجة رسالة علبة تلقيتها ، فستحتاج إلى استدعاء "unpack_message". إن الرمز الذي يتم إنشاؤه غير مؤلف لترتيب بايت وحدات المعالجة المركزية ، فهو يأخذ قيمة "UINT64_T" التي تحتوي على حزمة علبة واحدة (إلى جانب معرف CAN و DLC للحزمة) ويفصل ذلك في بنية تنشئها. يجب وضع البايت الأول من الحزمة CAN في بايت أقل أهمية من "UINT64_T".
يمكنك استخدام الوظائف التالية للتحويل إلى/من رسالة علبة:
static uint64_t u64_from_can_msg(const uint8_t m[8]) {
return ((uint64_t)m[7] << 56) | ((uint64_t)m[6] << 48) | ((uint64_t)m[5] << 40) | ((uint64_t)m[4] << 32)
| ((uint64_t)m[3] << 24) | ((uint64_t)m[2] << 16) | ((uint64_t)m[1] << 8) | ((uint64_t)m[0] << 0);
}
static void u64_to_can_msg(const uint64_t u, uint8_t m[8]) {
m[7] = u >> 56;
m[6] = u >> 48;
m[5] = u >> 40;
m[4] = u >> 32;
m[3] = u >> 24;
m[2] = u >> 16;
m[1] = u >> 8;
m[0] = u >> 0;
}
سيقوم مولد الرمز بإنشاء بنية استنادًا إلى اسم ملف ملف DBC ، لذلك على مثال ملف DBC "ex1.dbc" ، تم إنشاء بنية بيانات تسمى "can_obj_ex1_h_t '. يحتوي هذا الهيكل على جميع هياكل الرسائل CAN ، والتي بدورها تحتوي على جميع الإشارات. وجود جميع الرسائل/الإشارات في هيكل واحد له مزايا وعيوب ، واحدة من الأشياء التي يجعلها أسهل هو تحديد هياكل البيانات اللازمة.
/* reminder of the 'unpack_message' prototype */
int unpack_message(can_obj_ex1_h_t *o, const unsigned long id, uint64_t data, uint8_t dlc);
static can_obj_ex1_h_t ex1;
uint8_t can_message_raw[8];
unsigned long id = 0;
uint8_t dlc = 0;
your_function_to_receive_a_can_message(can_message_raw, &id, &dlc);
if (unpack_message(&ex1, id, can_message_u64, dlc) < 0) {
// Error Condition; something went wrong
return -1;
}
يستدعي "unpack_message" وظيفة إلغاء الافتحة الصحيحة لهذا المعرف ، كمثال على المعرف "0x020":
case 0x020: return unpack_can_0x020_MagicCanNode1RBootloaderAddress(&o->can_0x020_MagicCanNode1RBootloaderAddress, data, dlc);
تملأ دالة إلغاء الظهر كائن الرسالة في هيكل "can_obj_ex1_h_t 'لهذا المعرف. يمكن بعد ذلك فك إشارات الفردية مع الوظائف المناسبة لتلك الإشارة. على سبيل المثال:
uint16_t b = 0;
if (decode_can_0x020_MagicNode1R_BLAddy(o, &b)) {
/* error */
}
لإرسال رسالة ، يجب تشفير كل إشارة ، ثم ستعيد وظيفة الحزمة رسالة معبأة.
بعض الملاحظات الأخرى:
للحصول على مواصفات ، كما أفهمها ، لتنسيق ملف DBC ، انظر DBC.MD. هذا عمل مستمر.
يوجد ملف بناء جملة VIM لملفات DBC في المشروع ، يسمى DBC.VIM
بالإضافة إلى C ، يمكن إنشاء XML ، يحتوي المشروع على ملف XSD و XSLT لـ XML الذي تم إنشاؤه.
ملف قائم على XML يمكن استيراده إلى ما وراء الأمن في Bestorm واستخدامه لاختبار البنية التحتية للحافلات.
يمكن إنشاء ملف CSV المسطح ، وهو أمر أسهل في الاستيراد إلى Excel.
يمكن إنشاء ملف JSON ، وهو ما يستخدمه كل الأطفال الرائعين في الوقت الحاضر.
راجع الصفحة اليدوية لمزيد من المعلومات حول التشغيل الدقيق للبرنامج.
سيكون من الممكن إنشاء صور لطيفة (ASCII ART) التي توضح كيفية تنظيم الرسالة ، والتي تساعد في فهم الرسالة المعنية ، وهي مفيدة لأغراض الوثائق ، على سبيل المثال ، شيء مثل:
Message Name: Example-1
Message ID: 0x10, 16
DLC: 1 (8-bits)
+-----+-----.-----.-----.-----+-----.-----+-----+
| | | | |
| | | | |
+-----+-----.-----.-----.-----+-----.-----+-----+
0 1 2 3 4 5 6 7
Bit 0: Signal-Name-1, 1 bit signal, scalar 1.0, offset 0
Bits 1-2: Signal-Name-2, 4 bit signal, signed, Motorola, ...
... etcetera ...
أو شيء مشابه. سيكون هذا وحدة إخراج أخرى.
<style type = "text/css"> body {margin: 40px auto ؛ max-width: 850px ؛ line-height: 1.6 ؛ font-size: 16px ؛ color:#444 ؛ padding: 0 10px} h1 ، h2 ، h3 {line-line: 1.2} </style>