IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Problème Port Série


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut Problème Port Série
    Bonjour,

    je dois créer un programme afin de récupérer et envoyer des données via un port série.
    - Mon 1er soucis, est que je ne sais pas comment tester si mon programme fonctionne.
    J'ai essayer de le faire dialoguer avec le logiciel Hyperterminal sur un autre PC mais impossible.
    Ma 1ère question serait de savoir si quelqu'un saurait comment tester le dialogue entre mon programme et un autre ordinateur?

    - Mon 2ème soucis viens du code de mon programme. Pendant l'exécution de celui ci j'ai un problème lors de l'ouverture du port. Le compilateur me dit : Access to the port 'COM1' is denied.
    Il marche la 1ère fois de la journée une fois que mon PC à démarrer. Le PC plante au moment d'envoyer ou recevoir des données et du coup je ne referme pas le port après utilisation et j'ai l'impression que ca vient de la.

    Voici ma class pour la gestion des données et configuration du port, je m'y suis mis depuis peu, faites preuve d'indulgence ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    Option Explicit On
    Imports System
    Imports System.IO
    Imports System.IO.Ports
    Imports System.Text
    Imports Microsoft.VisualBasic
     
    Public Class Form1
     
        Private MonPort As New PortSerie
        Dim returnStr As String = ""
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            LoginForm1.ShowDialog()
            Me.Text = "Terminal VIZ 100"
            Me.WindowState = FormWindowState.Maximized
            Send_Num.Enabled = False
            Num_serie_recup.Text = ""
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Form2.ShowDialog()
        End Sub
     
        Private Sub Send_Num_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Send_Num.Click
            ProgressBar1.Value = 0
            SendSerialData(Form2.N_Serie)
        End Sub
     
        Private Sub Receive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Receive.Click
            ProgressBar1.Value = 0
            ReceiveSerialData()
        End Sub
     
        Private Sub ProgressBar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProgressBar1.Click
            ProgressBar1.Minimum = 0
            ProgressBar1.Maximum = 200
        End Sub
     
        Sub SendSerialData(ByVal data As String)
            MonPort.configuration()
            Using PortSerie As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1")
                MonPort.ouverture()
                PortSerie.WriteLine(data)
                ProgressBar1.Value += 100
                PortSerie.Close()
                ProgressBar1.Value += 100
                MonPort.fermeture()
            End Using
        End Sub
     
        Function ReceiveSerialData() As String
            MonPort.configuration()
            Using PortSerie As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1")
                MonPort.ouverture()
                If (PortSerie.IsOpen()) Then
                    Do
                        MsgBox("Ouverture réussi", MsgBoxStyle.Information)
                        ProgressBar1.Value = 70
                        Dim Incoming As String = PortSerie.ReadLine()
                        If Incoming Is Nothing Then
                            Exit Do
                        Else
                            returnStr &= Incoming & vbCrLf
                        End If
                        ProgressBar1.Value = 120
                    Loop
                End If
                ProgressBar1.Value = 150
                MonPort.fermeture()
            End Using
            Return returnStr
            ProgressBar1.Value = 200
        End Function
     
    End Class
     
     
    #Region "Classe Port Série"
    Public Class PortSerie
     
        Public NoPort As String = "COM1" 'Numero de port qui sera utilisé
        Public Debit As Integer = 9600 'debit 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é 
     
        Dim i As Integer
     
        Function configuration() As Boolean
            Form1.SerialPort.PortName = NoPort
            Form1.SerialPort.BaudRate = Debit
            Form1.SerialPort.DataBits = NbBits
            Form1.SerialPort.StopBits = BitStop
            Form1.SerialPort.Parity = Parite
        End Function
     
        Function ouverture() As Boolean
            ' verifie que le port est fermé avant de l'ouvrir
            If (Not (Form1.SerialPort.IsOpen) Or (NoPort = "NULL")) Then
                Form1.SerialPort.Open()
            End If
            ouverture = EtatPort()
        End Function
     
        Function fermeture() As Boolean
            ' verifie que le port est ouvert avant de le fermer
            If (Form1.SerialPort.IsOpen()) Then
                Form1.SerialPort.Close()
            End If
            fermeture = EtatPort()
        End Function
     
        Function EtatPort() As Boolean
            ' test le port et retourn 0 ou 1
            If (Form1.SerialPort.IsOpen()) Then
                EtatPort = True
            Else
                EtatPort = False
            End If
        End Function
     
     
    End Class
    #End Region

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    il est possible de faire dialoguer deux machines par port série en utilisant un cable null modem. Mais une autre solution est d'utiliser un de ces programmes qui crées des ports séries virtuels connectés entre eux.
    Style tu écris dans COM3 et ca ressort par COM4, y'en a quelques un sur le net, ca te permet d'écouter COM4 danc cet exemple pour savoir ce qui passe.

    Par ailleurs, une fois le port ouvert, il faut encapsuler toutes les écritures dans un try - finally et faire un Close dans le finally. Pour le reste, s'assurer d'appeler Dispose() ou alors d'utiliser le serialport dans une clause using().

    Je n'ai pas vraiment regarder ton code car le vb.net j'ai du mal a lire, c'est plutot c# mon truc. Cela dit je t'es pas vu faire la moindre configuration sur le port avant d'ouvrir. T'es sur que les valeurs par défaut du Handshake, baudRate et ça sont les bonnes?

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Si je le configure, j'ai crée une fonction Configuration().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        Public NoPort As String = "COM1" 'Numero de port qui sera utilisé
        Public Debit As Integer = 9600 'debit 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é 
     
        Dim i As Integer
     
        Function configuration() As Boolean
            Form1.SerialPort.PortName = NoPort
            Form1.SerialPort.BaudRate = Debit
            Form1.SerialPort.DataBits = NbBits
            Form1.SerialPort.StopBits = BitStop
            Form1.SerialPort.Parity = Parite
        End Function
    En ce qui concerne
    il faut encapsuler toutes les écritures dans un try - finally et faire un Close dans le finally. Pour le reste, s'assurer d'appeler Dispose() ou alors d'utiliser le serialport dans une clause using().
    J'ai pas tout compris ce que ca voulait dire je vais regarder dans l'aide en ligne.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Je viens de modifier mon programme de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub SendSerialData(ByVal data As String)
            MonPort.configuration()
            Using PortSerie As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1")
                MonPort.ouverture()
                PortSerie.WriteLine(data)
                ProgressBar1.Value = 100
                PortSerie.Close()
                ProgressBar1.Value = 199
                MonPort.fermeture()
            End Using
        End Sub
    Je déclarais mon PortSérie comme cela. Maintenant j'ai déclaré mon PortSerie en public dans les déclarations de ma class :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Class Form1
     
        Public PortSerie As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1")
        Private MonPort As New PortSerie
        Dim returnStr As String = ""
    Que veut dire l'instruction USING

  5. #5
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Scuse ça m'a échappé

Discussions similaires

  1. Problème port série ?
    Par GGaston dans le forum Matériel
    Réponses: 0
    Dernier message: 05/03/2013, 19h42
  2. [WD12] Problème port série
    Par rems033 dans le forum WinDev
    Réponses: 3
    Dernier message: 15/04/2009, 17h11
  3. Problème port série
    Par grorel dans le forum MFC
    Réponses: 3
    Dernier message: 19/12/2008, 13h57
  4. problème port série
    Par -WanG- dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 09/12/2008, 16h15
  5. problème port série
    Par -WanG- dans le forum Windows
    Réponses: 0
    Dernier message: 04/12/2008, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo