Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
Малко помощ с декодиране на OBD2 - ISO 14230 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Малко помощ с декодиране на OBD2 - ISO 14230
Здравейте,
Имам един Нисан модел 2007 и се опитвам да си комуникирам с него през OBD2 като хоби проект с ЕЛМ327 адаптер. Опитах с много програми за всякакви ОС-та и никоя не успя да се върже с ЕКУ-то. Опитах и директно през серийния терминал да се вържа, но постоянно даваше BUS ERROR/NO DATA.
Най-накрая намерих един апп за андроид, който ползва явно някакви разширени кодове и с него работи. Проблемът е, че аз не искам да ползвам телефон в случая, а raspberry Pi или подобно. С hcidump на телефона успях да направя няколко дъмп-а на комуникацията, но нямам идея как да ги декодирам:
Код:
REQUEST:  ATZ
RESPONSE:  ATZ
RESPONSE: 
RESPONSE:  ELM327 v1.5>

REQUEST:  ATSP5
RESPONSE:  ATSP5OK>

REQUEST:  ATE0
RESPONSE:  ATE0OK>

REQUEST:  ATS0
RESPONSE:  OK>

REQUEST:  ATH1
RESPONSE:  OK>

REQUEST:  ATAT1
RESPONSE:  OK>

REQUEST:  ATST3A
RESPONSE:  OK>

REQUEST:  ATAL
RESPONSE:  OK>

REQUEST:  ATSH8110FC
RESPONSE:  OK>

REQUEST:  ATWM8110FC81
RESPONSE:  OK>

REQUEST:  3F
RESPONSE:  BUS INIT: ERROR>

REQUEST:  3F
RESPONSE:  BUS INIT: OK
RESPONSE:  83FC107F3F115E
RESPONSE:  >

REQUEST:  2211000401
RESPONSE:  87FC10621100E4010001EC
RESPONSE:  >

REQUEST:  2211200401
RESPONSE:  87FC10621120000C09114C
RESPONSE:  >

REQUEST:  1A81
RESPONSE:  87FC105A3145553430415D
RESPONSE:  >

REQUEST:  3E
RESPONSE:  81FC107E0B
RESPONSE:  >

REQUEST:  3106FFFF
RESPONSE:  82FC10710605
RESPONSE:  >

REQUEST:  3206
RESPONSE:  83FC107F3278B8
RESPONSE: 
RESPONSE:  >

Значи това, което успях да разбера е, че ползва physical addressing, но не мога да разбера как са кодирани.
Освен това ЕКУ-то в началото винаги връща BUS ERROR докато не му пратиш 3F и то понякога не само един път. Даже не знам какво значи 3F? Има и други команди без префикс "22" в лога (22 е за request с физически адрес) но и те не знам за какво са: 3206, 3106FFFF, 3E?

Проследих някои пид-ове:
Това е за "injector fuel"
request: 2212060401, ex. responses: 85FC1062120600EBF6, 85FC1062120600E7F2

Това е за "Base fuel schedule"
req: 2212080401, ex. responses: 85FC106212080FCCE8, 85FC106212080FE804

Това е за RPM(обороти) (но тук не съм 100% сигурен):
req: 2212010401, ex. response: 85FC10621201003D43

Моментна скорост: 2211020401, отговор, но тук изпуснах първата цифра: %4FC1062110200 (това е с 0km/h)

ECU-то дава BUS ERROR на пид 0100, а "BUS INIT: OK" само след "3F" команда. Стандартните ПИД-ове изобщо не ми се връзват с по-горните http://en.wikipedia.org/wiki/OBD-II_PIDs#Standard_PIDs

Накрая декомпилирах въпросната андроид програма до известна степен където разбрах, че ползват съвсем други команди. Примерно, за да се види кои пид-ове поддържа колата:
621100FFFFFFFF00 - първите 20
621120FFFFFFFF00 - вторите 20
и т.нт.

Проблемът е, че са ползвали тежки обфускатори за тая програма и най-важните части не могат да се видят :)

Много ще съм благодарен ако някой даде едно рамо. Ако е нужно ще дъмп-на още комникация.

Благодара предварително!


Пет Май 31, 2013 6:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Това е комуникацията на андроида с ЕЛМ327 или нещо не съм разбрал?? Щото по ОБД'то не вървят такива АТ команди


Пет Май 31, 2013 6:51 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Да, това е комуникацията с ЕЛМ-а. В случая с ATH1 указва на елма да включи хедърите. С ATSH8110FC указва какъв да е хедъра "10" е адреса на ЕКУ-то, с което ще говори. Всяка команда започваща с "22" е директна комуникация с ЕКУ с адрес 10.
Всичко, което не започва с "АТ" ЕЛМ-а го обръща в хекс и го изпраща на ЕКУ-то като сам си смята последния байт, който е чексумата.


Пет Май 31, 2013 7:16 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Яну 23, 2006 10:47 am
Мнения: 57
Местоположение: Varna
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
попитах чичко гугъл и излезе това :

http://www.mp3car.com/vbulletin/attachm ... ematic.pdf

http://www.mp3car.com/vbulletin/attachm ... ssue_5.pdf

http://www.mp3car.com/vbulletin/attachm ... _ver_2.pdf


Нямам опит със Нисан ...

дано да съм бил полезен


Съб Юни 01, 2013 6:50 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Мерси! Мисля, че ще ми свършат работа. Интересното е, че чичко гугъл от толкова време го питам и на мен не иска да ми ги каже тея неща :)


Съб Юни 01, 2013 9:54 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Яну 23, 2006 10:47 am
Мнения: 57
Местоположение: Varna
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
пиниза е във въпроса :))

пс. Да имаш опит с Volvo P1 или P3 платформите ?


Съб Юни 01, 2013 7:14 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
_oXo_ написа:
пиниза е във въпроса :))

пс. Да имаш опит с Volvo P1 или P3 платформите ?

За съжаление не знам нищо за волво.
А след като се зарових в исо-тата на 14230 разбрах структурата на протокола, но без спицифичните кодове от производителя няма как да ги дешифрирам. Някой да знае някой сайт с такива бази данни?


Пон Юни 03, 2013 9:20 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Яну 23, 2006 10:47 am
Мнения: 57
Местоположение: Varna
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Нисан мисля че са под крилото на Рено - може да откриеш извесни прилики помежду им ... а може и да няма :(


Пон Юни 03, 2013 10:32 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Добре, че са братята китайци. С изключение на най-специфичните за нисан, които не са ми толкова нужни, всичко друго е подробно описано в стандартите SAE J2178_1, SAE J2178_2, SAE J2178_3, SAE J2178_4 и SAE J2190. А пдф-ите с тях са "доста" платени :)


Пон Юни 03, 2013 10:44 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Фев 06, 2013 10:25 am
Мнения: 197
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Виж тази тема.
Не ме кефи ЕЛМ-а. Има ли вариант да го накараш да работи без АТ команди ?

Ето какво знам аз по въпроса:
Съобщението е: [Format byte] [Target] [Source] [Data]...[Data] [CS]
Където:
Format byte: битове XXLL LLLL.
Ако XX = 10 -> физически адрес
Ако XX = 11 -> функционален адрес
LLLLLL определя дължината на данние и/или дали ще има байт
за дължина на данните.
Ако LLLLLL = 000000 - тогава имаме байт за дължина
(това не е нашия случай).
Ако LLLLLL е различно от 000000 тогава това число
определя броя на байтовете с данни.

ATSH8110FC
Това е команда за задаване на хедъра.
81 означава, че използваш физическо адресиране
10 е адреса на ЕКУто
FC е адреса на тестера

От лога ти:
REQUEST: 1A81
RESPONSE: 87FC105A3145553430415D

Това е рекует и респонс за някаква идентификация.
Ето например на Фиата какви са:

% read identification description
ReadId_2000, 0x1A, 0x80, "Identification code", 9, "Identification code", 1, "#scaling ascii 11 ", "Identification code", 1, "#scaling ascii 10 ", "Identification code", 1, "#scaling ascii 1 ", "Identification code", 1, "#scaling ascii 10 ", "Identification code", 1, "#scaling ascii 2 ", "Identification code", 1, "#scaling ascii 6 ", "Identification code", 1, "#scaling hex 5 ", "Identification code", 1, "#scaling ascii 10 ", "Identification code", 1, "#scaling hex 4 ";
ReadId_2000, 0x1A, 0x91, "FIAT drawing number", 1, "FIAT drawing number", 1, "#scaling ascii 11 ";
ReadId_2000, 0x1A, 0x92, "BOSCH HW number", 1, "BOSCH HW number", 1, "#scaling ascii 10 ";
ReadId_2000, 0x1A, 0x93, "BOSCH HW ver. number", 1, "BOSCH HW ver. number", 1, "#scaling ascii 1 ";
ReadId_2000, 0x1A, 0x94, "BOSCH SW number", 1, "BOSCH SW number", 1, "#scaling ascii 10 ";
ReadId_2000, 0x1A, 0x95, "BOSCH SW ver. number", 1, "BOSCH SW ver. number", 1, "#scaling ascii 2 ";
ReadId_2000, 0x1A, 0x96, "Homologation number", 1, "Homologation number", 1, "#scaling ascii 6 ";
ReadId_2000, 0x1A, 0x97, "ISO code", 1, "ISO code", 1, "#scaling hex 5 ";
ReadId_2000, 0x1A, 0x98, "Tester code", 1, "Tester code", 1, "#scaling ascii 10 ";
ReadId_2000, 0x1A, 0x99, "Programming date", 1, "Programming date", 1, "#scaling hex 4 ";



REQUEST: 3106FFFF
RESPONSE: 82FC10710605

Незнам какъв е рекуеста, но респонса ти е:
82 - 2 байта данни
FC - таргет адреса (тестера)
10 - сорс адреса (ЕКУ)
7106 да двата байта данни
05 е чек сумата


ЕЛМ интерфейса изпраща dummy данни, за да държи връзката жива. Тайм аута е 5 секунди.
Ето например как Унидиага държи връзката жива.
2752 send: 01
2753 echo: 01 OK
2758 send: 3E
2759 echo: 3E OK
2764 send: 3F
2765 echo: 3F OK
2793 rcvd: 01
2801 rcvd: 7E 7F

Имай в предвид, че тук комуникацията е без сорс и таргет адреси (защото може и така)

"
Това е за RPM(обороти) (но тук не съм 100% сигурен):
req: 2212010401, ex. response: 85FC10621201003D43
"
тук имаш 5 байта с данни: 621201003D, което е много голямо число.
Незнам как се смята.

Ето при мен как например мога да взема напрежението на акумулатора:
От Unidiag def файла: RDBLI_2000, 0x21, 0x43, "Battery voltage", 1, "Battery voltage", 1, "#scaling unsigned 2 (X*20.372 + 700)/1000 Volt";

изпращам: 820af12143
получавам: 61 43 02 44 [CS]
61 43 е отговора на 21 43 заявката.
02 44 са данние.

Това дава 580 десетично число.
(580 *20.372 + 700)/1000 Volt = 12,51V


Пон Юни 10, 2013 4:30 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Здравей, мерси за отговора!
Аз доста почетох и тези неща с физическия адрес ги разбрах. Успях от една андроид програма да изкарам всичките кодове, които ползва за моята кола.
REQUEST: 2211000401
RESPONSE: 87FC10621100E4010001EC
Това е рекуест за първите 20 поддържани ПИД-а. Щом изпращам командата с 22 отпред това означава readDataByCommonIdentifier.
REQUEST:
22 - readDataByCommonIdentifier
11 - recordCommonIdentifier (High Byte)
00 - recordCommonIdentifier (Low Byte)
04 - transmissionMode=[
single, //01
slow, //02
medium, //03
fast,//04
stop//05
]
01 - maximumNumberOfResponsesToSend (тоест само един отговор искам)

Отговорът значи:
87FC10 - хедър както ти си го описал
62 - успешен отговор (22+40). При не успешен е 7F
1100 - повторение на командата щом е успешно
E4010001 - 4 байта показващи кои от следващите 32 ПИД-а се поддържат. Това е същото като да пратя 0100 с функционална команда, но при мен не отговаря с нормалните команди.
EC - чек сума
Цитат:
"
Това е за RPM(обороти) (но тук не съм 100% сигурен):
req: 2212010401, ex. response: 85FC10621201003D43
"
тук имаш 5 байта с данни: 621201003D, което е много голямо число.
Незнам как се смята.

В случая командата ми за RPM e 1201
Отговор: 85FC10621201003D43 - където отговорът се състои само в двата байта 003D. Където по формулата за обороти би трябвало да се смята: ((A*256)+B)/4 = ((0*256)+0x3D)/4 = 15.25, но тук нещо не се връзва(освен ако не се умножи по 100).


Пон Юни 10, 2013 6:31 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Фев 06, 2013 10:25 am
Мнения: 197
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
anio написа:
...В случая командата ми за RPM e 1201
Отговор: 85FC10621201003D43 - където отговорът се състои само в двата байта 003D. Където по формулата за обороти би трябвало да се смята: ((A*256)+B)/4 = ((0*256)+0x3D)/4 = 15.25, но тук нещо не се връзва(освен ако не се умножи по 100).

Рекуестнал си 221201 и си получил 85FC10621201003D43:
85 - 5 байта данни.
FC - tester
10 - ECU
621201003D - 5 байта данни, от които първите три (621201) са отговора на заявката.

003D - са самите обороти.
Това като десетично число е 61.
Умножи по 32 и получаваш 1952.
Формулите ги има в документите по-горе.

43 - чек сумата.

Защо делиш на 4 ?
старшия байт по 256 + младшия.

Защо не опиташ readDataByLocalIdentifier ?
Предполагам, че резултата ще е същия.

За Фиат common id не работи:
readDataByCommonIdentifier service
The service readDataByCommonIdentifier is not used in the FIAT implementation of protocol KWP2000.


Вто Юни 11, 2013 12:32 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Формулата за оборотите я взех от тук http://en.wikipedia.org/wiki/OBD-II_PIDs но явно не работи за моя случай.
readDataByLocalIdentifier не знам как да го ползвам при мен. Аз съм с Нисан 2007 год. Ползвам readDataByCommonIdentifier (22), защото както писах по-нагоре успях да извадя 300 пид-а за нисан от една платена програма и те всички се извикват с CommonIdentifier, но мога да прочета и за LocalIdentifier.
Това, което не можах да разбера, е смисълът на:
Цитат:
REQUEST: 3F
RESPONSE: BUS INIT: OK
RESPONSE: 83FC107F3F115E

Не знам това някакъв проблем специално с моето ECU ли е, защото тоя BUS винаги дава ERROR докато не му прати програмата поне 2 пъти тази команда 3F(която така и не разбрах за какво е).
Моето ECU е с 14320-4 (kwp2000) fast init, което доколкото разбрах е тегаво за инициализация. Ако се инициализира без ЕЛМ трябва да се инициализира точно както е написано в документа от линк-а по-горе с K-Line. Възможно ли е тази платената програма да прави такава инициализация, въпреки че се съмнявам да може да се прави подобно нещо през блутут?


Вто Юни 11, 2013 6:00 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пон Мар 22, 2010 8:52 pm
Мнения: 328
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Формулата от линк-а е само за OBD PID-вете. Тези, които се четът с $21 и $22 са специфични за всеки производител. И той сам с ги определя, както и мащабирането им. Тази информация не е публична. Май все пак е достъпна платена, но сигурно за много $.

А $3F e "Test Device Present" според SAE J2190. До колкото $7F е отговора при грешка, вероятно се ползва за да се провери има ли ECU връщащо грешка на съответният адрес.

В случая 7F3F11 -
7F - General Responce Message, така се връщат по принцип грешките
3F - Коя команда е предизвикала грешката
11 - Грешката е че командата не се подържа от ECU-то


Вто Юни 11, 2013 9:27 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Май 14, 2010 5:52 pm
Мнения: 91
Мнение Re: Малко помощ с декодиране на OBD2 - ISO 14230
Използвах наученото до тук и написах симулатор, по който после да си направя програмата, която чете от колата. Симулаторът работи с въпросния андроид апп все едно е вързан с колата.
Проблемът ми е, че когато всичко това го пробвам с истинския интерфейс в колата, немога да инициализирам ЕКУ-то. Стигам до 3F, но на мен постоянно ми връща BUS INIT: ERROR. Не знам дали не спазвам някакъв тайминг или апп-а успява през блутутът да вдига и сваля K и L линиите на серийния интерфейс на ЕКУ-то, за да го инициализира.
Много не съм на ясно със RS323, но не ми се вярва през блутут да може да се контролира на толкова ниско ниво особено като данните минават през ЕЛМ-а.


Нед Юни 16, 2013 4:13 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни