Établissement d'une connexion selon le protocole
Dernière modification :
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)
| Définition | broches | Description |
|---|---|---|
| J1850VPW | 2 VPW | Défini par les normes SAE J1850 et SAE J2178. Peut fonctionner simultanément avec CAN et ISO15765. Non compatible avec les protocoles commutables. |
| J1850PWM | 2, 10 PWM | Défini par la norme SAE J1850. Peut fonctionner simultanément avec CAN et ISO15765. Non compatible avec les protocoles commutables. |
| ISO9141 | 7K,15L Line | Défini par les normes ISO 9141 et SAE J1979. Peut fonctionner simultanément avec CAN et ISO15765. Non compatible avec les protocoles commutables. |
| ISO14230 | 7K,15L Line | |
| CAN | 6H,14L CAN | Flux CAN brut. Peut fonctionner simultanément avec tous les protocoles. |
| ISO15765 | 6H,14L CAN | Défini par les normes ISO 15765-4 et ISO 14229-1 UDS Peut fonctionner simultanément avec tous les protocoles. |
| ISO15765_PS | CAN commutable | Version commutable de ISO 15765. Peut fonctionner simultanément avec CAN et ISO15765. |
| ISO13400_PS Quantex | Ethernet | DoIP (Diagnostics over IP) — diagnostic via Ethernet selon la norme ISO 13400. Pour plus d'informations, consultez la description de DoIP. |
| Consultez la liste complète des protocoles dans la norme SAE J2534-1. | ||
| Nom de la constante | bit | Description |
|---|---|---|
| ISO9141_K_LINE | 12 | Utilisation de la ligne L pour l'initialisation des protocoles. 0 = La ligne L et la ligne K sont utilisées pour l'initialisation 1 = Seule la ligne K est utilisée pour l'initialisation |
| CAN_29BIT_ID | 8 | Type d'identifiant CAN pour les protocoles CAN et ISO 15765 0 = Réception des paquets avec identifiant de 11 bits. 1 = Réception des paquets avec identifiant de 29 bits. |
| Consultez la liste complète des indicateurs dans la norme SAE J2534-1. | ||
| 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 |
|
| ERR_INVALID_DEVICE_ID | Un identifiant d'adaptateur DeviceID inexistant a été indiqué |
|
| ERR_NOT_SUPPORTED | Le protocole n'est pas pris en charge par l'adaptateur |
|
| ERR_INVALID_PROTOCOL_ID v4.04 ERR_PROTOCOL_ID_NOT_SUPPORTED v5.0 |
Un ProtocolID inexistant a été indiqué |
|
| ERR_NULL_PARAMETER | Le pointeur pChannelID n'a pas été indiqué |
|
| ERR_INVALID_FLAGS v4.04 ERR_FLAG_NOT_SUPPORTED v5.0 |
Un indicateur non pris en charge a été indiqué |
|
| ERR_BAUDRATE_NOT_SUPPORTED | Une vitesse de transmission non prise en charge a été indiquée |
|
| ERR_CHANNEL_IN_USE | Le canal est déjà utilisé |
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 |
|
#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
}
// 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}")
}
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()}")
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)}");
}
}
}