Quantex GmbH
Twój region: Europa

GET_CONFIG / SET_CONFIG v4.04 v5.0

Parametry protokołów

Ostatnia zmiana:

GET_CONFIG — Odczyt parametrów protokołu

Zwraca bieżące wartości parametrów protokołu dla wskazanego kanału. Parametry mogą być ustawione domyślnie lub zmienione wcześniej przez SET_CONFIG.

IoctlID 0x01
pInput SCONFIG_LIST* — lista żądanych parametrów
pOutput NULL (wynik zapisywany jest w pInput)

SET_CONFIG — Zapis parametrów protokołu

Ustawia wartości parametrów protokołu dla wskazanego kanału. Parametry są stosowane natychmiast i wpływają na późniejszą wymianę danych.

IoctlID 0x02
pInput SCONFIG_LIST* — lista parametrów do ustawienia
pOutput NULL

Struktury danych

typedef struct {
    unsigned long Parameter;  // Identyfikator parametru
    unsigned long Value;      // Wartość parametru
} SCONFIG;

typedef struct {
    unsigned long NumOfParams;  // Liczba parametrów na liście
    SCONFIG *ConfigPtr;         // Wskaźnik na tablicę SCONFIG
} SCONFIG_LIST;

Zwracane kody błędów

Kod Opis Możliwe przyczyny i rozwiązania
STATUS_NOERROR Funkcja wykonana pomyślnie
ERR_DEVICE_NOT_CONNECTED Brak połączenia z adapterem
  • Adapter jest wyłączony lub poza zasięgiem
  • Rozwiązanie: sprawdź zasilanie i podłączenie
ERR_INVALID_CHANNEL_ID Nieprawidłowy identyfikator kanału
  • ChannelID nie został uzyskany przez PassThruConnect
  • Rozwiązanie: wykonaj PassThruConnect
ERR_NULL_PARAMETER Przekazano NULL zamiast wskaźnika
  • pInput jest równy NULL
  • Rozwiązanie: przekaż wskaźnik na SCONFIG_LIST
ERR_NOT_SUPPORTED Parametr nie jest obsługiwany
  • Parametr jest nieprawidłowy dla danego protokołu
  • Rozwiązanie: sprawdź zgodność parametru z protokołem
ERR_INVALID_IOCTL_VALUE Niedozwolona wartość parametru
  • Wartość wykracza poza dopuszczalny zakres
  • Rozwiązanie: sprawdź dopuszczalne wartości parametru
ERR_FAILED Nieokreślony błąd
  • Błąd wewnętrzny
  • Rozwiązanie: wywołaj PassThruGetLastError()

Parametry protokołów

Parametry wspólne (wszystkie protokoły)

Parametr Wartość Opis Domyślnie
LOOPBACK 0x03 Tryb loopback: 0 — wył., 1 — wł. 0
Pełną listę parametrów wspólnych zobacz w normie SAE J2534-1.

Parametry K-Line (ISO 9141 / ISO 14230)

Parametry czasowe podawane są w milisekundach.

Parametr Wartość Opis Domyślnie
P1_MAX 0x07 Maksymalny czas międzybajtowy z ECU (ms) 20
P3_MIN 0x0A Minimalny czas między końcem odpowiedzi a nowym żądaniem (ms) 55
P4_MIN 0x0C Minimalny czas międzybajtowy z testera (ms) 5
Pełną listę parametrów K-Line zobacz w normie SAE J2534-1.

Parametry CAN

Parametr Wartość Opis Domyślnie
BIT_SAMPLE_POINT 0x17 Punkt próbkowania bitu w % (60-90) 80
SYNC_JUMP_WIDTH 0x18 Szerokość skoku synchronizacji w % (1-25) 15
HS_CAN_TERMINATIONJ2534-2 0x805E Terminacja CAN: 0 — wył., 3 — wł. 0

Parametry ISO 15765 (CAN UDS)

Parametr Wartość Opis Domyślnie
ISO15765_BS 0x1E Block Size (BS) dla odbioru segmentowanych komunikatów 0 (bez ograniczeń)
ISO15765_STMIN 0x1F STmin dla odbioru — minimalny czas między CF (ms) 0
N_CR_MAX v5.0 0x805F Maksymalny czas oczekiwania na Consecutive Frame (ms) 1000
CAN_MIXED_FORMAT J2534-2 0x8000 Format mieszany (zobacz więcej) 0
Pełną listę parametrów ISO 15765 zobacz w normie SAE J2534-1.

CAN_MIXED_FORMAT — Format mieszany J2534-2

Parametr CAN_MIXED_FORMAT ma zastosowanie wyłącznie do kanałów ISO 15765. Pozwala odbierać i przesyłać zarówno sformatowane komunikaty ISO 15765, jak i niesformatowane ramki CAN na jednym kanale.

Wartość Stała Opis
0 CAN_MIXED_FORMAT_OFF Wszystkie komunikaty są przetwarzane jako ISO 15765 (domyślnie)
1 CAN_MIXED_FORMAT_ON Komunikaty są przetwarzane jako ISO 15765 lub niesformatowane ramki CAN
2 CAN_MIXED_FORMAT_ALL_FRAMES Komunikaty są przetwarzane jako ISO 15765, niesformatowane ramki CAN lub oba typy
Ważne: Przy zmianie tego parametru:
Przy korzystaniu z formatu mieszanego:

Parametry CAN FD J2534-2

Parametr Wartość Opis Domyślnie
FD_CAN_DATA_PHASE_RATE 0x805C Prędkość transmisji danych w fazie danych CAN FD (bit/s) 0 (nie ustawiono)
Pełną listę parametrów CAN FD zobacz w normie SAE J2534-2 rev.2020-12, strona 87, tabela 90.

Parametry SW-CAN (Single-Wire CAN)

Parametr Wartość Opis Domyślnie
SW_CAN_HS_DATA_RATE 0x8010 Prędkość trybu High-Speed (bit/s) 83333
Pełną listę parametrów SW-CAN zobacz w normie SAE J2534-2 rev.2020-12, strona 29, tabela 9.

J1962_PINS — Przełączanie styków OBD-II

Parametr J1962_PINS (0x8001) pozwala podłączać linie sygnałowe do różnych styków złącza OBD-II. Wartość podawana jest jako liczba 16-bitowa: starszy bajt — Primary Pin (PP), młodszy bajt — Secondary Pin (SS).

Primary Pin używany jest dla K-Line, CAN-H, J1850+. Secondary Pin — dla L-Line, CAN-L, J1850-.

Compact

Schemat przełączania J1962 — Compact
Stała Wartość Styk
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)

Parametry TP 2.0 (VAG) J2534-2

Protokół TP 2.0 jest używany w samochodach VAG (Volkswagen, Audi, Skoda, Seat) do diagnostyki.

Dla TP 2.0 obsługiwane są również parametry DATA_RATE, LOOPBACK, BIT_SAMPLE_POINT, SYNC_JUMP_WIDTH i J1962_PINS. Wartości domyślne: LOOPBACK = 0, BIT_SAMPLE_POINT = 80%, SYNC_JUMP_WIDTH = 15%.
Parametr Wartość Opis Domyślnie
TP2_0_T_BR_INT 0x8044 Broadcast interval — interwał między 5 komunikatami jednej transmisji broadcast (ms) 20
TP2_0_T_E 0x8045 Maksymalny czas oczekiwania na Channel Acknowledge lub Connection Acknowledge (ms) 100
TP2_0_MNTC 0x8046 Liczba ponownych prób dla komunikatów zarządzania połączeniem 10
Pełną listę parametrów TP 2.0 zobacz w normie SAE J2534-2 rev.2020-12, strona 78, tabela 77.

Parametry UART Echo Byte J2534-2

Protokół UART Echo Byte jest używany do diagnostyki starszych samochodów (SAE J2809, SAE J2818). Wszystkie parametry czasowe podawane są w milisekundach.

Parametr Wartość Opis SAE J2809 SAE J2818
UEB_T0_MIN 0x8028 Minimalny czas bezczynności przed wysłaniem bajtu adresowego t0 T_R0
UEB_T1_MAX 0x8029 Maksymalny czas między stymulacją a początkiem bajtu synchronizacji t1 t_r1
UEB_T2_MAX 0x802A Maksymalny czas między bajtem synchronizacji a KeyByte 1 t2 t_r2
Pełną listę parametrów UART Echo Byte zobacz w normie SAE J2534-2 rev.2020-12, strona 46, tabela 36.

Przykłady

GET_CONFIG — odczyt parametrów

Przykład w C/C++

#include "j2534_dll.hpp"

unsigned long ChannelID;  // Uzyskany z PassThruConnect
SCONFIG Config[2];
SCONFIG_LIST ConfigList;
long ret;

// Żądamy DATA_RATE i 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);
}

Przykład w Kotlin (Android)

// channelID uzyskany z 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", "Parametr ${config.parameter}: ${config.value}")
    }
}

Przykład w 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")

Przykład w 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 — ustawianie parametrów

Przykład w C/C++ — konfiguracja ISO 15765

#include "j2534_dll.hpp"

unsigned long ChannelID;  // Uzyskany z PassThruConnect dla ISO15765
SCONFIG Config[3];
SCONFIG_LIST ConfigList;
long ret;

// Ustawiamy parametry ISO 15765
Config[0].Parameter = ISO15765_STMIN;
Config[0].Value = 0;  // Bez opóźnienia między CF
Config[1].Parameter = ISO15765_BS;
Config[1].Value = 0;  // Bez ograniczenia bloku
Config[2].Parameter = ISO15765_PAD_VALUE;
Config[2].Value = 0xCC;  // Wypełnienie 0xCC

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

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

Przykład w C/C++ — konfiguracja J1962_PINS

#include "j2534_dll.hpp"

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

// Podłączamy K-Line do Pin 3, L-Line do 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 podłączony do Pin 3, L-Line do Pin 11\n");
}

Przykład w Kotlin (Android)

// channelID uzyskany z 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", "Parametry ISO 15765 ustawione")
} else {
    Log.e("J2534", "Błąd SET_CONFIG: ${result.status}")
}

Przykład w 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  # Włącz format mieszany

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("Parametry CAN ustawione")

Przykład w 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;  // Włącz terminację

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("Parametry ustawione");
}