XL 2016 Pilotage d'instrument dans Excel via VBA et commandes SCPI (NI-VISA)

Fred8

XLDnaute Nouveau
Bonjour,
Je me permets de solliciter la communauté pour une problématique (pour le moment) très simple.
Je désire mettre ne place des macros de commandes pour des instruments de mesure.
Pourquoi passer par Excel et VBA ? Simplement pour s'intégrer à des relevés Excel existants, et présents sur des postes de production uniquement équipés de Pack Office.

Ce que je veux faire là, maintenant :
Initier une commande d'identification à un instrument (un générateur de fonction Rigol DG822 pour être précis), via une commande USB-VISA.
Pour ceux qui ne connaissent pas VISA, c'est une "Virtual Instrument Software Architecture", une couche d'abstraction normalisée permettant de dialoguer avec des instruments de mesure sans considération du layer physique, qui peut tout à la fois être de l'éthernet, de l'USB, du GPIB. Certaines commandes sont standard, d'autres nécessitent un pilote fournit pas le constructeur.

- Mon matériel est un générateur Rigol DG822, utilisant les pilotes VISA standards.
- J'ai installé la couche de communication VISA via les utilitaires Rigol (Ultra-Sigma pour les initiés).
- Rigol fournit l'exemple de communication via Excel-VBA, (https://iosignal.fi/wp-content/uploads/DG800_ProgrammingGuide_EN.pdf)
- Mon projet VBA est initié exactement comme décrit dans le guide fabricant, avec un bouton lançant une macro, la macro allant lire les coordonnées de l'appareil dans la première cellule, et se chargeant normalement d'envoyer la commande d'identification et de lire la valeur en retour.
- Mes références VBA sont activées (VISA COM 5.5 Type Library).

Le code exemple, tel que je l'ai recopié :

VB:
Sub QueryIdn()
    ' Message de début de communication
    CreateObject("Wscript.shell").Popup "Configuration du DG822 en cours", 2, "Excel VBA"

    Dim viDefRm As Long
    Dim viDevice As Long
    Dim viErr As Long
    Dim cmdStr As String
    Dim idnStr As String * 128
    Dim ret As Long

    'Turn on the device, and the device resource descriptor is in CELLS(1,2) of SHEET1'
    viErr = visa.viOpenDefaultRM(viDefRm)
    viErr = visa.viOpen(viDefRm, Sheet1.Cells(1, 2), 0, 5000, viDevice)

    'Send request, read the data, and the return value is in CELLS(2,2) of SHEET1'
    cmdStr = "*IDN?"
    viErr = visa.viWrite(viDevice, cmdStr, Len(cmdStr), ret)
    viErr = visa.viRead(viDevice, idnStr, 128, ret)
    Sheet1.Cells(2, 2) = idnStr

    'Turn off the device'
    visa.viClose (viDevice)
    visa.viClose (viDefRm)
    
End Sub

Ce qui ne va pas : Erreur 424, la librairie VISA COM n'est pas ouverte, je n'ai accès à aucun de ses objets !!! L'exécution bloque imparablement au premier "viOpen".
Vous avez une idée géniale pour résoudre çà ? Les envois de commandes à l'instrument fonctionnent très bien avec l'outil en lignes de commandes du fabricant (l'instrument répond bien aux sollicitations, il n'y est pour rien dans l'histoire).
Merci !!
 
Solution
Autre question tout aussi stupide : Avez vous testé le fichier XLS qu'ils donnent en exemple dans :

Ils font des déclarations différentes :
VB:
    Dim ioMgr As VisaComLib.ResourceManager
    Set ioMgr = New VisaComLib.ResourceManager
    Dim str As String
    Dim cmd As String
    Dim delaytime As Long: delaytime = 500
    Dim LongDelayTime As Long: longtimedelay = 800
    Dim stringcode As String

    Dim RigolVisaA As VisaComLib.FormattedIO488
    Set RigolVisaA = New VisaComLib.FormattedIO488
    
    instr_id = Worksheets(1).installed_instruments_combo.Text
    
    Set RigolVisaA.IO = ioMgr.Open(instr_id)

Fred8

XLDnaute Nouveau
Bonjour,
Une petite précision !
Être admin de son poste ne veut pas dire qu'Excel est exécuté en mode admin.

Il faut faire un click droit sur le raccourci Excel et choisir dans le menu exécuter en tant qu'admin même si tu l'es sur ton poste !

Tout à fait, mais cela a une importance sur la capacité à installer les pilotes et autres librairies fournies ici soit par National Instruments, soit par Rigol via leur solft Ultra Sigma. J'ai exécuté Excel en mode Admin mais sans plus de résultat initialement. Le code fourni par Rigol n'était simplement pas le bon, pas à jour.
 

Fred8

XLDnaute Nouveau
As-tu essayé le code fourni dans ton premier post en remplaçant visa.xxxx par VisaComLib.xxxx ?
Cà ne marche pas directement, non. Ce qui est fait systématiquement dans le code qui tourne, c'est de scanner les appareils sur le bus pour ensuite aller en interroger un en particulier. Dans le code initial, il n'y a que l'interrogation de l'équipement, pas le scan du bus, et même si la chaîne de caractères issue du scan-bus est connue, il est probable que cette interrogation déclenche l'écoute de l'équipement pour les futures commandes.
Je débute en VISA et commandes SCPI, donc pour le moment je teste beaucoup de choses, en même temps que j'utilise VB plus que je ne le maîtrise, mais j'en saurai plus dans les semaines qui viennent.
 

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG