Quantex GmbH
Votre région : Europe

PassThruConnect v4.04 v5.0

Établissement d'une connexion selon le protocole

Dernière modification :

Description

La fonction établit la communication selon le protocole indiqué. L'adaptateur prend en charge deux lignes de diagnostic indépendantes. Chaque protocole est associé à sa propre ligne. La ligne 1 est connectée aux broches 6 et 14 du connecteur OBD et seuls les protocoles ISO15765 et CAN peuvent y être connectés. La ligne 2 est commutable et les autres protocoles peuvent y être connectés. Comme les lignes sont indépendantes, le fonctionnement simultané de deux protocoles est autorisé. Par exemple ISO15765 et ISO14230, ou ISO15765 et ISO15765_PS. Le suffixe PS signifie que le protocole peut être commuté vers les broches du connecteur OBD.
Les protocoles ISO15765 et CAN, ainsi que ISO15765_PS et CAN_PS, peuvent fonctionner simultanément sur une même ligne physique. Cela signifie que dans un même adaptateur, on peut initialiser à la fois jusqu'à 4 protocoles. Il faut alors tenir compte du fait que les vitesses définies pour chaque paire de protocoles doivent être identiques. Par exemple ISO15765 et CAN avec une vitesse de 500 Kbit sur les broches 6 et 14 du connecteur OBD, et ISO15765_PS et CAN_PS avec une vitesse de 125 Kbit sur les broches 3 et 11.

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

Paramètres


Codes d'erreur retournés

Code Description Causes possibles et solutions
STATUS_NOERROR La fonction s'est exécutée correctement
ERR_DEVICE_NOT_CONNECTED Aucune connexion avec l'adaptateur
  • L'adaptateur est éteint ou n'est pas alimenté
  • Solution : Vérifiez l'alimentation de l'adaptateur et les indicateurs
  • Aucune connexion réseau
  • Solution : Vérifiez le câble réseau ou la connexion WLAN
  • Adresse IP incorrecte
  • Solution : Assurez-vous que l'adresse IP est correctement indiquée dans la chaîne de connexion
ERR_INVALID_DEVICE_ID Un identifiant d'adaptateur DeviceID inexistant a été indiqué
  • Le DeviceID n'a pas été obtenu de PassThruOpen
  • Solution : Appelez d'abord PassThruOpen pour obtenir un DeviceID correct
  • Le périphérique a été fermé précédemment
  • Solution : Vérifiez que PassThruClose n'a pas été appelé pour ce périphérique
ERR_NOT_SUPPORTED Le protocole n'est pas pris en charge par l'adaptateur
  • Les protocoles SCI ne sont pas pris en charge
  • Solution : Utilisez des protocoles pris en charge : CAN, ISO15765, ISO9141, ISO14230, etc.
  • Protocoles incompatibles (par exemple VPW et PWM simultanément)
  • Solution : Utilisez des combinaisons de protocoles compatibles
ERR_INVALID_PROTOCOL_ID v4.04
ERR_PROTOCOL_ID_NOT_SUPPORTED v5.0
Un ProtocolID inexistant a été indiqué
  • Une valeur de ProtocolID incorrecte a été transmise
  • Solution : Utilisez les constantes de j2534.h (ISO15765, CAN, ISO14230, etc.)
ERR_NULL_PARAMETER Le pointeur pChannelID n'a pas été indiqué
  • NULL a été transmis à la place d'un pointeur vers pChannelID
  • Solution : Transmettez un pointeur correct vers une variable unsigned long
ERR_INVALID_FLAGS v4.04
ERR_FLAG_NOT_SUPPORTED v5.0
Un indicateur non pris en charge a été indiqué
  • Un indicateur incorrect ou incompatible a été transmis pour ce protocole
  • Solution : Vérifiez la combinaison d'indicateurs. Pour ISO15765, utilisez CAN_29BIT_ID ou CAN_ID_BOTH
ERR_BAUDRATE_NOT_SUPPORTED Une vitesse de transmission non prise en charge a été indiquée
  • La vitesse n'est pas prise en charge pour ce protocole
  • Solution : Pour CAN, utilisez des vitesses standard : 125000, 250000, 500000, 1000000
  • Solution : Pour K-Line, utilisez des vitesses de 5 à 115200 bit/s
ERR_CHANNEL_IN_USE Le canal est déjà utilisé
  • Défini par la norme J2534
Important : En pratique, ce code d'erreur n'apparaîtra jamais, car lors d'un nouvel appel à PassThruConnect, un appel automatique à PassThruDisconnect se produira et le canal sera rouvert.
ERR_FAILED Erreur interne
  • Erreur dans la bibliothèque DLL ou dans le micrologiciel de l'adaptateur
  • Solution : Appelez PassThruGetLastError() pour obtenir une description détaillée
  • Solution : Redémarrez l'adaptateur et réessayez

Exemples

Exemple en C/C++

#include "j2534_dll.hpp"

// DeviceID obtenu précédemment de PassThruOpen
unsigned long DeviceID;
unsigned long ChannelID;
unsigned long Flags = 0; // Dépend du protocole

// Connexion par bus CAN ISO 15765 à une vitesse de 500 Kbit/s
long ret = PassThruConnect(DeviceID, ISO15765, Flags, 500000, &ChannelID);
if (ret != STATUS_NOERROR)
{
    char error[256];
    PassThruGetLastError(error);
    // Traitement de l'erreur
}

Exemple en Kotlin (Android)

// deviceID obtenu précédemment de ptOpen
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
    // Le canal de communication avec le véhicule est ouvert
    Log.i("J2534", "Canal ouvert, ChannelID: $channelID")
} else {
    // Traitement de l'erreur
    Log.e("J2534", "Erreur lors de l'ouverture du canal : ${resConnect.status}")
}

Exemple en Python

import ctypes

# Chargement de la bibliothèque
# 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 obtenu précédemment de PassThruOpen
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"Canal ouvert, ChannelID: {channel_id.value}")
else:
    error_msg = ctypes.create_string_buffer(256)
    j2534.PassThruGetLastError(error_msg)
    print(f"Erreur : {error_msg.value.decode()}")

Exemple en 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($"Canal ouvert, ChannelID: {channelId}");
        }
        else
        {
            byte[] errorMsg = new byte[256];
            PassThruGetLastError(errorMsg);
            Console.WriteLine($"Erreur : {System.Text.Encoding.ASCII.GetString(errorMsg)}");
        }
    }
}