LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Comment incluse a la compilation une librairie de niveau-2 dans une librairie niveau-1 pour ne pas la réinclure avec son .h au niveau0

Je suis en train de créer des étages de DLL/Lib sous LabWindowsCVI V10.0

      - Driver (Pilotage du matériel avec gestion des erreur)

            Ex : Gestion_IP, Gestion_RS, Gestion_GPIB, ... (Ouverture/Fermeture/Lecture/Écriture/...)

      - Protocole (Formattage des données et utilisation des fonctions "Driver")

            Ex : Gestion_Appareil1_IP, Gestion_Appareil2_IP,Gestion_Appareil3_RS, Gestion_Appareil4_GPIB, ... (EnvoiCommande1/EnvoiCommande2/...)

     - Banc (Intégration des caractéristiques des bancs de test aux fonctions "Protocole")

            Ex : Configuration1 = Commutation du relai X pour EnvoiCommande1...

      - Produit (Developpement des tests par produits en y intégrant les fonctions"Banc" et, si nécessaire, "Protocole")

            Ex : Test1 = Mesure X en Configuration1 avec contrôle

 

L'intérêt principal est de :

      - disposer de fonctions standards usine au niveau "Driver" et "Protocole"

      - réduire le développement et la validation lors de l'arrivée d'un nouveau "Banc" et/ou "Produit"

      - pouvoir déplacer un produit A sur un banc différent

 

 

Afin de limiter le nombre de .lib et de .h à inclure dans les niveaux supérieurs, j'aimerais savoir comment incluse a la compilation :

      - les librairies et .h "Driver" dans les librairies "Protocole"

      - les librairies et .h "Protocole" dans les librairies "Banc"

      - les librairies et .h "Banc" dans les librairies "Produit"

 

 

                                                                             Merci pour votre aide

0 Kudos
Message 1 of 8
(4,396 Views)

Bonjour,

 

Je ne suis pas sûr de bien comprendre ta question, mais en la lisant on est tenté de te suggérer de procéder comme suit (exemple pour un "test3" de communication RS sur un produit X donné) :

- insérer une ligne #include gestion_rs.h(prototypes des fonctions contenues dans gestion_rs.cdans le fichier gestion_appareil3_rs.c

 

- insérer une ligne #include gestion_appareil3_rs.h (prototypes des fonctions contenues dans gestion_appareil3_rs.cdans le fichier configuration3.c

- insérer une ligne #include configuration3.h (prototypes des fonctions contenues dans configuration3.cdans le fichier test3.c

 

Ai-je répondu à ta question ? J'ai l'impression d'enfoncer une porte ouverte mais si c'est le cas cela permettra au moins de te faire clarifier ta question. 🙂

 

J.

0 Kudos
Message 2 of 8
(4,387 Views)

bonsoir,

 

La réponse de Julien_2831 correspond à ce à quoi je voudrais arriver...

 

Ce que j'ai actuellement c'est :

      - une ligne #include gestion_rs.h dans le fichier gestion_appareil3_rs.c

      - deux lignes #include gestion_appareil3_rs.h et #include gestion_rs.h dans le fichier configuration3.c

      - trois lignes #include configuration3.h et #include gestion_appareil3_rs.h et #include gestion_rs.h  dans le fichier test3.c

 

Il me faut donc inclure dans les projets toutes les librairies et .h associés...

Je voudrais n'inclure que celles du niveau inférieur.

Si celà est possible, j'aimerais même pouvoir appeler des fonctions des niveaux n-2 et inférieur...

 

J'ai essayé de jouer avec les encarts "LoadExternalModule Options" et "Exports" sur menu "Build \ Target Settings" sans succès...

 

              Merci Julien pour cette première réponse

 

                                         Guillaume

 

0 Kudos
Message 3 of 8
(4,380 Views)

Je reprends ta réponse et je barre ce qui me semble inutile à la compilation.

 

Ce que j'ai actuellement c'est :

      - une ligne #include gestion_rs.h dans le fichier gestion_appareil3_rs.c

      - deux lignes #include gestion_appareil3_rs.h et #include gestion_rs.h dans le fichier configuration3.c

      - trois lignes #include configuration3.h et #include gestion_appareil3_rs.h et #include gestion_rs.h  dans le fichier test3.c

 

On retombe sur ma première réponse, à savoir que seules les lib du niveau inférieur sont incluses.

 

Dans ce cas, et sauf erreur de ma part, les fonctions du niveau n-2 pourront bel et bien être appelées depuis le niveau n...car pour compiler les fonctions du niveau n-1, le compilateur aura forcément dû connaître les prototypes de celles du niveau n-2 ! 🙂

 

Je t'invite à faire un petit test simple pour t'en assurer, mais je pense que ça va rouler.

 

0 Kudos
Message 4 of 8
(4,377 Views)

J'ai réalisé une petite imbrication de projet pour mieux comprendre le fonctionnement.

 

J'ai inclus les Header (*.h) lors de la compilation de tous les niveaux.

 

Si le niveau haut (Produit) appel une fonction du niveau inférieur (Banc), seul l'importation de "Banc.lib"' et "Banc.h" sont nécessaires.

Si le niveau haut (Produit) appel une fonction de très bas niveau (Drivers), il faut également importé la Lib et H de ce niveau.

 

L'encapsulage semble donc fonctionner uniquement pour les fonctions du projet mais pas pour les fonctions externes... 

 

Pour info, sur mon projet complexe, j'ai :

     - "Driver" - Un projet de la gestion des erreurs et de gestion élémentaire des fichiers textes (Ouverture/Fermeture/Lecture/Ecriture).

     - "Protocol" - Un projet de la traitement des fichiers textes (LectureEtMemorisationDuneLigne/EcritureDuneLigne).

                       => Appel la gestion des erreurs et la gestion élémentaire des fichiers textes

     - "Bench" - Un projet de la gestion personnalisée des fichiers textes (LectureFichierCfg1/LectureFichierCfg2/EcritureFichierRapport1,... avec les variables du banc).

                      => Appel la gestion des erreurs et la gestion élémentaire des fichiers textes

                      => Appel la gestion traitement des fichiers textes

     - "Produit" - Un projet de séquencement des fonctions de niveau banc...

                      => Appel la gestion des erreurs et la gestion élémentaire des fichiers textes

                      => Appel la gestion personnalisée de fichiers textes

 

J'aurais bien voulu m'affranchir des fonctions :

     - Orange : Utilisée dans le niveau ou elle est appelée mais déjà présente dans l'autre librairie appelée.

     - Rouge : Pas utilisée dans le niveau ou elle est appelée...

 

 

                                      Merci pour vos réponses. Grace à elles, j'avance doucement, mais j'avance Smiley Wink

 

 

                                                                                               Guillaume

0 Kudos
Message 5 of 8
(4,356 Views)

Voici un exemple de ce que j'imagine (voir pièce jointe).

 

Le niveau N2 est le plus élevé. Il y a un niveau intermédiaire N1 et un bas niveau N0. Tu peux voir comment j'envisage l'encapsulation.

0 Kudos
Message 6 of 8
(4,352 Views)

Salut Julien,

 

J'ai regardé ton exemple : Tu imbriques des .c dans un même projet....

Ce que j'essai de faire est d'imbriquer plusieurs projets ensemble (cf pièce jointe).

 

Info : Ouvre le fichier "...\ESSAI IMBRICATION\3-BenchFunctions\3-BenchLevel.cws" pour tout visualiser en même temps...

 

Objectif : Dans les "Include Files" du projet "3-BenchLevel" n'avoir que "2-ProtocolFunctions.lib" mais pouvoir utilisé :

      - la fonction "iFileTXTandBIN_OpenAndClose" du niveau -1

      - la fonction "iFileTXTandBIN_Open" du niveau -2

Remarque : Dans mon exemple, celà n'a aucun intérêt mais j'en ai besoin dans mon système complexe...

 

 

Question complémentaire : Si tu réussis à m'activer la fonction panel du niveau 1 dans le niveau 2, ce serait formidable.

J'ai un problème de compatibilité du type FILE à la compilation et je ne réussi pas à déclarer mes variables d'entrées dans ce type...

cf post : http://forums.ni.com/t5/LabWindows-CVI/Probl%C3%A8me-de-cr%C3%A9ation-d-une-FonctionPanel-avec-la-li...

 

 

 

 

                                                          Merci, bonne soirée et bon WE

 

 

                                                                                                                 Guillaume

0 Kudos
Message 7 of 8
(4,348 Views)

Bonjour Julien,

 

Dans la mesure ou tes fonctions correspondant à chaque niveau sont réparties dans des DLL différentes, tu n'as pas d'autres choix que :

1- Inclure le .h et le .lib correspondant pour chaque projet

2- Ajouter des fonctions chargées de relayer l'accés au niveau n-2 dans les librairies de niveau n-1 (wrapper)

 

En somme, tu souhaites faire de l'encapsulation en C mais par l'intermédiaire de DLL. Seule l'utilisation de composant ActiveX/DCOM pour chaque niveau ( qui risque de compliquer plus encore ton projet) permettrait de répondre à tes besoins.

 

Cordialement,

Stéphane

 

 

Labwindows/CVI user since version 4.0
0 Kudos
Message 8 of 8
(4,278 Views)