Gibt die aktuellen Werte der Protokollparameter für den angegebenen Kanal zurück. Die Parameter können auf die Standardwerte gesetzt oder zuvor über SET_CONFIG geändert worden sein.
IoctlID
0x01
pInput
SCONFIG_LIST* — Liste der angeforderten Parameter
pOutput
NULL (das Ergebnis wird in pInput geschrieben)
SET_CONFIG — Schreiben der Protokollparameter
Setzt die Werte der Protokollparameter für den angegebenen Kanal. Die Parameter werden sofort wirksam und beeinflussen den nachfolgenden Datenaustausch.
IoctlID
0x02
pInput
SCONFIG_LIST* — Liste der zu setzenden Parameter
pOutput
NULL
Datenstrukturen
typedef struct {
unsigned long Parameter; // Parameter-ID
unsigned long Value; // Parameterwert
} SCONFIG;
typedef struct {
unsigned long NumOfParams; // Anzahl der Parameter in der Liste
SCONFIG *ConfigPtr; // Zeiger auf das SCONFIG-Array
} SCONFIG_LIST;
Rückgabe-Fehlercodes
Code
Beschreibung
Mögliche Ursachen und Lösungen
STATUS_NOERROR
Funktion erfolgreich ausgeführt
—
ERR_DEVICE_NOT_CONNECTED
Keine Verbindung zum Adapter
Adapter ausgeschaltet oder außerhalb der Reichweite
Lösung: Prüfen Sie die Stromversorgung und die Verbindung
ERR_INVALID_CHANNEL_ID
Ungültige Kanal-ID
ChannelID wurde nicht über PassThruConnect bezogen
Lösung: Führen Sie PassThruConnect aus
ERR_NULL_PARAMETER
NULL anstelle eines Zeigers übergeben
pInput ist NULL
Lösung: Übergeben Sie einen Zeiger auf SCONFIG_LIST
ERR_NOT_SUPPORTED
Parameter wird nicht unterstützt
Parameter ist für dieses Protokoll nicht gültig
Lösung: Prüfen Sie die Kompatibilität des Parameters mit dem Protokoll
ERR_INVALID_IOCTL_VALUE
Unzulässiger Parameterwert
Der Wert liegt außerhalb des zulässigen Bereichs
Lösung: Prüfen Sie die zulässigen Werte des Parameters
ERR_FAILED
Unbestimmter Fehler
Interner Fehler
Lösung: Rufen Sie PassThruGetLastError() auf
Protokollparameter
Allgemeine Parameter (alle Protokolle)
Parameter
Wert
Beschreibung
Standard
LOOPBACK
0x03
Loopback-Modus: 0 — aus, 1 — ein
0
Die vollständige Liste der allgemeinen Parameter finden Sie im Standard SAE J2534-1.
K-Line-Parameter (ISO 9141 / ISO 14230)
Zeitparameter werden in Millisekunden angegeben.
Parameter
Wert
Beschreibung
Standard
P1_MAX
0x07
Maximale Inter-Byte-Zeit vom Steuergerät (ms)
20
P3_MIN
0x0A
Minimale Zeit zwischen Ende der Antwort und neuer Anfrage (ms)
55
P4_MIN
0x0C
Minimale Inter-Byte-Zeit vom Tester (ms)
5
Die vollständige Liste der K-Line-Parameter finden Sie im Standard SAE J2534-1.
CAN-Parameter
Parameter
Wert
Beschreibung
Standard
BIT_SAMPLE_POINT
0x17
Bit-Abtastpunkt in % (60-90)
80
SYNC_JUMP_WIDTH
0x18
Synchronisations-Sprungbreite in % (1-25)
15
HS_CAN_TERMINATIONJ2534-2
0x805E
CAN-Terminierung: 0 — aus, 3 — ein
0
ISO 15765-Parameter (CAN UDS)
Parameter
Wert
Beschreibung
Standard
ISO15765_BS
0x1E
Block Size (BS) für den Empfang segmentierter Nachrichten
0 (keine Begrenzung)
ISO15765_STMIN
0x1F
STmin für den Empfang — minimale Zeit zwischen CF (ms)
Die vollständige Liste der ISO 15765-Parameter finden Sie im Standard SAE J2534-1.
CAN_MIXED_FORMAT — Gemischtes Format J2534-2
Der Parameter CAN_MIXED_FORMAT gilt nur für ISO 15765-Kanäle. Er ermöglicht den Empfang und die Übertragung sowohl formatierter ISO 15765-Nachrichten als auch unformatierter CAN-Frames auf demselben Kanal.
Wert
Konstante
Beschreibung
0
CAN_MIXED_FORMAT_OFF
Alle Nachrichten werden als ISO 15765 verarbeitet (Standard)
1
CAN_MIXED_FORMAT_ON
Nachrichten werden als ISO 15765 oder als unformatierte CAN-Frames verarbeitet
2
CAN_MIXED_FORMAT_ALL_FRAMES
Nachrichten werden als ISO 15765, als unformatierte CAN-Frames oder als beides verarbeitet
Wichtig: Beim Ändern dieses Parameters:
Empfangs- und Sendewarteschlangen werden geleert
Alle PASS_FILTER und BLOCK_FILTER werden entfernt
Periodische Nachrichten mit ProtocolID für unformatiertes CAN werden entfernt
Bei Verwendung des gemischten Formats:
FLOW_CONTROL_FILTER — gilt für ISO 15765-Nachrichten
PASS_FILTER / BLOCK_FILTER — gilt für unformatierte CAN-Frames
CAN FD-Parameter J2534-2
Parameter
Wert
Beschreibung
Standard
FD_CAN_DATA_PHASE_RATE
0x805C
Datenübertragungsrate in der CAN FD-Datenphase (Bit/s)
0 (nicht gesetzt)
Die vollständige Liste der CAN FD-Parameter finden Sie im Standard SAE J2534-2 rev.2020-12, Seite 87, Tabelle 90.
SW-CAN-Parameter (Single-Wire CAN)
Parameter
Wert
Beschreibung
Standard
SW_CAN_HS_DATA_RATE
0x8010
Geschwindigkeit des High-Speed-Modus (Bit/s)
83333
Die vollständige Liste der SW-CAN-Parameter finden Sie im Standard SAE J2534-2 rev.2020-12, Seite 29, Tabelle 9.
J1962_PINS — Umschaltung der OBD-II-Kontakte
Der Parameter J1962_PINS (0x8001) ermöglicht es, Signalleitungen an verschiedene Kontakte des OBD-II-Steckers anzuschließen. Der Wert wird als 16-Bit-Zahl angegeben: höherwertiges Byte — Primary Pin (PP), niederwertiges Byte — Secondary Pin (SS).
Primary Pin wird für K-Line, CAN-H, J1850+ verwendet. Secondary Pin — für L-Line, CAN-L, J1850-.
ScanDoc Compact
Konstante
Wert
Kontakt
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-Parameter (VAG) J2534-2
Das Protokoll TP 2.0 wird in VAG-Fahrzeugen (Volkswagen, Audi, Skoda, Seat) zur Diagnose verwendet.
Für TP 2.0 werden auch die Parameter DATA_RATE, LOOPBACK, BIT_SAMPLE_POINT, SYNC_JUMP_WIDTH und J1962_PINS unterstützt. Standardwerte: LOOPBACK = 0, BIT_SAMPLE_POINT = 80%, SYNC_JUMP_WIDTH = 15%.
Parameter
Wert
Beschreibung
Standard
TP2_0_T_BR_INT
0x8044
Broadcast interval — Intervall zwischen 5 Nachrichten einer Broadcast-Übertragung (ms)
20
TP2_0_T_E
0x8045
Maximale Wartezeit auf Channel Acknowledge oder Connection Acknowledge (ms)
100
TP2_0_MNTC
0x8046
Anzahl der Wiederholungsversuche für Verbindungssteuerungsnachrichten
10
Die vollständige Liste der TP 2.0-Parameter finden Sie im Standard SAE J2534-2 rev.2020-12, Seite 78, Tabelle 77.
UART Echo Byte-Parameter J2534-2
Das Protokoll UART Echo Byte wird zur Diagnose älterer Fahrzeuge verwendet (SAE J2809, SAE J2818). Alle Zeitparameter werden in Millisekunden angegeben.
Parameter
Wert
Beschreibung
SAE J2809
SAE J2818
UEB_T0_MIN
0x8028
Minimale Leerlaufzeit vor der Übertragung des Adressbytes
t0
T_R0
UEB_T1_MAX
0x8029
Maximale Zeit zwischen Stimulation und Beginn des Sync-Bytes
t1
t_r1
UEB_T2_MAX
0x802A
Maximale Zeit zwischen Sync-Byte und KeyByte 1
t2
t_r2
Die vollständige Liste der UART Echo Byte-Parameter finden Sie im Standard SAE J2534-2 rev.2020-12, Seite 46, Tabelle 36.
Beispiele
GET_CONFIG — Lesen der Parameter
Beispiel in C/C++
#include "j2534_dll.hpp"
unsigned long ChannelID; // Von PassThruConnect erhalten
SCONFIG Config[2];
SCONFIG_LIST ConfigList;
long ret;
// DATA_RATE und ISO15765_STMIN abfragen
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);
}
Beispiel in Kotlin (Android)
// channelID von ptConnect erhalten
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", "Parameter ${config.parameter}: ${config.value}")
}
}
Beispiel in 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")
Beispiel in 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 — Setzen der Parameter
Beispiel in C/C++ — Konfiguration von ISO 15765
#include "j2534_dll.hpp"
unsigned long ChannelID; // Von PassThruConnect für ISO15765 erhalten
SCONFIG Config[3];
SCONFIG_LIST ConfigList;
long ret;
// ISO 15765-Parameter setzen
Config[0].Parameter = ISO15765_STMIN;
Config[0].Value = 0; // Keine Verzögerung zwischen CF
Config[1].Parameter = ISO15765_BS;
Config[1].Value = 0; // Keine Blockbegrenzung
Config[2].Parameter = ISO15765_PAD_VALUE;
Config[2].Value = 0xCC; // Füllbyte 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-Fehler: %s\n", error);
}
Beispiel in C/C++ — Konfiguration von J1962_PINS
#include "j2534_dll.hpp"
unsigned long ChannelID;
SCONFIG Config[1];
SCONFIG_LIST ConfigList;
long ret;
// K-Line an Pin 3, L-Line an Pin 11 anschließen
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 an Pin 3, L-Line an Pin 11 angeschlossen\n");
}
Beispiel in Kotlin (Android)
// channelID von ptConnect erhalten
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-Parameter gesetzt")
} else {
Log.e("J2534", "SET_CONFIG-Fehler: ${result.status}")
}
Beispiel in 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 # Gemischtes Format aktivieren
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-Parameter gesetzt")
Beispiel in 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; // Terminierung aktivieren
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("Parameter gesetzt");
}