Quantex GmbH
Ihre Region: Europa

PassThruConnect v4.04 v5.0

Aufbau einer Verbindung über ein Protokoll

Letzte Änderung:

Beschreibung

Die Funktion stellt eine Verbindung über das angegebene Protokoll her. Der Adapter unterstützt zwei unabhängige Diagnoseleitungen. Jedes Protokoll ist mit seiner Leitung verbunden. Leitung 1 ist mit den Pins 6 und 14 des OBD-Steckers verbunden, und an sie können nur die Protokolle ISO15765 und CAN angeschlossen werden. Leitung 2 ist umschaltbar, und an sie können die übrigen Protokolle angeschlossen werden. Da die Leitungen unabhängig sind, ist der gleichzeitige Betrieb zweier Protokolle zulässig. Zum Beispiel ISO15765 und ISO14230 oder ISO15765 und ISO15765_PS. Der Zusatz PS bedeutet, dass das Protokoll auf die Pins des OBD-Steckers umgeschaltet werden kann.
Die Protokolle ISO15765 und CAN sowie ISO15765_PS und CAN_PS können gleichzeitig auf einer physischen Leitung arbeiten. Das bedeutet, dass Sie in einem Adapter gleichzeitig bis zu 4 Protokolle initialisieren können. Dabei ist zu beachten, dass die eingestellten Geschwindigkeiten für jedes Protokollpaar gleich sein müssen. Zum Beispiel ISO15765 und CAN mit einer Geschwindigkeit von 500 kBit an den Pins 6 und 14 des OBD-Steckers und ISO15765_PS und CAN_PS mit einer Geschwindigkeit von 125 kBit an den Pins 3 und 11.

long PassThruConnect(unsigned long DeviceID, unsigned long ProtocolID, unsigned long Flags, unsigned long BaudRate, unsigned long *pChannelID)

Parameter


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 keine Stromversorgung
  • Lösung: Prüfen Sie die Stromversorgung des Adapters und die Anzeigen
  • Keine Netzwerkverbindung
  • Lösung: Prüfen Sie das Netzwerkkabel oder die WLAN-Verbindung
  • Falsche IP-Adresse
  • Lösung: Stellen Sie sicher, dass die IP-Adresse in der Verbindungszeile korrekt angegeben ist
ERR_INVALID_DEVICE_ID Es wurde ein nicht existierender Adapter-Identifikator DeviceID angegeben
  • DeviceID wurde nicht von PassThruOpen erhalten
  • Lösung: Rufen Sie zuerst PassThruOpen auf, um eine gültige DeviceID zu erhalten
  • Das Gerät wurde zuvor geschlossen
  • Lösung: Prüfen Sie, dass PassThruClose für dieses Gerät nicht aufgerufen wurde
ERR_NOT_SUPPORTED Das Protokoll wird vom Adapter nicht unterstützt
  • SCI-Protokolle werden nicht unterstützt
  • Lösung: Verwenden Sie unterstützte Protokolle: CAN, ISO15765, ISO9141, ISO14230 usw.
  • Inkompatible Protokolle (zum Beispiel VPW und PWM gleichzeitig)
  • Lösung: Verwenden Sie kompatible Protokollkombinationen
ERR_INVALID_PROTOCOL_ID v4.04
ERR_PROTOCOL_ID_NOT_SUPPORTED v5.0
Es wurde eine nicht existierende ProtocolID angegeben
  • Es wurde ein ungültiger Wert für ProtocolID übergeben
  • Lösung: Verwenden Sie die Konstanten aus j2534.h (ISO15765, CAN, ISO14230 usw.)
ERR_NULL_PARAMETER Der Zeiger pChannelID wurde nicht angegeben
  • Es wurde NULL anstelle eines Zeigers auf pChannelID übergeben
  • Lösung: Übergeben Sie einen gültigen Zeiger auf eine Variable vom Typ unsigned long
ERR_INVALID_FLAGS v4.04
ERR_FLAG_NOT_SUPPORTED v5.0
Es wurde ein nicht unterstütztes Flag angegeben
  • Es wurde ein ungültiges oder für dieses Protokoll inkompatibles Flag übergeben
  • Lösung: Prüfen Sie die Flag-Kombination. Verwenden Sie für ISO15765 CAN_29BIT_ID oder CAN_ID_BOTH
ERR_BAUDRATE_NOT_SUPPORTED Es wurde eine nicht unterstützte Übertragungsgeschwindigkeit angegeben
  • Die Geschwindigkeit wird für dieses Protokoll nicht unterstützt
  • Lösung: Verwenden Sie für CAN die Standardgeschwindigkeiten: 125000, 250000, 500000, 1000000
  • Lösung: Verwenden Sie für K-Line Geschwindigkeiten von 5 bis 115200 Bit/s
ERR_CHANNEL_IN_USE Der Kanal wird bereits verwendet
  • Im Standard J2534 definiert
Wichtig: In der Praxis tritt dieser Fehlercode niemals auf, da bei einem erneuten Aufruf von PassThruConnect automatisch PassThruDisconnect aufgerufen wird und der Kanal neu geöffnet wird.
ERR_FAILED Interner Fehler
  • Fehler in der DLL oder in der Firmware des Adapters
  • Lösung: Rufen Sie PassThruGetLastError() auf, um eine ausführliche Beschreibung zu erhalten
  • Lösung: Starten Sie den Adapter neu und versuchen Sie es erneut

Beispiele

Beispiel in C/C++

#include "j2534_dll.hpp"

// DeviceID wurde zuvor von PassThruOpen erhalten
unsigned long DeviceID;
unsigned long ChannelID;
unsigned long Flags = 0; // Hängt vom Protokoll ab

// Verbindung über CAN-Bus ISO 15765 mit einer Geschwindigkeit von 500 kBit/s
long ret = PassThruConnect(DeviceID, ISO15765, Flags, 500000, &ChannelID);
if (ret != STATUS_NOERROR)
{
    char error[256];
    PassThruGetLastError(error);
    // Fehlerbehandlung
}

Beispiel in Kotlin (Android)

// deviceID wurde zuvor von ptOpen erhalten
val protocolID = ISO15765
val flags = 0
val baudRate = 500000

val resConnect = j2534.ptConnect(deviceID, protocolID, flags, baudRate)
if (resConnect.status == STATUS_NOERROR) {
    val channelID = resConnect.chnlId
    // Kommunikationskanal mit dem Fahrzeug geöffnet
    Log.i("J2534", "Kanal geöffnet, ChannelID: $channelID")
} else {
    // Fehlerbehandlung
    Log.e("J2534", "Fehler beim Öffnen des Kanals: ${resConnect.status}")
}

Beispiel in Python

import ctypes

# Laden der Bibliothek
# Windows: j2534 = ctypes.WinDLL("j2534sd_v04_04_x64.dll")
# macOS: j2534 = ctypes.CDLL("libj2534_v04_04.dylib")
# Linux: j2534 = ctypes.CDLL("libj2534_v04_04.so")

ISO15765 = 6
STATUS_NOERROR = 0

# device_id wurde zuvor von PassThruOpen erhalten
device_id = ctypes.c_ulong(0)
channel_id = ctypes.c_ulong()
protocol_id = ISO15765
flags = 0
baud_rate = 500000

ret = j2534.PassThruConnect(device_id, protocol_id, flags, baud_rate, ctypes.byref(channel_id))
if ret == STATUS_NOERROR:
    print(f"Kanal geöffnet, ChannelID: {channel_id.value}")
else:
    error_msg = ctypes.create_string_buffer(256)
    j2534.PassThruGetLastError(error_msg)
    print(f"Fehler: {error_msg.value.decode()}")

Beispiel in C#

using System;
using System.Runtime.InteropServices;

public class J2534Example
{
    // Windows: j2534sd_v04_04_x64.dll
    [DllImport("j2534sd_v04_04_x64.dll")]
    public static extern int PassThruConnect(uint deviceId, uint protocolId,
        uint flags, uint baudRate, out uint channelId);

    [DllImport("j2534sd_v04_04_x64.dll")]
    public static extern int PassThruGetLastError(byte[] errorMsg);

    const uint ISO15765 = 6;
    const int STATUS_NOERROR = 0;

    public void ConnectExample(uint deviceId)
    {
        uint channelId;
        uint flags = 0;
        uint baudRate = 500000;

        int ret = PassThruConnect(deviceId, ISO15765, flags, baudRate, out channelId);
        if (ret == STATUS_NOERROR)
        {
            Console.WriteLine($"Kanal geöffnet, ChannelID: {channelId}");
        }
        else
        {
            byte[] errorMsg = new byte[256];
            PassThruGetLastError(errorMsg);
            Console.WriteLine($"Fehler: {System.Text.Encoding.ASCII.GetString(errorMsg)}");
        }
    }
}