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
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
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 !
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.
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); }
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.
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 :Alors qu'il devrait m'afficher les résultats pour chaque fréquence
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)
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 :
Maintenant, c'est plutôt comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 meas_data(vna) 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void meas_data(int vna) { ...
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.
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.
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
ne sont pas séparées par ; plutôt qu'un blanc ?
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";
Publication : Concepts en C
Mon avatar : Glenn Gould
--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
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.
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 ?
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, ...)
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.
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.
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 ?
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);
Publication : Concepts en C
Mon avatar : Glenn Gould
--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
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'
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 !
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.
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.
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 !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager