Quantex GmbH
Twój region: Europa

PassThruSetProgrammingVoltage v4.04 v5.0

Ustawianie napięcia programowania

Ostatnia modyfikacja:

Opis

Ustawia napięcie programowania na wskazanym styku złącza J1962 (OBD-II). Stosowane do programowania ECU, które wymagają podania podwyższonego napięcia na określony pin podczas procedury przeprogramowania.

long PassThruSetProgrammingVoltage(unsigned long DeviceID, unsigned long PinNumber, unsigned long Voltage)
Ważne: Funkcja nie jest obsługiwana przez adapter ScanDoc. Wywołanie zawsze zwraca ERR_NOT_SUPPORTED.

Parametry

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 wyłączony lub poza zasięgiem
  • Rozwiązanie: sprawdź zasilanie adaptera oraz połączenie sieciowe/BLE
ERR_NOT_SUPPORTED Funkcja nie jest obsługiwana
  • Adapter ScanDoc nie obsługuje wyjścia programowania
  • Rozwiązanie: użyj adaptera ze sprzętową obsługą napięcia programowania
ERR_INVALID_DEVICE_ID Nieprawidłowy identyfikator urządzenia
  • DeviceID nie został uzyskany przez PassThruOpen lub urządzenie jest zamknięte
  • Rozwiązanie: upewnij się, że PassThruOpen wykonano pomyślnie i urządzenie nie jest zamknięte
ERR_PIN_INVALID Niedopuszczalny numer pinu
  • Podano nieobsługiwany numer styku lub pin jest już zajęty
  • Rozwiązanie: użyj dopuszczalnych numerów pinów (0, 6, 11-15)
ERR_FAILED Nieokreślony błąd
  • Wewnętrzny błąd biblioteki lub adaptera
  • Rozwiązanie: wywołaj PassThruGetLastError() aby uzyskać opis

Przykłady

C/C++

#include "j2534_dll.hpp"

unsigned long DeviceID;  // Uzyskany z PassThruOpen
long ret;

// Ustawić 12V na pinie 15
ret = PassThruSetProgrammingVoltage(DeviceID, 15, 12000);
if (ret == STATUS_NOERROR)
{
    printf("Napięcie programowania ustawione: 12V na pinie 15\n");
}
else if (ret == ERR_NOT_SUPPORTED)
{
    printf("Adapter nie obsługuje napięcia programowania\n");
}
else
{
    char error[256];
    PassThruGetLastError(error);
    printf("Błąd: %s\n", error);
}

// Wyłączyć napięcie programowania
ret = PassThruSetProgrammingVoltage(DeviceID, 15, VOLTAGE_OFF);

Kotlin (Android)

// deviceID uzyskany wcześniej z ptOpen
val result = j2534.ptSetProgrammingVoltage(deviceID, pin = 15, voltage = 12000u)
when (result.status) {
    STATUS_NOERROR -> Log.i("J2534", "Napięcie programowania ustawione")
    ERR_NOT_SUPPORTED -> Log.w("J2534", "Funkcja nie jest obsługiwana przez adapter")
    else -> Log.e("J2534", "Błąd: ${result.errorDescription}")
}

// Wyłączyć napięcie
j2534.ptSetProgrammingVoltage(deviceID, pin = 15, voltage = VOLTAGE_OFF)

Python

from ctypes import *

VOLTAGE_OFF = 0xFFFFFFFF
SHORT_TO_GROUND = 0xFFFFFFFE

# Ustawić 12V na pinie 15
ret = j2534.PassThruSetProgrammingVoltage(device_id, 15, 12000)
if ret == 0:  # STATUS_NOERROR
    print("Napięcie programowania ustawione: 12V")
elif ret == 0x01:  # ERR_NOT_SUPPORTED
    print("Adapter nie obsługuje napięcia programowania")
else:
    error = create_string_buffer(256)
    j2534.PassThruGetLastError(error)
    print(f"Błąd: {error.value.decode()}")

# Wyłączyć napięcie
j2534.PassThruSetProgrammingVoltage(device_id, 15, VOLTAGE_OFF)

C#

const uint VOLTAGE_OFF = 0xFFFFFFFF;
const uint SHORT_TO_GROUND = 0xFFFFFFFE;

// Ustawić 12V na pinie 15
int ret = J2534.PassThruSetProgrammingVoltage(deviceId, 15, 12000);
if (ret == 0)
{
    Console.WriteLine("Napięcie programowania ustawione: 12V");
}
else if (ret == 0x01) // ERR_NOT_SUPPORTED
{
    Console.WriteLine("Adapter nie obsługuje napięcia programowania");
}
else
{
    var error = new StringBuilder(256);
    J2534.PassThruGetLastError(error);
    Console.WriteLine($"Błąd: {error}");
}

// Wyłączyć napięcie
J2534.PassThruSetProgrammingVoltage(deviceId, 15, VOLTAGE_OFF);