Utilisation du port série et détection d'un modem rtc branché sur l'ordi

Contenu du snippet

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

A voir également

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.