محاكي المركبات J1939

محاكي مركبات يدعم بروتوكول J1939 CAN

ملخص

يُعدّ برنامج محاكاة المركبات ( gva-vehicle-sim ) أداة شاملة للاختبار والتطوير لمنصة GVA (معمارية المركبات العامة). وهو يوفر محاكاة واقعية لديناميكيات المركبات مع توليد رسائل ناقل CAN J1939 مدمج، مما يتيح اختبار الأجهزة في الحلقة دون الحاجة إلى أجهزة مركبة فعلية.

فوائد محاكاة J1939 في توليد الرسائل

🎯 مزايا التطوير والاختبار

  1. تطوير مستقل عن الأجهزة

    • قم بتطوير واختبار تطبيقات GVA بدون أجهزة CAN فعلية
    • لا حاجة لوحدات تحكم إلكترونية باهظة الثمن للسيارات أو منصات اختبار.
    • التطوير المتوازي عبر فرق متعددة
  2. سلوك واقعي للمركبة

    • يقوم بإنشاء أرقام مجموعات المعلمات الأصلية J1939 (PGNs) وأرقام المعلمات المشتبه بها (SPNs).
    • يحاكي ديناميكيات المركبات الواقعية (السرعة، عدد دورات المحرك في الدقيقة، تغييرات التروس، الكبح)
    • يوفر بيانات المستشعرات المتزامنة مع الوقت
  3. خفض التكاليف

    • يلغي الحاجة إلى مركبات اختبار مادية في المراحل المبكرة من التطوير
    • تتيح واجهة CAN الافتراضية ( vcan0 ) إجراء الاختبارات على أي محطة عمل تعمل بنظام Linux
    • يقلل من تآكل وتلف الأجهزة المادية
  4. النموذج الأولي السريع

    • حلقة تغذية راجعة فورية لتطوير الخوارزميات
    • إنشاء السيناريوهات وإعادة تشغيلها بسهولة
    • معدلات الرسائل وأنماط البيانات القابلة للتكوين
  5. اختبار التكامل

    • التحقق من وظائف بوابة J1939
    • اختبار تدفق البيانات من CAN إلى مواضيع DDS
    • تحقق من استجابة واجهة المستخدم الرسومية لمعايير المركبة
  6. اختبار قابل للتكرار

    • سلوك المركبة الحتمي
    • سيناريوهات اختبار قابلة للتكرار
    • خط أساس ثابت لاختبار الانحدار

📊 دعم الرسائل J1939

✅ دعم كامل لملفات PGN (مُطبقة في محاكي المركبات)

يقوم جهاز محاكاة المركبة بإنشاء رسائل J1939 التالية عبر CAN وينشرها إلى DDS عبر البوابة:

PGN عرافة اسم معدل SPNs وصف
61443 0xF003 وحدة التحكم الإلكترونية للمحرك 2 ( EEC2 ) 50 مللي ثانية 91، 92 موضع دواسة الوقود، نسبة حمل المحرك
61444 0xF004 EEC1 - وحدة التحكم الإلكترونية للمحرك 1 100 مللي ثانية 190، 512، 513 سرعة المحرك (دورة في الدقيقة)، عزم الدوران المطلوب من السائق، عزم دوران المحرك الفعلي
61445 0xF005 ETC2 - وحدة التحكم الإلكترونية في الإرسال 2 100 مللي ثانية 522، 523، 524 وضع القابض، الترس المحدد، الترس الحالي
61449 0xF009 VDC2 - نظام التحكم الديناميكي للمركبة 2 100 مللي ثانية 1807، 1808 زاوية عجلة القيادة، معدل الانعراج
65253 0xFEE5 ساعات تشغيل المحرك 1 ثانية 247 إجمالي ساعات تشغيل المحرك
65256 0xFEE8 VDS - اتجاه/سرعة المركبة 250 مللي ثانية 517، 519، 586 السرعة على الأرض، اتجاه البوصلة، المسار
65258 0xFEEA الارتفاع - ALT 1 ثانية 580 الارتفاع المحدد بنظام تحديد المواقع العالمي (GPS) فوق مستوى سطح البحر
65262 0xFEEE ET1 - درجة حرارة المحرك 1 1 ثانية 110، 174، 175 درجة حرارة سائل تبريد المحرك، درجة حرارة الوقود، درجة حرارة الزيت
65263 0xFEEF EFLP - مستوى/ضغط سائل المحرك 500 مللي ثانية 96، 100، 94 مستوى الوقود، ضغط الزيت، ضغط توصيل الوقود
65265 0xFEF1 نظام تثبيت السرعة / سرعة السيارة 100 مللي ثانية 84، 597، 598 سرعة المركبة ذات العجلات، مفتاح الفرامل، مفتاح القابض
65267 0xFEF3 نائب الرئيس - منصب المركبة 250 مللي ثانية 584، 585 خط العرض وخط الطول لنظام تحديد المواقع العالمي (GPS)
65269 0xFEF5 الظروف المحيطة - AMB 1 ثانية 108، 171 الضغط الجوي، درجة حرارة الهواء المحيط
65271 0xFEF7 VEP1 - الطاقة الكهربائية للمركبة 1 1 ثانية 167، 168، 158 جهد البطارية، جهد المولد، جهد نظام الشحن
65276 0xFEFC DD - شاشة عرض لوحة القيادة 1 ثانية 182، 183 معدل استهلاك الوقود (لتر/ساعة)، معدل استهلاك الوقود اللحظي
0xEF00 0xEF00 PROP_A - الملكية الخاصة A (IONNIC USM) 250 مللي ثانية - التحكم في مؤشر LED للوحة مفاتيح IONNIC USM ES

قائمة SPN التفصيلية (جميع المعلمات المدعومة)

خارق للطبيعة اسم المعلمة PGN وحدة دقة إزاحة يتراوح
84 سرعة المركبات ذات العجلات 65265 كم/ساعة 1/256 كم/ساعة 0 من 0 إلى 250 كم/ساعة
91 وضع دواسة الوقود 61443 % 0.4% 0 0-100%
92 نسبة حمل المحرك عند السرعة الحالية 61443/61444 % 1% 0 0-100%
94 توصيل الوقود 65263 كيلو باسكال 4 كيلو باسكال 0 0-1000 كيلو باسكال
96 مستوى الوقود 65263 % 0.4% 0 0-100%
100 ضغط زيت المحرك 65263 كيلو باسكال 4 كيلو باسكال 0 0-1000 كيلو باسكال
108 الضغط الجوي 65269 كيلو باسكال 0.5 كيلو باسكال 0 0-125 كيلو باسكال
110 درجة حرارة سائل تبريد المحرك 65262 درجة مئوية 1 درجة مئوية -40 من -40 إلى +210 درجة مئوية
158 جهد نظام الشحن 65271 V 0.05 فولت 0 0-3212 فولت
167 جهد المولد 65271 V 0.05 فولت 0 0-3212 فولت
168 جهد البطارية 65271 V 0.05 فولت 0 0-3212 فولت
171 درجة حرارة الهواء المحيط 65269 درجة مئوية 0.03125 درجة مئوية -273 من -273 إلى +1735 درجة مئوية
174 درجة حرارة الوقود 65262 درجة مئوية 1 درجة مئوية -40 من -40 إلى +210 درجة مئوية
175 درجة حرارة زيت المحرك 65262 درجة مئوية 0.03125 درجة مئوية -273 من -273 إلى +1735 درجة مئوية
182 معدل استهلاك الوقود 65276 لتر/ساعة 0.05 لتر/ساعة 0 0-3212 لتر/ساعة
183 اقتصاد فوري في استهلاك الوقود 65276 كم/لتر 1/512 كم/لتر 0 0-125 كم/لتر
190 سرعة المحرك 61444 عدد دورات المحرك في الدقيقة 0.125 دورة في الدقيقة 0 0-8031 دورة في الدقيقة
247 إجمالي ساعات تشغيل المحرك 65253 ح 0.05 ساعة 0 0-210,554,060 ساعة
512 عزم دوران المحرك حسب طلب السائق 61444 % 1% -125 من -125% إلى +125%
513 عزم دوران المحرك الفعلي 61444 % 1% -125 من -125% إلى +125%
517 السرعة على الأرض 65256 كم/ساعة 1/256 كم/ساعة 0 من 0 إلى 250 كم/ساعة
519 مسار فوق الأرض 65256 درجة 1/128 درجة 0 0-360 درجة
522 وضع دواسة القابض 61445 % 0.4% 0 0-100%
523 تروس التيار الناقل 61445 معدات 1 -125 من -125 إلى +125
524 ناقل الحركة - الترس المحدد 61445 معدات 1 -125 من -125 إلى +125
580 ارتفاع 65258 م 0.125 متر -2500 من -2500 إلى +5531 مترًا
584 خط العرض 65267 درجة 10⁻⁷ درجة -210 من -90 درجة إلى +90 درجة
585 خط الطول 65267 درجة 10⁻⁷ درجة -210 من -180 درجة إلى +180 درجة
586 اتجاه البوصلة 65256 درجة 1/128 درجة 0 0-360 درجة
597 مفتاح الفرامل 65265 - 2 بت - إيقاف/تشغيل/خطأ/غير متوفر
598 مفتاح القابض 65265 - 2 بت - إيقاف/تشغيل/خطأ/غير متوفر
899 وضع عزم دوران المحرك 61444 - 1 0 0-15 (التعداد)
1807 زاوية عجلة القيادة 61449 راد 1/1024 راديان -31.374 من -31.374 إلى +31.374 راديان
1808 معدل الانعراج 61449 راد/ثانية 1/8192 راديان/ثانية -3.92 من -3.92 إلى +3.92 راديان/ثانية

المجموع: 15 شبكة عصبية شبكية، 33 شبكة عصبية شبكية ذاتية المحاكاة بشكل فعال

🔲 ملفات PGN غير مدعومة (لم يتم تنفيذها بعد)

لا يقوم محاكي المركبات حاليًا بإنشاء رسائل J1939 التالية. تمثل هذه الرسائل تحسينات مستقبلية محتملة:

PGN عرافة اسم أولوية حالة الاستخدام تعقيد
61440 0xF000 وحدة التحكم الإلكترونية في المثبط 1 (ERC1 ) قليل نظام التحكم في فرامل المحرك/المثبط واسطة
61441 0xF001 EBC1 - وحدة التحكم الإلكترونية في الفرامل 1 عالي نظام منع انغلاق المكابح (ABS) وحالة نظام الفرامل عالي
61442 0xF002 ETC1 - وحدة التحكم الإلكترونية في الإرسال 1 واسطة وضع الإرسال، عملية التحويل جارية واسطة
64971 0xFDCB VDHR - مسافة المركبات (عالية الدقة) عالي عداد المسافات بدقة 5 مم قليل
64972 0xFDCC TCO1 - جهاز تسجيل السرعة واسطة بطاقة السائق، السرعة من جهاز تسجيل السرعة قليل
65132 0xFE6C نظام مراقبة ضغط الإطارات ( TPMS ) واسطة ضغط/درجة حرارة كل إطار على حدة واسطة
65217 0xFEC1 PTODE - تفعيل محرك PTO قليل حالة مأخذ الطاقة قليل
65248 0xFEE0 VDIST - مسافة المركبات عالية الدقة عالي المسافة الإجمالية بدقة 5 أمتار قليل
65251 0xFEE3 ECFG - تكوين المحرك قليل نوع المحرك، طرازه، رقمه التسلسلي قليل
65252 0xFEE4 SHUTDN - إيقاف التشغيل قليل تجاوز إيقاف تشغيل المحرك قليل
65260 0xFEEC السادس - تحديد هوية المركبة واسطة نقل كامل لرقم تعريف المركبة (تنفيذ جزئي) قليل
65279 0xFEFF CCVS1 - مثبت السرعة / سرعة السيارة 1 واسطة بيانات محسّنة للتحكم في السرعة قليل
65098 0xFE4A EBC2 - وحدة التحكم الإلكترونية في الفرامل 2 عالي حالة فرامل كل عجلة على حدة عالي
65099 0xFE4B EBC3 - وحدة التحكم الإلكترونية في الفرامل 3 واسطة تآكل بطانة الفرامل واسطة
65110 0xFE56 IC1 - شروط الدخول/الخروج 1 قليل ضغط/درجة حرارة مشعب السحب واسطة
65172 0xFE84 طلب - RQST قليل اطلب رقم تعريف المنتج (PGN) المحدد من وحدة التحكم الإلكترونية (ECU). واسطة
65226 0xFECA AT1I - المعالجة اللاحقة 1 لسحب الغاز قليل مدخل مرشح جسيمات الديزل قليل
65227 0xFECB AT1O - المعالجة اللاحقة 1 مخرج الغاز قليل مخرج مرشح جسيمات الديزل، مستشعر أكاسيد النيتروجين قليل
65247 0xFEDF EFL/P2 - مستوى/ضغط سائل المحرك 2 قليل ضغوط السوائل الإضافية قليل
65266 0xFEF2 LFE - اقتصاد الوقود واسطة متوسط استهلاك الوقود لكل رحلة قليل
65270 0xFEF6 TD - الشاحن التوربيني قليل زيادة الضغط، سرعة التوربين واسطة
65272 0xFEF8 VEP2 - الطاقة الكهربائية للمركبة 2 قليل حافلات كهربائية إضافية قليل

لماذا لا يتم تطبيق هذه الأمور؟

سبب الخلايا العصبية المتأثرة عدد
غير ذي صلة بمحاكاة المركبات الأساسية ERC1، PTODE، SHUTDN، ECFG، AT1I، AT1O، TD 7
يتطلب نموذج فيزيائي للإطارات نظام مراقبة ضغط الإطارات (TPMS) 1
يتطلب طراز ABS/الفرامل EBC1، EBC2، EBC3 3
يتطلب ناقل حركة متطور ETC1 1
أولوية منخفضة / تجميلية السادس (VIN)، VDHR، VDIST، TCO1، LFE 5
يتطلب نموذج العادم/الانبعاثات IC1، AT1I، AT1O 3
مستوى البروتوكول (وليس بيانات المركبة) RQST 1
نسخ مكررة/محسّنة CCVS1، EFL/P2، VEP2 3

المجموع: 22 ملف PGN غير مدعوم

🛠️ الميزات التقنية

  • دعم شبكة الطرق في OpenDRIVE : اتبع هندسة الطرق الواقعية
  • محاكاة ناقل الحركة الأوتوماتيكي : تغييرات التروس بناءً على السرعة ودواسة الوقود
  • ديناميكيات قائمة على الفيزياء : التسارع، والكبح، والتوجيه مع قيود واقعية
  • تكامل DDS : النشر المباشر لمواضيع J1939 الخاصة بإدارة سلامة العمليات في قطاع السيارات
  • واجهة المستخدم الرسومية Qt6 : عرض مرئي في الوقت الفعلي وتحكم يدوي

J1939 إلى بنية بوابة DDS

يوضح مخطط التسلسل التالي تدفق البيانات الكامل من رسائل ناقل J1939 CAN عبر البوابة إلى مشتركي DDS:

sequenceDiagram participant Sim as Vehicle Simulator participant CAN as CAN Bus (vcan0) participant Reader as SocketCanReader participant Decoder as J1939Decoder participant Gateway as J1939Gateway participant DDS as DDS Topic participant HMI as GVA HMI/LDMX Note over Sim,CAN: Message Generation Phase Sim->>Sim: Calculate vehicle state
(speed, RPM, gear) Sim->>CAN: Send PGN 61444
(EEC1: Engine Speed) Sim->>CAN: Send PGN 65265
(CCVS: Vehicle Speed) Sim->>CAN: Send PGN 61445
(ETC2: Transmission) Note over CAN,Decoder: CAN Reception Phase CAN->>Reader: Read CAN frame (29-bit ID) Reader->>Reader: Validate frame Reader->>Decoder: emit canFrameReceived() Note over Decoder,Gateway: J1939 Decode Phase Decoder->>Decoder: Extract PGN from CAN ID
(bits 24-8) Decoder->>Decoder: Extract source address
(bits 7-0) Decoder->>Decoder: Extract priority
(bits 28-26) Decoder->>Decoder: Decode SPNs from payload
(bit position, scale, offset) Decoder->>Gateway: emit j1939MessageDecoded() Note over Gateway,DDS: DDS Publishing Phase Gateway->>Gateway: Create C_Parameter_Group_Definition
(if first time) Gateway->>DDS: Publish PGN definition loop For each SPN in message Gateway->>Gateway: Create C_Parameter message
(sourceID, PGN, SPN, value) Gateway->>Gateway: Set metadata
(timestamp, status) Gateway->>DDS: Publish parameter end Note over DDS,HMI: Consumption Phase DDS->>HMI: onSampleReceived()
(C_Parameter) HMI->>HMI: Update speedometer HMI->>HMI: Update tachometer HMI->>HMI: Update gear indicator Note over Gateway: Status Reporting (1 Hz) Gateway->>Gateway: Update data source status Gateway->>DDS: Publish C_Data_Source
(gateway health)

شرح مخطط التسلسل

1. مرحلة توليد الرسائل

  • يقوم برنامج محاكاة المركبات بحساب معايير واقعية للمركبة بناءً على مدخلات السائق وقوانين الفيزياء.
  • يقوم بتشفير المعلمات في إطارات J1939 CAN باستخدام بنية PGN/SPN المناسبة
  • يرسل إلى واجهة CAN الافتراضية (vcan0)

2. مرحلة استقبال CAN

  • يقوم مؤشر ترابط SocketCanReader Qt بالقراءة باستمرار من واجهة CAN
  • يتحقق من صحة تنسيق إطار CAN (معرف موسع 29 بت)
  • يُصدر إشارة Qt مع بيانات الإطار الخام

3. مرحلة فك تشفير J1939

  • يقوم برنامج J1939Decoder باستخراج معلومات البروتوكول من معرف CAN:
    • PGN : رقم مجموعة المعلمات (يحدد نوع الرسالة)
    • عنوان المصدر : مُعرّف وحدة التحكم الإلكترونية (0-253)
    • الأولوية : مدى إلحاح الرسالة (0 = الأعلى، 7 = الأدنى)
  • يقوم بفك تشفير حمولة البيانات إلى أسماء الخدمة الفردية (SPNs) باستخدام التكوين:
    • موضع البت وطوله
    • عامل المقياس والإزاحة
    • وحدات هندسية

4. مرحلة نشر DDS

  • تنشر البوابة C_Parameter_Group_Definition (بيانات تعريف PGN) عند أول ظهور لها
  • لكل اسم خدمة رئيسي (SPN) في الرسالة:
    • يقوم بإنشاء رسالة C_Parameter مع القيمة والحالة
    • يضيف الطابع الزمني وتحديد المصدر
    • ينشر في موضوع DDS
  • تحديثات الحالة الدورية (1 هرتز) تنشر حالة البوابة

5. مرحلة الاستهلاك

  • تشترك تطبيقات GVA (HMI، LDMX) في مواضيع J1939 DDS
  • تلقي تحديثات المعلمات عبر برنامج DDS الوسيط
  • تحديث عناصر واجهة المستخدم (عداد السرعة، عداد دورات المحرك، شاشة عرض التروس)

تفاصيل البروتوكول

بنية معرف CAN J1939 (29 بت)

 Bits 28-26: Priority (0-7)
Bit  25:    Reserved
Bit  24:    Data Page (DP)
Bits 23-16: PDU Format (PF)
Bits 15-8:  PDU Specific (PS) - group extension or destination
Bits 7-0:   Source Address (SA)

PGN = (DP << 16) | (PF << 8) | (PS if PF >= 240 else 0)

مثال على فك تشفير إطار CAN

 CAN ID: 0x18F00400
Binary: 00011000111100000000010000000000

Priority:  0x6 (bits 28-26) = 6 (normal priority)
Reserved:  0   (bit 25)
DP:        0   (bit 24)
PF:        0xF0 (bits 23-16) = 240 (broadcast)
PS:        0x04 (bits 15-8)  = 4 (group extension)
SA:        0x00 (bits 7-0)   = 0 (engine controller)

PGN = (0 << 16) | (240 << 8) | 4 = 61444 (EEC1 - Engine Controller 1)

بداية سريعة

1. بناء محاكي المركبات

 cd build
cmake ..
make gva-vehicle-sim

2. إعداد شبكة CAN الافتراضية

 sudo scripts/test/j1939/setup-vcan.sh

3. ابدأ تشغيل محاكي المركبات

 # GUI mode with OpenDRIVE track
./build/bin/gva-vehicle-sim \
  --domain=0 \
  --opendrive=data/opendrive/ZalaZONE_full.xodr \
  --can-interface=vcan0

# Headless mode with J1939 only
./build/bin/gva-vehicle-sim \
  --domain=0 \
  --can-interface=vcan0 \
  --headless

4. بدء تشغيل بوابة J1939

 ./build/bin/gva-j1939-gateway \
  --domain=0 \
  --interface=vcan0 \
  --config=/etc/gva/j1939-config.json

5. المراقبة باستخدام LDMX

 ./build/bin/ldmx
# Navigate to J1939 tab to see live parameters

إعدادات

تكوين محاكي المركبات

إنشاء ملف vehicle-sim-config.json :

 {
  "j1939": {
    "enabled": true,
    "sourceAddress": 0,
    "gatewayResourceId": 1000,
    "updateRateHz": 10
  },
  "vehicle": {
    "maxSpeed": 120.0,
    "maxRpm": 6000,
    "gearRatios": [3.5, 2.5, 1.8, 1.3, 1.0, 0.8],
    "engineIdleRpm": 800
  }
}

تكوين بوابة J1939

راجع /etc/gva/j1939-config.json للاطلاع على تعريفات PGN/SPN ومعلمات التحجيم.

حالات الاستخدام

1. تطوير واجهة الإنسان والآلة

  • تطوير لوحة تحكم المركبة بدون مركبة فعلية
  • عرض ورسوم متحركة لمجموعة أدوات الاختبار
  • التحقق من عتبات التحذير/الإنذار

2. اختبار الخوارزميات

  • اختبار خوارزميات القيادة الاقتصادية مع محاكاة استهلاك الوقود
  • التحقق من صحة منطق الصيانة التنبؤية
  • اختبار اتخاذ القرارات في القيادة الذاتية

3. اختبار التكامل

  • تحقق من تدفق البيانات من البداية إلى النهاية: CAN → DDS → التطبيق
  • اختبار أداء البوابة تحت الحمل
  • التحقق من مزامنة البيانات عبر الأنظمة الفرعية

4. التدريب والعرض التوضيحي

  • بيئة آمنة لتدريب المشغلين
  • عروض توضيحية للعملاء بدون مركبة
  • أداة تعليمية لهندسة القيمة المضافة العالمية

خصائص الأداء

متري قيمة
معدل توليد إطارات CAN يصل إلى 100 هرتز لكل PGN
زمن استجابة نشر DDS أقل من 5 مللي ثانية (محليًا)
معدل نقل البيانات عبر البوابة > 1000 PGNs/ثانية
استخدام وحدة المعالجة المركزية (المحاكي + البوابة) أقل من 10% (نظام رباعي النواة)
بصمة الذاكرة حوالي 50 ميجابايت (مجمعة)

مقارنة: الواقعي مقابل المحاكاة

وجه مركبة مادية محاكي
تكلفة الأجهزة 50,000 دولار أمريكي أو أكثر 0 دولار (للبرنامج فقط)
وقت الإعداد ساعات (التوصيلات، التكوين) دقائق
قابلية التكرار محدود (تباين السائق) مثالي (حتمي)
أمان خطر التلف/الإصابة مخاطرة معدومة
التحكم في السيناريو صعب (الطقس، حركة المرور) سيطرة كاملة
تسجيل البيانات يتطلب معدات مدمج
الاختبار المتوازي مركبة واحدة في كل مرة حالات متعددة

استكشاف الأخطاء وإصلاحها

المشاكل الشائعة

لم يتم العثور على واجهة CAN

 # Verify vcan0 exists
ip link show vcan0

# Recreate if needed
sudo scripts/test/j1939/setup-vcan.sh

لا توجد رسائل DDS

 # Check gateway is running
pgrep -a gva-j1939-gateway

# Verify domain ID matches
./build/bin/gva-j1939-gateway --domain=0
./build/bin/gva-vehicle-sim --domain=0

البوابة لا تقوم بفك تشفير الرسائل

 # Check CAN frames are being sent
candump vcan0

# Verify configuration file
cat /etc/gva/j1939-config.json

اطلب عرضًا توضيحيًا اليوم.