Quantex GmbH
Tu región: Europa

GET_CONFIG / SET_CONFIG v4.04 v5.0

Parámetros de protocolos

Última modificación:

GET_CONFIG — Lectura de parámetros del protocolo

Devuelve los valores actuales de los parámetros del protocolo para el canal indicado. Los parámetros pueden estar establecidos por defecto o haber sido modificados previamente mediante SET_CONFIG.

IoctlID 0x01
pInput SCONFIG_LIST* — lista de parámetros solicitados
pOutput NULL (el resultado se escribe en pInput)

SET_CONFIG — Escritura de parámetros del protocolo

Establece los valores de los parámetros del protocolo para el canal indicado. Los parámetros se aplican de inmediato y afectan al intercambio de datos posterior.

IoctlID 0x02
pInput SCONFIG_LIST* — lista de parámetros a establecer
pOutput NULL

Estructuras de datos

typedef struct {
    unsigned long Parameter;  // Identificador del parámetro
    unsigned long Value;      // Valor del parámetro
} SCONFIG;

typedef struct {
    unsigned long NumOfParams;  // Número de parámetros en la lista
    SCONFIG *ConfigPtr;         // Puntero al arreglo SCONFIG
} SCONFIG_LIST;

Códigos de error devueltos

Código Descripción Posibles causas y soluciones
STATUS_NOERROR La función se ejecutó correctamente
ERR_DEVICE_NOT_CONNECTED No hay conexión con el adaptador
  • El adaptador está apagado o fuera de alcance
  • Solución: compruebe la alimentación y la conexión
ERR_INVALID_CHANNEL_ID Identificador de canal no válido
  • El ChannelID no se obtuvo mediante PassThruConnect
  • Solución: ejecute PassThruConnect
ERR_NULL_PARAMETER Se pasó NULL en lugar de un puntero
  • pInput es igual a NULL
  • Solución: pase un puntero a SCONFIG_LIST
ERR_NOT_SUPPORTED El parámetro no es compatible
  • El parámetro no es válido para este protocolo
  • Solución: compruebe la compatibilidad del parámetro con el protocolo
ERR_INVALID_IOCTL_VALUE Valor de parámetro no permitido
  • El valor está fuera del rango permitido
  • Solución: compruebe los valores permitidos del parámetro
ERR_FAILED Error indefinido
  • Error interno
  • Solución: llame a PassThruGetLastError()

Parámetros de protocolos

Parámetros comunes (todos los protocolos)

Parámetro Valor Descripción Por defecto
LOOPBACK 0x03 Modo loopback: 0 — desactivado, 1 — activado 0
Consulte la lista completa de parámetros comunes en la norma SAE J2534-1.

Parámetros K-Line (ISO 9141 / ISO 14230)

Los parámetros de tiempo se indican en milisegundos.

Parámetro Valor Descripción Por defecto
P1_MAX 0x07 Tiempo máximo entre bytes desde la ECU (ms) 20
P3_MIN 0x0A Tiempo mínimo entre el final de la respuesta y una nueva solicitud (ms) 55
P4_MIN 0x0C Tiempo mínimo entre bytes desde el tester (ms) 5
Consulte la lista completa de parámetros K-Line en la norma SAE J2534-1.

Parámetros CAN

Parámetro Valor Descripción Por defecto
BIT_SAMPLE_POINT 0x17 Punto de muestreo del bit en % (60-90) 80
SYNC_JUMP_WIDTH 0x18 Ancho del salto de sincronización en % (1-25) 15
HS_CAN_TERMINATIONJ2534-2 0x805E Terminación CAN: 0 — desactivada, 3 — activada 0

Parámetros ISO 15765 (CAN UDS)

Parámetro Valor Descripción Por defecto
ISO15765_BS 0x1E Block Size (BS) para la recepción de mensajes segmentados 0 (sin límite)
ISO15765_STMIN 0x1F STmin para la recepción — tiempo mínimo entre CF (ms) 0
N_CR_MAX v5.0 0x805F Tiempo máximo de espera del Consecutive Frame (ms) 1000
CAN_MIXED_FORMAT J2534-2 0x8000 Formato mixto (ver más) 0
Consulte la lista completa de parámetros ISO 15765 en la norma SAE J2534-1.

CAN_MIXED_FORMAT — Formato mixto J2534-2

El parámetro CAN_MIXED_FORMAT se aplica únicamente a los canales ISO 15765. Permite recibir y transmitir tanto mensajes formateados ISO 15765 como tramas CAN sin formato en un mismo canal.

Valor Constante Descripción
0 CAN_MIXED_FORMAT_OFF Todos los mensajes se procesan como ISO 15765 (por defecto)
1 CAN_MIXED_FORMAT_ON Los mensajes se procesan como ISO 15765 o tramas CAN sin formato
2 CAN_MIXED_FORMAT_ALL_FRAMES Los mensajes se procesan como ISO 15765, tramas CAN sin formato o ambos tipos
Importante: Al cambiar este parámetro:
Al utilizar el formato mixto:

Parámetros CAN FD J2534-2

Parámetro Valor Descripción Por defecto
FD_CAN_DATA_PHASE_RATE 0x805C Velocidad de transmisión de datos en la fase de datos de CAN FD (bit/s) 0 (no establecido)
Consulte la lista completa de parámetros CAN FD en la norma SAE J2534-2 rev.2020-12, página 87, tabla 90.

Parámetros SW-CAN (Single-Wire CAN)

Parámetro Valor Descripción Por defecto
SW_CAN_HS_DATA_RATE 0x8010 Velocidad del modo High-Speed (bit/s) 83333
Consulte la lista completa de parámetros SW-CAN en la norma SAE J2534-2 rev.2020-12, página 29, tabla 9.

J1962_PINS — Conmutación de contactos OBD-II

El parámetro J1962_PINS (0x8001) permite conectar las líneas de señal a distintos contactos del conector OBD-II. El valor se indica como un número de 16 bits: el byte alto — Primary Pin (PP), el byte bajo — Secondary Pin (SS).

El Primary Pin se utiliza para K-Line, CAN-H, J1850+. El Secondary Pin — para L-Line, CAN-L, J1850-.

Compact

Esquema de conmutación J1962 — Compact
Constante Valor Contacto
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)

Parámetros TP 2.0 (VAG) J2534-2

El protocolo TP 2.0 se utiliza en los vehículos VAG (Volkswagen, Audi, Skoda, Seat) para el diagnóstico.

Para TP 2.0 también se admiten los parámetros DATA_RATE, LOOPBACK, BIT_SAMPLE_POINT, SYNC_JUMP_WIDTH y J1962_PINS. Valores por defecto: LOOPBACK = 0, BIT_SAMPLE_POINT = 80%, SYNC_JUMP_WIDTH = 15%.
Parámetro Valor Descripción Por defecto
TP2_0_T_BR_INT 0x8044 Broadcast interval — intervalo entre los 5 mensajes de una misma transmisión broadcast (ms) 20
TP2_0_T_E 0x8045 Tiempo máximo de espera de Channel Acknowledge o Connection Acknowledge (ms) 100
TP2_0_MNTC 0x8046 Número de reintentos para los mensajes de gestión de la conexión 10
Consulte la lista completa de parámetros TP 2.0 en la norma SAE J2534-2 rev.2020-12, página 78, tabla 77.

Parámetros UART Echo Byte J2534-2

El protocolo UART Echo Byte se utiliza para el diagnóstico de vehículos antiguos (SAE J2809, SAE J2818). Todos los parámetros de tiempo se indican en milisegundos.

Parámetro Valor Descripción SAE J2809 SAE J2818
UEB_T0_MIN 0x8028 Tiempo mínimo de inactividad antes de enviar el byte de dirección t0 T_R0
UEB_T1_MAX 0x8029 Tiempo máximo entre la estimulación y el inicio del byte de sincronización t1 t_r1
UEB_T2_MAX 0x802A Tiempo máximo entre el byte de sincronización y KeyByte 1 t2 t_r2
Consulte la lista completa de parámetros UART Echo Byte en la norma SAE J2534-2 rev.2020-12, página 46, tabla 36.

Ejemplos

GET_CONFIG — lectura de parámetros

Ejemplo en C/C++

#include "j2534_dll.hpp"

unsigned long ChannelID;  // Obtenido de PassThruConnect
SCONFIG Config[2];
SCONFIG_LIST ConfigList;
long ret;

// Solicitamos DATA_RATE e 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);
}

Ejemplo en Kotlin (Android)

// channelID obtenido de 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", "Parámetro ${config.parameter}: ${config.value}")
    }
}

Ejemplo en 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")

Ejemplo en 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 — establecimiento de parámetros

Ejemplo en C/C++ — configuración de ISO 15765

#include "j2534_dll.hpp"

unsigned long ChannelID;  // Obtenido de PassThruConnect para ISO15765
SCONFIG Config[3];
SCONFIG_LIST ConfigList;
long ret;

// Establecemos los parámetros ISO 15765
Config[0].Parameter = ISO15765_STMIN;
Config[0].Value = 0;  // Sin retardo entre CF
Config[1].Parameter = ISO15765_BS;
Config[1].Value = 0;  // Sin límite de bloque
Config[2].Parameter = ISO15765_PAD_VALUE;
Config[2].Value = 0xCC;  // Relleno 0xCC

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

ret = PassThruIoctl(ChannelID, SET_CONFIG, &ConfigList, NULL);
if (ret != STATUS_NOERROR)
{
    char error[256];
    PassThruGetLastError(error);
    printf("Error de SET_CONFIG: %s\n", error);
}

Ejemplo en C/C++ — configuración de J1962_PINS

#include "j2534_dll.hpp"

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

// Conectamos K-Line al Pin 3, L-Line al 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 conectado al Pin 3, L-Line al Pin 11\n");
}

Ejemplo en Kotlin (Android)

// channelID obtenido de 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", "Parámetros ISO 15765 establecidos")
} else {
    Log.e("J2534", "Error de SET_CONFIG: ${result.status}")
}

Ejemplo en 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  # Activar el formato mixto

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("Parámetros CAN establecidos")

Ejemplo en 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;  // Activar la terminación

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("Parámetros establecidos");
}