Accueil > > > UTILISATION DU PORT COM VS2005
UTILISATION DU PORT COM VS2005
Information sur la source
Description
Après avoir parcouru le forum et les différentes sources sur ce site, je me suis aperçu qu'il y avait très peu de documentation sur l'utilisation du port COM. Avec le framework .NET 2.0, la classe SerialPort à fait son apparition, permettant de gérer simplement un port RS232. Ce code n'a aucune prétention, seulement de faire connaître cette classe au maximum de gens.
Source
- Public Class Test_RS232
-
- Private Delegate Sub _Affiche_ASCII(ByVal donnee As String)
- Private Delegate Sub _affiche_Hexa(ByVal donnee As String)
-
- Private Sub Test_RS232_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim ports() As String = IO.Ports.SerialPort.GetPortNames() ' tableau de string acceuillant les ports present sur la machine
-
- 'configuration du port RS232
- RS232.BaudRate = 9600 'vitesse du port
- RS232.Parity = IO.Ports.Parity.None 'pas de parité
- RS232.StopBits = IO.Ports.StopBits.One 'un bit d'arrêt par octet
- RS232.DataBits = 8 'nombre de bit par octet
- RS232.RtsEnable = False 'ligne Rts désactivé
- RS232.DtrEnable = False 'ligne Dtr désactivé
-
-
- Choix_Port.Items.AddRange(ports) ' on ajoute le nom des ports dans le combobox
-
- Try
-
- Choix_Port.SelectedIndex = 0 ' on donne le focus au premier port du combobox
-
- Catch ' message d'erreur si aucun port COM n'est détecté sur la machine et on ferme l'application
-
- MsgBox("Il semble ne pas y avoir de port RS232 sur votre machine, cette application ne pourra pas marcher")
- Application.Exit()
-
- End Try
- End Sub
-
-
- Private Sub Connexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Connexion.Click
-
- If Connexion.Text = "Connexion" Then
-
- Try
-
- 'on ouvre le port désiré
- RS232.PortName = Choix_Port.Text
- RS232.Open()
-
- Catch ' message d'erreur si l'on ne peut pas ouvrir le port
-
- MsgBox("Il semble que le port choisi est déjà en cours d'utilisation par une autre application, merci de choisir un port libre pour se connecter")
- Exit Sub
-
- End Try
-
- Vitesse.Text = RS232.BaudRate & Space(1) & "Bauds" 'on affiche la vitesse du port
- Connexion.Text = "Déconnexion" ' on change l'intitulé du bouton
- Choix_Port.Enabled = False ' on désactive le combobox pendant l'utilisation du port
- Else
-
- Vitesse.Text = "" 'on efface la vitesse
- Connexion.Text = "Connexion" ' on change l'intitulé du bouton
- RS232.Close() 'on ferme le port
- Choix_Port.Enabled = True 'on réactive le combobox
-
- End If
- End Sub
-
- 'Evènement se déclenchant lors de l'arrivée de données sur le port RS232
- Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
- Dim nb_octet As Integer = RS232.BytesToRead ' on récupère le nombre d'octet présent dans le tampon
- Dim trame(nb_octet - 1) As Byte ' Tableau acceuillant les données au format byte
-
- RS232.Read(trame, 0, nb_octet) 'on lit le port
-
- Dim donnee As String = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII
-
- '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 _Affiche_ASCII(AddressOf Affiche_ASCII), donnee)
- End If
-
- 'On va convertir tous les octets du tableau en valeurs Hexadecimal pour les afficher à l'écran
- Array.ForEach(Of Byte)(trame, AddressOf Trt_Trame)
- End Sub
-
- Private Sub Trt_Trame(ByVal bit As Byte)
- 'on appelle le délégué pour afficher les données
- If Me.InvokeRequired Then
- Me.Invoke(New _affiche_Hexa(AddressOf Affiche_Hexa), Hex(bit).PadLeft(2, "0") & "H" & Space(1)) ' on convertit l'octet en valeur Hexadécimal en faisant attention qu'il reste codé sur 2 caractères et on ajoute un espace pour faciliter la lecture
- End If
- End Sub
-
- Private Sub Affiche_ASCII(ByVal donnee As String)
- RTB_ASCII.AppendText(donnee) 'On affiche les données à l'écran
- End Sub
-
- Private Sub Affiche_Hexa(ByVal donnee As String)
- RTB_Hexa.AppendText(donnee) 'on affiche les données à l'écran
- End Sub
- End Class
Public Class Test_RS232
Private Delegate Sub _Affiche_ASCII(ByVal donnee As String)
Private Delegate Sub _affiche_Hexa(ByVal donnee As String)
Private Sub Test_RS232_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ports() As String = IO.Ports.SerialPort.GetPortNames() ' tableau de string acceuillant les ports present sur la machine
'configuration du port RS232
RS232.BaudRate = 9600 'vitesse du port
RS232.Parity = IO.Ports.Parity.None 'pas de parité
RS232.StopBits = IO.Ports.StopBits.One 'un bit d'arrêt par octet
RS232.DataBits = 8 'nombre de bit par octet
RS232.RtsEnable = False 'ligne Rts désactivé
RS232.DtrEnable = False 'ligne Dtr désactivé
Choix_Port.Items.AddRange(ports) ' on ajoute le nom des ports dans le combobox
Try
Choix_Port.SelectedIndex = 0 ' on donne le focus au premier port du combobox
Catch ' message d'erreur si aucun port COM n'est détecté sur la machine et on ferme l'application
MsgBox("Il semble ne pas y avoir de port RS232 sur votre machine, cette application ne pourra pas marcher")
Application.Exit()
End Try
End Sub
Private Sub Connexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Connexion.Click
If Connexion.Text = "Connexion" Then
Try
'on ouvre le port désiré
RS232.PortName = Choix_Port.Text
RS232.Open()
Catch ' message d'erreur si l'on ne peut pas ouvrir le port
MsgBox("Il semble que le port choisi est déjà en cours d'utilisation par une autre application, merci de choisir un port libre pour se connecter")
Exit Sub
End Try
Vitesse.Text = RS232.BaudRate & Space(1) & "Bauds" 'on affiche la vitesse du port
Connexion.Text = "Déconnexion" ' on change l'intitulé du bouton
Choix_Port.Enabled = False ' on désactive le combobox pendant l'utilisation du port
Else
Vitesse.Text = "" 'on efface la vitesse
Connexion.Text = "Connexion" ' on change l'intitulé du bouton
RS232.Close() 'on ferme le port
Choix_Port.Enabled = True 'on réactive le combobox
End If
End Sub
'Evènement se déclenchant lors de l'arrivée de données sur le port RS232
Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
Dim nb_octet As Integer = RS232.BytesToRead ' on récupère le nombre d'octet présent dans le tampon
Dim trame(nb_octet - 1) As Byte ' Tableau acceuillant les données au format byte
RS232.Read(trame, 0, nb_octet) 'on lit le port
Dim donnee As String = System.Text.Encoding.ASCII.GetString(trame) ' on récupère les données au format ASCII
'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 _Affiche_ASCII(AddressOf Affiche_ASCII), donnee)
End If
'On va convertir tous les octets du tableau en valeurs Hexadecimal pour les afficher à l'écran
Array.ForEach(Of Byte)(trame, AddressOf Trt_Trame)
End Sub
Private Sub Trt_Trame(ByVal bit As Byte)
'on appelle le délégué pour afficher les données
If Me.InvokeRequired Then
Me.Invoke(New _affiche_Hexa(AddressOf Affiche_Hexa), Hex(bit).PadLeft(2, "0") & "H" & Space(1)) ' on convertit l'octet en valeur Hexadécimal en faisant attention qu'il reste codé sur 2 caractères et on ajoute un espace pour faciliter la lecture
End If
End Sub
Private Sub Affiche_ASCII(ByVal donnee As String)
RTB_ASCII.AppendText(donnee) 'On affiche les données à l'écran
End Sub
Private Sub Affiche_Hexa(ByVal donnee As String)
RTB_Hexa.AppendText(donnee) 'on affiche les données à l'écran
End Sub
End Class
Conclusion
Pour plus d'information, consultez la doc Msdn : http://msdn2.microsoft.com/fr-fr/library/system.io .ports.serialport_members(VS.80).aspx
Historique
- 11 avril 2007 16:08:40 :
- Correction de l'ortographe ;)
- 11 avril 2007 17:38:03 :
- mise en ligne du projet entier
- 27 juin 2007 13:14:11 :
- Nouvelle version du code.
Affichage des données en Hexadécimal
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
MSComm.help [ par jackky ]
salut question tech...Je voulais savoir si avec seulement mscomm je pouvais controler les pin de mon port serie suivants? port serie:pin 1 :DCD pin 6
Recuperation de donnees via port serie RS232 [ par doume14 ]
Bonjour a tous! Je voudrais recuperer des donnees d'une balance via un port serie RS232 DB-9. Vitesse 2400bps, longueur de mot 8bits. Et le tout sur u
MSCOMM Serie [ par BarthOlivier ]
Salut. Je voudrai savoir s'il est possible d'envoyer facilement une structure par voie série.Exemple1 :PortOpen=trueOutput = "Toto" & chr(13)PortOpen=
Probleme avec MSComm_OnComm () [ par thomas10c ]
Bonjour,Je suis debutant en visual basic 6.Je voudrais recevoir des donnees sur un port serie, pour ca j'ai utilise la fonction: Private Sub MSComm_On
comment attendre qu'une communication rs232 ait a nouveau lieu?? [ par mathieuleydier ]
bonjourvoila j'ai un modem wavecom qui appelle un numéro distant quand je lui envoie l'ordre ATDnuméro en cliquant sur un bouton via rs232 (contole ms
Récuperer donnée sur serie (Mscomm) [ par crazylion ]
Bonjour à tous,Je débute en VB, et je souhaiterais savoir comment peut-on, lorsqu'une donnée est présente dans le buffer d'entrée d'un port (avec MSCo
Rs232/serie [ par boutterinth ]
Bonjour.Je suis actuellemen en train de consevoir un allumage cartographique avec courbe a depresion.mon boitier comunique avec l'ordinateur a l'ede d
Portable sur Port Serie et SMCOmm [ par Phymo2 ]
Je dispose d'un sony Ericsson T68 , lié a mon pc par un cable serie.J'ai reussie a faire des appels sortants vers fixes et portables grace au composan
rs232 Boutons et Leds sur port serie????? au secours! [ par djazer ]
Salut à tous et meilleurs voeux!Je souaiterai créer une petite console avec des boutons , des encodeur rotatifs et des affic
utiliser le port serie ( rs232 ) pour controler des led [ par duteux ]
Bonjour tout le monde, je veux realiser une carte electronique qui me permettrais de controler l'eclairage de 3 led (ou de 3 relais) a trave
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|