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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 20 673 fois - Téléchargée 29 fois

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

Ajouter un commentaire

Commentaires

cs_Willi
Messages postés
2376
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
16 -
Il me semble que la classe SerialPort est une nouveautée du framework 2.0
As-tu une alternative pour ceux qui ne bossent pas avec vb2005 ?
NHenry
Messages postés
14617
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2020
138 -
Boujour,

J'ai trouver une classe sur OPenNetCF.Org (OpenNETCF.IO.Serial.Port).
JacPapa
Messages postés
5
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2006
-
Bonjour à tous,
Commentaire général/
Tu parles d'un modem pour se connecter sur un PABX. Mais un PABX utilise des lignes numériques (numeris), un modem des lignes analogiques (RTC). est ce une erreur de ma part ou cela fonctionne t'il ? (Nous pilotons des modems RTC sur nos programmes VB depuis 3 ans dans problemes mais en ligne analogiques)
JacPapa
Messages postés
5
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2006
-
Malgrès la charte de bonne conduite que je viens d'approuver les "fôtes" restent...
Il faut lire "sans problemes" et non pas "dans problemes".
JacPapa
Messages postés
5
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
18 mai 2006
-
Willy svp. Peut tu indiquer le lien de la diable de page ou tu as trouvé "OpenNETCF.IO.Serial.Port".
Remerciements avancés

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.