• Для полноценного просмотра форума, Вам необходимо зарегистрироваться !!!! Регистрация
  • Ищем партнерские сервисы и магазины, для специальных цена на ЗЧ и обслуживание для клуба. Обращаться к администрации.
  • Скидки на з/ч, клубные сервисы, гарантии на работы

Кодирование со смыслом, часть 1. BMW 6 series

Митя

Завсегдатай
Регистрация
13 Сен 2016
Сообщения
869
Баллы
632
Возраст
38
Ф.И.О.
Митя
Авто
БМВ 525i
Сначала я хотел написать пост про то, как изменить межсервисный интервал по замене масла. Однако вышло немного непонятно и получилось как у всех, одна только практика без теории. Поэтому я решил написать обширную теоретическую часть по кодированию, прочитав которую, вы научитесь хорошо понимать, что и с чем едят и менять всё что угодно и как угодно в своей машине, не прибегая к поискам инструкций. Думал это всё разместить в блоге, но практическая часть всё равно будет и относится она непосредственно к Южанке, поэтому всё-таки будет здесь, в БЖ.

Большинство инструкций по кодированию BMW, как правило, содержат в себе минимум информации, без каких-либо подробностей, вида «измените значение параметра «X» на «aktiv» или «wert_xx», и что-то будет работать по-другому». Этого в большинстве случаев достаточно, эффект достигнут и голова не болит. Однако любознательным товарищам иногда хочется понимать, что за что отвечает и как оно вообще устроено. Ниже пойдёт самая мякотка, но если вас кодирование в принципе не интересует, можно на этом закончить чтение. Поехали!

* * *

Предположим, что вы уже знаете, что такое NCS Expert, пакет программ BMW Standard Tools и файлы данных SP-Daten и всё это установили. И даже научились кодировать всякую ерунду типа поворотников на HUD, редактируя файл FSW_PSW.MAN. Хотя и не очень-то даже понимаете, как вообще это всё дело работает.

Начнём с тех самых SP-Daten файлов. Как правило это увесистый архив, в котором есть несколько папок:

cfgdat — файлы конфигурации для NCS Expert, содержит также расшифровки кодов ошибок при кодировании;

data — самая «толстая» папка, в ней лежат прошивки для ЭБУ;

daten — кодировочные файлы и файлы с описанием комплектаций, опций и т. д. Об этих файлах мы и поговорим чуть ниже;

ecu & sgdat — папки с библиотеками для работы с блоками управления. Что-то вроде так называемых интерфейсов, описывающих функции блоков;

Оставшиеся папки содержат в себе информацию о применимости прошивок, их связей друг с другом, данные о формате БД, контрольные суммы и т. д. Тоже интересно, но не в этой теме.

Кодировочные файлы

Больше всего нам интересна папка daten. В ней содержатся файлы с расширениями вида .Cxx, где xx — произвольный шестнадцатиричный номер, обозначающий порядковый номер этого файла (или вернее «кодировочный индекс»). На один и тот же ЭБУ может существовать несколько таких файлов (т. е. кодировочных индексов), каждый из которых привязан к версии прошивки в этом блоке. С течением времени в прошивки добавляли новые или изменяли старые функции, а вместе с ними добавлялись/изменялись параметры для них. При таких изменениях заводился новый кодировочный файл, со следующим по порядку индексом. Но не всякая новая прошивка содержит новый же кодировочный индекс, зачастую в прошивке просто исправляют ошибки и ничего более. Например, блок LM2 у E60 имеет аж 53 кодировочных индекса (последний — 35h), правда не все доступны в daten-файлах, а совсем старые уже удалены.



43b18d6s-960.jpg

Daten-файлы


При установке с помощью запуска скрипта LADEN.BAT все файлы копируются в папку NCS Expert и после этого мы можем их использовать. Это понятно, но кое-что в этих файлах есть весьма интересное — файлы с расширениями 000, ZUS и M00. Как оказалось, это обычные текстовые файлы и в них есть любопытная информация. Т. к. рассматриваем мы кузов E60 (и соответсвенно E61, E63 и E64), то самый интересный файл — E60AT.000. Его можно открыть в текстовом редакторе и внимательно изучить, но сначала поговорим о кодировании.

Vehicle Order

Наверняка вы знакомы с понятием VO (Vehicle Order) или FA (Fahrzeugauftrag). Это шифр, описывающий комплектацию и другие параметры автомобиля. Этот шифр хранится в нескольких блоках автомобиля, в E60 его хранят блоки CAS и LMA. Возможно вы даже изменяли его при кодировании, обычно это делается при дооснащениями каким-либо опциями. В некоторых инструкциях весь шифр называют VO, а отдельный элемент — FA. Это неправильно, т. к. VO и FA это суть одно и то же.

Типичный шифр комплектации автомобиля выглядит вот так (это актуальный на момент публикации FA Южанки):

E63_#0908&LED5%0300*EA51$1CA$212$217$229$237$248$255$2PA$2SF$2TB$302$319$322$323$346$356$428$430$431$441$442$459$464$481$494$4BW$502$508$522$524$534$548$563$5AC$5DF$609$610$614$615$616$620$644$672$6FL$6NF$6UD$701$752$7SP$818$850$863$877$880$984$9AA-B090-NMUW

Когда вы подключаетесь к машине и считываете в NCS Expert FA из машины, он сохраняется в файл fa.trc в папке WORK. Он точно описывает текущую комплектацию автомобиля и некоторые специальные параметры, заданные конкретно для этого автомобиля. Можно разложить этот шифр по полочкам:

E63_ — кузов;

#0908 — так называемый временной критерий. Это параметр, который отражает технический уровень автомобиля. По ходу жизни автомобиля на конвеере, в его конструкцию вносятся изменения, добавляют новые возможности или модернизируются старые. В среднем новый временной критерий выходит раз в полгода, а в первые года выпусков и того чаще. В данном случае мой критерий — сентябрь 2008. На самом деле оригинальный заводской был старше,#0907, но он был изменён после установки CIC для корректности работы диагностических программ. По этому критерию программы для работы с авто определяют, какие блоки в машине соответствуют определённым опциям. Если временной критерий неверный, то программы, например, могут неверно отображать список блоков в авто;

&LED5 — цвет и материал обивки. В данном случае Leder D5, он же Saddle Brown;

%0300 — код краски (300, Alpinweiss 3);

*EA51 — Код кузова, двигателя и региона. Как правило, содержится в VIN-номере после первых трёх букв (WBA для немецких или X4X для калининградских авто);

$xxx — коды опций, идущие подряд. В расшифровке автомобиля вы можете увидеть те же коды, только в формате SxxxA;

-xxx (или +xxx) — Персональная настройка. Что-то вроде «галочек» в настройках программ;

Ну вроде всё просто? Вполне. Внимательные могут заметить в начале каждого значения специальный символ, который обозначает тип значения (# для временного критерия, & для обивки, % для краски и т. д.). Теоретически порядок следования этих значений при таких префиксах вообще неважен.

Идентификаторы опций

Вернёмся к нашему E60AT.000.



718d6s-960.jpg

E60AT.000


Он весьма объёмный, но в нём есть очень полезная информация с комментариями (они написаны после двух слешей «//», программисты сразу поймут), правда на немецком. Не все опции, вписанные в FA, влияют на кодировку автомобиля. Поэтому для опций, которые влияют, заведены отдельные идентификаторы или набор идентификаторов, которые используются в работе при кодировании. В файле E60AT.000 как раз и приведены соответствия идентификатора или группы идентификаторов какой-либо опции из FA.

Общий формат такой:

X YYYY WWWW ZZZZZ //комментарий

Где X обозначает тип значения в FA, YYYY — собственно само значение из FA (без спец. символа),WWWW — условие, при котором данное соответствие актуально (в большинстве случаев никаких условий нет), ZZZZ — идентификатор для кодирования, иногда их сразу несколько.

Типы значений FA:

A — временной критерий (#xxxx);

Z — актуальный временной критерий (также #xxxx);

W — основные опции ($xxx) или тип кузова/двигателя/региона (*xxxx);

E, H, K — настройка основных опций (-xxx, +xxx);

Примеры:

A #0903 PU03 //PU 09/03

Здесь мы видим, что #0903 в FA соответствуюет идентификатору (отсюда и далее будет «идент» для простоты написания) PU03. При кодировании наличие этого идента позволяет правильно закодировать автомобиль с учётом установленного оборудования (если машина реально соответствует временному критерию «сентябрь 2003»).

A #0305 PU03 DEZ03 MAERZ04 APRIL04 JUNI04 PU04 MAERZ05 //MAERZ PU 03/05 (LM_AHL)

Тут как мы видим, #0305 включает в себя сразу несколько идентификаторов. Все иденты кроме сентября вполне соответствуют обозначениям месяцев на немецком. Сентябрь же обозначается аббревиатурой «PU», не знаю почему.

Рассмотрим вариант с настройкой. В терминах программирования такие настройки соответствуют понятию «флаг», ну или для обывателей — «галочки» в настройках программ:

K OI11 OHNE_FA_SBR //Deaktivierung FAHRER SEATBELTREMINDER (bis PU03/04 im KOMBI ab PU03/04 im SGM! ab PU09/05 im ACSM)

Значения FA с типом K чаще всего пишутся в FA с префиксом «+», а с типом E и H с префиксом «-», хотя некоторые настройки пересекаются по типам. В чём принципиальная разница — не знаю, не разобрался. В примере у нас значение OI11 типа K (т. е. это соответствует +OI11 в FA), которое позволяет отключить напоминание непристёгнутого ремня для водителя. Для кодирования значение +OI11 из FA превращается в идентификатор OHNE_FA_SBR. Т. е. при наличии данной «галочки» в FA, некоторые параметры соответствующих блоков принимают такие значения, которые соответствуют отключенному предупреждению о непристёгнутом ремне. БлагодаряE60AT.000, вы теперь знаете все возможные «галочки».

Далее основные опции:

W 6FL AUDIOPLAYER_USB //USB-/AUDIO- SCHNITTSTELLE

Ну тут всё понятно, $6FL в FA соответствует иденту AUDIOPLAYER_USB. В некоторых случаях на одно значение есть два разных набора идентов в зависимости от условий, например от временного критерия. Как пример, опция $609 (навигация Professional):

W 609 V0908 NAVIGATION CCC //NAVI-SYSTEM PROFESSIONAL OHNE TV (PA021/315ZWAKO 964)NICHT MIT 663
W 609 N0908 NAVIGATION CIC //

Vor (нем. «до») 09/2008 значению $609 соответствуют иденты NAVIGATION и CCC, а Nach(«после») 09/2008 — NAVIGATION и CIC. Там же можно увидеть интересное:

W 6VA CIC //CIC Zusteuerung (03/08-09/08)(NK71 PU71 PV31 PV71 PW51 PX51 PX71 PX91 PY51)Alternativ zusteuerung CIC

Опция $6VA указывает на идент CIC. Так сказать, говорит о заказной установке CIC, действующей с 03/2008 по 09/2008, на перечисленных типах кузовов и двигателях (почему-то правда только E61 и только бензиновые европейки). Т. е. CIC ставился опционально с марта по сентябрь вместо CCC при запросе клиента. А позже CCC был заменён на CIC в качестве системы навигации по умолчанию, но по запросу клиента могли установить CCC (но с новым джойстиком iDrive). В таком случае за «принудительный» CCC отвечает опция $6VB. Кстати, на F-сериях опция $6VA также существует, но означает, что место NBT стоит CIC по запросу клиента (для машин с 07/2012).

Последний пример:

W NF33 E60 N52B30 UL LL US ALLRAD OIL_LEVEL_1 //Limousine 525xiUL //US LL 04/05 — 03/07 /160kW</b>

Тип кузова NF33 у нас сразу соответсвует куче идентов: E60 (это тоже идент!), N52B30(модель двигателя), UL (хз что это :) (UPDATE: подсказали в комментариях, что это класс мощности авто), LL (левый руль), US (исполнение для США), ALLRAD (полный привод),OIL_LEVEL_1 (наверное означает наличие датчика уровня масла).

Теперь зная, какие иденты соответствуют значениям из FA, можно составить их полный список. Вручную это делать не надо, за вас это сделает NCS Expert, когда вы прочитаете FA из машины. Чтобы увидеть список, достаточно открыть файл ASW.TRC из папки WORK:



10718d6s-960.jpg

ASW.TRC


На основании именно этого списка идентов определяются значения параметров блоков при кодировании, а FA лишь источник для формирования этого списка.

Что нам делать с этим списком и вообще полученными знаниями? Пригодятся они нам для работы с программой NCS Dummy.

NCS Dummy

Саму программу можно скачать. Там же и инструкция к ней, на английском, но я её не читал, но вы прочитайте всё-таки :))

К сожалению, настоящее имя автора неизвестно, только его ник — revtor. Единственное, что мне удалось найти о нём, это то, что живёт он в Антверпене (Бельгия) или пригороде, ему около 35 лет и он владеет BMW 850CSi (нашёл даже номер автомобиля) в отличном состоянии. И ещё удалось найти его фотографию за рулём:



4018as-960.jpg

revtor


Благодаря этому человеку энтузиасты по всему миру кодируют многочисленные BMW и, конечно же, зарабатывают на этом деньги. Поэтому скажите ему спасибо :)

Фильтрация списка модулей

NCS Dummy — весьма мощный инструмент, который позволяет наглядно работать с daten и TRC-файлами. С помощью этой программы, например, можно определить все необходимые блоки для кодирования определённой опции. Для этого в программе предусмотрен фильтр списка блоков по различным критерям, один из которых — поиск по иденту опции.

Например, установили вы зеркало с камерой FLA. В расшифровке автомобиля это — опцияS5ACA Автоматический дальний свет. В FA это будет $5AC, именно это значение мы будем добавлять в FA при кодировании. Можно просто добавить эту опцию и закодировать автомобиль целиком (Process Car), т. е. все-все блоки в автомобиле будут закодированы в соответствии с текущим FA (или, вернее, списком идентов). Такой вариант на самом деле годится лишь для новичков, т. к. все параметры блоков, которые вы изменили по своему усмотрению, будут восстановлены к тем значениям, которые соответствуют FA. Т. е. при таком кодировании у вас «слетят» всяческие опции закрытия зеркал с ключа, поворотники в HUD и прочие нестандартные вещи.

Гораздо вернее кодировать только те блоки, в которых есть параметры, зависящие от данной опции и в определении списка зависимых модулей нам как раз и поможет NCS Dummy. После первого запуска необходимо указать пути к папке программы NCS Expert. После этого в первой вкладке у вас появятся на выбор доступные кузова:



c8718d6s-960.jpg

Выбран E60


Во втором выпадающем списке у нас перечислены все кодировочные файлы для всех модулей. Теперь надо этот список отфильтровать, но для начала заглянем в E60AT.000 и поищем там идент опции 5AC. Нашли:

W 5AC FLA XENONLICHT //FERNLICHTASSISTENT (PU09/05), (Zwako zu SA430oderSA431 und SA522 PA623/072)

Опции 5AC соответствуют иденты FLA и XENONLICHT. Заодно понимаем, что 5AC без опции 522(XENONLICHT) не бывает. Можно даже убрать $522 из FA, но идент XENONLICHT, как мы видим, никуда не денется.

Чтобы отфильтровать список модулей по конкретной опции, надо нажать кнопку «Filter» справа от списка модулей, перейти на вкладку «Order option» (фильтрация по опции), вписать в поле «FLA» и запустить фильтрацию. Спустя непродолжительное время список модулей будет отфильтрован:



b8718d6s-960.jpg

NCS Dummy modules filter


Таким образом кодировать нам надо блок света LM, блок головного устройства (CIC, MASK, CCC в зависимости от того, что установлено) и собственно сам модуль FLA. В большинстве инструкций по дооснащению автоматическим дальним написано, что нужно ещё кодировать блок KOMBI (комбинация приборов), однако, как мы видим, в нём нет ни одного параметра, связанного с FLA и модуль отсутствует в списке.

Уже в самом списке параметров можно запустить поиск по тем же критериям и найти зависимые параметры. Здесь также стоит сделать некоторое замечание касательно такой фильтрации и поиска, но для начала расскажу про логические выражения.

Логические выражения (условия)

Каждое значение параметра зависит не только от одного идентификатора, но и от сочетаний этих идентификаторов, причём сочетания могут быть весьма сложные и иногда представляют собой строку вида:

!((ACEA_CO2+!IHKA_CI_0C, IHKA_CI_0C+ACEA_CO2+(E60,E61)+!LUFTKL)+!ALPINA+!S85B50)

Это — логическое выражение (или условие применения), где «, » символизирует логическое «ИЛИ», «+» означает логическое «И», а «!» означает логическое отрицание, а скобки работают примерно также, как в математике. Для программистов такие выражения в целом понятны. Если данное логическое выражение этого значения на основе заданного списка идентов соответсвует истине (т. е. условие выполняется), значение будет выбрано для кодирования. Если же нет, тогда будет выбрано то, у которого условия выполняются. В некоторых случаях параметры могут иметь сразу несколько значений и все они будут выбраны при выполнении условия в каждом из них.

Условия отображаются в графе Options при выборе значения какого-либо параметра:



14718d6s-960.jpg

NCS Dummy logic expressions


На скриншоте выбрано значение «aktiv» для параметра UMWAELZPUMPE модуля IHKA_E60 с индексом 0D (13-ый кодировочный индекс). Тут же рядом пояснение, что данный параметр отвечает за активацию управления дополнительной помпой по CAN-шине и значение «aktiv» будет выбрано при выполнении следующего условия:

(STANDHEIZUNG, NACHRUEST_SHZH)+(M47D20,M57D25,M57D30,N47D20)

STANDHEIZUNG — это опция 536 (подглядываем в E60AT.000) или вернее S536A Автономная система отопления. NACHRUEST_SHZH — это тоже самое, только указывает на персональную настройку +K536 (или возможно -K536, не знаю), обозначает модернизацию отопителя. Остальные иденты обозначают дизельные двигатели соответствующих моделей.

Логически данное выражение выглядит вот так:

(есть опция 536 ИЛИ настройка K536) и (есть любой из двигателей M47D20, M57D25, M57D30 и N47D20)

Т. е. управление помпой будет активно, если у вас дизельный двигатель из перечисленных и установлен автономный отопитель одним из способов. Я так понимаю, заводской вариант идёт как опция, а незаводской — как настройка. Значение же nicht_aktiv выбирается в противоположном случае:

!((STANDHEIZUNG, NACHRUEST_SHZH)+(M47D20,M57D25,M57D30,N47D20))

Выражение обёрнуто в скобки и перед ними стоит знак отрицания, т. е. значение nicht_aktiv будет выбрано в том случае, если выражение внутри скобок ложно по какой-либо причине.

Если же значение параметра вообще не имеет логического выражения, то оно никогда не будет задано при кодировании в заводском режиме. Во многих сериях кузовов применяются одни и те же модули, но в кодировочных файлах для них указаны другие условия, поэтому у того же значения, но с другим кузовом, условие применения может и существовать. Либо в остальных случаях такое значение вообще никогда не задаётся ни при каких условиях и задать его можно только принудительно, кодируя вручную.

Возвращаясь к фильтрации списка модулей или поиска параметров, хочу отметить то, что система не совсем совершенна, ввиду того, что работает как простой поиск подстроки в строке условия и в одном из четырёх режимов: просто как часть строки, в начале строки, в конце или точное соответствие. Т. е. в поле поиска можно писать не только идент опции, но и целое логическое выражение, а можно вообще хоть пару символов из идента. Это удобно, но не хватает режима поиска «как целое слово», чтобы в результаты поиска не попадали иденты, которые хоть и содержат указанную строку, но отношения к теме не имеют. Например, когда мы фильтруем список модулей по строке «FLA», в результатах фильтрации есть сам модуль FLA, который по идее туда не должен попадать, но попал ровно потому что парочка значений в параметрах зависят от идентов типа FLA_CI_05. Т. е. мы искали всё, что завязано на идент «FLA», но попутно ещё нашли и FLA_CI_05 из-за того, что «FLA» — часть этой строки. Сам по себе модуль не может содержать параметры, которые зависят от самого наличия этого модуля, т. к. это абсурд :)

Update: В версии 0.6.0.5 добавлен режим «Exact word», т. е. поиск по целому слово. Прекрасно.

Специальные иденты и тонкости кодировочных индексов

Кстати, об идентах типа «XXX_CI_XX» (CI = Codierung Index, кодировочный индекс). Такие вы не найдёте в E60AT.000, т. к. это иденты, обозначающие зависимость от кодировочного индекса конкретного модуля.

Например, возьмём параметр STREETLAMP_COUNT (количество уличных источников света, при котором отключается дальний свет) модуля FLA. Он имеет два значения: wert_01 и wert_02. Однако в завимости от кодировочного индекса, этим значениям соответствуют разные данные, т. е. при одном и том же значении в блок будет записано разное количество источников света.

Всего для модуля FLA у нас три кодировочных индекса: 03, 04 и 05, соответственно FLA_E65.C03,FLA_E65.C04, FLA_E65.C05. Интересная особенность индекса 04 в том, что параметрSTREETLAMP_COUNT в нём в принципе отсутствует. Однако не означает, что такого параметра нет. На самом деле он есть, но равен нулю всегда, т. е. хотя бы один источник света автоматом отключает дальний свет. Это интересный случай, обычно в таком случае оставляют параметр с единственно возможным значением, но, видимо это не тот случай.

Итак, в индексе 03 для wert_01 у нас указано 24 источника света, а для wert_02 — 0:



94718d6s-960.jpg

FLA_E65.C03 STREETLAMP_COUNT


04 индекс у нас на деле жёстко задаёт 0 без возможности смены (не спрашивайте, откуда я это знаю, сейчас не про это :), а в 05 индексе wert_01 у нас означает 24 источника света, а wert_02 аж 64:



dc718d6s-960.jpg

FLA_E65.C05 STREETLAMP_COUNT


Количество источников понятно, но нам интересны условия для данных параметров. Так, дляwert_01 логическое выражение такое:

!(!FLA_CI_05,FLA_CI_05+US)

А для wert_02 оно же, но без общего отрицания:

!FLA_CI_05,FLA_CI_05+US

Т. е. значение wert_02 будет выставлено либо если индекс модуля FLA не равен 05, либо он равен 05 и машина американка. В противном случае будет выбран wert_01.

Нетрудно догадаться, что основная разница в достаточном количестве источников света между европейкой и американкой будет только при кодировочном индексе 05. Европейке достанется значение wert_01 (24 источника света), а американке — wert_02 с 64-мя «лампочками». Не очень понятными остаются такие условия в индексе 03, т. к. в любом случае там будет задано wert_02. Скорее всего, если найти какой-нибудь старый архив SP-Daten, где вообще нет индексов 04 и 05, условия для параметров будут другими, но, пожалуй, выяснение этого момента я оставлю на плечах читателей :)

Пытаться разобрать истинность длинных логических выражений, думаю, не стоит, за вас это будет делать NCS Expert в режиме заводского кодирования. Он будет опираться на список идентов, полученных из FA и кодировочных индексов и сам подберёт нужные значения. Можно управлять установкой параметров, меняя сам FA (даже не обязательно его сохранять в блоки).

Теперь вы лучше понимаете, что такое FA, как он формируется, как на его основе составляется список идентов, как эти иденты используются при определении значений параметров, а так же что такие кодировочные индексы и как всё это дело связано друг с другом.

В следующей части мы поговорим о том, что из себя представляет конфигурация для блока управления, что такое NETTODAT и как его можно применить, а также о добавлении дополнительного варианта значения к параметрам с помощью NCS Dummy. В заключении практическое применение полученных знаний на примере изменения интервала замены масла.
 

DSG

Прохожий
Регистрация
21 Июл 2018
Сообщения
3
Баллы
1
Ф.И.О.
Владимир
Авто
Пежо 607
Здравствуйте Митя! Для меня, как человека занимающегося самообразованием, этот материал просто бесценен))! Наконец , благодаря вашей работе, у меня в голове все расположилось по своим местам). Спасибо Вам огромное!
 

Paster

Модератор
Команда форума
Регистрация
14 Апр 2014
Сообщения
3,338
Баллы
8,132
Возраст
44
Адрес
Москва
Ф.И.О.
Гарик
Авто
в поисках
Здравствуйте Митя! Для меня, как человека занимающегося самообразованием, этот материал просто бесценен))! Наконец , благодаря вашей работе, у меня в голове все расположилось по своим местам). Спасибо Вам огромное!


если есть наработки
создайте тоже тему, поделится для потомков
 

DSG

Прохожий
Регистрация
21 Июл 2018
Сообщения
3
Баллы
1
Ф.И.О.
Владимир
Авто
Пежо 607
Обязательно)! При первом же удобном случае. Как-то не взял в привычку вести журнал по работе. Все в голове).. Эта марка очень редко ко мне попадает, а знать охота всё)!
 

GSA

Администратор
Команда форума
Регистрация
14 Апр 2014
Сообщения
3,296
Баллы
8,132
Адрес
Москва
Ф.И.О.
Sergey
Авто
Q7 4M TDI + MB
Обязательно)! При первом же удобном случае. Как-то не взял в привычку вести журнал по работе. Все в голове).. Эта марка очень редко ко мне попадает, а знать охота всё)!


я тоже многое читаю по разным маркам
поэтому можете многое выкладывать
интересно же
 

DSG

Прохожий
Регистрация
21 Июл 2018
Сообщения
3
Баллы
1
Ф.И.О.
Владимир
Авто
Пежо 607
Договорились)!
 
  • Мне нравится
Реакции: GSA

Paster

Модератор
Команда форума
Регистрация
14 Апр 2014
Сообщения
3,338
Баллы
8,132
Возраст
44
Адрес
Москва
Ф.И.О.
Гарик
Авто
в поисках
ждем
 
Сверху Снизу