IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Récupération de données


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut Récupération de données
    Bonjour,

    J'aimerais récupérer les données de mon analyseur de réseaux vectoriel sur mon pc sous forme de tableau. J'utilise un câble GPIB pour communiquer.

    merci

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Si tu as une interface GPIB, le constructeur a dû fournir en même temps le logiciel nécessaire à son exploitation.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    J'utilise le logiciel Dev c++. J'ai trouvé des exemples de programme c pour pouvoir récupérer les données, mais cela ne marche pas.
    J'ai même un exemple de programme me permettant de relever les données, mais celui-ci ne marche pas.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    voici le code que j'ai récupéré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    meas_device(vna)
     int vna;
     {
     static char key;
     
     printf("\n\t\t         MEASUREMENT AND DATA OUTPUT\n");
     printf("\nConnect Device Under Test:\n");
     printf("Appuyer sur ENTREE pour effectuer la mesure ou ECHAP pour sortir\n");
     while((key = getch()) !=27 )
     {
     if(key=='\r')
     {
       meas_data(vna);
       printf("\nConnect Device Under Test:\n");
       printf("Appuyer sur ENTREE pour effectuer la mesure ou ECHAP pour sortir\n");
     }
     else; 
       }
         printf("\n\t\t\t\tPROGRAM ENDED\n");
     }
     
    meas_data(vna)                 
     int vna;
     {
     static int 
     count,
     points;
     static char
       i[]="TRS WFS HLD",
       j[]="FMB LSB OFV CH1 OFD CH2 OFD CH3 RDA OFD CH4 RDA OFD";
     static double freq[41];
     static struct header
       {
       char preamble[2];
       int size;
       }
       headr;
     static struct data
       {
       double mag;
       double phase;
       }
       s11[41],s12[41],s21[41],s22[41];
     
     printf("Mesure en cours...");
     ibwrt(vna,i,sizeof(i));
     ibwrt(vna,j,sizeof(j));
     ibrd(vna,&headr,4);
     ibrd(vna,&freq[0],headr.size);
     ibrd(vna,&headr,4);
     ibrd(vna,&s11[0],headr.size);
     ibrd(vna,&headr,4);
     ibrd(vna,&s12[0],headr.size);
     ibrd(vna,&headr,4);
     ibrd(vna,&s21[0],headr.size);
     ibrd(vna,&headr,4);
     ibrd(vna,&s22[0],headr.size);
     points=(headr.size/16);
     printf("\n\n\n\n\n\n"); 
     printf("                 S11          S12          S21          S22\n");
     printf(" FREQUENCY    MAG   PHASE  MAG   PHASE  MAG   PHASE  MAG   PHASE\n");     
     printf("    GHZ)      (dB)  (Deg)  (dB)  (Deg)  (dB)  (Deg)  (dB)  (Deg)\n");      
     for (count=0;count < points;count=count + 5)
       printf("%7.2f  %7.2f  %7.2f  %7.2f  %7.2f  %7.2f  %7.2f  %7.2f  %7.2f\n",
              freq[count]/1E9,s11[count].mag,s11[count].phase,
              s12[count].mag,s12[count].phase,
              s21[count].mag,s21[count].phase,
              s22[count].mag,s22[count].phase);
     }

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Ton PC, c'est quel OS ?

    Pour ta carte HPIB, tu as installé le driver ?

    Tu as les librairies pour te linker avec ?

    Qu'est ce qui ne marche pas :
    • Erreur de compilation,
    • link,
    • lancement,
    • les résultats affichés ne sont pas ceux attendus
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    Oui j'ai installé le driver, pas de problème le librairie, pas d'erreur de compilation. Pour l'OS dsl je sais pas c'est quoi. Et en faite le résultat c qu'il m'affiche que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                     S11          S12          S21          S22
     FREQUENCY    MAG   PHASE  MAG   PHASE  MAG   PHASE  MAG   PHASE
        GHZ)      (dB)  (Deg)  (dB)  (Deg)  (dB)  (Deg)  (dB)  (Deg)
    Alors qu'il devrait m'afficher les résultats pour chaque fréquence

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    OS = Operating System. Ma question était donc tu tournes sous quoi Windows XP, Linux, autre.

    Quel environnement de développement utilises-tu, Visual Studio, Code::Block, autre ?

    Je ne sais pas d'où tu as récupéré ce code mais il n'est pas tout récent. Il y a bien longtemps que l'on écrit plus les fonctions comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    meas_data(vna)                 
     int vna;
     {
    ...
    Maintenant, c'est plutôt comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void meas_data(int vna)                 
    {
    ...
    Mais bon, si rien ne s'affiche, c'est que la boucle "for (count=0;count < points;count=count + 5)" n'est pas exécutée.

    Donc quelle est la valeur de points avant de rentrer dans la boucle.

    Autre chose, les fonctions ibrd() et ibwrt() doivent probablement retourner quelque chose en cas d'erreur et tu ne testes jamais les retours de ces fonctions, autant prendre les bonnes pratiques dès le début.

    Est ce que tu as les moyens d'exécuter ton code dans un debugger pour voir ce qu'il se passe. Si tu ne peux pas, il va falloir passer par des printf intermédiaires pour t'aider.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    Alors je tourne sous windows XP et j'utilise Devcpp. j'ai récupéré ces codes sur internet. En faite je travail en communication GPIB avec un appareil de mesure. Je dois récupéré les données des 4 parametres.
    Pour ce qui est des fonctions, cela marche quand même puisque j'utilise d'autres fonctions du même type.

  9. #9
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    1- Quel est le modèle de ton VNA ? Je suppose (d'après d'autres posts) qu'il s'agit d'un Anritsu.
    2- es-tu sûr que les commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       i[]="TRS WFS HLD",
       j[]="FMB LSB OFV CH1 OFD CH2 OFD CH3 RDA OFD CH4 RDA OFD";
    ne sont pas séparées par ; plutôt qu'un blanc ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    Il s'agit d'un Wiltron 360B. Et non il ne faut pas de ; entre chaque commande. C'est sur car j'ai d'autres fonctions qui marchent trés bien.

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    Et pour te répondre ram-0000, ibrd() permet la lecture de données émises par un appareil et ibwrt() permet l'envoi d'une commande à un appareil.
    Pour ce qui est du debugger, si je n'ai pas d'erreur à la compilation, je ne peux pas l'utiliser. Si ?

  12. #12
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par cyril19 Voir le message
    Et pour te répondre ram-0000, ibrd() permet la lecture de données émises par un appareil et ibwrt() permet l'envoi d'une commande à un appareil.
    Oui, cela je m'en doutais mais il y a probablement/peut être un code de retour de cette fonctiuon qui t'indique si cela s'est bien passé ou non. C'est ce code de retour (s'il existe) qu'il faut systèmatiquement analyser, tu peux avoir des surprises/indications de problème (genre syntaxe error, command too long, unknown command, OK, ...)


    Citation Envoyé par cyril19 Voir le message
    Pour ce qui est du debugger, si je n'ai pas d'erreur à la compilation, je ne peux pas l'utiliser. Si ?
    Bien sûr que si, un debugger permet d'exécuter un programme en pas à pas et d'analyser au fur et à mesure le contenu de tes variables et le voir le déroulement du programme et les branches de code utilisées.

    C'est très pratique et cela devrait être le premier réflexe en cas de problème.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    ok mais la je rentre dans des domaines que je ne connait pas bien. Mais je vais essayer, peut etre pourrais tu m'aider à me lancer.

  14. #14
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     static struct header
       {
       char preamble[2];
       int size;
       }
       headr;
    ...
     ibrd(vna,&headr,4);
    Que signifie le "4" dans ibrd ? Il n'a aucun rapport avec la taille de la structure headr. Qu'est ce que la fonction est censée mettre dans headr ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    Honnetement je serais pas te répondre car j'y connais pas grand chose. Mais j'ai trouvé ce programme sur internet donc a mon avis ca doit bien servir a quelque chose. Mais si je l'enlève, a la compilation il y a un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main.c:189: error: too few arguments to function `ibrd'

  16. #16
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il ne s'agit pas de l'enlever. Très vraisemblablement, il correspond au nombre de bytes qui doivent être lus, donc à la taille de headr.
    Si tes int font 16 bits, il est probable que 4 soit correct, mais si il font 32 bits ? Dans ce cas la taille de headr est 6 au minimum et plus probablement 8 à cause des problèmes d'alignement. Dans ce dernier cas, le champ size n'est jamais initialisé et reste à 0.

    Lorsque tu fais tes ibrd(vna,&headr,???), qu'est ce que tu es censé recueillir ?
    Apparemment, un en tête de deux bytes (preamble que tu ignores) et deux bytes pour le champ size. Si c'est le cas, il faut pour ce champ un entier de 2 bytes.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    Donc en gros tu me conseil de faire quoi ? Juste remplacer le 4 par un 8 ?

  18. #18
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par cyril19 Voir le message
    Donc en gros tu me conseil de faire quoi ? Juste remplacer le 4 par un 8 ?
    Je crois que depuis le début, tu te trompes de méthode. Tu fais du développement divinatoire et cette méthode ne marchera jamais (ou alors cela va tomber en marche et tu ne sauras pas pourquoi).

    Pour faire ce que tu veux,commence par :
    • Lire la doc du SDK de ton interface GPIB et comprendre les différentes fonctions
    • Compléte cette vision avec la lecture des include de ton SDK, s'il y a des commentaires dedans, cela peut aider
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 63
    Points : 16
    Points
    16
    Par défaut
    Oui je sais que c'est pas le top pour comprendre, mais la il me reste 1 semaine de stage, il faut que je finisse plein de chose. Je pense que je vais continuer un peu la méthode divinatoire même si cela ne marche pas. Mais je te remercie ainsi que les autres pour votre aide.

  20. #20
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Le document de Anritsu-Wiltron sur le 360B
    MODEL 360B VECTOR NETWORK ANALYZER. GPIB PROGRAMMING MANUAL
    donne de nombreux exemples et surtout décrit Le format de transfert dans les pages 5-3 et suivantes.

    On y lit que un transfert binaire est précédé par un préambule de deux caractères "#A" suivi de DEUX bytes donnant le nombre de bytes des données.

    Il faut donc adapter la structure struct header à ce format.

    En faisant un bout de programme à part :

    - Vérifier que les int font plus de deux bytes en affichant le résultat de sizeof(int) (on obtiendra probablement 4)

    - Si oui, vérifier que les short int font deux bytes en affichant le résultat de sizeof(short int)

    - Si oui, remplacer les int par des short dans la structure header et vérifier qu'elle fait bien 4 bytes en affichant sizeof(struct header) (Vérifier à cause des problèmes d'alignement possible dans la structure)

    - Si c'est bon, retourner au programme de transfert GPIB et remplacer le int par un short dans struct header. Laisser la valeur 4 dans les ibrd.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2004, 10h09
  2. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  3. [ DB2] => [ORACLE] Récupération de données
    Par LeDid dans le forum DB2
    Réponses: 3
    Dernier message: 25/06/2003, 17h10
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo