Knowledge Base

Programmation d'instrumentation avec VB.NET

Cet article de la base de connaissances présente la programmation d'un produit d'alimentation programmable Magna-Power à l'aide du langage de programmation VB.NET. VB.NET est un langage polyvalent intégré au Microsoft .NET Framework, reconnu pour sa simplicité et sa facilité d'utilisation dans le développement d'applications Windows. Ses fonctionnalités robustes en font un excellent choix pour créer des programmes permettant de contrôler, effectuer des mesures et même créer des graphiques pour l'instrumentation programmable. De plus, le support étendu de Magna-Power pour les commandes standard pour l'instrumentation programmable (SCPI) signifie que les produits de l'entreprise peuvent être facilement contrôlés en VB.NET avec des commandes simples et intuitives.

Les produits Magna-Power prennent en charge une variété d'interfaces de communication, notamment RS-232, TCP/IP Ethernet, USB, RS-485 et IEEE-488 GPIB. Malgré ces différentes interfaces, les commandes SCPI sont identiques pour une série de produits donnée. Les commandes SCPI sont documentées dans le manuel d'utilisation de la série de produits correspondante. Lors de la création d'un programme VB.NET, la seule différence entre les interfaces réside dans les paramètres de connexion de l'appareil.

Interfaces de communication

Connexion USB, série ou RS-485

Pour les connexions USB, série ou RS-485, VB.NET utilise la classe System.IO.Ports.SerialPort pour créer une connexion série avec l'instrument :

Dim conn As New IO.Ports.SerialPort("COM4", 115200)
conn.Open()

Le débit en bauds série pour les produits xGen est de 115200, tandis que le débit en bauds série pour les produits non-xGen est de 19200. Le nom du port est défini par votre système d'exploitation. Sous Windows, ce port se trouve dans le Gestionnaire de périphériques.

L'envoi et la réception ultérieurs de commandes via la connexion série se feront comme suit :

conn.WriteLine("*IDN?")
Dim response As String = conn.ReadLine()
Console.WriteLine(response)

Connexion TCP/IP Ethernet

Pour les connexions TCP/IP Ethernet, VB.NET utilise la classe System.Net.Sockets.TcpClient :

Dim client As New Net.Sockets.TcpClient("192.168.0.86", 50505)
Dim stream As Net.Sockets.NetworkStream = client.GetStream()
Dim writer As New IO.StreamWriter(stream)
Dim reader As New IO.StreamReader(stream)
writer.AutoFlush = True

L'envoi et la réception ultérieurs de commandes via la connexion TCP/IP Ethernet se feront comme suit :

writer.WriteLine("*IDN?")
Dim response As String = reader.ReadLine()
Console.WriteLine(response)

Connexion IEEE-488 GPIB

Pour les connexions IEEE-488 GPIB, vous pouvez utiliser les bibliothèques fournies par le fabricant de votre matériel GPIB, telles que NI-488.2 de National Instruments ou IO Libraries Suite de Keysight. En VB.NET, vous pouvez utiliser la bibliothèque VISA.NET pour interfacer avec les instruments GPIB.

Exemple utilisant VISA.NET :

Tout d'abord, assurez-vous que la bibliothèque VISA.NET est installée et ajoutez une référence à Ivi.Visa dans votre projet.

Imports Ivi.Visa

Dim rm As IResourceManager = GlobalResourceManager.Instance
Dim session As IMessageBasedSession = CType(rm.Open("GPIB0::12::INSTR"), IMessageBasedSession)

' Subsequent sending and receiving of commands over IEEE-488 GPIB connection:
session.FormattedIO.WriteLine("*IDN?")
Dim response As String = session.FormattedIO.ReadLine()
Console.WriteLine(response)

Exemples détaillés

Les exemples suivants fournissent des programmes VB.NET plus détaillés utilisant une alimentation xGen MagnaDC. La programmation d'une alimentation programmable à courant continu MagnaDC non-xGen en VB.NET sera presque identique, avec des modifications subtiles des commandes SCPI telles que documentées dans le manuel d'utilisation de la série de produits correspondante.

Exemple 1 : Contrôle de base via TCP/IP Ethernet

Cet exemple de base crée une connexion TCP/IP Ethernet, envoie quelques commandes d'initialisation, active la sortie DC, augmente le niveau de courant à 5 A, attend 20 secondes, puis s'arrête.

Imports System.Net.Sockets
Imports System.IO
Imports System.Threading

Module Program
    Sub Main()
        ' Create a TCP/IP client and connect to the instrument
        Dim client As New TcpClient("192.168.0.86", 50505)
        Dim stream As NetworkStream = client.GetStream()
        Dim writer As New StreamWriter(stream)
        Dim reader As New StreamReader(stream)
        writer.AutoFlush = True

        ' Send SCPI command requesting the product to identify itself
        writer.WriteLine("*IDN?")
        ' Receive the product's response and display it in the console
        Dim response As String = reader.ReadLine()
        Console.WriteLine(response)

        ' Configure the MagnaDC for local control
        writer.WriteLine("CONF:SOUR 0")
        ' Set the DC output current to 0 A before enabling DC output
        writer.WriteLine("CURR 0")
        ' Enable the MagnaDC power supply output
        writer.WriteLine("OUTP:START")
        ' Set the DC output current to 5 A
        writer.WriteLine("CURR 5")

        ' Wait 20 seconds
        Thread.Sleep(20000)

        ' Disable the DC output
        writer.WriteLine("OUTP:STOP")

        ' Close the communication channel to the product
        writer.Close()
        reader.Close()
        client.Close()
    End Sub
End Module

Exemple 2 : Connexion série avec consignes de courant

Cet exemple crée une connexion série avec le produit, détermine de quel produit il s'agit, puis envoie une séquence de commandes de courant avec 20 secondes entre chaque niveau de courant. Ce type de programme peut être étendu pour parcourir également des valeurs de tension, de puissance et de résistance.

Imports System.IO.Ports
Imports System.Threading

Module Program
    Sub Main()
        ' Create a serial connection object with default baud rate for MagnaLOADs
        Dim conn As New SerialPort("COM4", 115200)
        conn.Open()

        ' Send SCPI command requesting the product to identify itself
        conn.WriteLine("*IDN?")
        ' Receive the product's response and display it in the console
        Dim response As String = conn.ReadLine()
        Console.WriteLine(response)

        ' Create an array of current set points
        Dim currSetPoints() As Integer = {50, 100, 150, 250}

        ' Configure the MagnaDC power supply for local control
        conn.WriteLine("CONF:SOUR 0")
        ' Enable the MagnaDC power supply output
        conn.WriteLine("OUTP:START")

        ' Loop through each current set point
        For Each currSetpoint In currSetPoints
            Console.WriteLine($"Setting Current to {currSetpoint} A")
            conn.WriteLine($"CURR {currSetpoint}")
            Thread.Sleep(20000) ' Wait 20 seconds
        Next

        ' Disable the MagnaDC power supply output
        conn.WriteLine("OUTP:STOP")
        ' Close the communication channel to the product
        conn.Close()
    End Sub
End Module

Exemple 3 : Décharge d'une batterie et tracé des données

Dans cet exemple, une alimentation xGen MagnaDC est programmée pour décharger une batterie en utilisant des points de consigne et des durées lus à partir d'un fichier de valeurs séparées par des virgules (.csv), mesurer l'entrée CC à l'aide des commandes de mesure haute précision du produit, puis fournir un tracé des données mesurées en fonction du temps. Ce programme pourrait être étendu pour générer un rapport de test PDF, intégrant les données mesurées, les tracés ainsi que les informations provenant d'autres instruments.

Pour gérer les fichiers CSV et le tracé en VB.NET, vous pouvez utiliser les classes intégrées et l'espace de noms System.Windows.Forms.DataVisualization.Charting pour la création de graphiques.

Étapes :

  1. Créez une application Windows Forms.
  2. Ajoutez un contrôle Chart à votre formulaire depuis la boîte à outils.
  3. Utilisez le code suivant dans le code-behind de votre formulaire.
Imports System.IO.Ports
Imports System.Threading
Imports System.IO
Imports System.Windows.Forms.DataVisualization.Charting

Public Class Form1
    Private conn As SerialPort
    Private outputSamples As New List(Of OutputSample)()

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Initialize the serial connection with the default baud rate for xGen products
        conn = New SerialPort("COM8", 115200)
        conn.Open()

        ' Configure the MagnaDC for local control
        conn.WriteLine("CONF:SOUR 0")
        ' Enable the MagnaDC power supply output
        conn.WriteLine("OUTP:START")

        ' Read the CSV file containing current set points and durations
        Dim inputSamples As List(Of InputSample) = ReadCsvFile("example_profile.csv")

        ' Record the start time
        Dim testStartTime As DateTime = DateTime.Now

        ' Loop through each input sample
        For Each sample In inputSamples
            ' Set the current set point
            conn.WriteLine($"CURR {sample.CurrentSetPoint}")
            ' Calculate the stop time
            Dim stopTime As DateTime = DateTime.Now.AddSeconds(sample.Duration)

            ' Collect measurements until the stop time
            While DateTime.Now < stopTime
                ' Request measurements from the device
                conn.WriteLine("MEAS:ALL?")
                ' Read the response
                Dim response As String = conn.ReadLine()
                Dim measurements() As String = response.Split(","c)

                ' Parse and store the measurements
                If measurements.Length >= 3 Then
                    Dim curr As Double = Double.Parse(measurements(0))
                    Dim volt As Double = Double.Parse(measurements(1))
                    Dim timeElapsed As Double = (DateTime.Now - testStartTime).TotalSeconds
                    outputSamples.Add(New OutputSample With {
                        .Current = curr,
                        .Voltage = volt,
                        .Time = timeElapsed
                    })
                End If
                Thread.Sleep(500) ' Wait for 0.5 seconds
            End While
        Next

        ' Disable the MagnaDC power supply output
        conn.WriteLine("OUTP:STOP")
        ' Close the communication channel to the product
        conn.Close()

        ' Plot the data
        PlotData()
    End Sub

    Private Function ReadCsvFile(filePath As String) As List(Of InputSample)
        Dim samples As New List(Of InputSample)()
        Using reader As New StreamReader(filePath)
            ' Skip the header line
            reader.ReadLine()
            While Not reader.EndOfStream
                Dim line As String = reader.ReadLine()
                Dim values() As String = line.Split(","c)
                If values.Length >= 2 Then
                    samples.Add(New InputSample With {
                        .CurrentSetPoint = Double.Parse(values(0)),
                        .Duration = Double.Parse(values(1))
                    })
                End If
            End While
        End Using
        Return samples
    End Function

    Private Sub PlotData()
        ' Configure the chart control
        Chart1.Series.Clear()
        Chart1.ChartAreas.Clear()
        Chart1.ChartAreas.Add(New ChartArea("MainArea"))

        ' Create series for current and voltage
        Dim currentSeries As New Series("Current")
        currentSeries.ChartType = SeriesChartType.Line
        currentSeries.XValueType = ChartValueType.Double
        currentSeries.YValueType = ChartValueType.Double

        Dim voltageSeries As New Series("Voltage")
        voltageSeries.ChartType = SeriesChartType.Line
        voltageSeries.XValueType = ChartValueType.Double
        voltageSeries.YValueType = ChartValueType.Double

        ' Add data points to the series
        For Each sample In outputSamples
            currentSeries.Points.AddXY(sample.Time, sample.Current)
            voltageSeries.Points.AddXY(sample.Time, sample.Voltage)
        Next

        ' Add series to the chart
        Chart1.Series.Add(currentSeries)
        Chart1.Series.Add(voltageSeries)

        ' Set chart titles and labels
        Chart1.ChartAreas("MainArea").AxisX.Title = "Time (s)"
        Chart1.ChartAreas("MainArea").AxisY.Title = "Current (A)"
        Chart1.ChartAreas("MainArea").AxisY2.Title = "Voltage (V)"
        Chart1.ChartAreas("MainArea").AxisY2.Enabled = AxisEnabled.True

        ' Associate voltage series with secondary Y-axis
        voltageSeries.YAxisType = AxisType.Secondary
    End Sub

    ' Classes to hold input and output samples
    Private Class InputSample
        Public Property CurrentSetPoint As Double
        Public Property Duration As Double
    End Class

    Private Class OutputSample
        Public Property Current As Double
        Public Property Voltage As Double
        Public Property Time As Double
    End Class
End Class

Notes :

  • Remplacez "COM8" par le port série approprié sur votre système.
  • Assurez-vous que le fichier CSV example_profile.csv est correctement formaté et situé dans le répertoire de l'application.
  • Le fichier CSV doit comporter deux colonnes : CurrentSetPoint et Duration, avec une ligne d'en-tête.

Exemple de example_profile.csv :

CurrentSetPoint,Duration
50,10
100,15
150,20
200,25

Conclusion

VB.NET offre un environnement puissant et convivial pour le contrôle des produits d'alimentation programmables Magna-Power. Grâce aux classes intégrées pour la communication série et TCP/IP, ainsi qu'à la prise en charge du GPIB via les bibliothèques des fabricants, VB.NET simplifie le processus d'automatisation des tests, de collecte des données et de visualisation des résultats. En exploitant les commandes SCPI et les fonctionnalités de VB.NET, les utilisateurs peuvent développer des programmes de contrôle sophistiqués adaptés à leurs applications spécifiques.

Pour les jeux de commandes SCPI détaillés et une personnalisation plus poussée, consultez le manuel d'utilisation de la série de produits Magna-Power spécifique que vous utilisez.

Originally published octobre 29, 2024

Stay connected and informed.

Subscribe to receive emails—no more than once per month—with new technical articles, product releases and factory updates from Magna-Power.

Have any questions or feedback?
We'd love to hear from you.
Contact us