A la base du projet je veux faire un programme qui communique avec un central téléphonique PABX, pour modifier afficher des informations.
Pour cet exemple j'utilise juste une form appelée Form1 et un serialport appelé PSerie
J'ai fait une petite classe qui permet de :
Configurer un port COM
Ouvrir un port COM en vérifiant, qu'il est bien fermé et que le Numéro de port est bien branché au modem
Fermé un port COM
Vérifier l'état du port COM.
Vider Buffer
EnvoyerCommande() permet d'envoyer une commande, d'attendre... (tempo en milliseconde) et de lire le buffer du port COM.
TrouverModem() permet de d'envoyer une commande AT sur chacun des port, et si un Modem répond son nom et enregistré dans la variable NoPort
a l'ouverture de l'objet, le tableau ListePorts et initialisé avec la liste des port disonible sur l'ordinateur
je n'arrive pas a utiliser la fonction événement DataRecived(), c'est un problème de thread, j'ai comprends rien ca m'énerve si quelqu'un y arrive, qu'il me fasse signe.
Source / Exemple :
Public Class Form1
Dim MonPort As New portserie
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If (MonPort.TrouverModem()) Then
MessageBox.Show("Connecter la ligne téléphonique sur le modem RTC branché sur le port " & MonPort.NoPort, "Modem Trouvé", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("Aucun Modem RTC n'a été trouvé", "Boulette", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub
End Class
#Region "Classe port Serie"
Public Class portserie
Public ListePorts() As String = System.IO.Ports.SerialPort.GetPortNames 'liste des port COM disponible sur l'ordinateur
Public NoPort As String = "NULL" 'Numero de port où est branché un modem RTC
Public Debit As Integer = 9600 'delit en bits/sec sur le port COM
Public NbBits As Integer = 8 'bits de donnée
Public BitStop As String = IO.Ports.StopBits.One 'bit de stop
Public Parite As String = IO.Ports.Parity.None 'parité
Public BufferIN As String = "" '
Function configuration() As Boolean
Form1.PSerie.PortName = NoPort
Form1.PSerie.BaudRate = Debit
Form1.PSerie.DataBits = NbBits
Form1.PSerie.StopBits = BitStop
Form1.PSerie.Parity = Parite
End Function
Function ouverture() As Boolean
' verifie que le port est fermé avant de l'ouvrir
If (Not Form1.PSerie.IsOpen() Or NoPort = "NULL") Then
Form1.PSerie.Open()
End If
ouverture = EtatPort()
End Function
Function fermeture() As Boolean
' verifie que le port est ouvert avant de le fermer
If (Form1.PSerie.IsOpen()) Then
Form1.PSerie.Close()
End If
fermeture = EtatPort()
End Function
Function EtatPort() As Boolean
' test le port et retourn 0 ou 1
If (Form1.PSerie.IsOpen()) Then
EtatPort = True
Else
EtatPort = False
End If
End Function
Sub ViderBuffer()
While (Form1.PSerie.BytesToRead() <> 0)
BufferIN &= Form1.PSerie.ReadLine()
End While
End Sub
Sub EnvoieCommande(ByVal TempoMs As Integer, ByVal commande As String)
BufferIN = ""
Form1.PSerie.Write(commande & vbCrLf)
System.Threading.Thread.Sleep(TempoMs)
ViderBuffer()
End Sub
Function TrouverModem() As Boolean
'recherche dans la liste des port de l'ordi celui qui répond a la commande AT
Dim i As Integer
TrouverModem = False
For i = 0 To listePorts.Length - 1
Form1.PSerie.PortName = listePorts(i)
Form1.PSerie.Open()
EnvoieCommande(500, "AT")
If (BufferIN Like "*OK*") Then
NoPort = ListePorts(i)
End If
Form1.PSerie.Close()
Next
If (NoPort <> "NULL") Then
ouverture()
TrouverModem = True
End If
End Function
End Class
#End Region
Conclusion :
Je n'ai pas trouvé de source qui me convenais pour le port COM en VB.net alors j'en ai fais une et je vous la donne.
Voila, c'est mon 1er code en VB.NET, alors soyez indulgent
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.