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

VB.NET Discussion :

Timer sur réception RS232 [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut Timer sur réception RS232
    Bonjour et bonne année à tous,
    Je travail sous Visual Basic 2010 Express.
    Je communique avec mon appareil via le port COM en utilisant les fonction RS232.
    J'envoie un commande pour que l'appareil me renvoie des données.
    J'ai mon programme qui récupère les données et les écrit dans une ListBox.

    Mon souci est que cette action bloque mon programme car il attend les données de l'appareil. Je pensais mettre une tempo, si je ne reçois plus rien pendant 5 secondes je sors de la fonction. Mais je ne sais pas comment faire.
    L'idée est là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Do
    
                    Liste = RS232.ReadLine
    
                    If Tempo Then
                        Exit Sub
                    Else
                        ListBox1.Items.Add(Liste)
                        MsgBox(Liste)
                    End If
    
                Loop While RS232.IsOpen
    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 46
    Par défaut
    Si tu souhaites connaître le fonctionnement du timer, ce n'est pas très compliqué.

    Tu le créés en le faisant glisser sur ta form.
    Dans les propriété tu peux mettre Interval à "1000" (en ms) par exemple, il faut aussi le mettre à disabled.

    Tu te créés une variable globale Dim vTemps as integer = 0

    À l'envoi de ta commande, tu met ton timer sur enabled.
    Le timer va émettre l’évènement "Tick" à chaque interval (ici, toutes les 1000 millisecondes, soit 1 seconde, l’évènement "Tick" sera déclenché).
    À chaque fois que l’évènement Tick se produit, tu ajoutes 1 à ta variable vTemps.

    Ta condition se basera alors sur cette variable vTemps, càd, si tu veux 5 secondes, tu comptes pour vTemps = 5.


    Je peux rééxpliquer et même copier du code mais c'est assez simple.

  3. #3
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Merci pour ta réponse,
    Ok pour le timer.
    Après mon code n'est peut être pas explicite désolé, je ne sais pas non plus comment vérifier que mon appareil envoie des données.
    En fait je veux juste savoir quand a fini d'envoyer pour sortir de ma boucle

  4. #4
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Peut être utiliser la fonction RS232.ReadTimeOut ?
    Mais je ne sais pas trop comment elle fonctionne

  5. #5
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Il faut te renseigner sur les procédures d'échanges... Normalement tu devrais créer un système de ACK (acccusé), qui confirme que chaque paquet est arrivé.

    Et faire un paquet spécial pour dire terminer etc... Il faut créer le dialogue quoi.

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut
    Bonjour

    j'ai un projet identique qui fonctionne avec cela . dés qu'une trame arrive, cela lance cette sub 'Recuperation des données RS2323
    Tu n'as pas besoin d'un timer.
    Le seul problème que j'ai actuellement c'est qu'avec un Port RS232 /USB, cela ne fonctionne pas toujours alors qu'avec un port Com physique, je n'ai pas de problème.

    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
     'Recuperation des données RS2323
            Public Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
                'Sortie de la routine Interruption RS232 pour aller afficher les données
                Dim DonnéeValable As Boolean = True
                Do
                    Dim DonnéeAscii As String = ""
                    'Test si la trame  à OD OA pour pouvoir traiter les données reçus
                    ValeurStock = ValeurStock + Me.SerialPort.ReadExisting
                    VerificationReception(DonnéeValable, DonnéeAscii)
                    If DonnéeValable = True Then
                        Me.Invoke(New _Affiche_ASCII(AddressOf Affiche_ASCII), DonnéeAscii)
                        DonnéesNonSauv = True
                    End If
                Loop While DonnéeValable
            End Sub
    Module ComRS232
        Dim m_DonnéeTete(MenuIWT.NombreSerie - 1, 1) As Single
        Dim m_TeteActive As Integer = 0
        Dim m_compteur As Integer = 0
        Dim m_TotalTete(MenuIWT.NombreSerie - 1) As Single
        Dim m_NbreTete(MenuIWT.NombreSerie - 1) As Integer
        Dim m_MoyenneTete(MenuIWT.NombreSerie - 1) As Single
        Dim m_Mini(MenuIWT.NombreSerie - 1), m_Max(MenuIWT.NombreSerie - 1) As Single
        Dim m_CompteurTotal As Integer
        Dim ValeurStocké As String
        Dim m_EcarttypeTete(MenuIWT.NombreSerie - 1) As Single
        Dim m_StockCalculEcartype(MenuIWT.NombreSerie - 1) As Single
     
        ' Ouverture Port  RS232
        Sub OuvertureRS232(ByVal Port As String, ByVal Vitesse As Integer, ByVal Données As Integer, ByVal Parity As String, ByVal Arret As String)
     
            With MenuIWT
     
                .SerialPort.PortName = Port
                .SerialPort.BaudRate = Vitesse
                .SerialPort.DataBits = Données
                .SerialPort.ReceivedBytesThreshold = 1
                .SerialPort.Handshake = Handshake.None
                Select Case Parity
                    Case "None"
                        .SerialPort.Parity = IO.Ports.Parity.None
                    Case "Even"
                        .SerialPort.Parity = IO.Ports.Parity.Even
                    Case "Odd"
                        .SerialPort.Parity = IO.Ports.Parity.Odd
                End Select
                Select Case Arret
                    Case "One"
                        .SerialPort.StopBits = IO.Ports.StopBits.One
                    Case "OnePointFive"
                        .SerialPort.StopBits = IO.Ports.StopBits.OnePointFive
                    Case "Two"
                        .SerialPort.StopBits = IO.Ports.StopBits.Two
                End Select
                'TODO : Test si port de Communication déja ouvert
     
                .SerialPort.Open()
            End With
        End Sub
        ' Fermeture Port RS232
        Sub FermetureRS232(ByVal Port As String)
            MenuIWT.SerialPort.Close()
        End Sub
        'Affichage des données à l'écran
        Public Sub Affiche_ASCII(ByVal donneeascii As String)
     
        End Sub
     
    End Module

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plantage sur réception RS232
    Par mucky dans le forum Linux
    Réponses: 4
    Dernier message: 22/06/2008, 13h04
  2. [VBA-O] Lecture infos mails sur réception
    Par helios77 dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 12/02/2007, 14h16
  3. [FLASH] Problème de timer sur FLV
    Par BnA dans le forum Flash
    Réponses: 1
    Dernier message: 03/11/2006, 11h52
  4. [C#] Timer sur les évènements des messages Windows
    Par Nullos Oracle dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/09/2006, 11h33
  5. [VB6] Communication binaire sur port RS232
    Par Oseval dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 12/04/2006, 12h53

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