Contrôle d’instruments série, GPIB et VXI avec Measurement Studio VISA

Aperçu

Vous pouvez configurer et contrôler des instruments en série, GPIB et VXI via une seule interface : VISA, l'interface de programmation d'application (API) Virtual Instrument Software Architecture. C'est un driver de haut niveau qui appelle les drivers de bas niveau pour chaque instrument. Cette note d ' application présente VISA et explique comment vous pouvez en tirer parti en utilisant le contrôle ActiveX Measurement Studio VISA (CWVISA) dans Visual Basic pour contrôler des instruments avec des instruments série, GPIB et VXI - avec une seule interface de programmation.

  • Remarque



Contenu

Qu’est-ce que VISA ?

VISA est une architecture logicielle de driver développée par NI pour unifier la communication avec les instruments série, GPIB et VXI et simplifier vos programmes de contrôle d’instruments. L'API VISA accède aux instruments série, GPIB et VXI via les appels du système d'exploitation et les drivers NI-488.2 et NI-VXI, comme le montre la figure 1.


Figure 1. Structure VISA


VISA offre les avantages suivants :

  • L’indépendance de l’interface, par laquelle VISA utilise les mêmes méthodes pour communiquer avec les instruments, quel que soit le type d’interface. Par exemple, la commande VISA pour écrire une chaîne ASCII dans un instrument basé sur messages est la même pour série, GPIB et VXI. Avec cette fonctionnalité, vous pouvez utiliser une seule API pour travailler avec différents instruments.
  • Une architecture orientée objet qui peut facilement s’adapter aux nouvelles interfaces d’instrumentation au fur et à mesure qu’elles sont développées à l’avenir. Vous pouvez facilement inclure de nouvelles interfaces.

Fonctionnalité intégrée pour la programmation d’instruments dans un ensemble de commandes très compact.

En quoi consiste CWVISA ?


CWVISA est un contrôle ActiveX qui fait abstraction de l'API VISA, de sorte que vous pouvez communiquer avec les instruments série, GPIB et VXI via des pages de propriétés interactives et une API simplifiée. Par exemple, utilisez les pages de propriétés CWVISA pour trouver et communiquer de manière interactive avec vos instruments, découvrir des problèmes d'interface ou vérifier la communication avec votre instrument pendant la conception. Vous pouvez utiliser le contrôle ActiveX VISA dans n'importe quel conteneur de contrôle ActiveX, y compris Microsoft Visual Basic, Visual C++ et Borland Delphi.

Astuce : Reportez-vous à Measurement Studio Reference pour en savoir plus sur Measurement Studio ou la commande CWVISA. Vous pouvez lancer la référence à partir de votre menu Démarrer de Windows.

Comment utiliser CWVISA ?

 

Commencez par placer la commande CWVISA sur le formulaire d'interface utilisateur. Notez que Visual Basic nomme cette commande CWVisa1. Cliquez avec le bouton droit sur la commande et sélectionnez Propriétés. Le reste de cette note d’application explique comment utiliser les pages de propriétés pour sélectionner les propriétés de ressource et de communication, tester la communication et analyser les données de l’instrument, ainsi que comment contrôler la communication par programmation via l’API simplifiée.


Détermination du nom de ressource de l'instrument

Une ressource est l'instrument ou le contrôleur série, GPIB ou VXI avec lequel vous voulez communiquer. Le nom de ressource spécifie le nom et l'emplacement exacts de la ressource VISA. Par exemple, le nom de ressource ASRL1::INSTR décrit l'instrument sur le port COM 1 de votre ordinateur, et GPIB0::13::INSTR, illustré à la figure 2, décrit un instrument GPIB à l'adresse 13.


Figure 2. Sélection d'un instrument à partir de la page Propriétés générales


Le premier défi de l’interaction avec un instrument est souvent de déterminer son adresse et son nom de ressource. CWVISA recherche sur votre ordinateur tous les ports COM disponibles et les instruments GPIB et VXI actifs ; il inclut toutes les ressources disponibles dans la liste Resource Name. Si vous connaissez le nom de ressource de l'instrument avec lequel vous voulez communiquer ou si vous voulez changer la ressource pendant l'exécution, spécifiez le nom de ressource par programmation, comme dans la ligne de code suivante :

CWVisa1.RsrcName = "GPIB::13::INSTR"

Configuration des paramètres de lecture et d'écriture

Configurez les paramètres généraux d'interface et de communication suivants sur la page de propriétés RdWrt. La figure 3 montre une façon de configurer les paramètres de communication.


Figure 3. Configuration des paramètres de communication généraux avec la page de propriétés RdWrt
Remarque : Les pages de propriétés et les options de propriété sont sensibles au contexte ; autrement dit, les options disponibles dépendent du type d'instrument avec lequel vous essayez de communiquer.

Serial I/O Protocol -- Sélectionnez Normal ou ASRL488. Utilisez le paramètre ASRL488 si votre instrument série accepte des commandes de style 488.2. Avec le paramètre ASRL488, vous pouvez communiquer avec votre instrument comme vous le feriez avec tout autre périphérique basé sur des messages, comme dans l'exemple suivant :

État gris comme variant

'Définir le transfert de données ASRL488 du protocole d'E/S
Protocole IO = cwvisaProtocolASRL488

'Effacer le périphérique
CWVisa1.Effacer

'Écrire "*IDN?" dans l'instrument
CWVisa1.Écrire "*IDN?"

'Obtenir la valeur d'interrogation série (octet d'état)
état = CWVisa1.LireSTB

'Lire et afficher la réponse dans un champ sur l'interface utilisateur
Texte1.Texte = CWVisa1.Lecture

Protocole d'E/S GPIB -- Sélectionnez Normal pour une communication IEEE488 normale ou HS488 pour un transfert de données 488.

Protocole d'E/S VXI -- Sélectionnez Normal pour la plupart des instruments VXI. Quelques instruments supportent les E/S FDC (Fast Data Channel).

Remarque : Reportez-vous à la documentation de votre instrument ou contrôleur pour déterminer les protocoles d'E/S acceptables.

Échanger des octets inverse les octets du périphérique. Activez cette option si votre périphérique est Big Endian. Reportez-vous à la documentation de votre périphérique pour déterminer si l'instrument renvoie des données au format Big Endian.

Format Big Endian (octet de poids fort en premier)
CWGPIB1.SwapBytes = Vrai

Caractère de terminaison spécifie le caractère que vous voulez utiliser pour terminer les opérations de lecture. Reportez-vous à la documentation de votre instrument pour déterminer si vous devez utiliser un caractère de terminaison et quel doit être ce caractère de terminaison.

'Utiliser le caractère de retour chariot comme caractère de terminaison
CWVisa1.Caractère de terminaison RdWrt = 13

'Activer l'utilisation de caractères de terminaison
CWVisa1.RdWrt.TerminationCharacterEnable = Vrai

Configuration des paramètres d'interface

Si vous communiquez avec des instruments série ou VXI, vous devez définir des propriétés d'interface supplémentaires.

Communication série -- Utilisez la page Propriété série pour définir le débit en bauds, les bits de données, les bits d'arrêt et la méthode de contrôle de flux, comme le montre la figure 4, ou définissez les propriétés série par programmation, comme dans les exemples suivants :

CWVisa1.DébitAsrl.Baud = 9600
CWVisa1.Asrl DataBits = cwasrlDataBits8
CWVisa1.Asrl.BitsArrêt = cwasrlBitsArrêt1
CWVisa1.Asrl.ControlFlow = cwasrlFlowNone


Figure 4. Définition des paramètres d'interface série avec la page Propriétés série


Communication VXI -- Utilisez la page de propriétés Mémoire VXI pour définir les propriétés liées à l'accès aux registres VXI. Les instruments basés registres ont des périphériques processeur appelés registres pour stocker temporairement les données pendant le traitement. Les propriétés Source et Destination s'appliquent aux opérations d'accès aux registres de haut niveau, tandis que les propriétés de Fenêtre s'appliquent aux accès aux registres de bas niveau. Spécifiez le privilège d'accès VME avec la propriété Access Priv. et utilisez Address Incr. pour incrémenter l'adresse de destination de 1 après chaque transfert en utilisant les méthodes MoveIn ou MoveOut.

La figure 5 montre une façon de transférer des données avec un instrument VXI.


Figure 5. Utilisation de la page de propriétés de mémoire VXI pour définir les propriétés d'accès aux registres VXI


Vous pouvez définir ces mêmes propriétés de communication par programmation. L'exemple suivant configure la commande CWVisa1 pour accéder à une FIFO (adresse non incrémentale) :

'Accès à la source privilégié aux données

CWVisa1.VxiMémoire.SrcAccèsPriv = cwVxiDonnéesMémoirePriv
Ordre des octets en Big Endian
CWVisa1.VxiMemory.SrcOrdreOctets = cwVxiMemoryBigEndian
'Adresse Incr. à 0
CWVisa1.MémoireVxi.IncrémentSrc = 0

Test de la communication d’instruments

Measurement Studio facilite le test de la communication afin que vous puissiez vérifier que votre instrument fonctionne.

1. Ouvrez la page de propriétés Test. Sur cette page de propriétés, vous pouvez écrire et lire des commandes basées sur des messages. Tous les instruments série et GPIB et de nombreux instruments VXI reconnaissent une variété de chaînes de commande basées sur des messages.

2. Tapez une commande dans le champ Envoyer une chaîne, comme la requête d'identification *idn?. Reportez-vous à la documentation de votre instrument pour déterminer quelles chaînes par messages il reconnaît.

Remarque : Certains instruments et contrôleurs VXI n'utilisent pas la communication par messages. Si votre périphérique VXI n'accepte pas les commandes basées messages, utilisez plutôt l'accès aux registres. Reportez-vous à la section Transfert de données pour obtenir des informations sur la communication basée sur les messages et les registres.

3. Appuyez sur Exécuter. Remarquez la réponse qui apparaît dans l'indicateur Chaîne reçue. La figure 6 montre la réponse reçue d’un simulateur de périphérique GPIB et série NI. Vous pouvez aussi appuyer sur Écrire pour écrire des données à l'instrument et Lire pour lire la réponse de l'instrument.


Figure 6. Utilisation de la page Propriétés du test pour lire et écrire un instrument


Ouvrir une session VISA

Ouvrez une session et commencez à communiquer avec l'instrument à partir de votre programme. Une session est une connexion ou un lien de la commande CWVISA à la ressource, et vous pouvez en ouvrir une avec la méthode Ouvrir. La méthode Ouvrir initialise les ressources et configure la session de communication VISA avec les paramètres que vous avez spécifiés dans les pages de propriétés ou par programmation. Par exemple, vous voudrez peut-être ouvrir une session VISA lorsque les utilisateurs cliquent sur un bouton Ouvrir une session sur la face-avant, comme dans la procédure d'événement suivante :

Ouvrir une session
Sous-OuvrirSessionPrivée_Clic()

CWVisa1.Ouvrir

Sous-élément final

Transfert de données

CWVISA peut communiquer avec les instruments et contrôleurs VXI série, GPIB et basés messages et registres. Les instruments basés messages implémentent les registres VXIbus définis et les protocoles de communication et reconnaissent le protocole série Word. Tous les instruments série et GPIB et de nombreux instruments VXI reconnaissent une variété de chaînes de commande basées sur des messages. Vous utiliserez un ensemble standard d'appels de méthode pour écrire et lire dans tous les instruments basés messages. La commande CWVISA fournit un ensemble de méthodes d'accès aux registres que vous pouvez utiliser avec des instruments VXI. Pour un accès de haut niveau aux registres, utilisez les méthodes Entrée et Sortie. Pour un accès de bas niveau aux registres, utilisez les méthodes Peek et Poke.

E/S synchrones par messages -- Utilisez les méthodes Écriture et Lecture pour effectuer des E/S synchrones par messages. Par exemple, le code suivant envoie une requête d'identification à un instrument puis affiche la réponse des instruments dans un champ sur l'interface utilisateur :

CWVisa1.Ouvrir
CWVisa1.Écrire "*IDN?" & vbLf
Texte1.Texte = CWVisa1.Lecture

E/S asynchrones par messages -- Vous pouvez utiliser WriteAsync et ReadAsync pour effectuer des E/S asynchrones afin que les opérations d'écriture et de lecture démarrent et reviennent immédiatement. Lorsqu'une méthode ReadAsync se termine, la commande CWVISA génère un événement et transmet les données à la procédure d'événement DataReady. Lorsqu'une méthode WriteAsync se termine, la commande CWVISA génère un événement WriteComplete. Vous pouvez utiliser ces méthodes et événements asynchrones pour continuer à exécuter d'autres tâches pendant de longues opérations de lecture ou d'écriture. Par exemple, lorsque vous appelez ReadAsync, votre programme termine la lecture des données et la commande CWVISA génère l'événement DataReady, qui appelle la procédure d'événement suivante :

Sous-programme privé CWVisa1_DataReady(ByVal taskNumber As Integer, data As Variant)

'Afficher les données dans un champ dès qu'elles sont lues
Texte1.Texte = données

Sous-élément final

Accès aux registres de haut niveau avec les méthodes d'entrée et de sortie -- Pour lire des données d'un registre VXI de haut niveau, utilisez les méthodes In8, In16 et In32 pour lire des valeurs 8, 16 et 32 bits, comme dans l'exemple suivant :

'Lire une valeur 32 bits de l'offset 0 dans l'espace A32 sur le bus VXI
X = CWVisa1.In32 cwVxiA32Espace, 0

Remarque : Les méthodes In ont deux paramètres : espace et offset. Le paramètre offset spécifie l'adresse dans l'espace d'adresses indiqué, par rapport à l'adresse de base.

Utilisez les méthodes Out correspondantes pour écrire des données dans l'offset spécifié, comme dans l'exemple suivant :

'Écrire la valeur 32 bits Y à partir de l'offset 0 dans l'espace local sur le bus VXI
CWVisa1.Out32 cwVxiEspaceLocal, 0, Y

Astuce Si vous voulez déplacer de grands blocs de données, utilisez les méthodes MoveIn et MoveOut et sélectionnez la propriété Address Incrément pour que les données ne soient pas déplacées vers un seul emplacement (FIFO).

Accès de bas niveau aux registres avec les méthodes Peek et Poke -- Avant d'utiliser les méthodes Peek et Poke, mappez une partie de l'espace mémoire VXI à la mémoire locale avec la méthode MapAddress. MapAddress accepte comme paramètres l'espace d'adresse, l'adresse VXI de base, la taille de la mémoire en octets et une adresse locale suggérée à laquelle la mémoire peut être mappée. La méthode renvoie l'adresse locale réelle à laquelle l'adresse VXI de base spécifiée a été mappée. Utilisez ensuite les méthodes Peek et Poke pour lire et écrire des données à partir de l'espace mappé.

Le code suivant mappe un espace dans la mémoire locale, l'observe et l'analyse, et l'annule :

Cartographier 16 octets de mémoire dans l'espace A16
X = CWVisa1.AdresseCarte(cwVxiA16Espace, &hC000, 64, Faux, 0)

'Lire la valeur 16 bits au début de l'espace d'adresse
Y = CWVisa1.Peek16(X)

'Écrire la valeur 16 bits 35 dans le registre au deuxième octet de l'espace d'adresse
CWVisa1.Poke16 X + 2, 35

Libérer l'espace dans la mémoire locale
CWVisa1.UnmapAddress

Remarque : Utilisez la méthode MapAddress pour mapper une région d'un espace d'adresses VXI à la mémoire locale. Vérifiez la taille de la fenêtre mappée et les propriétés de base de la fenêtre pour vous assurer que vous n'accédez pas à une zone en dehors de cette fenêtre.

Utilisation d'événements pour synchroniser la communication

Les événements permettent de communiquer entre les ressources VISA et votre programme. Si vous voulez que votre programme réponde à l'une des conditions suivantes, définissez des procédures d'événement pour l'événement approprié :

  • ServiceRequest -- Informe votre programme lorsqu'un périphérique demande un service à son contrôleur. Cet événement renvoie l'octet d'état obtenu en interrogeant en série le périphérique qui génère la requête. Cet événement est principalement produit par les instruments GPIB qui activent la ligne GPIB SRQ et les instruments VXI basés messages.
  • Déclenchement -- Notifie votre programme lorsqu'un périphérique active une ligne de déclenchement sur le fond de panier VXI. L'événement VISA renvoyé contient une propriété TriggerId spécifiant la ligne de déclenchement à laquelle l'événement est associé.
  • VxiSignalProc -- Notifie votre programme lorsqu'un périphérique active une interruption sur le fond de panier VXI ou génère un signal VXI. Lorsqu'une interruption ou un signal VXI se produit, la valeur StatusId est renvoyée par l'événement VXISignalProc. Les huit bits inférieurs du StatusId sont définis à l'adresse logique de l'instrument qui crée le signal ou l'interruption.
  • InterruptionVxiVme -- Notifie votre programme lorsqu'un instrument active une interruption sur le fond de panier VXI. Cet événement est semblable à l'événement VxiSignalProc, sauf qu'il n'est produit que pour les interruptions VXI ou VME, pas pour les signaux.


La commande CWVISA place les événements dans une file d'attente afin que vous puissiez y accéder et les gérer ultérieurement. CWVISA appelle automatiquement la méthode EnableEvent sur tous les types d'événements, à l'exception du déclenchement lorsqu'une méthode Ouvrir est appelée. Vous pouvez utiliser la méthode ActiverÉvénement pour ajouter uniquement les événements que vous voulez placer dans la file d'attente d'événements. Par exemple, le code Visual Basic suivant active la file d'attente d'événements pour l'événement VxiVmeInterrupt de sorte que lorsque cet événement se produit, il est placé dans une file d'attente au lieu d'appeler sa procédure d'événement :

CWVisa1.ActiverÉvénement cwvisaÉvénementVXIVMEInterruption

Le code Visual Basic suivant vérifie la file d'attente d'événements pour déterminer si un événement VXIVMEInterrupt se trouve dans la file d'attente et, le cas échéant, obtient la valeur StatusId de l'interruption :

Événement Retour gris comme CWVisaEvent
Stat dimin En booléen

stat = CWVisa1.WaitOnEvent(cwvisaEventVXIVMEInterrupt, 0, ReturnEvent)
Si stat Alors

'Afficher StatusID dans un champ sur l'interface utilisateur
Texte1.Texte = ÉvénementRetour.IDÉtat

End If

Si vous êtes préoccupé par des événements qui se produisent à certains points de votre programme, vous pouvez vider la file d'attente ou désactiver la file d'attente d'événements. Pour vider la file d'attente de tous les événements du même type, utilisez la méthode DiscardEvents :

CWVisa1.DiscardEvents cwvisaEventVXIVMEInterrupt

Pour désactiver le placement d'événements dans la file d'attente, utilisez la méthode DésactiverÉvénement :

CWVisa1.Interruption cwvisaEventVXIVMEDésactivé

Analyse des données

Les instruments sont connus pour renvoyer des chaînes binaires cryptiques ou des chaînes contenant une combinaison d'informations d'en-tête et de données. Il est souvent frustrant d'analyser ces chaînes dans un format de données utilisable. La commande CWVISA fournit une analyse de données intégrée pour faciliter le travail avec des données d'instruments.

Utilisez la page de propriétés d'Analyse pour créer une tâche d'analyse. Une tâche d'analyse décrit comment vous voulez analyser les données. Vous exécutez ensuite cette tâche à partir de votre code pour analyser automatiquement les données renvoyées par un instrument. Vous pouvez spécifier autant de tâches d'analyse que nécessaire afin de pouvoir analyser différemment chaque type d'interaction avec un instrument.

La commande CWVISA fournit une tâche intégrée appelée analyseur de nombres. Le parseur de nombres convertit une chaîne délimitée en tableau de nombres, en enlevant les en-têtes et d'autres informations non numériques. Supposons, par exemple, que vous ayez un instrument qui réponde à la commande DONNÉES ? en renvoyant une liste de nombres séparés par des virgules précédée de quelques informations d'en-tête. La chaîne peut ressembler à WFM3.246,3.295,4.653,3.334. Sans la tâche Number Parser, vous analyseriez la chaîne pour récupérer chaque nombre représenté en ASCII et le convertir en type numérique réel. Avec la tâche Parseur de nombres, vous analysez et lisez des données avec le même appel de méthode. Le code Visual Basic suivant montre comment ouvrir une session VISA, interroger un instrument par messages avec la commande Données ? et lire les données analysées :

'Variant contiendra un tableau de doubles - les données analysées
Données grises comme variant
'Ouvrir une session VISA
CWVisa1.Ouvrir
Écrire des données ? dans l'instrument
CWVisa1.Écrire "Données?"
« Lire la réponse
données = CWVisa1.Tasks.Item("Number Parser").Read

Astuce : Pour obtenir des informations sur les techniques d'analyse avancées utilisant la commande CWVISA, reportez-vous à la note d'application 148, Parsing Instrument Data in Visual Basic.

Fermeture de la session VISA

Utilisez la méthode Fermer pour libérer des ressources et terminer la session VISA. Dans la procédure d'événement suivante, la session VISA se termine lorsque les utilisateurs cliquent sur le bouton de commande Fermer la session :

'Fermer la session

SessionSous FermeturePrivée_Clic()

CWVisa1.Fermer

Sous-élément final

Conclusion


NI VISA est une solution pour le contrôle d’instruments divers. Measurement Studio fournit des pages de propriétés grâce auxquelles vous pouvez intégrer de manière interactive le contrôle d'instruments VISA dans votre programme. Par exemple, la commande CWVISA trouve toutes les ressources VISA et vous n'avez donc qu'à choisir parmi celles listées. CWVISA propose une page de propriétés Test pour interagir avec les instruments et résoudre les problèmes de communication. En utilisant la page de propriétés d'Analyse, vous pouvez spécifier des tâches d'analyse pour que les données soient renvoyées à votre programme dans un format utilisable. Grâce à l'API VISA Measurement Studio, vous pouvez effectuer une communication synchrone et asynchrone avec des instruments série, GPIB et VXI et utiliser la gestion d'événements et la file d'attente pour accélérer l'exécution de votre programme.

Was this information helpful?

Yes

No