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