Logs
Consultez les logs.
OK
Liste des données
Consultez la liste des données.
OK
Loading...
Formulaire
Saisissez vos données.
Enregistrer
Annuler

Vues
361

Introduction


NI-VISA est un pilote d'instrument NI (National Instruments) qui est une implémentation de la norme d'E/S VISA (Virtual Instrument Software Architecture). VISA est une norme de configuration, de programmation et de dépannage des systèmes d'instrumentation comprenant des interfaces GPIB, VXI, PXI, série (RS232/RS485), Ethernet/LXI et/ou USB.

image.png


Création d'un projet C# Windows Forms sous Visual Studio


Nous utilisons l'éditeur (Visual Studio) pour créer un projet C# avec la bibliothèque Windows Forms du Framework .NET.


Installer le framework .NET


// Visual Studio (Installation .NET)
Outils > Obtenir les outils et fonctionnalités
Cocher > Développement .NET Desktop
Modifier > Oui

Créer le projet C# Windows Forms


// Visual Studio (Création Projet) 
Fichier > Nouveau > Projet
Tous les langages > C#
Toutes les plateformes > Windows
Tous les types de projet > Bureau
Modèle de projet > Application Windows Forms
Suivant
...
Nom de projet > OscilloscopeGUI
Emplacement > v01
Nom de la solution > OscilloscopeGUI
Suivant
...
Infrasctructure > .NET 8.0 (Prise en charge à long terme)
Créer

Visualiser les sources C#


// OscilloscopeGUI\Program.cs
namespace OscilloscopeGUI
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Application.Run(new Form1());
        }
    }
}

// OscilloscopeGUI\Form1.cs
namespace OscilloscopeGUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

Exécuter le projet


// Visual Studio (Exécution Projet)
Déboguer > Démarrer le débogage

image.png


Renommage du fichier (Form1.cs) sous Visual Studio


Nous utilisons l'éditeur (Visual Studio) pour renommer le fichier (Form1.cs) en (FrmMain.cs).


Renommer le fichier


// Visual Studio (Renommage)
Form1 > Clic droit > Renommer > FrmMain.cs > Oui

Visualiser le renommage


// OscilloscopeGUI\Program.cs
namespace OscilloscopeGUI
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Application.Run(new FrmMain());
        }
    }
}

// OscilloscopeGUI\FrmMain.cs
namespace OscilloscopeGUI
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }
    }
}

Exécuter le projet


// Visual Studio (Exécution Projet)
Déboguer > Démarrer le débogage

image.png


Configuration du package C# sous VSCode


Nous utilisons l'éditeur (VSCode) pour installer l'extension (C# Dev Kit) afin d'éditer et formatter des fichiers C#.


Installer l'extension Dev Kit


// VSCode (Extension)
VSCode > Extensions > C# Dev Kit > Install

Se connecter au compte Microsoft


// VSCode (Sign In)
VSCode > C# > Sign In
Allow

// Chrome (Sign In)
Email > youremail@domain.com > Suivant
Mot de passe > your.account.password > Suivant

// VSCode (Sign In)
VSCode > C#


Configuration des propriétés d'un formulaire C# Windows Forms


Nous utilisons le designer (Windows Forms) de l'éditeur (Visual Studio) pour configurer les propriétés du formulaire principale (FrmMain.cs).


Configurer les propriétés


// Visual Studio (Designer)
FrmMain.cs > Clic droit > Concepteur de vues
FrmMain.cs > Clic droit > Propriétés
...
Form > Props > Name > FrmMain
Form > Props > Text > ReadyScope - Oscilloscope Numérique
Form > Props > FormBorderStyle > FixedSingle
Form > Props > Icon > data\img\app-logo.ico
Form > Event > Load > FrmMain_Load
Form > Event > FormClosing > FrmMain_FormClosing
...
ComboBox > Props > Name > cmbResources
ComboBox > Props > Anchor > Top, Left, Right
...
Button > Props > Name > btnRefresh
Button > Props > Text > &Refresh
Button > Props > Anchor > Top, Left, Right
Button > Event > Click > btnRefresh_Click
...
Button > Props > Name > btnConnect
Button > Props > Text > &Connect to selected device
Button > Event > Click > btnConnect_Click
...
GroupBox > Props > Name > grbAcquisition
GroupBox > Props > Text > Acquisition
GroupBox > Props > Anchor > Top, Left, Right
...
Label > Props > Name > lblChannels
Label > Props > Text > Channels
...
CheckBox > Props > Name > chbChannel1
CheckBox > Props > Text > Channel 1
CheckBox > Props > Checked > True
CheckBox > Event > CheckedChanged > UpdatePoints
...
CheckBox > Props > Name > chbChannel2
CheckBox > Props > Text > Channel 2
CheckBox > Event > CheckedChanged > UpdatePoints
...
Label > Props > Name > lblMemoryDepth
Label > Props > Text > Memory Depth
...
Panel > Props > Name > pnlMemoryDepth
...
RadioButton > Props > Name > radNormalMemoryDepth
RadioButton > Props > Text > Normal
RadioButton > Props > Checked > True
RadioButton > Event > CheckedChanged > UpdatePoints
...
RadioButton > Props > Name > radLongMemoryDepth
RadioButton > Props > Text > Long
RadioButton > Event > CheckedChanged > UpdatePoints
...
Label > Props > Name > lblPointsMode
Label > Props > Text > Points Mode
...
RadioButton > Props > Name > radNormalPointsMode
RadioButton > Props > Text > Normal
RadioButton > Props > Checked > True
RadioButton > Event > CheckedChanged > UpdatePoints
...
RadioButton > Props > Name > radMaximumPointsMode
RadioButton > Props > Text > Maximum
RadioButton > Event > CheckedChanged > UpdatePoints
...
Label > Props > Name > lblPoints
Label > Props > Text > Points
...
Label > Props > Name > lblPointsValue
Label > Props > Text > 600
...
Label > Props > Name > lblGnuPlotPath
Label > Props > Text > Gnu Plot Path
...
TextBox > Props > Name > txbGnuPlotPath
TextBox > Props > Anchor > Top, Right
...
Label > Props > Name > lblOutput
Label > Props > Text > Output
...
RadioButton > Props > Name > radGnuPlot
RadioButton > Props > Text > Gnu Plot
...
RadioButton > Props > Name > radPngImage
RadioButton > Props > Text > PNG Image
RadioButton > Props > Checked > True
...
Button > Props > Name > btnSave
Button > Props > Text > &Save CSV and output
Button > Props > Anchor > Top, Bottom, Left, Right
Button > Event > Click > btnSave_Click
...

image.png


// Fichiers
Ajouter le fichier > data\img\app-logo.ico

Visualiser les fichiers


// OscilloscopeGUI\Program.cs
namespace OscilloscopeGUI
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Application.Run(new FrmMain());
        }
    }
}

// OscilloscopeGUI\FrmMain.cs
namespace OscilloscopeGUI
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }
    }
}

Exécuter le projet


// Visual Studio (Exécution Projet)
Déboguer > Démarrer le débogage

image.png


Configuration de la liste déroulante des ressources


- Nous éditons le fichier (FrmMain.cs) pour configurer la liste déroulante des ressources (cmbResources).


Configurer la liste déroulante


// OscilloscopeGUI\FrmMain.cs
namespace OscilloscopeGUI
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }
        ...
        private void FrmMain_Load(object sender, EventArgs e)
        {
            RefreshDevices();
        }
        ...
        private void btnRefresh_Click(object sender, EventArgs e)
        {
            RefreshDevices();
        }
        ...
        private void RefreshDevices()
        {
            cmbResources.Items.Clear();
            cmbResources.Items.AddRange(GetResources());
            cmbResources.SelectedIndex = cmbResources.Items.Count - 1;
        }
        ...
        private string[] GetResources()
        {
            string[] results = new string[] {
                "Resource 1",
                "Resource 2",
                "Resource 3",
            };
            return results;
        }
    }
}

Installer l'extension CSharpier sous VSCode


// VSCode (Extension C#)
VSCode > Extensions > CSharpier - Code formatter > Install
...
Enregistrer un fichier C#
Le code du fichier C# est automatiquement formaté

Exécuter le projet


// Visual Studio (Exécution Projet)
Déboguer > Démarrer le débogage
...
Les ressources sont bien chargée
La dernière ressource est sélectionnée
...
Sélectionner la première ressource (Resource 1)
Cliquer sur le bouton (Refresh)
...
Les ressources sont bien chargée
La dernière ressource est sélectionnée

image.png


Création d'un projet C# de bibliothèque de classes WPF sous Visual Studio


- Nous utilisons l'éditeur (Visual Studio) pour créer la bibliothèque de classes C# WPF (OscilloscopeLIB) sous l'éditeur (Visual Studio).


Créer le projet de bibliothèque


// Visual Studio (Création Projet)
Fichier > Nouveau > Projet
Tous les langages > C#
Toutes les plateformes > Windows
Tous les types de projet > Bureau
Sélectionner > Bibliothèque de classes WPF
Suivant
...
Nom du projet > OscilloscopeLIB
Emplacement > v02
Solution > OscilloscopeLIB
Suivant
...
Infrasctructure > .NET 8.0 (Prise en charge à long terme)
Créer

Renommer la classe


// Visual Studio (Renommage)
Class1.cs > Clic droit > Renommer > Oscilloscope.cs > Oui 

Editer la bibliothèque


// OscilloscopeLIB\Oscilloscope.cs
public class Oscilloscope
{
    public static string[] GetResources()
    {
        string[] results = [
            "Ressource 1",
            "Ressource 2",
            "Ressource 3"
        ];
        return results;
    }
}

Générer la bibliothèque


// Visual Studio (Exécution)
Générer > Générer la solution

image.png


Configuration d'une bibliothèque de classes C# WPF sous Visual Studio


Nous éditons le fichier (FrmMain.cs) pour configurer la bibliothèque de classes WPF (OscilloscopeLIB) dans le projet (OscilloscopeGUI) sous l'éditeur (Visual Studio).


Charger la bibliothèque


// Visual Studio (Référence OscilloscopeLIB)
OscilloscopeGUI > Clic droit > Ajouter > Référence de projet
Parcourir > OscilloscopeLIB\bin\Debug\net8.0-windows\OscilloscopeLIB.dll
Ajouter > OK
...
OscilloscopeGUI > Dépendances > Assemblys > OscilloscopeLIB

image.png

Configurer la bibliothèque


// OscilloscopeGUI\FrmMain.cs
using OscilloscopeLIB;
...
namespace OscilloscopeGUI
{
    public partial class FrmMain : Form
    {
        ...
        private void FrmMain_Load(object sender, EventArgs e)
        {
            RefreshDevices();
        }
        ...
        private void btnRefresh_Click(object sender, EventArgs e)
        {
            RefreshDevices();
        }
        ...
        }
        private void RefreshDevices()
        {
            cmbResources.Items.Clear();
            cmbResources.Items.AddRange(Oscilloscope.GetResources());
            cmbResources.SelectedIndex = cmbResources.Items.Count - 1;
        }
        ...
    }
}

Exécuter le projet


// Visual Studio (Exécution Projet)
Déboguer > Démarrer le débogage
...
Les ressources sont bien chargée
La dernière ressource est sélectionnée
...
Sélectionner la première ressource (Resource 1)
Cliquer sur le bouton (Refresh)
...
Les ressources sont bien chargée
La dernière ressource est sélectionnée

image.png


Configuration des packages C# NI-VISA (National Instruments) sous Visual Studio


- Nous éditons les fichiers (FrmMain.cs), (Oscilloscope.cs) pour configurer les packages (NI-VISA) afin de communiquer avec les périphériques NI (National Instruments) sous Windows.


Télécharger les packages NI-VISA


// Chrome (NI-VISA)
https://www.ni.com/en/support/downloads/drivers/download.ni-visa.html
...
Supported OS > Windows
Version > 2024 Q4
Download

Installer les packages NI-VISA


// Windows (Installation NI-VISA)
ni-visa_24.8_online.exe > Double clic > Oui
Cocher > Je accepte les 2 contrats de licence ci-dessus > Suivant
Cocher > Désactivation du démarrage rapide de Windows
Suivant > Suivant

// Windows (Installation Supplémentaires NI-VISA)
Cocher > Installeur de certificats NI
Cocher > NI I/O Trace
Cocher > NI-VISA - Assistant de développement du driver
Cocher > NI-VISA - Exemples C
Cocher > NI-VISA - Moteur d'exécution pour.NET
Cocher > NI-VISA - Support de configuration
Cocher > NI-VISA - Support de développement .NET
Cocher > NI-VISA Interactive Control
Cocher > PXI Platform Services - Moteur d'exécution
Suivant
Cocher > Je accepte les 2 contrats de licence ci-dessus > Suivant
Suivant > Suivant

Configurer la bibliothèque (NationalInstruments.Visa)


// Visual Studio (Référence NationalInstruments.Visa)
OscilloscopeLIB > Clic droit > Ajouter > Référence de projet
Parcourir > C:\Program Files (x86)\IVI Foundation\VISA\Microsoft.NET\Framework32\v4.0.30319\NI VISA.NET 24.8\
Nom du fichier > NationalInstruments.Visa.dll
Ajouter > OK
...
OscilloscopeLIB > Dépendances > Assemblys > NationalInstruments.Visa

image.png

Configurer la bibliothèque (Ivi.Visa)


// Visual Studio (Référence Ivi.Visa)
OscilloscopeGUI > Clic droit > Ajouter > Référence de projet
Parcourir > C:\Program Files (x86)\IVI Foundation\VISA\Microsoft.NET\Framework32\v2.0.50727\VISA.NET Shared Components 7.2.0\
Nom du fichier > Ivi.Visa.dll
Ajouter > OK
...
OscilloscopeGUI > Dépendances > Assemblys > Ivi.Visa

image.png

Utiliser les packages NI-VISA


// OscilloscopeGUI\FrmMain.cs
...
namespace OscilloscopeGUI
{
    public partial class FrmMain : Form
    {
        ...
        private void FrmMain_Load(object sender, EventArgs e)
        {
            RefreshDevices();
        }
        ...
        private void RefreshDevices()
        {
            cmbResources.Items.Clear();
            cmbResources.Items.AddRange(Oscilloscope.GetResources());
            cmbResources.SelectedIndex = cmbResources.Items.Count - 1;
        }
        ...
    }
}

// OscilloscopeLIB\Oscilloscope.cs
using System.Diagnostics;
using NationalInstruments.Visa;
...
namespace OscilloscopeLIB
{
    public class Oscilloscope
    {
        static ResourceManager _resManager = new ResourceManager();
        ...
        public static string[] GetResources()
        {
            string[] results = new string[] { };
            try
            {
                results = _resManager.Find("?*").ToArray();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            return results;
        }
    }
}

Exécuter le projet


// Visual Studio (Exécution Projet)
Déboguer > Démarrer le débogage
...
Les ressources sont bien chargée
La dernière ressource est sélectionnée
...
Sélectionner la première ressource (Resource 1)
Cliquer sur le bouton (Refresh)
...
Les ressources NI-VISA sont bien chargée
La dernière ressource NI-VISA est sélectionnée

image.png


Configuration du débogage C# sous Visual Studio


Nous utilisons l'éditeur (Visual Studio) pour configurer le débogage C#.


Placer les points d'arrêt


// Visual Studio (Points d'arrêt)
Visual Studio > Placer les points d'arrêt aux lignes souhaitées
...
Cliquer sur le côté gauche d'une ligne pour placer un point d'arrêt

image.png

Démarrer le débogueur


// Visual Studio (Exécution Projet)
Déboguer > Démarrer le débogage
...
La fenêtre principale s'affiche
...
Cliquer sur le bouton (Connect to selected device)
...
Le débogueur s'arrête au premier point d'arrêt
...
Les contrôleurs de débogage s'affiche
...
La pile des appels est accessible
...
Le contenu des variables est accessible

Visualiser les contrôleurs de débogage


// Visual Studio (Contrôleurs de débogage) 
Débogueur bloqué à un point d'arrêt
...
Les contrôleurs de débogage s'affiche

image.png

Visualiser la pile des appels


// Visual Studio (Pile des appels)
Débogueur bloqué à un point d'arrêt
...
Cliquer sur la liste déroulante > Frame de pile
...
La pile des appels apparaît

image.png

Visualiser le contenu d'une variable


// Visual Studio (Contenu des variables)
Débogueur bloqué à un point d'arrêt
...
Faire survoler la souris sur une variable
...
Le contenu de la variable apparaît

image.png