Quantex GmbH
DE RU EN EL
Ваш регион: Европа

GET_CONFIG / SET_CONFIG v4.04 v5.0

Параметры протоколов

Последнее изменение:

GET_CONFIG — Чтение параметров протокола

Возвращает текущие значения параметров протокола для указанного канала. Параметры могут быть установлены по умолчанию или изменены ранее через SET_CONFIG.

IoctlID 0x01
pInput SCONFIG_LIST* — список запрашиваемых параметров
pOutput NULL (результат записывается в pInput)

SET_CONFIG — Запись параметров протокола

Устанавливает значения параметров протокола для указанного канала. Параметры применяются немедленно и влияют на последующий обмен данными.

IoctlID 0x02
pInput SCONFIG_LIST* — список параметров для установки
pOutput NULL

Структуры данных

typedef struct {
    unsigned long Parameter;  // Идентификатор параметра
    unsigned long Value;      // Значение параметра
} SCONFIG;

typedef struct {
    unsigned long NumOfParams;  // Количество параметров в списке
    SCONFIG *ConfigPtr;         // Указатель на массив SCONFIG
} SCONFIG_LIST;

Возвращаемые коды ошибок

Код Описание Возможные причины и решения
STATUS_NOERROR Функция выполнена успешно
ERR_DEVICE_NOT_CONNECTED Нет соединения с адаптером
  • Адаптер выключен или вне зоны доступа
  • Решение: проверьте питание и подключение
ERR_INVALID_CHANNEL_ID Недействительный идентификатор канала
  • ChannelID не был получен через PassThruConnect
  • Решение: выполните PassThruConnect
ERR_NULL_PARAMETER Передан NULL вместо указателя
  • pInput равен NULL
  • Решение: передайте указатель на SCONFIG_LIST
ERR_NOT_SUPPORTED Параметр не поддерживается
  • Параметр недействителен для данного протокола
  • Решение: проверьте совместимость параметра с протоколом
ERR_INVALID_IOCTL_VALUE Недопустимое значение параметра
  • Значение выходит за допустимый диапазон
  • Решение: проверьте допустимые значения параметра
ERR_FAILED Неопределённая ошибка
  • Внутренняя ошибка
  • Решение: вызовите PassThruGetLastError()

Параметры протоколов

Общие параметры (все протоколы)

Параметр Значение Описание По умолчанию
LOOPBACK 0x03 Режим loopback: 0 — выкл, 1 — вкл 0
Полный список общих параметров см. в стандарте SAE J2534-1.

Параметры K-Line (ISO 9141 / ISO 14230)

Временные параметры задаются в миллисекундах.

Параметр Значение Описание По умолчанию
P1_MAX 0x07 Максимальное межбайтовое время от ЭБУ (мс) 20
P3_MIN 0x0A Минимальное время между концом ответа и новым запросом (мс) 55
P4_MIN 0x0C Минимальное межбайтовое время от тестера (мс) 5
Полный список параметров K-Line см. в стандарте SAE J2534-1.

Параметры CAN

Параметр Значение Описание По умолчанию
BIT_SAMPLE_POINT 0x17 Точка выборки бита в % (60-90) 80
SYNC_JUMP_WIDTH 0x18 Ширина скачка синхронизации в % (1-25) 15
HS_CAN_TERMINATIONJ2534-2 0x805E Терминация CAN: 0 — выкл, 3 — вкл 0

Параметры ISO 15765 (CAN UDS)

Параметр Значение Описание По умолчанию
ISO15765_BS 0x1E Block Size (BS) для приёма сегментированных сообщений 0 (без ограничений)
ISO15765_STMIN 0x1F STmin для приёма — минимальное время между CF (мс) 0
N_CR_MAX v5.0 0x805F Максимальное время ожидания Consecutive Frame (мс) 1000
CAN_MIXED_FORMAT J2534-2 0x8000 Смешанный формат (см. подробнее) 0
Полный список параметров ISO 15765 см. в стандарте SAE J2534-1.

CAN_MIXED_FORMAT — Смешанный формат J2534-2

Параметр CAN_MIXED_FORMAT применяется только к каналам ISO 15765. Позволяет принимать и передавать как форматированные сообщения ISO 15765, так и неформатированные CAN-кадры на одном канале.

Значение Константа Описание
0 CAN_MIXED_FORMAT_OFF Все сообщения обрабатываются как ISO 15765 (по умолчанию)
1 CAN_MIXED_FORMAT_ON Сообщения обрабатываются как ISO 15765 или неформатированные CAN-кадры
2 CAN_MIXED_FORMAT_ALL_FRAMES Сообщения обрабатываются как ISO 15765, неформатированные CAN-кадры или оба типа
Важно: При изменении этого параметра:
При использовании смешанного формата:

Параметры CAN FD J2534-2

Параметр Значение Описание По умолчанию
FD_CAN_DATA_PHASE_RATE 0x805C Скорость передачи данных в фазе данных CAN FD (бит/с) 0 (не задано)
Полный список параметров CAN FD см. в стандарте SAE J2534-2 rev.2020-12, страница 87, таблица 90.

Параметры SW-CAN (Single-Wire CAN)

Параметр Значение Описание По умолчанию
SW_CAN_HS_DATA_RATE 0x8010 Скорость High-Speed режима (бит/с) 83333
Полный список параметров SW-CAN см. в стандарте SAE J2534-2 rev.2020-12, страница 29, таблица 9.

J1962_PINS — Коммутация контактов OBD-II

Параметр J1962_PINS (0x8001) позволяет подключать сигнальные линии к различным контактам разъёма OBD-II. Значение задаётся как 16-битное число: старший байт — Primary Pin (PP), младший байт — Secondary Pin (SS).

Primary Pin используется для K-Line, CAN-H, J1850+. Secondary Pin — для L-Line, CAN-L, J1850-.

ScanDoc Compact

Схема коммутации J1962 — ScanDoc Compact
Константа Значение Контакт
PP_1 / SS_1 0x01 Pin 1
PP_2 / SS_2 0x02 Pin 2
PP_3 / SS_3 0x03 Pin 3
PP_6 / SS_6 0x06 Pin 6 (CAN-H)
PP_7 / SS_7 0x07 Pin 7 (K-Line)
PP_11 / SS_11 0x0B Pin 11
PP_12 / SS_12 0x0C Pin 12
PP_13 / SS_13 0x0D Pin 13
PP_14 / SS_14 0x0E Pin 14 (CAN-L)
PP_15 / SS_15 0x0F Pin 15 (L-Line)

Параметры TP 2.0 (VAG) J2534-2

Протокол TP 2.0 используется в автомобилях VAG (Volkswagen, Audi, Skoda, Seat) для диагностики.

Для TP 2.0 также поддерживаются параметры DATA_RATE, LOOPBACK, BIT_SAMPLE_POINT, SYNC_JUMP_WIDTH и J1962_PINS. Значения по умолчанию: LOOPBACK = 0, BIT_SAMPLE_POINT = 80%, SYNC_JUMP_WIDTH = 15%.
Параметр Значение Описание По умолчанию
TP2_0_T_BR_INT 0x8044 Broadcast interval — интервал между 5 сообщениями одной broadcast-передачи (мс) 20
TP2_0_T_E 0x8045 Максимальное время ожидания Channel Acknowledge или Connection Acknowledge (мс) 100
TP2_0_MNTC 0x8046 Количество повторных попыток для сообщений управления соединением 10
Полный список параметров TP 2.0 см. в стандарте SAE J2534-2 rev.2020-12, страница 78, таблица 77.

Параметры UART Echo Byte J2534-2

Протокол UART Echo Byte используется для диагностики старых автомобилей (SAE J2809, SAE J2818). Все временные параметры задаются в миллисекундах.

Параметр Значение Описание SAE J2809 SAE J2818
UEB_T0_MIN 0x8028 Минимальное время простоя перед передачей адресного байта t0 T_R0
UEB_T1_MAX 0x8029 Максимальное время между стимуляцией и началом синхро-байта t1 t_r1
UEB_T2_MAX 0x802A Максимальное время между синхро-байтом и KeyByte 1 t2 t_r2
Полный список параметров UART Echo Byte см. в стандарте SAE J2534-2 rev.2020-12, страница 46, таблица 36.

Примеры

GET_CONFIG — чтение параметров

Пример на C/C++

#include "j2534_dll.hpp"

unsigned long ChannelID;  // Получен от PassThruConnect
SCONFIG Config[2];
SCONFIG_LIST ConfigList;
long ret;

// Запрашиваем DATA_RATE и ISO15765_STMIN
Config[0].Parameter = DATA_RATE;
Config[0].Value = 0;
Config[1].Parameter = ISO15765_STMIN;
Config[1].Value = 0;

ConfigList.NumOfParams = 2;
ConfigList.ConfigPtr = Config;

ret = PassThruIoctl(ChannelID, GET_CONFIG, &ConfigList, NULL);
if (ret == STATUS_NOERROR)
{
    printf("DATA_RATE: %lu bps\n", Config[0].Value);
    printf("ISO15765_STMIN: %lu ms\n", Config[1].Value);
}

Пример на Kotlin (Android)

// channelID получен от ptConnect
val params = listOf(
    PtConfig(parameter = DATA_RATE, value = 0u),
    PtConfig(parameter = ISO15765_STMIN, value = 0u)
)

val result = j2534.ptIoctl(channelID, GET_CONFIG, params.size, params.toByteArray())
if (result.status == STATUS_NOERROR) {
    val resultParams = result.toConfigList()
    resultParams.forEach { config ->
        Log.i("J2534", "Параметр ${config.parameter}: ${config.value}")
    }
}

Пример на Python

from ctypes import *

config = (SCONFIG * 2)()
config[0].Parameter = DATA_RATE
config[1].Parameter = ISO15765_STMIN

config_list = SCONFIG_LIST()
config_list.NumOfParams = 2
config_list.ConfigPtr = config

ret = j2534.PassThruIoctl(channel_id, GET_CONFIG, byref(config_list), None)
if ret == 0:
    print(f"DATA_RATE: {config[0].Value} bps")
    print(f"ISO15765_STMIN: {config[1].Value} ms")

Пример на C#

var configs = new SCONFIG[2];
configs[0].Parameter = DATA_RATE;
configs[1].Parameter = ISO15765_STMIN;

var configList = new SCONFIG_LIST {
    NumOfParams = 2,
    ConfigPtr = configs
};

int ret = J2534.PassThruIoctl(channelId, GET_CONFIG, ref configList, IntPtr.Zero);
if (ret == 0)
{
    Console.WriteLine($"DATA_RATE: {configs[0].Value} bps");
    Console.WriteLine($"ISO15765_STMIN: {configs[1].Value} ms");
}

SET_CONFIG — установка параметров

Пример на C/C++ — настройка ISO 15765

#include "j2534_dll.hpp"

unsigned long ChannelID;  // Получен от PassThruConnect для ISO15765
SCONFIG Config[3];
SCONFIG_LIST ConfigList;
long ret;

// Устанавливаем параметры ISO 15765
Config[0].Parameter = ISO15765_STMIN;
Config[0].Value = 0;  // Без задержки между CF
Config[1].Parameter = ISO15765_BS;
Config[1].Value = 0;  // Без ограничения блока
Config[2].Parameter = ISO15765_PAD_VALUE;
Config[2].Value = 0xCC;  // Заполнение 0xCC

ConfigList.NumOfParams = 3;
ConfigList.ConfigPtr = Config;

ret = PassThruIoctl(ChannelID, SET_CONFIG, &ConfigList, NULL);
if (ret != STATUS_NOERROR)
{
    char error[256];
    PassThruGetLastError(error);
    printf("Ошибка SET_CONFIG: %s\n", error);
}

Пример на C/C++ — настройка J1962_PINS

#include "j2534_dll.hpp"

unsigned long ChannelID;
SCONFIG Config[1];
SCONFIG_LIST ConfigList;
long ret;

// Подключаем K-Line к Pin 3, L-Line к Pin 11
Config[0].Parameter = J1962_PINS;
Config[0].Value = PP_3 | SS_11;  // 0x030B

ConfigList.NumOfParams = 1;
ConfigList.ConfigPtr = Config;

ret = PassThruIoctl(ChannelID, SET_CONFIG, &ConfigList, NULL);
if (ret == STATUS_NOERROR)
{
    printf("K-Line подключён к Pin 3, L-Line к Pin 11\n");
}

Пример на Kotlin (Android)

// channelID получен от ptConnect
val params = listOf(
    PtConfig(parameter = ISO15765_STMIN, value = 0u),
    PtConfig(parameter = ISO15765_BS, value = 0u),
    PtConfig(parameter = ISO15765_PAD_VALUE, value = 0xCCu)
)

val result = j2534.ptIoctl(channelID, SET_CONFIG, params.size, params.toByteArray())
if (result.status == STATUS_NOERROR) {
    Log.i("J2534", "Параметры ISO 15765 установлены")
} else {
    Log.e("J2534", "Ошибка SET_CONFIG: ${result.status}")
}

Пример на Python

from ctypes import *

config = (SCONFIG * 2)()
config[0].Parameter = DATA_RATE
config[0].Value = 500000  # 500 kbps
config[1].Parameter = CAN_MIXED_FORMAT
config[1].Value = 1  # Включить смешанный формат

config_list = SCONFIG_LIST()
config_list.NumOfParams = 2
config_list.ConfigPtr = config

ret = j2534.PassThruIoctl(channel_id, SET_CONFIG, byref(config_list), None)
if ret == 0:
    print("Параметры CAN установлены")

Пример на C#

var configs = new SCONFIG[2];
configs[0].Parameter = DATA_RATE;
configs[0].Value = 500000;  // 500 kbps
configs[1].Parameter = HS_CAN_TERMINATION;
configs[1].Value = 3;  // Включить терминацию

var configList = new SCONFIG_LIST {
    NumOfParams = 2,
    ConfigPtr = configs
};

int ret = J2534.PassThruIoctl(channelId, SET_CONFIG, ref configList, IntPtr.Zero);
if (ret == 0)
{
    Console.WriteLine("Параметры установлены");
}