قارئ OBD2 - تشخيصات السيارات

عند إنشاء التطبيق ، واجهنا الكثير من الخيارات والمشاكل وما إلى ذلك ، والتي سنحاول إطلاعك عليها في هذه المقالة. كما اتضح فيما بعد ، يمكنك إجراء حوار مع السيارة ومثمر للغاية. بطبيعة الحال ، من أجل تنظيم التواصل مع السيارة ، تحتاج إلى "إقامة اتصال" ، "طرح السؤال الصحيح" وفهم "الإجابة" بشكل صحيح من السيارة. وفقًا لذلك ، ستهدف المقالة إلى شرح تنظيم الحوار بلغة يمكن الوصول إليها ، بالإضافة إلى إخبارك بالأخطاء التي قد تواجهها على طول الطريق وكيفية التعامل معها.

اختيار اتصال


في البداية ، من الضروري توضيح أنه سيتم استخدام محول ELM327 للاتصال بالسيارة. ELM327 هو دائرة كهربائية صغيرة تسمح لك بتحويل البروتوكولات المستخدمة في الإطارات التشخيصية للسيارات إلى بروتوكول RS232 ، والذي سنقوم بنقل البيانات إليه. نظرًا لحقيقة أن نقل البيانات عبر بروتوكول RS232 يحدث على التوالي ، تنشأ المشكلة الأولى - سرعة نقل البيانات ، والتي سنحاول الالتفاف عليها في إحدى الفقرات التالية.

هناك العديد من الاختلافات في محول ELM327 ، والتي يتم تصنيفها حسب طريقة نقل البيانات - Bluetooth ، WIFI ، USB. بناءً على حقيقة أن هدف التطوير هو جهاز محمول يعمل بنظام Android ، يمكنك اختيار الإصدارين الأكثر ملاءمة من ELM327 ، مثل Bluetooth و WIFI. نظرًا لوجود طريقة واحدة فقط لاستلام البيانات ومعالجتها ، وهي تختلف فقط في خيارات الاتصال بالمحول ، يمكنك اختيار واحدة فقط ، وتنظيم حوار معها ، ثم إضافة خيارات الاتصال المتبقية.

ELM327 1.5 مقابل ELM327 2.1




كانت إحدى المشكلات الأولى التي واجهتك مشكلة اختيار المحول مباشرةً ، في حالتنا Bluetooth. اتضح أنه إذا كنت بحاجة إلى دعم جميع السيارات (على الأقل) ، فيجب عليك اختيار الإصدار v1.5 بدلاً من الإصدار 2.1 ، والذي يحتاج في الواقع إلى التوضيح عدة مرات عند شراء محول ، لأن البائعين يحاولون إعطاء إصدار المهايئ وليس للإصدار الذي هو في الواقع ، لأن أنها ليست مختلفة بشكل خاص. في الواقع ، في الإصدار v2.1 ، لا يوجد دعم لبروتوكولي J1850 PWM و J1850 VPW ، مما يعني أنك لن تتمكن من الاتصال بالسيارات التي تستخدم هذه البروتوكولات.

صلة


يتم الاتصال بالمحول على عدة مراحل:

  • التوصيل بمحول (Bluetooth ، WIFI)
  • إرسال أوامر التهيئة (سلسلة التهيئة)

إذا كان كل شيء واضح مع تنظيم الاتصال. مبدأ التشغيل هو نفسه كما هو الحال مع أي دردشة Bluetooth / WIFI. لفهم كيفية إرسال سلسلة التهيئة ، من الضروري دراسة الأوامر الموجودة ، وكذلك الوظائف التي تؤديها.

AT Z [إعادة تعيين الكل]
إعادة ضبط إعدادات المحول على إعدادات المصنع الافتراضية.
في L1-0
تمكين / تعطيل الأسطر.
في E1-0
صدى على الخروج
في H1-0
الرؤوس على - قبالة
في AT0-1-2
توقيت التكييفية - توقيت التكييف Auto1 - توقيت التكييف Auto2
AT ST FF
ضبط المهلة إلى الحد الأقصى.
AT D [ضبط الكل على الافتراضي]
إعادة تعيين الإعدادات إلى الحالة الأولية التي تم تكوينها بواسطة المستخدم.
AT DP [وصف البروتوكول الحالي]
الماسح الضوئي قادر على تحديد بروتوكول السيارة التي يتصل بها بشكل مستقل.
AT IB10 [ضبط معدل ISO Baud على 10400]
يقوم الأمر بتعيين معدل البث بالباود ISO 9141-2 و
ISO 14230-4 10400
AT IB96 [ضبط معدل ISO Baud على 9600]
يقوم الأمر بتعيين معدل البث بالباود ISO 9141-2 و
ISO 14230-4 9600 للبروتوكولات 3،4،5.
AT SP h [مجموعة البروتوكول h]
أمر اختيار البروتوكول h ، حيث h:

0 - تلقائي
1 - SAE J1850 PWM (41.6 كيلو بايت) ؛
2 - SAE J1850 VPW (10.4 كيلو بايت) ؛
3 - ISO 9141-2 (5 باود التهيئة ، 10.4 كيلو بايت) ؛
4 - ISO 14230-4 KWP (5 باود البادئة ، 10.4 كيلو باود) ؛
5 - ISO 14230-4 KWP (التهيئة السريعة ، 10.4 كيلو بايت) ؛
6 - ISO 15765-4 CAN (11 بت ID ، 500 Kbaud) ؛
7 - ISO 15765-4 CAN (معرف 29 بت ، 500 كيلو بايت) ؛
8 - ISO 15765-4 CAN (معرف 11 بت ، 250 كيلو بايت) ؛
9 - ISO 15765-4 CAN (29 بت ID ، 250 كيلو بايت) ؛
AT SP Ah [Set Protocol h with Auto]

يقوم الأمر بتعيين البروتوكول الافتراضي h ، إذا فشل الاتصال باستخدام البروتوكول h ، ثم يبدأ المحول في التحديد التلقائي للبروتوكول.

بناءً على الأوامر الموضحة أعلاه ، فإننا نشكل سلسلة التهيئة.

initializeCommands = Arrays.asList("ATZ", "ATL0", "ATE1", "ATH1", "ATAT1", "ATSTFF", "ATDP", "ATSP0"); 

يُنصح بتمكين المستخدم من تغيير أوامر التهيئة ، لأنه من أجل اختيار "المفتاح" لبعض السيارات ، من الضروري اختيار إعدادات محول أكثر ملاءمة. في حالتنا ، يتم استخدام الإعدادات المناسبة لمعظم البروتوكولات القياسية.

يُنصح أيضًا بالاهتمام بأمر APSP0 ، لذلك قمنا بتعيين التحديد التلقائي للبروتوكول ، قد يستغرق هذا بعض الوقت.

وفقًا لذلك ، إذا كان المستخدم يعرف ماهية بروتوكوله التلقائي ، ثم باستخدام القدرة على تغيير بروتوكول الاتصال ، فيمكنه تغيير 0 إلى رقم البروتوكول الخاص به.

قراءة البيانات التشخيصية


تستخدم أوامر PID الخاصة لقراءة البيانات التشخيصية.
PID (معرّف المعلمة - معرفات معلمة التشخيص على متن الطائرة) - الرموز المستخدمة في الاستعلام عن أداء مستشعرات محددة للمركبة.

يمكن العثور على المناقصات الرئيسية في ويكيبيديا ، وهناك مجموعة كاملة من الأوامر الأساسية التي يجب أن تدعمها جميع السيارات. هناك أيضًا مجموعات من الأوامر لبعض العلامات التجارية وأنواع السيارات ، يتم توفير هذه المجموعات مقابل رسوم. في حالتنا ، يركز التطبيق على التشخيصات الأساسية للسيارات ، على التوالي ، نستخدم مجموعة الأوامر الأساسية.

من الممكن أيضًا استلام البيانات الحالية من السيارة ، في حين أن أمر استلام البيانات من السيارة سيكون 01 في البداية ، مما يشير إلى أننا نريد الحصول على بيانات حقيقية. إذا أردنا الحصول على بيانات السيارة المحفوظة ، فيجب عليك تحديد 02 في بداية الأمر. على سبيل المثال ، الأمر للحصول على السرعة الحالية للسيارة هو 010D ، وللحصول على السرعة المحفوظة - 020D .

إذا نظرت بعناية في عدد الأوامر التي توفرها المصادر المفتوحة ، يمكنك فقط ملاحظة المشكلة التي كتبت عنها في البداية ، وهي مشكلة سرعة استجابة المحول. نظرًا لأن إرسال واستقبال الأوامر أمر متسلسل ، من أجل تلقي قراءات المستشعر في الوقت الحالي ، فمن الضروري انتظار إجابة على جميع الأوامر السابقة. وفقًا لذلك ، إذا طلبت تلقي جميع الأوامر ، فهناك احتمال كبير أن يحدث تحديث البيانات الحقيقية ببطء شديد. ولكن يمكن حل هذه المشكلة إذا كنت تستخدم الأوامر التي تعرض فقط تلك الفرق الموجودة في السيارة. على سبيل المثال:

0100 - PIDs المدعومة [01 - 20]
0120 - PIDs المدعومة [21 - 40]
0140 - PIDs المدعومة [41 - 60]
0160 - PIDs المدعومة [61 - 80]
0180 - دعم PIDs [81 - A0]
01A0 - PIDs المدعومة [A1 - C0]

سأوضح كيفية تحديد أجهزة الاستشعار الموجودة في السيارة باستخدام أحد المنافع. على سبيل المثال:

  • 0100 \\ طلب
  • BB1E3211 \\ الإجابة من السيارة

نترجم الجواب من السيارة إلى نظام رقمي ثنائي

 BB1E3211(16) > 10111011000111100011001000010001(2) 

باستخدام اللوحة التالية ، يمكننا تحديد أي pids تدعمها سيارتنا ، بدءًا من 01 إلى 20:



بناءً على البيانات التي تم الحصول عليها ، يمكننا تحديد أن سيارتنا تدعم المناقصات التالية:

  01, 03, 04, 05, 07, 08, 0C, 0D, 0E, 0F, 13, 14, 17, 1C, 20 

الآن ، بدلاً من إرسال جميع الفرق الـ 32 وانتظار الإجابة عليها ، على الرغم من حقيقة أن البعض قد يكون غائبًا ، سنستخدم 15 فريقًا فقط. ولكن هذا ليس هو الحد الأقصى لما يسمى التحسين. لكي يتم تحديث البيانات بشكل أسرع ، أنصحك أن تطلب فقط البيانات المتعلقة بأجهزة الاستشعار التي يتم عرضها على الشاشة. على الرغم من أن هذا يحد من بعض وظائف التطبيق. على سبيل المثال ، سجل التاريخ.

قراءة وفك تشفير أخطاء السيارة


يمكن أن تكون أخطاء السيارة مختلفة أيضًا وتوجد أوامر منفصلة لها أيضًا. على سبيل المثال:

  • 03 - لعرض رموز الأخطاء المحفوظة
  • 0A - لعرض أكواد الخطأ المستمرة.

كما هو الحال مع الأوامر الأخرى ، تأتي أخطاء السيارات في شكل مشفر ، على التوالي ، كما في الأوامر الأخرى ، يجب فك تشفيرها للحصول على المعلومات اللازمة. اسمحوا لي أن أقدم لكم مثالاً على كيفية عمل فك تشفير الأخطاء. كود:

 private final static char[] dtcLetters = {'P', 'C', 'B', 'U'}; private final static char[] hexArray = "0123456789ABCDEF".toCharArray(); private void performCalculations(String fault) { final String result = fault; String workingData = ""; int startIndex = 0; troubleCodesArray.clear(); try { if (result.contains("43")) { workingData = result.replaceAll("^43|[\r\n]43|[\r\n]", ""); } else if (result.contains("47")) { workingData = result.replaceAll("^47|[\r\n]47|[\r\n]", ""); } for(int begin=startIndex; begin < workingData.length(); begin += 4) { String dtc = ""; byte b1 = Utility.hexStringToByteArray(workingData.charAt(begin)); int ch1 = ((b1 & 0xC0) >> 6); int ch2 = ((b1 & 0x30) >> 4); dtc += dtcLetters[ch1]; dtc += hexArray[ch2]; dtc += workingData.substring(begin + 1, begin + 4); if (dtc.equals("P0000")) { continue; } troubleCodesArray.add(dtc); } } catch (Exception e) { Log.e(TAG, "Error: " + e.getMessage()); } } 

والآن للتفسير.

بناءً على الاستجابة المستلمة ، يمكننا الحصول على رمز خطأ ، لذلك نقوم بفك تشفير الرسالة المستلمة باستخدام اللوحات التالية.

الشخصية الأولى:



الشخصية الثانية:



تتشكل 3 و 4 و 5 أحرف وفقًا لهذا الجدول:



بناءً على ذلك ، يمكننا محاولة تحليل الإجابة التالية 0001000000111110



رمز الخطأ: P103E

خاتمة


في هذه المرحلة ، اكتشفنا كيفية تنظيم حوار مع المحول ، وإرسال الأوامر إليه ، وتلقي إجاباته وفك تشفيرها. هذا جزء كبير من العمل ، إذا كنت تفكر في مقدار الوقت المستغرق لدراسة المادة ، ولكن في نفس الوقت مثير جدًا للاهتمام. خارج هذه المقالة ، هناك العديد من المشكلات المرتبطة بالواجهة المرئية ، بالإضافة إلى العديد من الوظائف الإضافية ، مثل إضافة pids جديدة من ملف ، وطريقة قياسية ومتقدمة للاتصال بالمحول وإنشاء الرسوم البيانية.

ماتفينكو ألكساندر ، حسين فخر.

Source: https://habr.com/ru/post/ar444726/


All Articles