Виж
тази тема.
Не ме кефи ЕЛМ-а. Има ли вариант да го накараш да работи без АТ команди ?
Ето какво знам аз по въпроса:
Съобщението е: [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