Pendant de longues heures, j’ai cherché une solution à ce problème. A force de recouper plusieurs dizaines de codes, de fonctions, j’ai établis le code suivant. J’ai prévu une suite d’article pas forcément passionnante pour ceux qui n’y pipent rien, mais ô combien utile pour ceux qui cherches ce genre de chose.

Ce premier code concerne le chargement de la Form1. Il vous faudra trois Combobox (cmbPort, cmbParity et cmbBaud), un bouton de connection (btnConnect) et un bouton de deconnection (btnDisconnect).

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        btnConnect.Enabled = True
        btnDisconnect.Enabled = False
        btnSend.Enabled = False

        Dim myPort As Array = IO.Ports.SerialPort.GetPortNames() 'Récupère tous les ports COM disponibles

        'Inclusion des Baud standard
        cmbBaud.Items.Add(9600)
        cmbBaud.Items.Add(19200)
        cmbBaud.Items.Add(38400)
        cmbBaud.Items.Add(57600)
        cmbBaud.Items.Add(115200

        'Inclusion des parités standard
        cmbParity.Items.Add("Even")
        cmbParity.Items.Add("Odd")
        cmbParity.Items.Add("None")
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click

        'Sécurité si le port est déjà ouvert
        If SerialPort1.IsOpen = True Then
            MsgBox("Port " & SerialPort1.PortName & " déjà ouvert. Communication en court.", vbCritical)
            Exit Sub
        End If

        SerialPort1.PortName = cmbPort.Text
        SerialPort1.BaudRate = cmbBaud.Text 

        'Selection de parité
        If cmbParity.Text = "Even" Then
            SerialPort1.Parity = IO.Ports.Parity.Even
        ElseIf cmbParity.Text = "Odd" Then
            SerialPort1.Parity = IO.Ports.Parity.Odd
        ElseIf cmbParity.Text = "None" Then
            SerialPort1.Parity = IO.Ports.Parity.None
        Else
            MsgBox("Parité non définie.")
            Exit Sub
        End If

        SerialPort1.StopBits = IO.Ports.StopBits.One
        SerialPort1.DataBits = 8

        Try
            SerialPort1.Open()
        Catch ex As Exception
            MsgBox("Vérifiez les paramètres de connection ou qu'un autre logiciel ne soit pas déjà en communication avec l'appareil")
            Exit Sub
        End Try

        If SerialPort1.IsOpen = True Then
            btnConnect.Enabled = False
            btnDisconnect.Enabled = True
            btnSend.Enabled = True
        Else
            MsgBox("Le Port " & SerialPort1.PortName & " n'a pas pu être ouvert. Vérifiez les paramètres de connection.", vbCritical)
        End If
    End Sub

Dans une autre partie, je publierai un code pour envoyer une trame Modbus RS232 à un automate.

6 thoughts on “Ouvrir un port série en VB”
  1. bonjour,
    quel est le type de variable de myPort?
    J’imagine que le but et de récupérer les numéros de port série ouverts pour les intégrer dans cmbPort.

Laisser un commentaire