Quantex GmbH
您的地区:欧洲

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 来自 ECU 的最大字节间时间(ms) 20
P3_MIN 0x0A 响应结束与新请求之间的最小时间(ms) 55
P4_MIN 0x0C 来自诊断仪的最小字节间时间(ms) 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 之间的最小时间(ms) 0
N_CR_MAX v5.0 0x805F 等待 Consecutive Frame 的最大时间(ms) 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 数据阶段的数据传输速率(bit/s) 0(未设置)
CAN FD 参数的完整列表请参见 SAE J2534-2 rev.2020-12 标准,第 87 页,表 90。

SW-CAN 参数(Single-Wire CAN)

参数 说明 默认值
SW_CAN_HS_DATA_RATE 0x8010 High-Speed 模式的速率(bit/s) 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-。

Compact

J1962 切换示意图 — 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_RATELOOPBACKBIT_SAMPLE_POINTSYNC_JUMP_WIDTHJ1962_PINS。默认值为:LOOPBACK = 0,BIT_SAMPLE_POINT = 80%, SYNC_JUMP_WIDTH = 15%。
参数 说明 默认值
TP2_0_T_BR_INT 0x8044 Broadcast interval — 一次 broadcast 传输中 5 条消息之间的间隔(ms) 20
TP2_0_T_E 0x8045 等待 Channel Acknowledge 或 Connection Acknowledge 的最大时间(ms) 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;  // 为 ISO15765 从 PassThruConnect 获取
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("参数已设置");
}