این مقاله، قسمت سوم از دوره آموزش OBD II در سایت سیسوگ است که در ادامه قسمت دوم، به بررسی جزئیات ساختار پیامها و زمانبندی در پروتکل KLine میپردازد. پروتکل KLine بهعنوان یکی از روشهای مهم ارتباط بین ECU و دستگاههای عیبیابی، برای تحلیل و رفع مشکلات خودرو استفاده میشود.این قسمت ادامه قسمت قبلی این دوره تاریخچه و کاربردهای دیاگ OBD: از استانداردسازی تا معرفی پروتکلهای متداول و کدهای خطا می باشد.
پاسخ ECU به درخواست ارسال شده به آن میتواند مثبت یا منفی باشد. ساختار پیام پاسخ مثبت ECU به درخواست در شکل 19 نشان داده شده است. در پیام پاسخ ECU، بیت 6ام از کد درخواست ارسال شده را یک میکند به عبارت دیگر کد درخواست ارسال شده را با 0x40 جمع میکند و به عنوان اولین داده در پیام قرار میدهد.
به عنوان مثال ECU پیام پاسخ {0x83,0xF1,0x11,0x41,0x05,0x76,0x41} را در جواب درخواست {0xC2,0x33,0xF1,0x01,0x05,0xEC}، کد درخواست دمای مایع خنک کننده، ارسال میکند. در ادامه بخش داده، ادامه دادههای ارسالی که در اینجا 0x05 است ارسال میشود و در نهایت جواب که در اینجا بایت 0x76 است ارسال میشود که داده خام است و برای تعیین دمای آب باید آنرا در فرمول مربوط به آن قرار دهیم. مثلا در اینجا باید از فرمول A-40 استفاده کرد که A همان داده خام است. در نتیجه دما آب برابر با 78 درجه سانتیگراد محاسبه میشود.
اگر ECU به هر دلیلی نتواند پاسخ مثبت به درخواست بدهد پاسخ ارسالی بهصورت شکل 20 خواهد بود. که در آن اولین بایت از قسمت داده برابر با 0x7F است که نشان دهنده پاسخ منفی به درخواست است. سپس شناسه سرویس درخواست ارسالی مثلا در اینجا 0x01 ارسال میشود. در نهایت کد خطا که نشان دهنده علت پاسخ منفی به درخواست است را ارسال میکند. به عنوان مثال کد خطا 0x78 به معنای این است که ECU درخواست را به دستی دریافت کرده است اما برای پاسخ به این درخواست به زمان بیشتر از زمان قراردادی نیاز دارد. در جدول 4 کد خطاهای ارسالی لیست شدهاند.
کد خطا hex | توصیف |
10 | ردکردن کلی: این کد خطا زمانی ارسال میشود که خطای رخداده در لیست خطاهای ممکن نباشد. |
11 | درخواست پشتیبانی نمیشود: این خطا زمانی رخ میدهد که سرویس درخواستی توسط واحد الکترونیکی پشتیبانی نشود. |
12 | زیرسرویس پشتیبانی نمیشود – قالب نامعتبر: این خطا زمانی رخ میدهد که زیر سرویس درخواستی توسط واحد الکترونیکی پشتیبانی نشود یا فرمت آن درست نباشد |
21 | سرور مشغول است الان نمیتواند جواب دهد مجدد بعداً تلاش کنید: این خطا بیان میکند که واحد الکترونیکی در حال حاضر مشغول به انجام کار دیگری است و نمیتواند به سرویس درخواستی جواب دهد. این بدین معنا است که در زمان دیگری واحد الکترونیکی میتواند پاسخ دهد. |
22 | شرایط درست نیست یا ترتیب در درخواست رعایت نشده: این خطا بیان میکند که ترتیب سرویس درخواستی درست نیست. این خطا برای درخواستهایی رخ میدهد که چند پیام باید به ترتیب خاصی ارسال شوند و درصورتیکه ترتیب رعایت نشود این خطا رخ میدهد. |
23 | روتین کامل نشده است |
31 | درخواست خارج از محدوده است: این خطا بیان میکند که مقدار ارسال شده از مقدار حداکثر مجاز بیشتر است مثلاً 111 فرستاده شده در صورتی که حداکثر مقدار ممکن 100 است. |
33 | دسترسی امکانپذیر نیست. این خطا بیان میکند که جنبههای امنیتی برای سرویس درخواستی رعایت نشده است. |
35 | کلید نامعتبر: این خطا زمانی رخ میدهد که کلید ارسال از دستگاه دیاگ با کلید ذخیره شده در واحد الکترونیکی یکسان نباشد برای سرویس 27 |
36 | تعداد تلاشها از مقدار مجاز بیشتر شده: این خطا زمانی رخ میدهد که تعداد دفعات ارسال کلید از تعداد مجاز بیشتر شده باشد سرویس 27 |
37 | تأخیر موردنیاز به اتمام نرسیده |
40 | دانلود مورد پذیرش قرار نگرفته |
41 | نوع دانلود متناسب نیست |
42 | امکان دانلود از آدرس مشخص شده نیست |
43 | تعداد بایت درخواست شده امکان دانلود را ندارند |
50 | درخواست آپلود مورد قبول واقع نشد |
51 | نوع آپلود متناسب نیست |
52 | در آدرس مشخص شده امکان آپلود نیست |
53 | تعداد بایت درخواست شده امکان آپلود را ندارند. |
71 | انتقال در حالت معلق است |
72 | انتقال لغو شد |
74 | آدرس بلاک برای انتقال نامعتبر است |
75 | تعداد بلاک برای انتقال نامعتبر است |
76 | نوع انتقال نامعتبر است |
77 | چک سام دادههای منتقل شده نامعتبر است |
78 | درخواست بهدرستی دریافت شده اما برای پاسخ نیاز به زمان بیشتری است. |
79 | تعداد بایتها در عملیات انتقال درست نیست |
80-FF |
|
جدول 4- انواع کدهای خطا در ارتباط KLine
زمان بندی ارتباط KLine در حالت معمول به صورت شکل 21 است. توصیف زمانهای P1-P4 در جدول 5 آورده شده است.
مقدار | توصیف |
P1 | زمان بین بایتها در پیام پاسخ ECU |
P2 | مدت زمانی که طول میکشد تا ECU به یک درخواست جواب دهد. |
P3 | زمان بین پایان پاسخ ECU و شروع درخواست جدید |
P4 | زمان بین بایتها در پیام درخواست |
جدول 6 – توصیف پارامترهای زمان بندی در KLine
در حالت کلی دو دسته زمانبندی قراردادی برای برقراری ارتباط تعریف شده است.
محدودیتهای زمانبندی ارتباط توسط ECU با ارسال بایت KB1 در زمان شروع ارتباط اطلاع داده میشود (بخش…). البته ممکن است بتوان زمانبندی را با سرویس “دسترسی به پارامترهای زمانبندی” تغییر داد.
در جدول 7 و جدول 8 پارامترهای زمانبندی که به صورت قراردادی مورد استفاده قرار میگیرند آورده شده است.
پارامتر زمانبندی | حداقل مقدار(ms) | حداکثر مقدار (ms) | ||||
حد پایین | قراردادی | گام | حد بالا | قراردادی | گام | |
P1 | 0 | 0 | – | 20 | 20 | – |
P2 | 0 | 25 | 0.5 | (1) | 50 | (1) |
P3 | 0 | 55 | 0.5 | ∞ | 5000 | 250 |
P4 | 0 | 5 | 0.5 | 20 | 20 | – |
جدول 7- مقادیر متعارف پارامترهای زمانبندی برای آدرس دهی فیزیکی و فانکشنال
پارامتر زمانبندی | حداقل مقدار(ms) | حداکثر مقدار (ms) | ||||
حد پایین | قراردادی | گام | حد بالا | قراردادی | گام | |
P1 | 0 | 0 | – | 20 | 20 | – |
P2 | 0 | 0 | 0.5 | (1) | 100 | (1) |
P3 | 0 | 0 | 0.5 | ∞ | 5000 | 250 |
P4 | 0 | 5 | 0.5 | 20 | 20 | – |
جدول 8- مقادیر متعارف پارامترهای زمانبندی برای آدرس دهی فیزیکی
(1) اگر مقدار پارامتر زمانبندی متناسب با P2max ارسال شده توسط ECU در جواب درخواست دسترسی به پارامترهای زمانبندی بین 0x01 – 0xF0 باشد گام آن 25 میلی ثانیه است مقدار P2max آن برابر است حاصلضرب مقدار در گام. اگر مقدار آن بین 0xF1-0xFE باشد مقدار P2max برابر است با مقدار چهاربیت پایین ضربدر 256 ضربدر گام(P2max = 0x0A * 256 * 25 = 6400 در صورتی که داشته باشم 0xFA).
در بعضی از مواقع در صورت لزوم ECU میتواند درخواست افزایش مقدار زمان P2max برای ارسال پاسخ درخواست را ارسال کند. بدین منظور ECU یک یا چند پاسخ منفی با کد خطای 0x78 را ارسال میکند. این کد خطا فقط زمانی ارسال میشود که ECU نتواند در زمان مقرر پاسخ مثبت یا منفی به درخواست ارسال شده را بدهد. این درخواست افزایش زمان پاسخ در ECU و درخواستکننده اعمال میشود. در این زمان درخواستکننده همچنان منتظر دریافت پاسخ ECU میماند و درخواست خود را مجدد ارسال نمیکند. در طرف دیگر ECU هم بهمحض اینکه درخواست ارسال شده را انجام داد، پاسخ مثبت یا منفی (با کد خطایی متفاوت از 0x78) خود را ارسال میکند. سپس هر دوی ECU و درخواست کنند مقدار زمان P2max را به حالت پیشفرض برمیگردانند.
بهمنظور ارسال هر نوع درخواست، ابتدا باید ارتباط شکل بگیرد و زمانبندی بهصورت صحیح پیادهسازی شده باشد. این موضوع در شکل 22 نشان داده شده است.
درخواست شروع ارتباط برای ایجاد ارتباط بر بستر Kline مورداستفاده قرار میگیرد. سه حالت ممکن برای ایجاد ارتباط وجود دارد. الگوریتم پیشنهادی برای ایجاد ارتباط در شکل 23 آورده شده است.
برای شروع سریع یا Fast init، یک الگوی Wake up بهصورت نشاندادهشده در شکل 24 ارسال میشود. دقت شود که زمانهای 25 ms حداکثر 1 ms± باید خطا داشته باشد و کل 50 ms باید 1 ms± خطا داشته باشد. سپس بلافاصله یک فریم داده حاوی درخواست شروع ارتباط به واحد مربوطه فرستاده میشود. آن واحد باید یک پاسخ ارسال کند که در صورتی که پاسخ معتبر باشد به معنای آن است که شروع ارتباط موفقیت آمیز بوده است. در شکل 25 ساختار پیام درخواست برای شروع ارتباط نشان داده شده است.
اگر آدرس دهی به صورت فیزیکی باشد بایت فرمت برابر با 0x81 خواهد بود (با توجه به اینکه طول داده ارسالی یک است 0x80 + 0x01) در غیر این صورت 0xC1 خواهد بود. دو بایت بعدی آدرس هدف و منبع هستند و در نهایت بایت 0x81 که کد سرویس درخواست شروع ارتباط برای KLine است. بایت پایانی چک سام بایت های پیام است. به عنوان مثال برای درخواست شروع ارتباط با آدرس دهی فانکشنال ساختار پیام به صورت {0xC1,0x33,0xF1,0x81,0x66} است. که در آن 0x33 آدرس هدف فانکشنال، 0xF1 آدرس منبع و 0xC1+0x33+0xF1+0x81 = 0x66 است.
ECU پس از دریافت درخواست شروع ارتباط درصورتیکه شرایط درست باشد بهصورت شکل 26 پاسخ معتبر را ارسال میکند. بایت طول پیام در اینجا ممکن است در متن پیام باشد یا نباشد. بایت0xC1 نشان دهنده پاسخ مثبت ECU به درخواست است. همانطور که قبلا بیان شد ECU با یک کردن بیت شماره 6ام کد درخواست که اینجا 0x81 است این بایت را درست میکند که معادل این است که 0x81 را با 0x40 جمع کنیم
دو بایت بعدی بایتهای کلیدی[1] (KB1 و KB2) نامیده میشوند. این بایتهای اطلاعاتی در مورد تعداد بایتهای هدر، زمانبندی و طول پیام فراهم میکنند. در اینجا بایت KB2 معمولا ثابت و برابر با 0x8F است. محتوای بایت KB1 در شکل 27 نمایش داده شده است. با ارزشترین بیت، بیت توازن است. بیت بعدی همیشه یک است. دو بیت بعدی نوع زمانبندی پشتیبانی شده ( متعارف یا سریع) را مشخص میکند. بیتهای بعدی تعداد بایتهای هدر را مشخص میکند و در نهایت دو بیت بعدی جایگاه طول داده در پیام را مشخص میکند ( در بایت فرمت یا بایت طول یا هر دو).
توضیحات کامل در جدول 9 و جدول 10 آورده شده است. به عنوان مثال ECU در پاسخ به درخواست بیان شده در بالا جواب {0x83,0xF1,0x11,0xC1,0xEF,0x8F,0xC4} را ارسال میکند. با توجه به متن پیام مشخص میشود که طول داده برابر با 3 بایت است (0x83)، جواب درخواست مثبت است (0xC1) و دو بایت کلیدی برابر با KB1 = 0xEF و KB2 = 0x8F هستند و در نهایت بایت چک سام برابر با 0xC4 هست. با توجه به مقدار بایت KB1 و توضیحات جدول 9 و جدول 10 میتوان بیان کرد که این ECU از زمانبندی متعارف پشتیانی کرده و از هدر یک بایتی (بدون بایتهای آدرس) و هدر با بایتهای آدرس پشتیبانی کرده و همچنین طول داده را هم میتوان در بایت فرمت نوشت هم در بایت طول داده.
AL0 | AL1 | HB0 | HB1 | TP0 | TP1 | 1 | Parity |
شکل 27- ساختار بایت KB1 در KLine.
مقدار بیت | 0 | 1 |
AL0 | مقدار طول داده پیام در بایت فرمت پشتیبانی نمیشود | مقدار طول داده پیام در بایت فرمت پشتیبانی میشود |
AL1 | بایت طول پیام پشتیبانی نمیشود | بایت طول پیام پشتیبانی میشود |
HB0 | هدر یک بایتی پشتیبانی نمیشود | هدر یک بایتی پشتیبانی میشود |
HB1 | بایتهای آدرس هدف و منبع پشتیبانی نمیشود | بایتهای آدرس هدف و منبع پشتیبانی میشود |
TP0(*) | زمانبندی متعارف | زمانبندی بسط داده شده |
TP1(*) | زمانبندی بسط داده شده | زمانبندی متعارف |
جدول 9- مقادیر ممکن برای بایت KB1 در KLine.
* فقط حالتهای TP0,TP1 = 0,1 و TP0,TP1 = 1,0 مجاز هستند.
KB1 | بایت طول داده | نوع هدر | زمانبندی | |
0xD5 | 0b1101 0101 | بایت فرمت | هدر یک بایتی | زمانبندی توسعه داده شده |
0xD6 | 0b1101 0110 | بای طول داده | ||
0x57 | 0b0101 0111 | هر دو حالت | ||
0xD9 | 0b1101 1001 | بایت فرمت | هدر با بایتهای آدرس | |
0xDA | 0b1101 1010 | بای طول داده | ||
0x5B | 0b0101 1011 | هر دو حالت | ||
0x5D | 0b0101 1101 | بایت فرمت | هر دو حالت: هدر با بایتهای آدرس و بدون بایتهای آدرس | |
0x5E | 0b0101 1110 | بای طول داده | ||
0xDF | 0b1101 1111 | هر دو حالت | ||
0xE5 | 0b1110 0101 | بایت فرمت | هدر یک بایتی | زمانبندی متعارف |
0xE6 | 0b1110 0110 | بای طول داده | ||
0x67 | 0b0110 0111 | هر دو حالت | ||
0xE9 | 0b1110 1001 | بایت فرمت | هدر با بایتهای آدرس | |
0xEA | 0b1110 1010 | بای طول داده | ||
0x6B | 0b0110 1011 | هر دو حالت | ||
0x6D | 0b0110 1101 | بایت فرمت | هر دو حالت: هدر با بایتهای آدرس و بدون بایتهای آدرس | |
0x6E | 0b0110 1110 | بای طول داده | ||
0xEF | 0b1110 1111 | هر دو حالت |
جدول 10-حالات ممکن برای بایت KB1.
[1] KeyByte
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.