begin process at 2012 02 14 05:39:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > UTILISATION DU PORT SÉRIE ET DÉTECTION D'UN MODEM RTC BRANCHÉ SUR L'ORDI

UTILISATION DU PORT SÉRIE ET DÉTECTION D'UN MODEM RTC BRANCHÉ SUR L'ORDI


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Control Source .NET ( DotNet ) Classé sous :com, serialport, modem, port, série Niveau :Débutant Date de création :13/05/2006 Vu :17 578

Auteur : luluberlu77

Ecrire un message privé
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

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

  • 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
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


 Sources du même auteur

Source avec une capture Source .NET (Dotnet) POUVOIR DEVINER L’AVENIR ?!? LE BIORYTHME PEUT VOUS DONNER D...

 Sources de la même categorie

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLSTARS EN RÉPONSE À JAKNIGHT007 par bigboss9
Source avec Zip Source avec une capture Source .NET (Dotnet) CALENDRIER ANNUEL NORME ISO par Prog1001
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLE STARS par jaknight007

 Sources en rapport avec celle ci

Source avec Zip COMMUNICATION SERIE PROTOCOL MODBUS ASCII par aftens
Source avec Zip Source avec une capture Source .NET (Dotnet) UTILISATION DU PORT COM VS2005 par lesdis
UTILISATION DES COMPOSANTS COM (AXCOM SERIALPORT) par perceval_59
Source avec Zip Source avec une capture COMMUNICATION PORT SERIE AVEC DLL par cuq
Source avec Zip TESTEUR DE PORTS COM par Sirocooo

Commentaires et avis

Commentaire de Willi le 14/05/2006 14:37:02 administrateur CS

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 ?

Commentaire de NHenry le 15/05/2006 09:01:07 administrateur CS

Boujour,

J'ai trouver une classe sur OPenNetCF.Org (OpenNETCF.IO.Serial.Port).

Commentaire de JacPapa le 18/05/2006 16:49:10

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)

Commentaire de JacPapa le 18/05/2006 16:51:48

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".

Commentaire de JacPapa le 18/05/2006 16:58:55

Willy svp. Peut tu   indiquer le lien de la diable de page ou tu as trouvé "OpenNETCF.IO.Serial.Port".
Remerciements avancés

Commentaire de NHenry le 18/05/2006 17:09:03 administrateur CS

Bonjour, apparemment, il ne supportent plus pour le .NET 1.
Je vais voir si je l'ai encore en stock.

Commentaire de NHenry le 18/05/2006 17:11:58 administrateur CS

Je n'ai plus que sa vesrion modifiée par mes soins pour un projet au lycée, une maigre chance que j'ai encore le zip original chez moi.

Commentaire de JacPapa le 18/05/2006 17:27:00

A NHenry:
Dans tous les cas, merci pour tes efforts.

Commentaire de NHenry le 18/05/2006 17:35:48 administrateur CS

J'ai les Dll seules, tu as reçu mon msg ?

Commentaire de nitrique le 20/12/2006 11:29:52

Si tu envoies des caractères accentués par le port COM, que reçoit tu ?
Pour ma part, la phrase: "Bonjour à toi Jéjé" devient "Bonjour ? toi J?j?".

Alors que si je passe par l'hyperterminal, la phrase est reproduite correctement.

Commentaire de NHenry le 20/12/2006 12:27:39 administrateur CS

Bonjour,

Il semblerais (d'après ce que tu dis), que la sub Write(String), utilise La conversion ASCII, donc pas de caractères accentués.

Pour cela, utilise le Write(Byte()), et utilise System.Text.UTF8.

Commentaire de nitrique le 20/12/2006 12:37:20

Merci pour ta rapidité.
J'ai carrément fait:
SerialPort1.Encoding = System.Text.Encoding.UTF8
avant le writeline
Mais ça me rend: "Bonjour Â[espace] toi jÂ[copyright]jÂ[copyright]"
Code ASCII: 195 et 169 au lieu de 233.

Peux tu me donner ta façon de faire pour la chaine seule ?
J'ai essayé convert... Mais ne trouve pas UTF8, et:
SerialPort1.Write(System.Text.UTF8Encoding(txtRendu.Text))
me fait une erreur de compilation.

Commentaire de NHenry le 20/12/2006 12:48:12 administrateur CS

Bonjour,

Ton pb est du au fait qu'il prend les caracères accentués en unicode et pas en UTF8.

Sinon la syntaxe un peu mieux :
SerialPort1.Write((new System.Text.UTF8Encoding).getbytes(txtRendu.Text))

Commentaire de nitrique le 20/12/2006 12:54:27

SerialPort1.Write((New System.Text.UTF8Encoding).GetBytes(txtRendu.Text))
C'est bien ça pourtant ? Il me fait une erreur:
Value of type '1-dimensional array of Byte' cannot be converted to 'String'.
Pas toi ?

Sinon, la surcharge de write prends 2 parametres de plus, nan ?

Commentaire de NHenry le 20/12/2006 13:12:14 administrateur CS

Je répond à ton post sur le forum :
http://www.vbfrance.com/infomsg_VB2005-SERIALPORT-GTTRANSFORMATION-CARACTERES-ACCENTUES_862236.aspx#3

Commentaire de nitrique le 20/12/2006 13:16:47

J'ai vu, merci de ton interet.

Commentaire de 2vbeur le 07/02/2007 09:29:52

salut,
Bravo pour le travail..
j'ai tester ton code, il y a effictivement quelques fautes :
dans le Form1_Load tu n'a pas fait apelle a la foction configuration() de la class port serie !
j'ai tester sa mais j'ai découvert que la variable ne pouvait pas prendre une valeur autre qu'un nom d'un port série !!
=> donc Public NoPort As String = "NULL" et If (NoPort <> "NULL") Then
ne foctionne pas !!
== il faut impérativement choisir le bon port com dans les propiétés du SerialPort..

je vous tient au courant ...

Commentaire de mdabin le 27/04/2007 15:18:48

Pour l'evenement SerialPort1_DataReceived, il faut faire appel à un delegué:
1) Le declarer
Private Delegate Sub d_Affiche(ByVal Texte As String)

2)Dans DataReceived:

Dim Buffer As String = SerialPort1.ReadExisting()
If Me.InvokeRequired Then
            Me.Invoke(New d_Affiche(AddressOf Affiche), Buffer)
End If
3)

Private Sub Affiche(ByVal Texte As String)
        RichTextBox1.Text &= Texte
End Sub

'Grace à cette fonction, on peut récuperer le contenu du buffer dans une TextBox par exemple

J'ai un peu + de mal pour faire rentrer le contenu du buffer dans une table: erreur du type:

"Modifications non effectuées: risque de doublons dans champs index, clé principale ou relation interdisant les doublons. Modifiez les données des champs contenant les doublons, enlevez ou redéfinissez l'index pour permettre les doublons et recommencez."

Si vous avez une idée
Merci

Commentaire de mdabin le 27/04/2007 15:19:50

Pour l'evenement SerialPort1_DataReceived, il faut faire appel à un delegué:
1) Le declarer
Private Delegate Sub d_Affiche(ByVal Texte As String)

2)Dans DataReceived:

Dim Buffer As String = SerialPort1.ReadExisting()
If Me.InvokeRequired Then
            Me.Invoke(New d_Affiche(AddressOf Affiche), Buffer)
End If
3)

Private Sub Affiche(ByVal Texte As String)
        RichTextBox1.Text &= Texte
End Sub

'Grace à cette fonction, on peut récuperer le contenu du buffer dans une TextBox par exemple

J'ai un peu + de mal pour faire rentrer le contenu du buffer dans une table: erreur du type:

"Modifications non effectuées: risque de doublons dans champs index, clé principale ou relation interdisant les doublons. Modifiez les données des champs contenant les doublons, enlevez ou redéfinissez l'index pour permettre les doublons et recommencez."

Si vous avez une idée
Merci

Commentaire de BenJ2Tours le 11/06/2007 09:36:41

     J'essaye depuis un petit moment de detecter la reception de donnée sur mon port serie pour l'afficher dans une RichTextBox.

     J'ai l'impression que c'est exactement ce que vous faites ici mais moi je n'y arrive pas je pense quue je doit mal declarer mon sous-programme DataReceved.
Quelqu'un pourrais jeter un coup d'oeil.

Private Sub PortRS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)

        Dim Buffer As String = PortRS232.ReadExisting()

        'L'évènement DataReceived se situe sur un thread différent que le form, nous devons donc appelé un délégué pour afficher le résultat à l'écran
        If Me.InvokeRequired Then
            Me.Invoke(New d_Affiche(AddressOf Affiche), Buffer)
        End If
    End Sub

    'fonction permettant l'affichage des données lors de l'appel du délégué
    Private Sub Affiche(ByVal Texte As String)
        RichTextBox1.Text &= Texte
    End Sub

Commentaire de zn415 le 24/06/2007 15:38:28

Et t'il possible d'avoir le projet complet?

Commentaire de salut2lemonde le 05/08/2008 10:23:36

salut;
je veut savoir si je veut faire la connexion puis envoyer une donnée et recuperer les données reçues sur le buffer dans une base se donnée?

Commentaire de salut2lemonde le 05/08/2008 12:31:23

salut;
je veut savoir si je peut recuperer les données reçues d'un buffer dans une table de base se donnée access?et si fesable commant?

Commentaire de khalmo le 21/05/2009 18:26:57

bon travail
svp, tu peut mettre ce programme en ZIP

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Programmation du port série et du modem [ par MisterRom ] Salut a tous !...Je suis à la recherche d'une solution pour pouvoir, avec le contrôle MSComm32 (programmation du port serie) : -decrocher automatiqu PB de prog modem sur port série [ par Guismeau13 ] Salut à tous,Je souhaite piloter un modem Kortex par le port série...Ce modem me permet de piloter un lecteur de carte avec modem intégré...Je n'ai pa Port com de mon modem [ par machto ] Bonjour,je voudrais savoir comment je peux connaître le port où se trouve connecté mon modem USB?En allant dans le panneau de configuration, dans syst Interfaçage USB / COM Port [ par flatron123 ] Bonjour à toutes et à tous,Depuis quelques temps je developpe une appli utilisant un GPS connecté en USB. Pour le moment, j'utilise un petit soft (SPA utilisation d'une FIFO pour stocker des données recu sur un port série et les traiter ensuite. [ par norber59480 ] Bonjour à tous.   Je vous expose mon probléme : Je dois récupérer des trames sur le port série et effectuer differentes actions en fonction de la donn Détection des ports série [ par SillyBhum ] Salut!Je viens de finir un programme utilisant le port série pour communiquer avec un système embarqué. Aujourd'hui j'ai testé ce programme sur un pc Pb Port Série / RS232 (valeur max envoyée = 127) [ par edorul ] Bonjour, J'ai un soucis concernant la programmation du port série avec Visual Basic 2005 et 2008 Express : bien que j'ai configuré DataBits = 8, lorsq communication sur port com [ par SEB73460 ] Bonsoir,J'ai connecte mon port com1 sur une carte electronique qui comporte un microcontroleurle role de cette carte (pour le moment) c est d'envoyer Probleme avec ma reception sur mon port com [ par SEB73460 ] Bonjour et bon dimanche à tous,Voila, j'affiche dans un textbox la reception des données que j'ai envoyer sur mon port coml'envoie se fait bien dans s


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales