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.
je debutant en VB et j’ai pa pu comprendre Serial port
C’est à dire ?
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.
C’est un type Array qui contient des String.
ajoute Dim myPort As Array
Ce n’est pas spécialement nécessaire mais pourquoi pas.