Дополнительные датчики (ПИДы)

Car Scanner позволяет создавать дополнительные датчики (дополнительные ПИДы) для того, чтобы запрашивать данные, специфичные для вашей модели автомобиля.

Чтобы создать дополнительный датчик, вам нужно знать как минимум 2 вещи:
1. Как сделать правильный запрос к ЭБУ (команда и заголовок):
Команда = Режим + PID,  например 010C для оборотов двигателя
Заголовок = адрес, по которому надо отправить команду, например 7E0 для протокола CAN 11bit. Вы можете оставить заголовок пустым, тогда будет использован функциональный заголовок по умолчанию, но учтите, что большинство дополнительных датчиков требует правильно указанного заголовка.

2. Как расшифровать полученный ответ: Формула.
Чтобы указать на определенный байт в ответе используйте латинские буквы: A, B, C, D .. Z, AA, AB, .. AZ, BA, BB, .. BZ, … и т.д., где буква A означает первый байт,  — второй байт и так далее.
Внимание! Формулы чувствительны к регистру!
Для определения первого значимого байта (А) Car Scanner пропускает часть байт в ответе от ЭБУ: байты заголовка, длины, указателя на ответ и режим (например для запроса в режиме 01 -> указать на ответ 41) и идентификатор запрашиваемого ПИДа.
Пример: на запрос 010C (обороты двигателя) поступит такой ответ: 7E804410C0C9C, где Car Scanner пропустит 7E804410C.
Соответственно оставшиеся данные 0C9C будут считаться значимыми.
Буква A будет означать 0C, буква B будет означать 9C

Вы можете использовать математические операторы: *, /, , +. Например: A+B
Для изменения порядка вычисления используйте круглые скобки ( и ), например: (A*256+B)/4
Для разделения десятичной и дробной части используйте точку («.»): например: A+13.54

Поддерживаемые битовые функции:
Битовое И: @&
Битовое ИЛИ: @^
Сдвиг влево: @<<
Сдвиг вправо: @>>
Примеры: A@<<16, C&7, etc.

Дополнительные фукции (аргументы функций всегда разделяются запятой «,«):
GetBit(A,N), где A — байт, N — номер бита в байте, от 0 до 7, возвращает бит N в указанном байте (0 или 1)
SIGNED(A), signed(A), Signed(A) — рассматривать байт как знаковый (-128 .. 127)
ShortSigned(A,B) — рассматривать 2 байта как 16-битное значение со знаком
And(A,B) — битовая операция И, тоже самое: A@&B
Shr(A,B) — битовая операция сдвиг вправо, тоже самое: A@>>B
Shl(A,B) — битовая операция сдвиг влево, тоже самое: A@<<B
MAX(A,B) — возвращает наибольшее из A и B
MIN(A,B) — возвращает наименьшее из A и B
abs(A) — возвращает значение по модулю, e.g. abs(-1)=1, abs(-123456)=123456, abs(123456)=123456
FLOAT32(A,B,C,D), float32(A,B,C,D) — из 4 данных байт возвращает число с плавающей точкой по стандарту IEEE 754.
FLOAT64(A,B,C,D,E,F,G,H), float64(A,B,C,D,E,F,G,H) — из 8 данных байт возвращает число с плавающей точкой по стандарту IEEE 754.
if(A,B,C) — логическое ЕСЛИ: если A=1, возвращает B, иначе возвращает C. Вы можете использовать «=» или «<» или «>» для сравнения в первом аргументе функции.
Пример: if(A>5;5;A).  Читать так: если А больше 5, вернуть  5, иначе вернуть A. При A=6 получим результат 5. При A=3 получим результат 3.
SetVar(key,value) — запись в память значения value. Car Scanner хранит общий для всех датчиков словарь типа ключ-значение, в котором можно хранить какие-то промежуточные или накопленные вычисления. Key — ключ, любое целочисленное значение, например 0, 1, 2, 3, 9999. Value — значение, которое надо записать, например 45.24. Возвращает значение value.
SetVarOnce(key,value) — запись в память значения value, только если в словаре еще нет значения с таким ключом. Возвращает значение value.
GetVar(key,default_value) — получить из общего словаря значение по ключу key, ранее записанное в словарь через функции SetVar или SetVarOnce. Если ключ в словаре отсутствует, то возвращается значение default_value. Пример: GetVar(123,789.244) — возвращает значение, сохраненное с ключом 123, но если такого ключа в словаре нет, то возвращает 789.244
Вы можете использовать значения других датчиков двумя способами:
1) PID(ID) или pid(ID) — получение значения датчика по ID, который вы можете увидеть в Настройки — Датчики. Пример: PID(5)
2) {имя}, где имя- точное полное имя датчика (чувствительно к регистру). Пример: {Температура топлива}

Вы можете задать команды, которые будут выполнены до отправки команды и после отправки команды (Команды начала и окончания диагностики). В этих полях следует указывать полные команды для ELM327, разделенные «;» или «,» или «\». Например: ATCRA7E8,ATFCSH7E0,ATFCSD300000

Датчики-действия.
Действия это дополнительные датчики, команда которых отправляется, когда вы на них нажмете. Ответ ЭБУ не декодируется.
Возможный сценарий использования: создание датчика-действия для отправки команды, которая запускает какой-либо процесс, например принудительную регенерацию сажевого фильтра.
Не забудьте, что вам все еще нужно знать заголовок и команду.

Название и Сокращенное наименование можно заполнять как угодно.
Поля Минимум и максимум можно просто игнорировать.