Всем доброго времени суток!
В данной записи, хочу познакомить Вас с программой ToolSet32(далее Tool32), точнее даже не познакомить, так как многие о ней наверняка знают, а провести краткий курс работы с программой, краткое руководство, принцип работы, некоторые особенности и функции программы.
Программа Tool32, входит в состав BMW Standard Tools, включая комплекс Ediabas. Все знают что данный комплекс, является связующим интерфейсом между машиной и диагностическим ПО. Как установить и где скачать BMW Standard Tools, какие адаптеры для этого нужны, я рассказывать не буду, так как этой информации валом в интернете. Скажу одно, что всем, кто хочет работать с ЭБУ BMW этот комплекс обязателен. В его состав входят такие программы как INPA, NCS Expert, WinKFP ну и соответственно Tool32, о последнем и будет речь, так как с остальными более менее всем понятно.
Tool32 это по сути программа для низкоуровневого взаимодействия с блоками управления автомобиля.
Собственно вот она:
Многие из нас, игнорируют данную программу, в принципе и правильно делают) Так как неосознанные и без понятия действия, могут привести к непредсказуемому результату и неудачным последствиям. Тыкать на абум с этой программой не прокатят, в данном случае надо знать и понимать что делаем и какой будет результат. Ну да ладно, у нас краткий курс и руководство, поэтому не будем отходить от темы.
Для работы в Tool32 требуются SGBD-файлы (SGBD = Steuergerätebeschreibungsdatei). Это файлы, которые описывают доступные функции и параметры этих функций в конкретных блоках управления. Изначально Tool32 была придумана как отладочная программа для разработчиков диагностического ПО.
SGBD-файлы имеют расширение .PRG. Как правило любой диагностический софт использует их, чтобы работать с блоками управления, те же ISTA/P и Rheingold. И даже INPA, которая на самом деле является интерпретатором скриптов (IPO), использующих функции из SGBD-файлов для получения результата и вывода его в виде таблиц или изображений. В том числе и многочисленные утилиты, созданные программистами.
С помощью Tool32 можно открыть SGBD-файл, увидеть список доступных функций (или методов, в терминологии программирования), вызвать их, передав необходимые параметры (если есть) и получить результат выполнения. Точно такие же результаты, но оформленные в более читаемом виде, вы получаете при использовании любого диагностического ПО. Проще говоря, диагностировать что-либо можно даже с помощью одного только Tool32, конечно если позволяет опыт и навыки.
Программа кстати, может работать в тестовом режиме, конечно, какие либо данные с блоков по авто Вы не получите, но, набраться опыта и поучиться работать с программой, работой с файлами вполне. Чтобы активировать тестовый режим, нужно запустить Tool32 (если у кого при установке комплекса программ, не создался ярлык запуска Tool32, то файл для запуска при стандартной установке комплекса, программы находится по пути c:\EDIABAS\Bin\Tool32.exe), далее зайти во вкладку «Configuration», далее выбрать «Ediabas», и поставить галочку в строке «Simulftion», вот так:
Краткое руководство по работе с файлами и программой, Вам поможет так называемый FAQ, файл Tool32_E.chm, который находится по пути c:\EDIABAS\Bin\Tool32_E.chm, если кто хочет скачать отдельно, вот ссылка (265 Кб). Вот как выглядит FAQ:
Советую изучить и ознакомиться.
Так как Tool32 работает с файлами SGBD, нам нужно научиться определять и выбирать его правильно. Прежде всего, нам понадобятся файлы SP-daten для кузова с которым хотим работать, эти файлы можно скачать на просторах интернета (я уже приводил ссылки в прошлых записях). На примере своего BMW (е39), я покажу и расскажу как правильно выбрать необходимый файл, в принципе с другими кузовами технология та же. Нам понадобится файл E39SGFAM.DAT, который находится в папке «daten», открываем его текстовым редактором, получаем:
В этой таблице перечислены имена блоков управления и соответствующие им имена CABD- и C_SGBD-файлов. CABD = Codierablaufbeschreibungsdatei, скрипт того же формата (IPO), что применяется в INPA, но предназначен для процедуры кодирования блока управления (они часто используются одни и те же, ввиду одинаковости процедуры), а C_SGBD — SGBD-файл с функциями кодирования блока. Вот эти самые C_SGBD нас и интересуют. Например если я ищу файл приборной панели е39, то смотрим KMB получаем имя C_KMB, вот собственно именно с этим именем файл SGBD нам необходимо открыть в программе Tool32.
Сам по себе E39SGFAM.DAT не совсем точен, т.к. предполагает только один вариант CABD-/C_SGBD-файлов на конкретное имя блока, тогда как с выпуском новой прошивки могут потребоваться другие.
Приступим к работе, необходимо подключить адаптер к машине, включить зажигание. Имя файла SGBD-файла нам известно, поэтому открываем Tool32, далее «File -> Load SGBD, Group file» и идём в папку C:\EDIABAS\ecu\ (скорее всего диалоговое окно откроется сразу в этой папке), ищем там «C_KMB.PRG» и открываем:
Прошу заметить, что открывать и выбирать нужно только те файлы, функции блоков которые имеются в автомобиле, иначе выполнять какую либо работу с файлом Вы не сможете.
Итак, после открытия файла, Вы увидите кучу открывшихся окошек, это хорошо, так и должно быть, это означает, что связь с машиной установлена, если же никаких окошек нет, то проверяйте настройки Ediabas, либо верно выбранный SGBD-файл.
Из всех открывшихся окошек нас интересуют лишь три: Select Job: название модуля (список функций), Job-Info (подсказка по функции/её параметрам), ну и конечно же Results. Остальные окошки можно свернуть.
При выборе нужной строки одним кликом (одним нажатием), в окошке Job-Info Вы получите пояснения на данную операцию, например:
При выборе строки двойным кликом, данная операция будет выполнена, поэтому всё же рекомендую для запуска использовать клавишу F5, ну и предупрежу, строго запускайте операции, в которых Вы имеете понятие, что будет сделано в итоге, окошко Job-Info, так как здесь содержится информация о функции, её параметрах, формате данных и результатах, которые мы получим в результате выполнения данной функции, причем Google-переводчик совместно с этим окошком даст возможность разобраться что выполняет та или иная операция.
Я думаю с этим более менее разобрались, теперь я приведу пример выполненных операций с блоками своей е39, сразу прошу заметить, что в блоках свежее, может быть больше операций.
Раз уж открыли файл функций блока приборной панели (KMB), то например строка c_zcs_lesen, даст нам информацию о шифре ZCS, записанным в приборку:
Строка c_fg_lesen, даст нам информацию о номере кузова:
Строка ident, даст информацию о блоке приборки:
Строка sia_reset файла приборной панели, позволит нам сбросить сервисный интервал.
Считали так же информацию о номере кузова с блока EWS:
Далее откроем файл SGBD функций ЭБУ DME, т.е. нашего ДВС, для этого откроем файл с именем MS411DS1.PRG, видим что строк операций значительно больше:
Считали информацию по ЭБУ операцией info:
Посмотрели номер запчасти ЭБУ DME, марку ДВС и тд тп выполнив операцию ident:
Посмотрели ошибки неисправностей ЭБУ ДВС, выполнив операцию fs_lesen:
Считали номер ISN для EWS, воспользовавшись операцией isn_lesen:
Если обобщить то строки имеющие слово lesen позволяют нам считать различного рода информацию с ЭБУ (пример я привел выше), строка info позволяет нам получить информацию о ЭБУ соответственно (маркировка, версия), строка ident позволит нам узнать номер детали ЭБУ, дату выпуска, маркировку ДВС и тд, !далее очень внимательно и аккуратно!, строки с словом loeschen произведет сброс каких либо данных ЭБУ, например строка adapt_loeschen в блоке ДВС, произведет сброс всех адаптаций, строка fs_loeschen удалит все неисправности из памяти ЭБУ ДВС, строки со словами checksumme говорят о работе с контрольной суммой ЭБУ, строки с словом schreiben произведут запись данных в ЭБУ (с этой строкой будьте очень внимательны и аккуратны, выполняйте данную операцию с полным понятием того, что Вы делаете), строки с словом status дадут какую либо информацию, статус, значение, положение в режиме реального времени, например строка status_l_sonde даст нам информацию о напряжении лямбда зондов до катализатора, строки с словом steuern произведут запуск механизма, оборудования, например строка steuern_selbsttest_ein в блоке приборки, произведет запуск теста приборной панели, соответственно строка steuern_selbsttest_aus выключит тест приборной панели, строка со словом reset произведет перезапуск какого либо оборудования, механизма, например строка steuergeraete_reset в блоке приборки, произведет перезапуск приборной панели. Стоит так же упомянуть, что некоторые операции как например c_s_lesen в блоке приборной панели, описан формат единственного аргумента (параметра) функции. Называется аргумент BINAER_BUFFER (и имеет тип Data, т. е. надо ставить соответствующую галочку в поле ввода перед выполнение операции), в таких операциях как например steuern_selbsttest_ein (тест приборной панели) галочка Data соответственно должна быть снята.
Это так сказать простейшие операции для примера работы с файлами функций блоков автомобиля. Естественно функционал программы Tool32 на этом не ограничивается, точнее это самые простейшие операции по считыванию информации с ЭБУ, дабы по-ближе познакомиться с программой.
На данном этапе, знакомство наше с программой подошло к концу. Да и драйв2 нас ограничивает и намекает, что пора заканчивать) Дабы не грузить теорией в своем БЖ, хоть и связанной с работой ЭБУ BMW, следующие записи будут связаны непосредственно с моей е39, а уж потом продолжим наше обучение и работу с ЭБУ BMW. В следующих теоретических записях я познакомлю Вас с более сложными операциями Tool32, хотя эту информацию смогут осилить далеко не все, это по силу программистам, так как работать придется с байтами, калькуляторами для программистов и тд и тп.)
Еще раз повторюсь, все Вы делаете на свой страх и риск, и советую выполнять и работать с ЭБУ, только с полным осознанием, уверенностью и понятием, что Вы делаете.
Многую информацию, я черпал с форумов по работе с ЭБУ BMW, а так же спасибо за помощь в написании статьи MrPerfekt, и вам настоятельно рекомендую, подписаться на его блог, больше читать, изучать теории, а потом уже приступать к практике.
Лучшая благодарность за труд, это Ваши лайки, комментарии и репосты, хоть я и не напрашиваюсь)
Всем спасибо за внимание, до Скорых встреч!
-
Дисклеймер: все, что вы будете делать по инструкции ниже, делается на ваш собственный риск.
В связи с тем, что дилеров РФ отключили от серверов BMW, то они не имеют возможности заполнить ЭСК официально. Некоторые из них могут в качестве жеста доброй воли записать в ГУ последнее ТО, а некоторые или не хотят или не могут.
К тому же эта последняя запись обычно встает в ГУ сверху, тогда как стандартная сортировка? принятая в ГУ BMW — сверху вниз.
В Интернете попадается пара программ для записи истории ТО в ГУ, но можно обойтись и без них, если у вас установлен на ПК комплекс Ediabas отдельно или в составе диагностического ПО BMW.
Здесь представлена краткая инструкция как самостоятельно прописать ЭСК в ГУ при помощи ноутбука, программы Tool32 и кабеля ENET.
Программа ToolSet32 (далее Tool32), входит в состав BMW Standard Tools, включающего комплекс Ediabas. Где скачать Ediabas отдельно или в составе ISTA-D или BMW Standard Tools, как установить и настроить в Интернете информации достаточно.
Для записи истории ТО в ГУ при помощи Tool32 потребуется SGBD-файл, соответствующий типу вашего ГУ (например, hu_mgu.prg, nbt.prg, nbtevo.prg, cic.prg, entry.prg, entrynav.prg, enavevo.prg, etc.) и подготовленный вами самостоятельно TST-файл, в котором будет записан список JOBs и аргументов, соответствующих вашей истории ТО.
Программа Tool32 находится в папке
c:\EDIABAS\BIN\
Файлы SGBD с расширением *.prg находятся в папке
c:\EDIABAS\Ecu\
Недостающие или более свежие можно взять из папки
\Rheingold\Ecu\ или скачать по приложенным ниже ссылкам и положить в папку c:\EDIABAS\Ecu\.
Файл TST нужно будет также положить в папку c:\EDIABAS\Ecu\.
TST – текстовый файл с расширением *.tst. Это аналог пакетного batch файла (*.bat) для ПК. В batch файле записывается последовательность выполняемых компьютером команд или программ.
В TST файле записывается последовательность выполняемых работ (JOB) SGBG (*.prg) файла, соответствующего конкретному ECU (ЭБУ). Файл можно редактировать в любом текстовом редакторе или прямо из программы Tool32.
В этот файл НУЖНО ПЕРЕПИСАТЬ имеющуюся в ГУ историю ТО и потом добавлять по одной строке для каждого нового произведенного ТО.
Структура TST файла для записи ЭСК следующая:
1|enavevo|steuern_servicehistory_erase1|enavevo|steuern_servicehistory_add||24;07;2020;16;20000;1;10224 ;1;3;1;1;0;0;4;1;0;0;11;1;0;0
1|enavevo|steuern_servicehistory_add||23;12;2019;0;10000;1;10224 ;1;1;1;1;0;0
(Пример файла прилагается).
Первая строка — стирание всей ЭСК в ГУ (ENTRYNAV EVO)
Следующие строки, соответствующие проведенным ТО, записываются в порядке ОТ ПОСЛЕДНЕГО ТО к более РАННИМ.
В данном примере:
в строке 2 записано что 24/07/2020 на 20000 км было проведено на оф.дилере № 10224 ТО в составе 3 работ: замена масла, замена микрофильтра, замена воздушного фильтра.
в строке 3 записано что 23/12/2019 на 10000 км было проведено на оф дилере № 10224 ТО в составе 1 работы: замена масла.
Синтаксис JOB steuern_servicehistory_add (добавление записи сервисной истории) следующий:
1|enavevo|steuern_servicehistory_add||23;12;2019;0;10000;1;10224 ;1;1;1;1;0;0
где:
1 – работа запускается 1 раз
enaevo – имя SGBD файла, соответствующее типу вашего ГУ (тут enavevo.prg для ГУ ENTRYNAV EVO)
steuern_servicehistory_add – наименование JOBпустое поле – поле данных (тут не используется)
23;12;2019;0;10000;1;10224 ;1;1;1;1;0;0 — строка аргументов.Аргументы записываются через «;»
Расшифровка строки аргументов:
23 – дата
12 – месяц
2019 – год
0 – корректура длины строки аргументов (0 для 1 операции ТО, 8 – для 2 операций ТО, 16 – для 3 операций ТО, 24 — для 4 операций ТО и т.д)
10000 – километраж
1 — дилер (1 – официал, 0 – неофициал)
10224 – номер или наименование дилера (7 символов)
1 – ТО выполнено
1 — количество операций ТО (от 1 до 13)
Далее для каждой операции ТО идет набор из 4 аргументов:
В нашем примере 1;1;0;0
1 – замена масла (список вариантов операций ТО – ниже)
1 – ТО проведено вовремя
0 — просрочка по дистанции
0 — просрочка по времени
Как происходит программирование.
1. Подключаем кабель ENET к машине
2. Проверяем соединение, например c:\EDIABAS\Hardware\ENET\ZGW_SEARCH.exe
3. Запускаем Tool32
4. Загружаем свой файл TST: Menu – File — Load test
5. Проверяем в открывшемся окне синтаксис файла TST
6. Запускаем TST файл: Menu — Test – Start test
7. Смотрим в появившемся окне результаты. На каждую работу должен быть ответ OKAY.
8. Проверяем результаты в ГУ (выходим в главное меню, потом заходим в ЭСК)
Список операций ТО (неполный)
1 — масло моторное
2 — передние колодки
3 — тормозная жидкость
4 — микрофильтр
5 — рецирк возд фильтр
6 — задние колодки
7 — сажевый фильтр
8 — аккумулятор
9 — масло раздаточной коробки
10 — свечи зажигания
11 — элемент возд фильтра
12 — топливный фильтр
13 — NOx
16 — свечи зажигания
17 — техосмотр
18 — антифриз
20 – Предпродажная проверка
21 — проверка в период обкатки (ТО-0)
31 — проверка общий осмотр
32 — Гостехосмотр
33 — Гос. контроль ОГ
Тут SGBT файлы и пример TST.
https://disk.yandex.ru/d/YWmgXdbbf01h8Q
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
Если лениво переписывать всю историю ТО, то можно, не выполняя стирание, просто однократно выполнить JOB:
1|enavevo|steuern_servicehistory_add||DD;MM;YYYY;0;XXXXX;1;BBBBB ;1;1;H;1;0;0
где
DD MM YYYY — дата
XXXXX — пробег
BBBBB — № оф дилер
H — вид операции ТОВ этом случае эта запись будет занесена в ГУ самой верхней!
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
Спасибо тебе! Попробую разобраться!
в F-серию процесс чем-то будет отличаться?
И какой блок можно «уложить» на свой страх и риск, если что-то пойдет не так)? -
Ничем процесс на F-серии не отличается.
Если не запускать неизвестные jobы ничего не произойдет.
Перечисленные выше файлы SGBT работают только с ГУ.
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
а точно стирать можно только всё разом?
-
Ну у steuern_servicehistory_erase нет аргументов, так что увы((
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
Большое спасибо, все получилось!
Любопытно, но работа номер 9 и 8 (масло раздаточной коробки и аккумулятор) пишет просто как пустое техническое обслуживание) -
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
На MGU будет данный метод работать? Естественно при условии наличия mgu.prg в нужном месте и правке TST-файла. Может проверял кто?
-
Естественно, будет.
Добавил в папку hu_mgu.prg
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
Наверное, нужно в файле ediabas.ini настроить интерфейс REMOTE для работы с ICOM.
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
- В клубе с:
- 24 апр 2024
- Сообщения:
- 2
Настроен через Ediabas Konfigurator, Easy Connect при Icom Lock видит вольтаж на KL15, 30. До этого как настроил — Tool32 не запускался.
Проблема больше в том что CIC не принимает такую команду, как и на удаление тоже не принимает. Хотя открыв CIC.prg видно что такие команды есть в списке.
Вложения:
-
А может, ГУ не совсем CIC?
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
Pan-buntar
Участник тусовки- В клубе с:
- 27 дек 2016
- Сообщения:
- 43
- Пол:
- Мужской
- Регион:
- Башкортостан респ.
А данный метод с на Энтринав 2 будет работать?
-
Будет. В шапке именно такой пример.
Энтринав2=ЭнтринавЭво
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
-
- В клубе с:
- 6 сен 2023
- Сообщения:
- 3
- Пол:
- Мужской
- Регион:
- Воронежская обл.
А вытащить и сохранить существующую в ГУ историю можно перед очисткой и редактированием?
-
Либо другим (дорогим) прибором, либо вручную карандашом на листок бумаги.
-
- В клубе с:
- 6 сен 2023
- Сообщения:
- 3
- Пол:
- Мужской
- Регион:
- Воронежская обл.
Т.е. увидеть список записей в таком виде
1|enavevo|steuern_servicehistory_add||23;12;2019;0;10000;1;10224 ;1;1;1;1;0;0
возможно? -
Нет. Как минимум, этой программой не выташить.
Руками надо сделать на основе своей истории ТО.
Это недолго и несложно.
Stop hovering to collapse…
Click to collapse…
Hover to expand…
Нажмите, чтобы раскрыть…
- Главная
- Статьи на www.autoscaners.ru
Как выбрать файл .prg для работы с BMW серии Fxx в программе Tool32? Здесь приводится краткое руководство к действию, в котором объясняется, как выбрать файл .PRG и каким образом его необходимо загрузить в программу Ediabas Tool32 для определенной модели автомобиля.
Отказ от ответственности:
За последствия выполнения операций ответственность несете вы сами.
Необходимые инструменты и оборудование:
USB-диагностический кабель BMW INPA K+DCAN
Программный комплекс INPA и EDIABAS, который включает в себя программу Tool32.
Порядок выполнения операций:
1. Запустите программу BMW INPA нажатием правой кнопки на файле INPALOAD.exe и выберите вариант запуска «Run as administrator» (работать в качестве администратора). Загрузите программное обеспечение Inpa.
2. Выберите соответствующую модель автомобиля серии Fxx , например, F10, нажмите кнопку F3.
3. Появляется окно выбора сценариев. Выберите 1-й вариант справа – FUNCTIONAL JOBS (функциональные проверки).
4. Отображается окно выбранной серии (Baureihenauswahl). Нажмите F1
5. Появляется основное меню функций. Нажмите F2 – идентификация
6. Далее результат идентификации систем автомобиля. Обратите внимание, желтым цветом отмечено колонку SGBD. Здесь приведены названия SGBD, которые соответствуют названиям файлов .PRG. Файлы с этими названиями следует открывать в программе Tool32 для работы с ЭБУ.
7. Запустите программу Tool32 нажатием правой кнопки на файле tool32.exe и выберите вариант запуска «Run as administrator» (работать в качестве администратора). Программа Tool32 должна загрузиться.
8. Выберите «File->Load SGBD, Group file».
9. Откройте и просмотрите папку EDIABAS\ECU, выполните поиск файла, имя которого должно соответствовать названию, отмеченному в желтой колонке. В данном примере загружаеться файл блока управления AIRBAG с названием ACSM3.PRG (рис. 6).
10. После завершения загрузки слева выводится список функций/команд (Jobs), доступных для данного блока управления. Запускаем команду fs_lesen, которая считывает коды неисправностей из памяти ЭБУ. Это можно сделать двойным нажатием на ней либо выбором команды и нажатием кнопки F5. Результат выполнения команды/функции отображается в следующем окне «Results».
Соблюдайте осторожность при работе с командами в программе Ediabas Tool32.
Некоторые функции (команды) удаляют данные и настройки ЭБУ, которые впоследствии можно восстановить в дилерском центре или что еще хуже в BMW Munich, и у Вас появятся гораздо более серьезные неисправности.
Некоторые слова могут иметь другой смысл и назначение, а не тот, на который вы рассчитываете, например: Initialisierung, Reset, Sperren, Default или Loeschen.
Для удаления неисправностей из памяти ЭБУ применяется команда «fs_loeschen».
Возврат к списку
Материалы по теме:
Статьи
- INPA и Rheingold, какую из двух программ выбрать для кодирования и программирования ЭБУ BMW
- Загрузка и установка программного обеспечения INPA для программирования устройств BMW F серии Fxx
- Как изменить VIN с помощью диагностической программы BMW Tool32 в BMW E46 EDC16
- BMW DIS — что за зверь?
Всем доброго времени суток!
В данной записи, хочу познакомить Вас с программой ToolSet32(далее Tool32), точнее даже не познакомить, так как многие о ней наверняка знают, а провести краткий курс работы с программой, краткое руководство, принцип работы, некоторые особенности и функции программы.
Программа Tool32, входит в состав BMW Standard Tools, включая комплекс Ediabas. Все знают что данный комплекс, является связующим интерфейсом между машиной и диагностическим ПО. Как установить и где скачать BMW Standard Tools, какие адаптеры для этого нужны, я рассказывать не буду, так как этой информации валом в интернете. Скажу одно, что всем, кто хочет работать с ЭБУ BMW этот комплекс обязателен. В его состав входят такие программы как INPA, NCS Expert, WinKFP ну и соответственно Tool32, о последнем и будет речь, так как с остальными более менее всем понятно.
Tool32 это по сути программа для низкоуровневого взаимодействия с блоками управления автомобиля.
Собственно вот она:
Многие из нас, игнорируют данную программу, в принципе и правильно делают) Так как неосознанные и без понятия действия, могут привести к непредсказуемому результату и неудачным последствиям. Тыкать на абум с этой программой не прокатят, в данном случае надо знать и понимать что делаем и какой будет результат. Ну да ладно, у нас краткий курс и руководство, поэтому не будем отходить от темы.
Для работы в Tool32 требуются SGBD-файлы (SGBD = Steuergerätebeschreibungsdatei). Это файлы, которые описывают доступные функции и параметры этих функций в конкретных блоках управления. Изначально Tool32 была придумана как отладочная программа для разработчиков диагностического ПО.
SGBD-файлы имеют расширение .PRG. Как правило любой диагностический софт использует их, чтобы работать с блоками управления, те же ISTA/P и Rheingold. И даже INPA, которая на самом деле является интерпретатором скриптов (IPO), использующих функции из SGBD-файлов для получения результата и вывода его в виде таблиц или изображений. В том числе и многочисленные утилиты, созданные программистами.
С помощью Tool32 можно открыть SGBD-файл, увидеть список доступных функций (или методов, в терминологии программирования), вызвать их, передав необходимые параметры (если есть) и получить результат выполнения. Точно такие же результаты, но оформленные в более читаемом виде, вы получаете при использовании любого диагностического ПО. Проще говоря, диагностировать что-либо можно даже с помощью одного только Tool32, конечно если позволяет опыт и навыки.
Программа кстати, может работать в тестовом режиме, конечно, какие либо данные с блоков по авто Вы не получите, но, набраться опыта и поучиться работать с программой, работой с файлами вполне. Чтобы активировать тестовый режим, нужно запустить Tool32 (если у кого при установке комплекса программ, не создался ярлык запуска Tool32, то файл для запуска при стандартной установке комплекса, программы находится по пути c:EDIABASBinTool32.exe), далее зайти во вкладку «Configuration», далее выбрать «Ediabas», и поставить галочку в строке «Simulftion», вот так:
Краткое руководство по работе с файлами и программой, Вам поможет так называемый FAQ, файл Tool32_E.chm, который находится по пути c:EDIABASBinTool32_E.chm, если кто хочет скачать отдельно, вот ссылка (265 Кб). Вот как выглядит FAQ:
Советую изучить и ознакомиться.
Так как Tool32 работает с файлами SGBD, нам нужно научиться определять и выбирать его правильно. Прежде всего, нам понадобятся файлы SP-daten для кузова с которым хотим работать, эти файлы можно скачать на просторах интернета (я уже приводил ссылки в прошлых записях). На примере своего BMW (е39), я покажу и расскажу как правильно выбрать необходимый файл, в принципе с другими кузовами технология та же. Нам понадобится файл E39SGFAM.DAT, который находится в папке «daten», открываем его текстовым редактором, получаем:
В этой таблице перечислены имена блоков управления и соответствующие им имена CABD- и C_SGBD-файлов. CABD = Codierablaufbeschreibungsdatei, скрипт того же формата (IPO), что применяется в INPA, но предназначен для процедуры кодирования блока управления (они часто используются одни и те же, ввиду одинаковости процедуры), а C_SGBD — SGBD-файл с функциями кодирования блока. Вот эти самые C_SGBD нас и интересуют. Например если я ищу файл приборной панели е39, то смотрим KMB получаем имя C_KMB, вот собственно именно с этим именем файл SGBD нам необходимо открыть в программе Tool32.
Сам по себе E39SGFAM.DAT не совсем точен, т.к. предполагает только один вариант CABD-/C_SGBD-файлов на конкретное имя блока, тогда как с выпуском новой прошивки могут потребоваться другие.
Приступим к работе, необходимо подключить адаптер к машине, включить зажигание. Имя файла SGBD-файла нам известно, поэтому открываем Tool32, далее «File -> Load SGBD, Group file» и идём в папку C:EDIABASecu (скорее всего диалоговое окно откроется сразу в этой папке), ищем там «C_KMB.PRG» и открываем:
Прошу заметить, что открывать и выбирать нужно только те файлы, функции блоков которые имеются в автомобиле, иначе выполнять какую либо работу с файлом Вы не сможете.
Итак, после открытия файла, Вы увидите кучу открывшихся окошек, это хорошо, так и должно быть, это означает, что связь с машиной установлена, если же никаких окошек нет, то проверяйте настройки Ediabas, либо верно выбранный SGBD-файл.
Из всех открывшихся окошек нас интересуют лишь три: Select Job: название модуля (список функций), Job-Info (подсказка по функции/её параметрам), ну и конечно же Results. Остальные окошки можно свернуть.
При выборе нужной строки одним кликом (одним нажатием), в окошке Job-Info Вы получите пояснения на данную операцию, например:
При выборе строки двойным кликом, данная операция будет выполнена, поэтому всё же рекомендую для запуска использовать клавишу F5, ну и предупрежу, строго запускайте операции, в которых Вы имеете понятие, что будет сделано в итоге, окошко Job-Info, так как здесь содержится информация о функции, её параметрах, формате данных и результатах, которые мы получим в результате выполнения данной функции, причем Google-переводчик совместно с этим окошком даст возможность разобраться что выполняет та или иная операция.
Я думаю с этим более менее разобрались, теперь я приведу пример выполненных операций с блоками своей е39, сразу прошу заметить, что в блоках свежее, может быть больше операций.
Раз уж открыли файл функций блока приборной панели (KMB), то например строка c_zcs_lesen, даст нам информацию о шифре ZCS, записанным в приборку:
Строка c_fg_lesen, даст нам информацию о номере кузова:
Строка ident, даст информацию о блоке приборки:
Строка sia_reset файла приборной панели, позволит нам сбросить сервисный интервал.
Считали так же информацию о номере кузова с блока EWS:
Далее откроем файл SGBD функций ЭБУ DME, т.е. нашего ДВС, для этого откроем файл с именем MS411DS1.PRG, видим что строк операций значительно больше:
Считали информацию по ЭБУ операцией info:
Посмотрели номер запчасти ЭБУ DME, марку ДВС и тд тп выполнив операцию ident:
Посмотрели ошибки неисправностей ЭБУ ДВС, выполнив операцию fs_lesen:
Считали номер ISN для EWS, воспользовавшись операцией isn_lesen:
Если обобщить то строки имеющие слово lesen позволяют нам считать различного рода информацию с ЭБУ (пример я привел выше), строка info позволяет нам получить информацию о ЭБУ соответственно (маркировка, версия), строка ident позволит нам узнать номер детали ЭБУ, дату выпуска, маркировку ДВС и тд, !далее очень внимательно и аккуратно!, строки с словом loeschen произведет сброс каких либо данных ЭБУ, например строка adapt_loeschen в блоке ДВС, произведет сброс всех адаптаций, строка fs_loeschen удалит все неисправности из памяти ЭБУ ДВС, строки со словами checksumme говорят о работе с контрольной суммой ЭБУ, строки с словом schreiben произведут запись данных в ЭБУ (с этой строкой будьте очень внимательны и аккуратны, выполняйте данную операцию с полным понятием того, что Вы делаете), строки с словом status дадут какую либо информацию, статус, значение, положение в режиме реального времени, например строка status_l_sonde даст нам информацию о напряжении лямбда зондов до катализатора, строки с словом steuern произведут запуск механизма, оборудования, например строка steuern_selbsttest_ein в блоке приборки, произведет запуск теста приборной панели, соответственно строка steuern_selbsttest_aus выключит тест приборной панели, строка со словом reset произведет перезапуск какого либо оборудования, механизма, например строка steuergeraete_reset в блоке приборки, произведет перезапуск приборной панели. Стоит так же упомянуть, что некоторые операции как например c_s_lesen в блоке приборной панели, описан формат единственного аргумента (параметра) функции. Называется аргумент BINAER_BUFFER (и имеет тип Data, т. е. надо ставить соответствующую галочку в поле ввода перед выполнение операции), в таких операциях как например steuern_selbsttest_ein (тест приборной панели) галочка Data соответственно должна быть снята.
Это так сказать простейшие операции для примера работы с файлами функций блоков автомобиля. Естественно функционал программы Tool32 на этом не ограничивается, точнее это самые простейшие операции по считыванию информации с ЭБУ, дабы по-ближе познакомиться с программой.
На данном этапе, знакомство наше с программой подошло к концу. Да и драйв2 нас ограничивает и намекает, что пора заканчивать) Дабы не грузить теорией в своем БЖ, хоть и связанной с работой ЭБУ BMW, следующие записи будут связаны непосредственно с моей е39, а уж потом продолжим наше обучение и работу с ЭБУ BMW. В следующих теоретических записях я познакомлю Вас с более сложными операциями Tool32, хотя эту информацию смогут осилить далеко не все, это по силу программистам, так как работать придется с байтами, калькуляторами для программистов и тд и тп.)
Еще раз повторюсь, все Вы делаете на свой страх и риск, и советую выполнять и работать с ЭБУ, только с полным осознанием, уверенностью и понятием, что Вы делаете.
Многую информацию, я черпал с форумов по работе с ЭБУ BMW, а так же спасибо за помощь в написании статьи MrPerfekt, и вам настоятельно рекомендую, подписаться на его блог, больше читать, изучать теории, а потом уже приступать к практике.
Лучшая благодарность за труд, это Ваши лайки, комментарии и репосты, хоть я и не напрашиваюсь)
Всем спасибо за внимание, до Скорых встреч!
В этой части речь пойдёт о ещё более глубоком погружении в тонкости кодирования автомобилей BMW. Как и прежде, речь ведётся конкретно о семействе кузовов E60 (соответственно это также E61 и E63/E64). Теоретически всё нижеописанное подходит и для остальных кузовов, разве что E65/E66 стоят несколько особняком. У них там своя атмосфера.
Все посты на тему кодирования не содержат списков конкретных действий типа «Нажмите сюда, потом туда, введите то, введите это и получите результат». Цель этих постов — научить читателя думать и понимать, чтобы он мог решать конкретные задачи самостоятельно без инструкций.
* * *
Сегодня мы поговорим о приборной панели. Каждую панель на заводе адаптируют под конкретный автомобиль, вставляют нужные шкалы, калибруют и кодируют. Функциональность приборной панели задаётся на заводе и последующему изменению формально не подлежит. Такими функциями «с завода», например, является бегунок круиз-контроля и работа стрелки под тахометром либо в качестве датчика мгновенного расхода топлива, либо указатель температуры масла на автомобилях с претензией на спорт или являющиеся таковыми.
Бегунок круиз-контроля (зелёный)
С круизом более-менее понятно: если машина вообще не оборудована круиз-контролем, то бегунок отключен. На кузовах серии E89 (т. е. все «трёшки» и подобные) так и вовсе существует два варианта приборных панелей: HIGH и LOW. В варианте LOW бегунок круиза, не берусь утверждать на 100%, вообще физически отсутствует.
С E60 попроще, там бегунок в приборке, как правило есть. Хотя, несмотря на то, что в ETK есть всего один вариант приборной панели без привязки к опции круиха, таки существуют панели, в которых бегунок физически отсутствует. В этом случае кодирование бесполезно.
В иных вариантах он есть, но может быть просто неактивен. Активен он у вас или нет, можно узнать с помощью так называемого «KI TEST». На данном видео бегунок активен:
Если бегунок у вас есть, значит круиз в принципе активен. Если же нет, то нужно экспериментировать.
Нету бегунка
Допустим, вы всё-таки захотели оснастить свой автомобиль этим самым круиз-контролем, в варианте либо «S540A Система поддержания заданной скорости» (дорестайл), либо «S544A Система поддержания заданной скорости с функцией подтормаживания» (рестайл). Это довольно бюджетное дооснащение и в принципе нужно приобрести только ручку и пару кожухов рулевой колонки.
Проблемой же является то, что бегунок на приборной панели не появляется, даже после правильного кодирования панели, с активизацией всех параметров, связанных с круиз-контролем. Т. е. функция работает, есть индикация на дисплее, но она показывается только на некоторое время при изменении заданной скорости. А при отсутствии проекции становится невозможно понять, работает ли сейчас круиз или нет.
Неработоспособность бегунка (если он физически всё-таки есть) связана с тем, что параметр, отвечающий за его функционирование, находится в той области памяти, которая не подлежит изменению. Вернее, не подлежит изменению с помощью кодировочных индексов. И это не часть прошивки, это область с так называемой заводской кодировкой, поэтому заниматься перепрошивкой приборной панели в надежде, что заработает ползунок, нет никакого смысла. В заводской кодировке хранятся параметры относительно физических характеристик приборной панели (и не только), т. е. диапазоны отображения числа оборотов двигателя, скорости на спидометре и т. д. Всё это не может быть изменено прошивкой.
Вы наверняка слышали о кудесниках, которые за определённую мзду включали каждому желающему этот бегунок. Порядок цен не знаю, но думаю услуга по стоимости близка к стоимости самих запчастей для круиза. Так вот, я не знаю точно, как именно стало известно, как включить бегунок. Скорее всего изначально методом реверс-инжиниринга, путём сравнения дампов памяти (Википедия) приборных панелей с круизом и без него. Далее уже варианты, либо правился сам дамп, а потом заливался обратно в чип памяти, либо программным способом. Второй куда проще в плане того, что демонтировать приборную панель не надо, ничего разбирать, припаивать и отпаивать для чтения памяти тоже.
В публичном доступе информация о том, как самостоятельно выполнить такие изменения, я полагаю, впервые появилась здесь, её разместил житель Финляндии с ником ptikkala на Bimmerforums. Причём там же он привёл неизвестные строчки кода, которые описывают область памяти с заводскими настройками. Нечто подобное можно получить в NCS Dummy, выполнив дизассемблирование кодировочного индекса, но именно таких строчек в полученном текстовом файле вы не увидите. Просто потому что там нет такой информации.
Далее инструкция расползлась уже по сети, переведена на языки (например, здесь на русском) и т. д. Недостаток этой инструкции в том, что она описывает просто по шагам, что нужно делать. Но мы не знаем, что именно делаем и зачем. К примеру, контрольную сумму предлагается просто увеличить на единицу, но в общем случае так поступать нельзя. Работает это всё исключительно благодаря тому, что меняем мы как раз самый младший бит всей последовательности, который и влияет на контрольную сумму таким вот образом. Я попробую пояснить, что именно там происходит и как можно упростить этот процесс, а также попробуем минимизировать возможность допущения ошибки.
Работа с Tool32
Tool32
Эту программу большинство обходит стороной и правильно делают, т. к. неразумные действия при работе с ней могут привести к непредсказуемым последствиям. Tool32 — программа для низкоуровневого взаимодействия с блоками управления автомобиля. Сама она идёт в составе комплекса EDIABAS, а с ним знакомы все, кто хотя бы занимается диагностикой BMW. Комплекс является связующим звеном (интерфейсом) между машиной и диагностическим ПО.
Для работы в Tool32 требуются так называемые SGBD-файлы (SGBD =Steuergerätebeschreibungsdatei, ох уж эти чёртовы немцы). Это файлы, которые описывают доступные функции и параметры этих функций в конкретных блоках управления (собственно, SGBD-файл). Изначально Tool32 была придумана как отладочная программа для разработчиков диагностического ПО.
SGBD-файлы имеют расширение .PRG. Как правило любой диагностический софт использует их, чтобы работать с блоками управления, те же ISTA/P и Rheingold. И даже INPA, которая на самом деле является интерпретатором скриптов (IPO), использующих функции из SGBD-файлов для получения результата и вывода его в виде таблиц или изображений. Я уже не говорю про многочисленные утилиты, созданные энтузиастами.
С помощью Tool32 можно открыть SGBD-файл, увидеть список доступных функций (или методов, в терминологии программирования), вызвать их, передав необходимые параметры (если есть) и получить результат выполнения. Точно такие же результаты, но оформленные в более читаемом виде, вы получаете при использовании любого диагностического ПО. Проще говоря, диагностировать что-либо можно даже с помощью одного только Tool32, если вы Рэмбо.
Выбор SGBD-файла
Сегодня мы работаем с приборной панелью, а значит блок управления у нас имеет название KOMBI. Осталось выяснить, какой именно SGBD-файл работает именно с комбинацией приборов. Определить это труда не составляет, ведь в Daten-файлах заложен кладезь информации на этот счёт. Если в первой части я рассказывал про файл E60AT.000, то теперь нам нужен другой файл, называется он E60SGFAM.DAT из той же папки daten, что и E60AT.000:
E60SGFAM.DAT
В этой таблице перечислены имена блоков управления и соответствующие им имена CABD- и C_SGBD-файлов. CABD = Codierablaufbeschreibungsdatei, скрипт того же формата (IPO), что применяется в INPA, но предназначен для процедуры кодирования блока управления (они часто используются одни и те же, ввиду одинаковости процедуры), а C_SGBD — SGBD-файл для с функциями кодирования блока. Вот эти самые C_SGBD нас и интересуют и мы сразу видим во второй строчке наш KOMBI и соответствующий ему KOMB60.
Сам по себе этот E60SGFAM.DAT не совсем точен, т. к. предполагает только один вариант CABD-/C_SGBD-файлов на конкретное имя блока, тогда как с выпуском новой прошивки могут потребоваться другие. Это не касается непосредственно KOMBI (у него в любом варианте на сегодняшний день используется KOMB60), но касается других блоков. Рассматривать эту тему я сейчас не буду, т. к. это уже выходит за рамки сегодняшней темы. В будущем, возможно, пролью свет на структуру daten-файлов более подробно.
Начало работы
Необходимо подключить ваш настроенный интерфейс к машине, зажигание включать необязательно, достаточно включенного контакта R (т. е. работает радио/панель). Имя файла SGBD-файла нам известно, поэтому открываем Tool32, далее File -> Load SGBD, Group file и идём в папку C:EDIABASecu (скорее всего диалоговое окно откроется сразу в этой папке), ищем тамKOMB60.PRG и открываем:
Загруженный KOMB60.PRG
Если вы видите эту кучу окошек со списком функций, значит связь с машиной в порядке. Если нет, тогда проверяйте настройки вашего EDIABAS.
Из всех открывшихся окошек нас интересуют лишь три: Select Job: название модуля (список функций), Job-Info (подсказка по функции/её параметрам), ну и конечно же Results. Остальные окошки можно свернуть. Прежде всего ещё раз предупреждаю, что необдуманные действия могут привести к реальной порче техники, которую потом будет сложно и дорого восстанавливать, поэтому никогда не делайте ничего такого, чего вы до конца не понимаете.
Можно повыбирать разные функции в списке и посмотреть, какую информацию по ним показывает в Job-Info. Ни в коем случае не выбирайте функции двойным кликом, т. к. это приведёт к её запуску. Двойным кликом запускать функции могут только снайперы без тремора в руках, поэтому всё же рекомендую для запуска использовать клавишу F5, но сейчас ничего запускать не надо. Конкретно нас будет интересовать функция c_c_lesen, вот её и выберем.
Степ-бай-степ
Итак, что же это за магическая строка, которую мы передаём в качестве аргумента в функциюc_c_lesen? Любознательный гражданин найдёт ответ не где-нибудь, а непосредственно в той же Tool32, в окошечке Job-Info:
c_c_lesen Job-Info
Вообще, это крайне полезное окошечко, на которое можно и нужно обращать внимание, ведь именно в нём содержится информация о функции, её параметрах, формате данных и результатах, которые мы получим в результате выполнения данной функции. А наперевес с Google-переводчиком можно устранить недопонимания.
По c_c_lesen, как видим, описан формат единственного аргумента (параметра) функции. Называется аргумент BINAER_BUFFER (причём имеет тип Data, т. е. надо ставить соответствующую галочку в поле ввода), а в комментарии расписано, из чего он состоит:
Байт 0: Тип данных (01: Данные, 02: Маска данных)
Байт 1: (не используется) Разрядность (01: Byte, 02: Word, 3: Dword)
Байт 2: (не используется) Порядок байт (00: LSB, 01: MSB)
Байт 3: Адресация (00: Свободная, 01: Блочная)
Байты 4-12: (не используется)
Байты 13,14: Длина последовательности (младший/старший)
Байты 15,16: (не используется)
Байты 17,18,19,20: Адрес (младший/старший байт, младшее/старшее слово)
Байты 21,…: Последовательность
Байт 21 + длина посл.: ETX (03) (замыкающий байт)
Значения байтов, которые не используются, можно смело забивать нулями, а вот с остальными параметрами разберёмся. Хотя некоторую ремарку к описанию я бы сделал, относительно байта 2: в описании к нему несколько некорректное смешивание порядка бит (те самые LSB и MSB ипорядка байт), либо само описание неверно, либо описание значений. Впрочем, этот байт всё равно не используется.
Теперь взглянем по новому на те заклинания из инструкции на Bimmerforums, но для упрощения распилим первое заклинание на две части: до последовательности из FFh и всё остальное.
Итак, первая часть:
01 01 01 01 00 00 00 00 00 00 00 00 00 17 00 00 00 00 01 31 00
Здесь у нас приведены байты с 0 по 20 включительно. Жирным выделены как раз те байты, которые будут использованы функцией c_c_lesen. Единички в байтах 1 и 2 никакой роли не играют, туда смело можно было писать 00h. Зато остальное нам задаёт следующее:
Тип данных: 01 (Данные)
Адресация: 01 (Блочная)
Длина последовательности: 17 00
Адрес: 00 01 31 00
Не могу точно сказать, что именно подразумевается под типом «маска данных» (который 02h), возможно это какие скрытые данные, резервная копия или что-то в этом духе. В приборной панели работает исключительно тип 01h. Возможно, при записи неверных данных (с неправильной контрольной суммой, например), предварительно создаётся копия, которую можно потом прочитать. Не знаю, не разбирался.
Далее у нас идёт адресация. В режиме свободной (00h) адресации мне не удалось получить какой-нибудь вразумительный ответ. Зато режим блочной адресации работает прекрасно.
Длина последовательности. С ней надо слегка разобраться, как и с адресом. И что означают эти «младший» и «старший» в описании. Чтобы записать какое-то число в память, нужно определиться, в каком порядке вы будете записывать байты (если число занимает больше одного байта). Например:
Число: 48 860
hex-вид: BE DC
Как мы видим, число занимает два байта, младший из которых справа, точно также, как и младшие разряды самого числа. В память можно записать эти два байта либо как BE DC (так называемый Big-Endian порядок), либо DC BE (Little-Endian). В скобочках в описании к байту у нас как раз и написано, где младший, а где старший, стало быть запись «младший/старший» означает, что первым идёт младший бит или байт. Таким образом 17 00 в строке следует интерпретировать как 00 17 и это значит, что мы хотим прочитать 17h (23) байт.
Осталось разобраться с адресом, с ним чуть посложнее. Термин «слово» применительно к компьютерной архитектуре изначально означал величину в битах или байтах, равную разрядности процессора (см. Википедию), но последние лет 25-30 «слово» (word) означает 16-битное число, т. е. число, которое имеет значение от 0 (00 00) до 65 535 (FF FF) и оно занимает всегда два байта. Синонимом word-а является тип ushort (безнаковый short).
В пояснении к байтам с адресом написано, что порядок задаётся от младшего к старшему биту и от младшего слова к старшему. Т. е. если адрес в нормальном виде выглядит вот так:
AABBCCDDh
То младшее слово будет CCDD, старшее — AABB. Согласно заданному порядку, нам нужно развернуть как байты в словах (младший/старший байт), так и сами слова (младшее/старшее слово) относительно друг друга. В результате мы получим вот такую запись:
DDCCBBAAh
Стало быть то, что записано в тарабарщине заклинания как 00 01 31 00 нужно интерпретировать вот так:
00 31 01 00
Сначала я поменял местами сами слова, получив соответственно 01 00 и 00 31, а потом развернул и сами байты. Наглядно:
Конвертация нормального адреса в адрес для использования в c_c_lesen. Сам рисовал
Сейчас эти преобразования запоминать не особо нужно, т. к. для работы с приборной панелью они в общем-то не нужны (в следующей части станет понятно почему), но могут пригодиться для работы с другими блоками.
Вторая часть заклинания:
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03
Можно не пересчитывать количество байт вида FFh, их ровно 23 штуки. Как раз столько, сколько мы хотим прочитать по заданному адресу. Я честно не знаю, зачем такой удивительный механизм придуман для чтения кодировочных данных, но вот он такой: передав N штук этих самых FFh и закончив последовательность замыкающим байтом 03h (он всегда равен этому значению), мы получим какой-то ответ. Замыкающий байт означает, что последовательность закончилась. К слову говоря, байты самой последовательности могут быть равны чему угодно (кроме 03h, разумеется), это не имеет значения.
Теперь заклинание полностью и без пробелов между байтами (так проще копировать и вставлять в строку аргументов):
010101010000000000000000001700000000013100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03
(ширина DRIVE2 не позволяет это всё в одну строчку отобразить)
Оно всего-навсего просит прочитать 23 байта по адресу 00310100h и выдать результат. Обратите внимание на адрес, в кодировочном индексе нет параметров именно с таким адресом или рядом с ним.
Напоминаю, что параметр BINAER_BUFFER функции c_c_lesen сам по себе имеет тип «data», исходя из описания. Поэтому не забываем поставить галочку Data. Пробуем (выполнение запускается однократным нажатием кнопки F5):
c_c_lesen Results (кодировочные данные выделены в редакторе картинок)
Получили результат! Или если не получили (ERROR_BIN_BUFFER в качестве ответа или другая ошибка), то всё проверяем, считаем байтики, пробуем ещё раз. Итого у нас в окне результатов есть строка CODIER_DATEN, содержащая всю ту писанину, что мы туда отправили, но вместо последовательности из FFh какие-то вполне конкретные байтики приехали:
CODIER_DATEN = 45 Bytes
0000 : 01 01 01 01 00 00 00 00 00 00 00 00 00 17 00 00
0010 : 00 00 01 31 00 E0 69 01 00 A0 00 18 01 90 01 08
0020 : 02 26 01 36 14 98 22 FB 30 5D 3F BC 03
ACHTUNG, POZOR, ВНИМАНИЕ: Обязательно сохраните в надёжном месте полученные исходные данные!
Выделим отдельно полученные данные:
E0 69 01 00 A0 00 18 01 90 01 08 02 26 01 36 14 98 22 FB 30 5D 3F BC
Первый байт (E0h) является контрольной суммой для оставшихся 22. Теперь подглядим в тот кусочек исходного кода с Bimmerforums:
//3101’16 ACC_ZEIGER_VERBAUT 00000001b // Fuer ACC/Tempomat, ob der ACC-Zeiger vorhanden
// nicht_aktiv 0b // Basisvarinate, ACC-Zeiger nicht verbaut, kein ACC Betrieb
// aktiv 1b // Highvarinate, ACC-Zeiger verbaut
Ага, адрес байта 3101’16, а бит, отвечающий за ползунок круиза, в нём самый младший (крайний справа). По адресу 00310116h у нас как раз выходит последний байт BCh! Т. е. мы вычитали как раз тот блок с кодировочными данными, который и содержит необходимый байт.
Разложим BCh побитово:
BCh = 188 = 10111100b
Как видим, самый младший бит равен нулю — ползунок выключен. В инструкции нам предлагают увеличить число на единицу, но это реально будет работать только в том случае, если бит действительно равен нулю (т. е. число в десятичном виде чётное). Если же бит у вас установлен, число нечётное, то увеличение на единицу приведёт к непредсказуемым последствиям. Поэтому правильнее всего работать именно в двоичном режиме и проверять, установлен бит (равен единице) или нет.
Исправляем:
10111101b = BDh
Помимо этого бита за работу круиза отвечают ещё несколько (этого вам никто ещё не рассказывал):
Бит 0: ползунок вкл/выкл;
Бит 1: единицы измерения шкалы (0: километры, 1: мили);
Бит 2: установлен ли диод круиза (0: нет, 1: да). Актуально только для панелей с индексом 07;
Биты 3-5: не используются (все равны 1);
Биты 6-7: Квадрант нулевого положения.
Напомню, что биты считаются справа налево.
С километрами/милями более-менее понятно, если машина американка или англичанка, бит должен быть установлен.
Бит за номером 2 в кодировочном индексе C07 (в более старых он всегда равен 1 и не используется) по идее должен активировать вот такую иконку:
Это интересно, но я никогда такого символа на приборных панелях E6x не видел. У меня этот бит установлен с завода (приборная панель уже была с индексом 07). Однако по имеющимся у меня дампам с приборных панелей разных E60, этот бит ставят не всегда, например стабильно на российских E60 он равен 0. Отключение лампы никакого эффекта на отображение круиза не произвело, поэтому если хотите, можете бит установить, а можете оставить. Только нужно помнить, что если у вас он не был установлен (как и бит ползунка), то при установке двух битов контрольная сумму нужно специальным образом считать. Как это сделать я опишу ниже.
Не совсем ясна ситуация с квадрантом нулевого положения. Квадрант — это четверть круга. Двумя битами можно указать на любой из 4: 00b (1), 01b (2), 10b (3), 11b (4). В моём случае указан квадрант номер 3 (10b), у машины из инструкции — 4. В целом, по имеющимся у меня дампам приборных панелей различных кузовов, как с круизом, так и без, можно сделать вывод, что квадрант задан на заводе в любом случае и менять его не нужно.
Переходим к контрольной сумме. Как я уже говорил, в общем случае просто увеличивать на единицу нельзя. Чтобы правильно посчитать сумму, необходимо воспользоваться функциейc_checksumme, но для неё сначала надо составить аналогичное заклинание, но уже содержащее кодировочные данные вместо колбасы из FFh. Т. е. вот так:
010101010000000000000000001700000000013100E0690100A000180190010802260136149822FB305D3FBD03
Т. е. я заменил все FFh на полученные с помощью c_c_lesen кодировочные данные, заменив последний байт BCh на BDh, но не изменял контрольную сумму, она по-прежнему равна E0h.
Теперь это заклинание нужно отправить в функцию c_checksumme:
Не забываем поставить галочку Data
В поле OUT_BUFFER функция отобразила последовательность с правильной контрольной суммой, она поменялась с E0h на E1h, т. е. действительно увеличилась на единицу, но исключительно благодаря тому, что я изменил только самый крайний бит последовательности.
Осталось исправить контрольную сумму в нашем заклинании:
010101010000000000000000001700000000013100E1690100A000180190010802260136149822FB305D3FBD03
Всё, теперь можно записывать! Для этого есть функция c_c_schreiben:
c_c_schreiben
Если в поле JOB_STATUS мы видим слово OKAY, значит всё прошло успешно. Скажу сразу, эта функция не проверяет контрольную сумму, она запишет всё, что вы ей передали, как есть.
Осталось выполнить перезапуск приборной панели. Для этого есть функция steuergeraete_reset, но она ещё сбрасывает установленное время. Чтобы этого избежать, можно выполнить другую функцию, sg_reset_ohne_uhr_datum:
sg_reset_ohne_uhr_datum
Дело сделано! Теперь надо протестировать? Кулхацкеры тестируют вот так:
steuern_selbsttest_ein
Запускаем процедуру (зажигание должно быть выключено) steuern_selbsttest_ein, передав в качестве аргумента число 0 (выключить тест), 1 (однократно), 2 (бесконечно). Выключить тест можно также запуском процедуры steuern_selbsttest_aus. Перед запуском убедитесь, что галочка Data снята.
Смотрим:
Ура!
Результат получен, щастье наступило.
На этой ноте я вынужден прерваться, т. к. оказалось, что пост целиком не влез. Нетерпеливые могут сразу поэкспериментировать, а оптимизаторы — дождаться следущего поста, который выйдет на днях.
Всем добрый день! В этой статье я расскажу о программах для работы с BMW которые использую сам.
В первую очередь конечно же нужно понимать, что бмв это немецкий автомобиль и имеет более богатое электрооснащение даже в базовой и бедной комплектации в сравнении даже с современным корейским автопромом. Немного окунёмся в прошлое, мы можем вспомнить легендарные кузова е34, е36, е32, которые покорили сердца многих. На тот момент большая часть данных автомобилей имела блоки управления, такие как DMEDDE, EGS, Kombi, ABS, SRS, что уже не мало, в то время как в России ещё даже не было представления о компьютерной технике и самым прогрессивном устройством был видеоплеер, инженеры бмв во всю разрабатывали различные системы управления и безопасности.
Начиная с конца 1995 года с появлением 39-го и 38 кузовов, электроника бмв очень серьёзно возросла, в некотором роде, лично для меня это та самая инновационная граница и прорыв. Да, спорить не буду, наработки существовали и ранее и кто-то даже писал, что в 70х годах был прототип адаптивного освещения дороги, но будем честны, кто сделал того и тапки. 🙂 Собственно появились такие блоки как ZKE, LCM, SZM, MID, MK, PDC, EDC и ещё десяток, каждый из которых настраиваемый, имеющий собственный софт. Появилось 2 блока управления — в бордачке и в багажнике, что несомненно подтверждает большое наличие электронных компонентов в машине.
Далее с каждым новым кузовом количество функций и опций начало стремительно возрастать, отсюда и пошло выражение «У BMW не бывает полной комплектации» , так и есть, найти машину в которую было бы собрано всё — не возможно, но у нас народ простой, если в машине больше возможностей чем в жигулях, то она автоматически становится укомплектованной.
Теперь ближе к делу. Для работы с BMW необходимо определиться, с какой серией вы работаете и что вы хотите делать, ведь если одни просто хотят проводить самостоятельную электронную диагностику машины, то у других чешутся руки, чтобы что-нибудь дооснастить, закодировать и т.п.
Основной пакет программ для Е серии входит BMW Standart Tools, на сегодняшний день версии 2.12, это последняя версия и далее новых выходить не будет.
В этот пакет входят программы:
INPA — диагностика почти всей Е серии, при желании можно вычитать и Е84 Х1, но об этом позже.
NCSExpert — основная программа для кодирования блоков управления, изменения настроек эбу, добавление опций в комплектацию.
WinKFP — программирование блоков управления, обновление софта, смена прошивки.
Tool32 — очень серьёзная программа которую опасаются даже бывалые, служит для низкоуровневого управления и перепрограммирования эбу.
Ediabas — условно скажем сервер, обеспечивающий связь диагностического оборудования между машиной и ПО.
Так же есть отдельный монстр под названием DIS, серьёзный инженерный комплекс, установить данную программу смогли не многие и по вполне веским причинам.
Во первых программа очень требовательна к ресурсам ПК, к операционной системе, в качеству диагностического прибора, но при всём при этом, это единственная программа которая даёт возможность полной диагностики авто с выполнением всех доступных сервисных функций, а также сопровождение информацией о ремонте. С ней я работал очень мало, не удобно, медленно, мне достаточно диагностики от программы INPA, но знайте, что она есть, в интернете много мануалов как поднять её на виртуальной машине, даже вроде есть готовые образы под VMWare. Именно им пользовался дилер до появления Rheingold.
С выше перечисленными программами работают диагностические устройства:
- BMW ICOM A1, A2, Next
- BMW GT-1
- BMW K-Dcan
Первые два, относятся к оборудованию официального дилера, стоят очень дорого, отличаются надёжностью и универсальностью. BMW K-Dcan классический ODB2-USB адаптер, который позволить себе может абсолютно любой желающий, продаётся он везде, начиная с китайский интернет магазинов, заканчивая местными продаванами.
Следующим популярным программным комплексом для работы с узким рядом кузовов Е серии это BMWScanner, его также обозвали «бобёр», видимо из-за расширенных возможностей работы с EEPROM различных ЭБУ. Существует 2 версии, первая работает с кузовами E39, E46, E38, E53 (дорест), средняя стоимость у Китайцев 4000 руб, основными плюсами является возможность визуального кодирования машины — то есть галочками изменять доступные параметры, синхронизировать EWS и DME/DDE, сливать/заливать дамп, тоесть адаптер является программатором в том числе.
Не требует знаний немецкого языка и основ программирования, частично переведён на русский язык. В целом рекомендую держать в арсенале. Данный комплекс более удобен и универсален чем BMW Standart Tools, но при программировании и замены различных ЭБУ — наличие обоих комплексов сильно облегчит жизнь.
Вторая версия BMW E/F Scanner, работает с более свежими кузовами как E60, E90, Е81, E70 так и захватывает F серию, но больше пользы от него для Е-шек. Стоит он уже прилично дороже, имеет несколько версий на которых заостряться не будем, каждый выберет ту, которая ему необходима. И снова повторюсь, даже в случае если у вас более свежая Е серия, и вы серьёзно планируете заниматься своей машиной — наличие BMW Standart Tools и D-can крайне желательно.
Ну вот мы и добрались до F/G серий
Современным машинам — современные технологии. Ещё в кузове Е60 и подобных появилась шина MOST, где устройства завязаны между собой по оптоволоконной связи посредством шлюза, чаще это относилось к системам мультимедии, связь между приборной панелью, проекцией, головным устройством и т.п.
Это дало серьёзный толчок, и сегодня в F и G серии используются шины FlexRay, Ethernet, PT-Can, рассмотреть подробнее связи можно на изображении ниже
Для работы с данными автомобилями необходимы
- Enet кабель, подключается по Ethernet к автомобилю и сетевой карте вашего ПК
- Icom Next — универсальное диагностическое устройство
- Rheingold, Ista — диагностический инженерный комплекс
- E-sys — Программа для кодирования и программирования ЭБУ
Начнём с первого, Enet кабель, по сути представляет из себя отрезок витой пары 6/7 категории, где с одной стороны имеет классический коннектор RJ-45, с другой OBD2 разъём, является полностью пассивным и связывает рабочий компьютер и шлюз автомобиля напрямую, образуя локальную сети.
Программа Rheingold, она же Ista-D(диагностика) и сопутствующая ей Ista-P (программирование) на сегодняшний день самое актуальное ПО, которое использует дилер при работы с автомобилями. По сути является приемником вышеупомянутой DIS, более того, в отличии от DIS, Rheingold (Ista) устанавливается гораздо проще, хотя физически занимает со всеми базами не менее 200-300 Гб, однако это полностью покрывает необходимость использовать сторонние сервисы, так как данный комплекс позволяет
- Диагностировать E, F, G серии (с Е серией рекомендую работать с машинами от 2004 года)
- Выполнять сервисные функции, адаптации двигателя, коробки, valvetronic, сбросы коррекций
- Просматривать подробные электросхемы автомобиля
- Получать информацию по ремонтным мероприятиям, рекомендуем жидкостям, моменты затяжки и т.п.
Ista-P является отдельной программой, служит для обновления блоков управления сразу всего автомобиля, для данной процедуры рекомендуется использовать оборудование Icom, иначе есть вероятность из-за недостаточно стабильного для программирования соединения повалить шлюз и другие модули, что окирпичит ваш автомобиль.
С недавних времён Rheingold стал называться Ista+ и служит для диагностики и программирования автомобиля, а Ista-P оставили для работы с E серией.
Ну и последнее, на чём можно остановиться это E-Sys, грубо скажем замена NCS эксперту тех времён. E-sys позволяет изменять комплектацию автомобиля, выполнять кодирование всех блоков управления, а также в отличии от Ista-P или Ista+ позволит обновить вручную отдельные эбу, например после замены.
Требует понимания работы с автомобилем, знания структуры модулей и блоков. Имеются тонкости в установке и полноценном использовании. Дело в том, что сам по себе E-sys распространяется в открытом доступе, но без специальной программы «Лаунчера» вы не сможете кодировать по NCD/FDL, лишь только менять комплектацию и сбрасывать кодировки по умолчанию.
Кто уже знаком с этим, наверняка скажут, что я забыл упомянуть про мобильные приложения и адаптеры к ним. Если честно я не очень хочу заострять на них внимание, так как приложения платные — в районе 3000 руб, wifi или bluetooth OBD2 адаптер — тоже стоит 1500-3000 руб, и это вам даст возможность только тыкать галочки, в то время когда купив ENET кабель у вас появляются практически все возможности работы с машиной.
Благодарю за внимание, надеюсь моя статья поможет начинающим.
В этой части речь пойдёт о ещё более глубоком погружении в тонкости кодирования автомобилей BMW. Как и прежде, речь ведётся конкретно о семействе кузовов E60 (соответственно это также E61 и E63/E64). Теоретически всё нижеописанное подходит и для остальных кузовов, разве что E65/E66 стоят несколько особняком. У них там своя атмосфера.
Все посты на тему кодирования не содержат списков конкретных действий типа «Нажмите сюда, потом туда, введите то, введите это и получите результат». Цель этих постов — научить читателя думать и понимать, чтобы он мог решать конкретные задачи самостоятельно без инструкций.
* * *
Сегодня мы поговорим о приборной панели. Каждую панель на заводе адаптируют под конкретный автомобиль, вставляют нужные шкалы, калибруют и кодируют. Функциональность приборной панели задаётся на заводе и последующему изменению формально не подлежит. Такими функциями «с завода», например, является бегунок круиз-контроля и работа стрелки под тахометром либо в качестве датчика мгновенного расхода топлива, либо указатель температуры масла на автомобилях с претензией на спорт или являющиеся таковыми.
Бегунок круиз-контроля (зелёный)
С круизом более-менее понятно: если машина вообще не оборудована круиз-контролем, то бегунок отключен. На кузовах серии E89 (т. е. все «трёшки» и подобные) так и вовсе существует два варианта приборных панелей: HIGH и LOW. В варианте LOW бегунок круиза, не берусь утверждать на 100%, вообще физически отсутствует.
С E60 попроще, там бегунок в приборке, как правило есть. Хотя, несмотря на то, что в ETK есть всего один вариант приборной панели без привязки к опции круиха, таки существуют панели, в которых бегунок физически отсутствует. В этом случае кодирование бесполезно.
В иных вариантах он есть, но может быть просто неактивен. Активен он у вас или нет, можно узнать с помощью так называемого «KI TEST». На данном видео бегунок активен:
Если бегунок у вас есть, значит круиз в принципе активен. Если же нет, то нужно экспериментировать.
Нету бегунка
Допустим, вы всё-таки захотели оснастить свой автомобиль этим самым круиз-контролем, в варианте либо «S540A Система поддержания заданной скорости» (дорестайл), либо «S544A Система поддержания заданной скорости с функцией подтормаживания» (рестайл). Это довольно бюджетное дооснащение и в принципе нужно приобрести только ручку и пару кожухов рулевой колонки.
Проблемой же является то, что бегунок на приборной панели не появляется, даже после правильного кодирования панели, с активизацией всех параметров, связанных с круиз-контролем. Т. е. функция работает, есть индикация на дисплее, но она показывается только на некоторое время при изменении заданной скорости. А при отсутствии проекции становится невозможно понять, работает ли сейчас круиз или нет.
Неработоспособность бегунка (если он физически всё-таки есть) связана с тем, что параметр, отвечающий за его функционирование, находится в той области памяти, которая не подлежит изменению. Вернее, не подлежит изменению с помощью кодировочных индексов. И это не часть прошивки, это область с так называемой заводской кодировкой, поэтому заниматься перепрошивкой приборной панели в надежде, что заработает ползунок, нет никакого смысла. В заводской кодировке хранятся параметры относительно физических характеристик приборной панели (и не только), т. е. диапазоны отображения числа оборотов двигателя, скорости на спидометре и т. д. Всё это не может быть изменено прошивкой.
Вы наверняка слышали о кудесниках, которые за определённую мзду включали каждому желающему этот бегунок. Порядок цен не знаю, но думаю услуга по стоимости близка к стоимости самих запчастей для круиза. Так вот, я не знаю точно, как именно стало известно, как включить бегунок. Скорее всего изначально методом реверс-инжиниринга, путём сравнения дампов памяти (Википедия) приборных панелей с круизом и без него. Далее уже варианты, либо правился сам дамп, а потом заливался обратно в чип памяти, либо программным способом. Второй куда проще в плане того, что демонтировать приборную панель не надо, ничего разбирать, припаивать и отпаивать для чтения памяти тоже.
В публичном доступе информация о том, как самостоятельно выполнить такие изменения, я полагаю, впервые появилась здесь, её разместил житель Финляндии с ником ptikkala на Bimmerforums. Причём там же он привёл неизвестные строчки кода, которые описывают область памяти с заводскими настройками. Нечто подобное можно получить в NCS Dummy, выполнив дизассемблирование кодировочного индекса, но именно таких строчек в полученном текстовом файле вы не увидите. Просто потому что там нет такой информации.
Далее инструкция расползлась уже по сети, переведена на языки (например, здесь на русском) и т. д. Недостаток этой инструкции в том, что она описывает просто по шагам, что нужно делать. Но мы не знаем, что именно делаем и зачем. К примеру, контрольную сумму предлагается просто увеличить на единицу, но в общем случае так поступать нельзя. Работает это всё исключительно благодаря тому, что меняем мы как раз самый младший бит всей последовательности, который и влияет на контрольную сумму таким вот образом. Я попробую пояснить, что именно там происходит и как можно упростить этот процесс, а также попробуем минимизировать возможность допущения ошибки.
Работа с Tool32
Tool32
Эту программу большинство обходит стороной и правильно делают, т. к. неразумные действия при работе с ней могут привести к непредсказуемым последствиям. Tool32 — программа для низкоуровневого взаимодействия с блоками управления автомобиля. Сама она идёт в составе комплекса EDIABAS, а с ним знакомы все, кто хотя бы занимается диагностикой BMW. Комплекс является связующим звеном (интерфейсом) между машиной и диагностическим ПО.
Для работы в Tool32 требуются так называемые SGBD-файлы (SGBD =Steuergerätebeschreibungsdatei, ох уж эти чёртовы немцы). Это файлы, которые описывают доступные функции и параметры этих функций в конкретных блоках управления (собственно, SGBD-файл). Изначально Tool32 была придумана как отладочная программа для разработчиков диагностического ПО.
SGBD-файлы имеют расширение .PRG. Как правило любой диагностический софт использует их, чтобы работать с блоками управления, те же ISTA/P и Rheingold. И даже INPA, которая на самом деле является интерпретатором скриптов (IPO), использующих функции из SGBD-файлов для получения результата и вывода его в виде таблиц или изображений. Я уже не говорю про многочисленные утилиты, созданные энтузиастами.
С помощью Tool32 можно открыть SGBD-файл, увидеть список доступных функций (или методов, в терминологии программирования), вызвать их, передав необходимые параметры (если есть) и получить результат выполнения. Точно такие же результаты, но оформленные в более читаемом виде, вы получаете при использовании любого диагностического ПО. Проще говоря, диагностировать что-либо можно даже с помощью одного только Tool32, если вы Рэмбо.
Выбор SGBD-файла
Сегодня мы работаем с приборной панелью, а значит блок управления у нас имеет название KOMBI. Осталось выяснить, какой именно SGBD-файл работает именно с комбинацией приборов. Определить это труда не составляет, ведь в Daten-файлах заложен кладезь информации на этот счёт. Если в первой части я рассказывал про файл E60AT.000, то теперь нам нужен другой файл, называется он E60SGFAM.DAT из той же папки daten, что и E60AT.000:
E60SGFAM.DAT
В этой таблице перечислены имена блоков управления и соответствующие им имена CABD- и C_SGBD-файлов. CABD = Codierablaufbeschreibungsdatei, скрипт того же формата (IPO), что применяется в INPA, но предназначен для процедуры кодирования блока управления (они часто используются одни и те же, ввиду одинаковости процедуры), а C_SGBD — SGBD-файл для с функциями кодирования блока. Вот эти самые C_SGBD нас и интересуют и мы сразу видим во второй строчке наш KOMBI и соответствующий ему KOMB60.
Сам по себе этот E60SGFAM.DAT не совсем точен, т. к. предполагает только один вариант CABD-/C_SGBD-файлов на конкретное имя блока, тогда как с выпуском новой прошивки могут потребоваться другие. Это не касается непосредственно KOMBI (у него в любом варианте на сегодняшний день используется KOMB60), но касается других блоков. Рассматривать эту тему я сейчас не буду, т. к. это уже выходит за рамки сегодняшней темы. В будущем, возможно, пролью свет на структуру daten-файлов более подробно.
Начало работы
Необходимо подключить ваш настроенный интерфейс к машине, зажигание включать необязательно, достаточно включенного контакта R (т. е. работает радио/панель). Имя файла SGBD-файла нам известно, поэтому открываем Tool32, далее File -> Load SGBD, Group file и идём в папку C:\EDIABAS\ecu\ (скорее всего диалоговое окно откроется сразу в этой папке), ищем тамKOMB60.PRG и открываем:
Загруженный KOMB60.PRG
Если вы видите эту кучу окошек со списком функций, значит связь с машиной в порядке. Если нет, тогда проверяйте настройки вашего EDIABAS.
Из всех открывшихся окошек нас интересуют лишь три: Select Job: название модуля (список функций), Job-Info (подсказка по функции/её параметрам), ну и конечно же Results. Остальные окошки можно свернуть. Прежде всего ещё раз предупреждаю, что необдуманные действия могут привести к реальной порче техники, которую потом будет сложно и дорого восстанавливать, поэтому никогда не делайте ничего такого, чего вы до конца не понимаете.
Можно повыбирать разные функции в списке и посмотреть, какую информацию по ним показывает в Job-Info. Ни в коем случае не выбирайте функции двойным кликом, т. к. это приведёт к её запуску. Двойным кликом запускать функции могут только снайперы без тремора в руках, поэтому всё же рекомендую для запуска использовать клавишу F5, но сейчас ничего запускать не надо. Конкретно нас будет интересовать функция c_c_lesen, вот её и выберем.
Степ-бай-степ
Итак, что же это за магическая строка, которую мы передаём в качестве аргумента в функциюc_c_lesen? Любознательный гражданин найдёт ответ не где-нибудь, а непосредственно в той же Tool32, в окошечке Job-Info:
c_c_lesen Job-Info
Вообще, это крайне полезное окошечко, на которое можно и нужно обращать внимание, ведь именно в нём содержится информация о функции, её параметрах, формате данных и результатах, которые мы получим в результате выполнения данной функции. А наперевес с Google-переводчиком можно устранить недопонимания.
По c_c_lesen, как видим, описан формат единственного аргумента (параметра) функции. Называется аргумент BINAER_BUFFER (причём имеет тип Data, т. е. надо ставить соответствующую галочку в поле ввода), а в комментарии расписано, из чего он состоит:
Байт 0: Тип данных (01: Данные, 02: Маска данных)
Байт 1: (не используется) Разрядность (01: Byte, 02: Word, 3: Dword)
Байт 2: (не используется) Порядок байт (00: LSB, 01: MSB)
Байт 3: Адресация (00: Свободная, 01: Блочная)
Байты 4-12: (не используется)
Байты 13,14: Длина последовательности (младший/старший)
Байты 15,16: (не используется)
Байты 17,18,19,20: Адрес (младший/старший байт, младшее/старшее слово)
Байты 21,…: Последовательность
Байт 21 + длина посл.: ETX (03) (замыкающий байт)
Значения байтов, которые не используются, можно смело забивать нулями, а вот с остальными параметрами разберёмся. Хотя некоторую ремарку к описанию я бы сделал, относительно байта 2: в описании к нему несколько некорректное смешивание порядка бит (те самые LSB и MSB ипорядка байт), либо само описание неверно, либо описание значений. Впрочем, этот байт всё равно не используется.
Теперь взглянем по новому на те заклинания из инструкции на Bimmerforums, но для упрощения распилим первое заклинание на две части: до последовательности из FFh и всё остальное.
Итак, первая часть:
01 01 01 01 00 00 00 00 00 00 00 00 00 17 00 00 00 00 01 31 00
Здесь у нас приведены байты с 0 по 20 включительно. Жирным выделены как раз те байты, которые будут использованы функцией c_c_lesen. Единички в байтах 1 и 2 никакой роли не играют, туда смело можно было писать 00h. Зато остальное нам задаёт следующее:
Тип данных: 01 (Данные)
Адресация: 01 (Блочная)
Длина последовательности: 17 00
Адрес: 00 01 31 00
Не могу точно сказать, что именно подразумевается под типом «маска данных» (который 02h), возможно это какие скрытые данные, резервная копия или что-то в этом духе. В приборной панели работает исключительно тип 01h. Возможно, при записи неверных данных (с неправильной контрольной суммой, например), предварительно создаётся копия, которую можно потом прочитать. Не знаю, не разбирался.
Далее у нас идёт адресация. В режиме свободной (00h) адресации мне не удалось получить какой-нибудь вразумительный ответ. Зато режим блочной адресации работает прекрасно.
Длина последовательности. С ней надо слегка разобраться, как и с адресом. И что означают эти «младший» и «старший» в описании. Чтобы записать какое-то число в память, нужно определиться, в каком порядке вы будете записывать байты (если число занимает больше одного байта). Например:
Число: 48 860
hex-вид: BE DC
Как мы видим, число занимает два байта, младший из которых справа, точно также, как и младшие разряды самого числа. В память можно записать эти два байта либо как BE DC (так называемый Big-Endian порядок), либо DC BE (Little-Endian). В скобочках в описании к байту у нас как раз и написано, где младший, а где старший, стало быть запись «младший/старший» означает, что первым идёт младший бит или байт. Таким образом 17 00 в строке следует интерпретировать как 00 17 и это значит, что мы хотим прочитать 17h (23) байт.
Осталось разобраться с адресом, с ним чуть посложнее. Термин «слово» применительно к компьютерной архитектуре изначально означал величину в битах или байтах, равную разрядности процессора (см. Википедию), но последние лет 25-30 «слово» (word) означает 16-битное число, т. е. число, которое имеет значение от 0 (00 00) до 65 535 (FF FF) и оно занимает всегда два байта. Синонимом word-а является тип ushort (безнаковый short).
В пояснении к байтам с адресом написано, что порядок задаётся от младшего к старшему биту и от младшего слова к старшему. Т. е. если адрес в нормальном виде выглядит вот так:
AABBCCDDh
То младшее слово будет CCDD, старшее — AABB. Согласно заданному порядку, нам нужно развернуть как байты в словах (младший/старший байт), так и сами слова (младшее/старшее слово) относительно друг друга. В результате мы получим вот такую запись:
DDCCBBAAh
Стало быть то, что записано в тарабарщине заклинания как 00 01 31 00 нужно интерпретировать вот так:
00 31 01 00
Сначала я поменял местами сами слова, получив соответственно 01 00 и 00 31, а потом развернул и сами байты. Наглядно:
Конвертация нормального адреса в адрес для использования в c_c_lesen. Сам рисовал
Сейчас эти преобразования запоминать не особо нужно, т. к. для работы с приборной панелью они в общем-то не нужны (в следующей части станет понятно почему), но могут пригодиться для работы с другими блоками.
Вторая часть заклинания:
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03
Можно не пересчитывать количество байт вида FFh, их ровно 23 штуки. Как раз столько, сколько мы хотим прочитать по заданному адресу. Я честно не знаю, зачем такой удивительный механизм придуман для чтения кодировочных данных, но вот он такой: передав N штук этих самых FFh и закончив последовательность замыкающим байтом 03h (он всегда равен этому значению), мы получим какой-то ответ. Замыкающий байт означает, что последовательность закончилась. К слову говоря, байты самой последовательности могут быть равны чему угодно (кроме 03h, разумеется), это не имеет значения.
Теперь заклинание полностью и без пробелов между байтами (так проще копировать и вставлять в строку аргументов):
010101010000000000000000001700000000013100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03
(ширина DRIVE2 не позволяет это всё в одну строчку отобразить)
Оно всего-навсего просит прочитать 23 байта по адресу 00310100h и выдать результат. Обратите внимание на адрес, в кодировочном индексе нет параметров именно с таким адресом или рядом с ним.
Напоминаю, что параметр BINAER_BUFFER функции c_c_lesen сам по себе имеет тип «data», исходя из описания. Поэтому не забываем поставить галочку Data. Пробуем (выполнение запускается однократным нажатием кнопки F5):
c_c_lesen Results (кодировочные данные выделены в редакторе картинок)
Получили результат! Или если не получили (ERROR_BIN_BUFFER в качестве ответа или другая ошибка), то всё проверяем, считаем байтики, пробуем ещё раз. Итого у нас в окне результатов есть строка CODIER_DATEN, содержащая всю ту писанину, что мы туда отправили, но вместо последовательности из FFh какие-то вполне конкретные байтики приехали:
CODIER_DATEN = 45 Bytes
0000 : 01 01 01 01 00 00 00 00 00 00 00 00 00 17 00 00
0010 : 00 00 01 31 00 E0 69 01 00 A0 00 18 01 90 01 08
0020 : 02 26 01 36 14 98 22 FB 30 5D 3F BC 03
ACHTUNG, POZOR, ВНИМАНИЕ: Обязательно сохраните в надёжном месте полученные исходные данные!
Выделим отдельно полученные данные:
E0 69 01 00 A0 00 18 01 90 01 08 02 26 01 36 14 98 22 FB 30 5D 3F BC
Первый байт (E0h) является контрольной суммой для оставшихся 22. Теперь подглядим в тот кусочек исходного кода с Bimmerforums:
//3101’16 ACC_ZEIGER_VERBAUT 00000001b // Fuer ACC/Tempomat, ob der ACC-Zeiger vorhanden
// nicht_aktiv 0b // Basisvarinate, ACC-Zeiger nicht verbaut, kein ACC Betrieb
// aktiv 1b // Highvarinate, ACC-Zeiger verbaut
Ага, адрес байта 3101’16, а бит, отвечающий за ползунок круиза, в нём самый младший (крайний справа). По адресу 00310116h у нас как раз выходит последний байт BCh! Т. е. мы вычитали как раз тот блок с кодировочными данными, который и содержит необходимый байт.
Разложим BCh побитово:
BCh = 188 = 10111100b
Как видим, самый младший бит равен нулю — ползунок выключен. В инструкции нам предлагают увеличить число на единицу, но это реально будет работать только в том случае, если бит действительно равен нулю (т. е. число в десятичном виде чётное). Если же бит у вас установлен, число нечётное, то увеличение на единицу приведёт к непредсказуемым последствиям. Поэтому правильнее всего работать именно в двоичном режиме и проверять, установлен бит (равен единице) или нет.
Исправляем:
10111101b = BDh
Помимо этого бита за работу круиза отвечают ещё несколько (этого вам никто ещё не рассказывал):
Бит 0: ползунок вкл/выкл;
Бит 1: единицы измерения шкалы (0: километры, 1: мили);
Бит 2: установлен ли диод круиза (0: нет, 1: да). Актуально только для панелей с индексом 07;
Биты 3-5: не используются (все равны 1);
Биты 6-7: Квадрант нулевого положения.
Напомню, что биты считаются справа налево.
С километрами/милями более-менее понятно, если машина американка или англичанка, бит должен быть установлен.
Бит за номером 2 в кодировочном индексе C07 (в более старых он всегда равен 1 и не используется) по идее должен активировать вот такую иконку:
Это интересно, но я никогда такого символа на приборных панелях E6x не видел. У меня этот бит установлен с завода (приборная панель уже была с индексом 07). Однако по имеющимся у меня дампам с приборных панелей разных E60, этот бит ставят не всегда, например стабильно на российских E60 он равен 0. Отключение лампы никакого эффекта на отображение круиза не произвело, поэтому если хотите, можете бит установить, а можете оставить. Только нужно помнить, что если у вас он не был установлен (как и бит ползунка), то при установке двух битов контрольная сумму нужно специальным образом считать. Как это сделать я опишу ниже.
Не совсем ясна ситуация с квадрантом нулевого положения. Квадрант — это четверть круга. Двумя битами можно указать на любой из 4: 00b (1), 01b (2), 10b (3), 11b (4). В моём случае указан квадрант номер 3 (10b), у машины из инструкции — 4. В целом, по имеющимся у меня дампам приборных панелей различных кузовов, как с круизом, так и без, можно сделать вывод, что квадрант задан на заводе в любом случае и менять его не нужно.
Переходим к контрольной сумме. Как я уже говорил, в общем случае просто увеличивать на единицу нельзя. Чтобы правильно посчитать сумму, необходимо воспользоваться функциейc_checksumme, но для неё сначала надо составить аналогичное заклинание, но уже содержащее кодировочные данные вместо колбасы из FFh. Т. е. вот так:
010101010000000000000000001700000000013100E0690100A000180190010802260136149822FB305D3FBD03
Т. е. я заменил все FFh на полученные с помощью c_c_lesen кодировочные данные, заменив последний байт BCh на BDh, но не изменял контрольную сумму, она по-прежнему равна E0h.
Теперь это заклинание нужно отправить в функцию c_checksumme:
Не забываем поставить галочку Data
В поле OUT_BUFFER функция отобразила последовательность с правильной контрольной суммой, она поменялась с E0h на E1h, т. е. действительно увеличилась на единицу, но исключительно благодаря тому, что я изменил только самый крайний бит последовательности.
Осталось исправить контрольную сумму в нашем заклинании:
010101010000000000000000001700000000013100E1690100A000180190010802260136149822FB305D3FBD03
Всё, теперь можно записывать! Для этого есть функция c_c_schreiben:
c_c_schreiben
Если в поле JOB_STATUS мы видим слово OKAY, значит всё прошло успешно. Скажу сразу, эта функция не проверяет контрольную сумму, она запишет всё, что вы ей передали, как есть.
Осталось выполнить перезапуск приборной панели. Для этого есть функция steuergeraete_reset, но она ещё сбрасывает установленное время. Чтобы этого избежать, можно выполнить другую функцию, sg_reset_ohne_uhr_datum:
sg_reset_ohne_uhr_datum
Дело сделано! Теперь надо протестировать? Кулхацкеры тестируют вот так:
steuern_selbsttest_ein
Запускаем процедуру (зажигание должно быть выключено) steuern_selbsttest_ein, передав в качестве аргумента число 0 (выключить тест), 1 (однократно), 2 (бесконечно). Выключить тест можно также запуском процедуры steuern_selbsttest_aus. Перед запуском убедитесь, что галочка Data снята.
Смотрим:
Ура!
Результат получен, щастье наступило.
На этой ноте я вынужден прерваться, т. к. оказалось, что пост целиком не влез. Нетерпеливые могут сразу поэкспериментировать, а оптимизаторы — дождаться следущего поста, который выйдет на днях.