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.