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.
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.
VISA offre les avantages suivants :
Fonctionnalité intégrée pour la programmation d’instruments dans un ensemble de commandes très compact.
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.
| 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.
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.
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).
É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
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.
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.
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.
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()
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)
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
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
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é :
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
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
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()
Sous-élément final
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.