Часто задаваемые вопросы по кодировкам VAG MQB и PQ26

Мне очень часто задают одинаковые вопросы, связанные с кодированием автомобилей группы VAG (Volkswagen, Audi, Skoda, Seat).
Постараюсь собрать небольшой FAQ на эту тему с решением самых часто встречающихся проблем.

1) Кодирование и сервис не появляется. Что делать?
Для того, чтобы появился пункт «Кодирование и сервис» надо: выбрать один из профилей подключения для Audi, Volkswagen, Skoda, Seat (какой именно — не важно) и подключиться к автомобилю.

2) А как узнать — у меня MQB или PQ26 или MLB-EVO?
В разделе «Кодирование и сервис» в верхней части есть выбор платформы. Там указаны модели.
Более старые платформы не поддерживаются.

3) Статус кодировок читается нормально, но при кодировании любых опций возникает неизвестная ошибка.
Во-первых, используйте качественный ELM327 адаптер.
Во-вторых, на многих автомобилях с 2021 м.г. для применения нового значения необходимо открыть капот и активировать ручник.

4) В статусе кодировки пишет «Кодирование не поддерживается или адаптер неисправен», хотя другие кодировки применяются нормально. Мне менять адаптер?
Нет. Вам указано на две возможные причины: либо кодирование не поддерживается, либо проблема в адаптера. Если адаптер позволяет применять другие кодировки, то логично сделать вывод, что проблема не в нем. Методом исключения отбрасываем одну из причин и у нас остается одна причина: кодировка просто не поддерживается вашим автомобилем.
Исключение #1: некоторые блоки дают ответ с небольшой задержкой, поэтому для доступа к таким блокам нужно внести изменения в настройки подключения к ELM327: Настройки — Подключение — Расширенные настройки — Отправлять команду ATST: можно попробовать значение 96 или FF (максимальное). Значение по умолчанию = 64.
Исключение #2: иногда требуется прочитать большой объем данных, с которым адаптер не справляется. В таком случае, действительно надо менять адаптер.

5) Я что-то сделал и теперь у меня что-то не так. Что делать?
Почти все операции и исходное состояние кодировок сохраняются в истории кодирования. Все что вам нужно — методично восстанавливаться из истории кодирования. При чем делать это нужно хронологически от самых новых до самых старых пунктов. До тех пор, пока не исправится то, что пошло не так.
Самая частая ошибка заключается в том, что люди думают: проблема вызвана какой-то конкретной кодировкой, а на самом деле она вызвана другой, более ранней (допустим выполнили 10 кодировок, обнаружили что что-то пошло не так, и думают на на одну из последних, хотя проблема реально в самом начале). Поэтому я советую: если не знаете на 146%, методично откатывайте все подряд. Ничего не пропуская.
Настоятельно рекомендую перед внесением изменений сделать резервное копирование всех блоков. Кодирование и сервис -> Резервное копирование.

7) А что не так с моим адаптером? Он же подключается.
В который раз повторяю: качество адаптера это важно. Если плохой адаптер не позволяет ничего прочитать или закодировать — это хорошо. Вам надо просто его поменять. Гораздо хуже, когда плохой адаптер притворяется хорошим, но отправляет в автомобиль мусор или искажает данные, прочитанные из автомобиля. Это может привести к печальным последствиям.

8) Иногда сохранение нового значения прерывается. Что делать?
Скорость обмена данными с адаптером очень важна. С учетом общей «неторопливости» адаптеров ELM327, а также множества различных задержек, возникающих при передаче данных по пути автомобиль -> адаптер -> Bluetooth/Wi-Fi -> телефон -> программа (и в обратном направлении), вам надо постараться максимально устранить все факторы, которые влияют на скорость обмена данными. Самый частый фактор: Bluetooth подключение к магнитоле автомобиля. Активное подключение по Bluetooth к магнитоле может снизить скорость обмена данными с адаптером в 5 раз.
Поэтому на время кодирования разорвите подключение по Bluetooth с вашей магнитолой.

Создание кодировок

Car Scanner позволяет создавать собственные кодировки, которые будут доступны в меню «Кодирование и сервис».
Функция является экспериментальной и в настоящий момент совместима только с протоколом CAN ISO 15765-4 11 bit.

Активация функции:
1) Настройки — Информация — Экспериментальные возможности: включить
2) Выйти из настроек на главный экран программы
3) Настройки — Custom codings

Создание кодировок:
Настройки — Custom codings — кнопка «+» — будет создан пустой шаблон для кодировки.

Шаблон кодировки состоит из следующих блоков:
1. Блок Description — описание, которое включает:
Group — Группа, к которой будет отнесена кодировка
Name — Название, отображаемое в списке кодировок и на странице кодировки
Description — Дополнительное описание, отображаемое в списке кодировок и на странице кодировки
Inner description — Дополнительное описание, отображаемое только на странице кодировки
Comment — Поле для заметок
1.1. Подблок Translations: позволяет задавать значения Name, Description и InnerDescription для других языков. Язык указывается в формате 2-letter ISO строчными буквами (например, ru, en, de, fr, de).

2. Блок Address and unit: в нем определяются запросы для чтения текущего значения и записи нового значения
Request header — заголовок для отправки запроса (формат, совместимый с командой AT SH ELM327, за исключением CAN 29bit: в таком случае надо указывать полный CAN ID: hhhhhhhh)
Response header — заголовок для получения ответа от ЭБУ (формат, совместимый с командой AT CRA ELM327, за исключением CAN 29bit: в таком случае надо указывать полный CAN ID: hhhhhhhh)
Extended address — дополнительный адрес CAN (формат, совместимый с командой AT CEA ELM327)
Tester address — адрес тестера при использовании дополнительного адреса CAN (формат, совместимый с командой AT TA ELM327)
Password visible — отображение поля для ввода кода доступа
Password — код доступа по умолчанию. Пока что поддерживаются пароли только для VAG UDS, при этом в Pre Write Commands необходимо добавить команду 2704
Password hint — подсказка к паролю (возможно другие варианты паролей)
Read mode and address — запрос для чтения текущего значения, включающий сервис и идентификатор (например: 2200A1, 21F5)
Write mode and address — запрос для записи текущего значения, , включающий сервис и идентификатор (например: 2E00A1, 3BF5)
ATST (hex) — Значение команды ATST, определяющей время ожидания ответа от блока адаптером ELM327. Формат hex, размер 1 байт, размерность: 1 = 4 мс.
Protocol — протокол в формате команды ATSP для ELM327. Если не заполнен, то команда не отправляется, соответственно, применяется только текущий протокол.
Open session command — запрос для открытия диагностической сессии
PreRead Commands — набор запросов для отправки после открытия диагностической сессии, но перед чтением текущего значения. Ответы на эти команды никак не анализируются (за исключением выбора VAG в качестве текущего бренда).
PreWrite Commands — набор запросов для отправки после открытия диагностической сессии, но перед записью значений. Ответы на эти команды никак не анализируются (за исключением выбора VAG в качестве текущего бренда).
PostWrite Commands — набор запросов для отправки после после отправки запроса для записи нового значения. Ответы на эти команды никак не анализируются (за исключением выбора VAG в качестве текущего бренда).
Make changes to initial data — если включено, то предполагается, что необходимо внесение изменений в данные, прочитанные из Read mode and address. Если отключено — прочитанные данные не участвуют в формировании запроса на запись данных и он формируется исключительно из значений опций или введенного значения.

3. Блок Value type определяет тип взаимодействия пользователя с кодировкой: выбор одного из заданных значений (опций) или ввод цифрового значения.
Выбор осуществляется в выпадающем списке из двух вариантов: Options и Input.

3.1. Options — этот вариант предполагает создание одной или нескольких опций.
Общий пункт для всех опций — Byte number (starting from 0): номер байта, в который вносятся изменения (см. ниже). Нумерация байтов начинается с 0.
Каждая опция содержит следующие поля:
Title — отображаемое название опции. Возможно использование константных значений RES_ENABLE и RES_DISABLE для «Активно» и «Не активно» на разных языках.
Value — значение, отправляемое в ЭБУ или изменение прочитанных данных.
Значение может быть в двух форматах:
1) HEX набор байт. Если включен пункт Make changes to initial data, этот набор байт будет записан в прочитанные данные, начиная с байта, указанного в поле Byte number. Пример: Read Mode and Address: 223344, Write Mode And Address: 2E3344 прочитаны данные 00 01 02, Value = AABB, Byte number = 1, данные будет преобразованы следующим образом: 00 01 02 -> 00 AA BB и будет отправлен запрос 2E334400AABB
Если отключен пункт Make changes to initial data, то поле Byte number игнорируется и данные, указанные в Value формируют тело запроса сразу после Write mode and address. Пример: Value = 8040, Write Mode and Address: 3B15, будет отправлен запрос 3B158040
2) Формат изменения отдельных битов. Совместимо только с включенным пунктом Make changes to initial data и предполагает изменение значений в прочитанных данных из Read mode and address. При этом нумерация байт считается всегда с нуля, поле Byte number игнорируется.
Запись всегда начинается с BIT: после чего указываются номера байтов и битов, которые необходимо включить или отключить в формате: НОМЕР_БАЙТА:НОМЕР_БИТА=ЗНАЧЕНИЕ
НОМЕР_БАЙТА — начинается с 0
НОМЕР_БИТА — число от 0 до 7
ЗНАЧЕНИЕ — 1 для включения бита, 0 для выключения бита
Пример: BIT:3:7=1 (включить бит №7 в байте №3).
Возможно изменение нескольких битов, в таком случае пары разделяются точкой с запятой («;»), при этом запись «BIT:» не повторяется.
Пример: BIT:3:7=1;16:0=0;21:5=1 (включить бит №7 в байте №3, отключить бит №0 в байте №16, включить бит №5 в байте №21)
Read only value — поле используется для сопоставления опции с текущим значение данных, когда пункт Make changes to initial data выключен и предполагает изменение в памяти программы прочитанных данных и проверку соответствия измененных данных и прочитанных данных.
Если после изменения наборы данных являются тождественными, в текущее состояние подставляется название текущей опции.
Формат записи аналогичен полю Value.
Пример №1: прочитанные данные A0 80 FF, включенной опции соответствует 80 в байте №1 прочитанных данных. Таким образом запись в ReadOnly value будет: 80, при условии Byte number = 1.
Пример №2: прочитанные данные A0 80 FF, включенной опции соответствуют 4 старших бита в байте №1, которые должны иметь значения 1000. Запись в Read only value: BIT:1:7=1;1:6=0;1:5=0;1:4=0
Поле игнорируется, если включен пункт Make changes to initial data.
3.1.1. Translations — каждая опция имеет возможность задать для ее заголовка перевод. Формат аналогичен разделу Translations блока Description.

3.2. Input — предполагает ввод пользователем цифрового значения.
Byte number — номер байта в прочитанных данных, с которого начинаются данные изменяемого значения
Data length — длина значения в байтах (от 1 до 4 байт)
Multi — множитель для преобразования значения
Offset — слагаемое к значению
Signed — значение знаковое (signed)
Reverse byte order — по умолчанию старший байт — первый слева. Если пункт включен, старший байт — первый справа.
Порядок преобразования прочитанных данных в текущий статус:
1) Преобразование набора байт к целочисленному значению с учетом пунктов Signed и Reverse byte order
2) Умножение полученного числа на множитель
3) Сложение произведения со слагаемым
Преобразование введенных пользователем данных в набор байтов производится в обратном порядке.
Пример: прочитаны данные 03E8, которые соответствуют 100 единицам.
Для этого заполняются следующие поля: Byte number=0, Data length=2, Multi=0.1, Offset=0, Signed=Off, Reverse byte order=Off.
Таким образом пользователь увидит в поле значение «100».
Если пользователь введет значение «10», то измененные данные будут выглядеть следующим образом: 0064

Пример кодировки для включения вежливых поворотников для Renault с блоком T4_VS-BCM_DDT2000 (вариант с изменением общей конфигурации блока — внесение изменений в прочитанные данные):
Request header: 745
Response header: 765
Extended address: пусто
Tester address: пусто
Read mode and address: 221001
Write mode and address: 2E1001
ATST: 96
Open session command: 10C0
Make changes to initial data = On
Byte number: 0 (не используется)
Опция №1 (включение) — Value=BIT:4:7=1 (включить бит №7 в байте №4)
Опция №2 (выключение) — Value=BIT:4:7=0 (выключить бит №7 в байте №4)
Поля Read only value не заполняются.

Пример кодировки для включения вежливых поворотников для Renault с блоком T4_VS-BCM_DDT2000 (вариант без внесения изменений в ранее прочитанные данные — для чтения и записи используются разные идентификаторы и отличаются номера байтов и битов):
Request header: 745
Response header: 765
Extended address: пусто
Tester address: пусто
Read mode and address: 215B
Write mode and address: 3B2F
ATST: 96
Open session command: 10C0
Make changes to initial data = Off
Byte number: 0 (не используется)
Опция №1 (включение) — Value=80 (будет отправлен запрос 3B2F80), Read only value=BIT:0:4=1 (проверка включен ли бит №4 в байте №0 прочитанных данных)
Опция №2 (выключение) — Value=00 (будет отправлен запрос 3B2F00), Read only value=BIT:0:4=0 (проверка выключен ли бит №4 в байте №0 прочитанных данных)