LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Automotive Diagnostic Command Set - Problem when used in DLL

Hello everyone,
 
I've got a problem when using Automotive Diagnostic Command Set in a DLL.
 
I've made two versions of an application, one stand alone which  work fine, and another version to be used as a DLL.
 
The probleme with the DLL version is that ndCloseDiagnostic seems to freeze my DLL when called..
Without the call to ndCloseDiagnostic, the DLL end fine, but the calling app will never end when quiting (it seem to freeze just after the end of main function).
 
Any one have a idea about this strange behaviour ?
 
Thanks by advance for your support.
 
 
0 Kudos
Message 1 of 42
(6,405 Views)

Hi,

Could you send your code ? So that, I will be able to have a better look on your issue.

Moreover, have you tried using ndStopDiagnosticSession before using ndCloseDiagnostic ? That could be the reason why your DLL freezes.

Best regards,

0 Kudos
Message 2 of 42
(6,372 Views)
Maxime bonjour,
 
Merci pour votre reponse, surtout qu'en Français, ce sera plus facile !
 
Ci joint le source de la DLL.
 
Je vais réessayer avec "ndStopDiagnosticSession"
 
Merci pour votre support.
 
 
 
0 Kudos
Message 3 of 42
(6,368 Views)

Bonjour,

J'ai essayé avec ndStopDiagnosticSession, mais sans plus de succes.

Je contact le support NI pour plus d'info au cas ou ...

 

Benoit Williot

JTEKT Automotive Dijon

0 Kudos
Message 4 of 42
(6,337 Views)
Bonjour,
 
Pourriez vous me préciser la version de votre driver NI-CAN (disponible sous MAX) et me faire deux captures d'écrans avec NI-SPY (disponible sous MAX) de la DLL et de votre EXE.
 
Cordialement,
0 Kudos
Message 5 of 42
(6,310 Views)
Bonjour,
 
Version de NI-CAN : 2.5.2f0
Version ADCS : 1.0.0f1
 
Ci joint les captures avec NI SPY
 
Salutations
 
B.W.
 
 
0 Kudos
Message 6 of 42
(6,305 Views)

Bonjour,

Malheureusement vos fichiers n'étaient pas utilisables (problème de lecture). Cependant, nous avons pu remarquer dans votre code qu'au dernier appel de ncWaitForState l'argument numéro 4 n'était pas le même que les autres appels, est-ce normal ? Voici le prototype de ncWaitForState:

NCTYPE_STATUS ncWaitForState(
NCTYPE_OBJH ObjHandle,
NCTYPE_STATE DesiredState,
NCTYPE_UINT32 Timeout,
NCTYPE_STATE_P StatePtr);

Puisque l'argument est un pointeur, le plantage peut être du a un argument pointant vers une mauvaise place de la mémoire.

Pouvez vous me préciser comment vous créez votre DLL ? Comment l'appellez vous ? De plus, est-ce que votre code C contient tout le code de la DLL ?

Cordialement,



Message Edité par Maxime MULLER le 06-30-2008 02:03 AM
0 Kudos
Message 7 of 42
(6,273 Views)
Bonjour,
 
Ci joint le projet complet de ma DLL .
 
Je ne genere pas moi meme l'appel a "ncWaitForState", il semble qu'il soit generé par le toolkit Automotive diag command set.
 
Salutations.
B.Williot
 
0 Kudos
Message 8 of 42
(6,266 Views)

Bonjour,

Pouvez vous me dire s la façon donti vous crééez votre DLL est la même que celle expliquée dans la page suivante : KB .

De plus pouvez vous me préciser comment vous appellez cette DLL ? Code de l'appel ? Appel sous LabVIEW ? Appel dans un autre langage de programamation ? Dans tous les cas pouvez vous me joindre le code complet de l'appel de votre DLL.

Cordialement,

0 Kudos
Message 9 of 42
(6,249 Views)

Bonjour,

 

J'ai créé ma DLL a partir du template de la page d'ouverture de CVI et avec le generateur de code de l'UIR.

 

Cette DLL est chargée par un script LUA source si dessous.

J'ai d'autre part d'autre DLL crées avec CVI et appellées de la même manière qui fonctionnent parfaitement.

 

extrait du source LUA :

---------------------------------------------------------------------------------------------------------------------------------------------------------------

-- Simul Hall
require "ksm41"
require "mcu"  -- chargement de la DLL mcu.dll
require "hall"  -- chargement de la DLL hall.dll

nom = "Calibration A7R Step2 BLM4"
numero = "0"
init = 0

function RaisingPen1(m) --fonction LUA appellée depuis CVI
  hall.ReadCells() -- appel fonction ReadCells() de la DLL hall.dll
end


.

.

.

function judge(m) -- fonction LUA appellée depuis le programme CVI

hw = mcu.GetEcuValues() -- appel de la fonction GetEcuValues() de la DLL mcu.dll
 if( hw == "F800001254" ) then
 SetJudgementResult("HardwareNb",1,true)
 else
 SetJudgementResult("HardwareNb",0,false)
 end

end
---------------------------------------------------------------------------------------------------------------------------------------------------------------

 

le script est executé par une appli CVI principale.

Cordialement.

B.Williot

 

0 Kudos
Message 10 of 42
(6,247 Views)