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 6 et antérieur Discussion :

[vb6] Evénement de réception/envoi sur port COM


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut [vb6] Evénement de réception/envoi sur port COM
    Bonsoir à nouveau

    Voilà j'ai un traitant qui est appelé sur événement sur un port COM :
    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
    Private Sub MSComm1_OnComm() ' On attend une activité sur le port
        Select Case MSComm1.CommEvent
            ' Liste des erreurs possibles
            Case comEventBreak      ' On a reçu un signal d’interruption (Break)
                connected = False
     
            Case comEventCDTO       ' Timeout de la porteuse
            Case comEventCTSTO      ' Timeout du signal CTS (Clear To Send)
            Case comEventDSRTO      ' Timeout du signal de réception
            Case comEventFrame      ' Erreur de trame
            Case comEventOverrun    ' Des données ont été perdues
            Case comEventRxOver     ' Tampon de réception saturé
            Case comEventRxParity   ' Erreur de parité
            Case comEventTxFull     ' Tampon d’envoi saturé
            Case comEventDCB        ' Erreur de réception DCB (jamais vu)
     
            ' Liste des événements possibles qui sont, eux, normaux
            Case comEvCD            ' Changement dans la broche CD (porteuse)
            Case comEvCTS           ' Changement dans broche CTS
            Case comEvDSR           ' Changement dans broche DSR (réception)
            Case comEvRing          ' Changement dans broche RING (sonnerie)
     
            Case comEvSend          ' Il y a des caractères à envoyer
     
            Case comEvReceive       ' Si on reçoit des données
                LabelStatut.Caption = "Carte UCM connectée sur le port COM spécifié"
                LabelStatut.ForeColor = &H8000&
                connected = True
                Tampon = MSComm1.Input
                Call Traitement(Tampon) ' Routine de traitement
     
            Case comEvEOF           ' On a reçu le caractère EOF
     
        End Select
    End Sub
    J'imaginais que sur succès d'un MSComm1.Input je vais dans le traitant comEvReceive, et que dans le cas d'un MSComm1.Output je vais dans le traitant comEvSend.

    Or j'ai constaté que dans le cas d'un MSComm1.Output le code relatif au cas comEvReceive est exécuté ! (même si la carte n'est pas branchée). Pourquoi ?

    Je serai tenté de dire que c'est parce qu'il manque un break à la fin du case, mais je n'ai trouvé aucun exemple faisant usage d'une telle instruction...

  2. #2
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Un break n'est pas nécessaire à la fin du case (du moins pas à ma connaissance). Pour l'évènement je cale, c'est une bonne question, je regarderais le programme que j'avais fait utilisant le mscomm et te tiendrais au courant.

  3. #3
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Bonjour,

    Mon problème devient de plus en plus agaçant. Je reçoit systématiquement dans mon tampon de réception tout ce que j'émet à destination de mon port COM, et je ne comprends toujours pas ce comportement !

    Erreur de codage de ma part ? Fonctionnement normal du système ? Comment contrer cela ?

    Merci d'avance...

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    il y as quelquechose de "branché" sur ton port série..?

  5. #5
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Bien sur, la fameuse carte électronique avec laquelle je dialogue...

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    et sans la carte tu les as tes échos..?

  7. #7
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Egalement.

  8. #8
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Bon je vais tenter de reformuler ma question.

    Comment puis-je tester qu'il y a bien une entité branchée sur mon port COM ? Autrement dit : comment puis-je lire SEULEMENT ce que la carte m'envoie (et pas ce que je lui envoie aussi) ?

    Car le but est bien là : lui envoyer une commande, et attendre une réponse. Si réponse, la carte est bien branchée, sinon problème.

    Or la lecture se fait par événement oncomm sur une réception. Et l'écriture en est un qui manifestement serait aussi une réception...

    Merci

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Peut-être en analysant le contenu des messages...???

  10. #10
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    J'y ai bien pensé, mais la nature des messages que je peux envoyer à la carte est multiple...

    Et puis tout d'abord, est-ce que c'est normal d'avoir ce comportement ?

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je n'ai pas de pratique (récente) des liaisons séries.
    J'ai toutefois fait une petite recherche dans ce forum sur le mot mscomm et j'ai pu y lire des choses intéressantes telles que l'usage de .Input et la lecture du buffer d'entrée.
    Je suppose qu'une recherche dans MSDN devrait te donner d'autres pistes à explorer.

  12. #12
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Eh bien non, ma recherche n'avait rien donné à l'époque et ne donne toujours rien, même en utilisant les mêmes critères que toi. Personne ne se sert de l'événement comEvSend et personne ne semble recevoir le résultat d'un Output dans l'événement comEvReceive.

    Idem sur la doc MSDN qui ne m'apprend rien de plus que ce que j'ai trouvé sur les tuto de developpez.com, et qui ne parle absolument pas de mon problème.

  13. #13
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    comment gère-tu les echanges de flux (soft, hard, aucun) ?

    les signaux DTR, RTS, CTS sont-ils cablés et exploités par ta carte (protocole hard) ?

    XON, Xoff (protocole soft) ?

    on manque un peu d'éléments pour te guider

  14. #14
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Je ne pense pas que ces éléments entre en jeu dans le cas qui me préoccupe, mais sait-on jamais...

    Voici comment j'initialise mon MSComm1 :
    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
    Public Sub Connect_COM()
        ' Déconnexion si connecté
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
        End If
     
        LabelStatut.Caption = "Carte UCM non connectée sur le port COM spécifié"
        LabelStatut.ForeColor = &HFF&
        connected = False
     
        ' Recherche port
        If portCom = 0 Then
            For i = 1 To 22
                On Error Resume Next
                MSComm1.CommPort = i
                MSComm1.PortOpen = True ' Test de l'ouverture du port
                DoEvents  '  Recupération d'une erreur éventuelle
                If Err.Number = 0 Or Err.Number = 8005 Then  ' 8005 = une autre appli utilise ce port
                    portCom = i
                    Exit For
                End If
            Next i
        End If
     
        ' Connexion et détection de la carte
        MSComm1.CommPort = portCom ' Port paramétré
        MSComm1.Handshaking = comRTS
        MSComm1.RThreshold = 1
        MSComm1.RTSEnable = True ' Mieux pour le port COM
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.SThreshold = 1
        On Error Resume Next
        MSComm1.PortOpen = True ' Ouverture du port
        DoEvents
        If portCom = 0 Then
            LabelCOM.Caption = "Error"
            LabelCOM.ForeColor = &HFF&
            MSComm1.PortOpen = False
            MsgBox "Aucun port COM trouvé", vbOKOnly, "Erreur"
        Else
            LabelCOM.Caption = "COM" & CStr(portCom)
            If Err.Number = 0 Or Err.Number = 8005 Then ' Port valide
                LabelCOM.ForeColor = &HC00000
                MSComm1.Output = "-" & vbCrLf  ' Passage en mode invisible
            Else
                LabelCOM.ForeColor = &HFF&
                MSComm1.PortOpen = False
            End If
        End If
        On Error GoTo 0
    End Sub
    Et voici comment j'essaie de filtrer mes événements sur MSComm1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub MSComm1_OnComm() ' On attend une activité sur le port
        Select Case MSComm1.CommEvent
            Case comEvReceive       ' Si on reçoit des données
                Tampon = MSComm1.Input
                connected = True
                Call Traitement(Tampon) ' Routine de traitement
     
            Case comEvSend          ' Il y a des caractères à envoyer
     
        End Select
    End Sub
    Le problème est que lorsque dans mon code je fais un MSComm1.Output = "-" & vbCrLf, je rentre dans le case ComEvReceive ET dans le case ComEvSend, qu'un périphérique soit réellement branché ou non... Du coup je passe connected à true alors que je pourrai très bien ne pas être connecté et mon Tampon contient ce que j'ai envoyé, à savoir un moins ("-")...


  15. #15
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Il me semble que la procedure Public Sub Connect_COM() pose problem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        ' Recherche port
        If portCom = 0 Then
            For i = 1 To 22
                On Error Resume Next
                MSComm1.CommPort = i
                MSComm1.PortOpen = True ' Test de l'ouverture du port
                DoEvents  '  Recupération d'une erreur éventuelle
                If Err.Number = 0 Or Err.Number = 8005 Then  ' 8005 = une autre appli utilise ce port
                    portCom = i
                    Exit For ' Gros doute ICI
                End If
            Next i
        End If
    ATTENTION si Err.Number = 8005 (Port déjà ouvert non pas par ton prog puisque tu n'as plus de port ouvert (fermer plus haut))
    la ligne MSComm1.CommPort = portCom suivant la sortie de la boucle FOR
    va forcement declancher une erreur puisque l'autre prog en a l'exclusivité
    On ne peut pas gérer un port ouvert par un autre programme

    Ceci etant encadré par la condition
    If portCom = 0 Then
    .....
    End If
    Si portCom <> 0 a l'entrée de cette procedure, tu a donc trouvé un port libre que tu a mis dans cette variable (portCom), reste que si tu as procedé de la même façon pour trouver ce N° de port, tu essais peut-être de gérer un port occupé exclusivement par un autre programme.
    Cela ne repond pas au probleme d'ECHO (retour de la tramme), j'ai essayé de reproduire cette etat chez moi, malheureusement je ni arrive pas.
    Essais de mettre un autre periferique sur le port COM, lance ton prog, si le probleme est toujours là, ton driver pour le/les port COM doit etre deffectueux ou le/les circuits integrés sont abimés.
    Les lignes d'une prise COM peuvent agire comme antenne, (mauvais blindage), ce qui expliquerait peut-être que sans aucun periferique branché il y ai des réactions aléatoires.
    Une derniere façon d'eliminer des doutes, fais un essais de ton prog sur un autre ordinateur.

    l'electronique etant aussi une passion pour moi, je suis ce post depuis le debut.

    Bon courrage

  16. #16
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Oula...

    Mais avec un HyperTerminal basique de Windows, tout cela marche très bien ! Vous étayez quand même la thèse du port COM défectueux ?
    Images attachées Images attachées  

  17. #17
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Bonjour
    Etes vous sûr de vous brancher sur le bon port COM avec le prog VB.
    Certain PC ayant un ou plusieurs port COM en interne, lors du balayage par prog VB on détecte des ports qui ne sont pas accessible (en faite ces ports ne sont pas physiquement liés à un connecteur externe).
    Je pense au port souris, clavier ou autres sur certain PC portable en particulier.

    Pouvez vous me ziper le projet entier, je pourrai peut-être arriver a reproduire le même phénomène, et là si sa ne fonctionne pas aussi chez moi, on serrât sûr que c’est le prog VB qui demande à être débuguer.

    J'ai fait un périphérique a base de PICBASIC H3 qui me permet de vérifier un programme écrit en VB qui utilise le port COM, cela fera l'occasion de l'utiliser pour votre cas.

  18. #18
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Depuis l'installation de mon adaptateur USB/RS232, mon ordinateur possède un nouveau port COM (n°13) qui est celui que j'utilise avec l'HyperTerminal, tout comme avec l'appli VB.

    Voici néanmoins les sources. Evidemment l'appli n'est pas entièrement fonctionnelle.
    http://www.ankhoon.net/~mliotard/projet.rar

    Merci d'avance pour votre aide et soutien.

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Original Prankster
    Depuis l'installation de mon adaptateur USB/RS232, mon ordinateur possède un nouveau port COM (n°13) qui est celui que j'utilise avec l'HyperTerminal, tout comme avec l'appli VB.
    ....
    et tu n'as pas de port série standard ..?

  20. #20
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Non, pas sur mon laptop... Enfin, j'ai un port COM3 détecté mais aucune prise RS232 y correspondant. Je soupçonne la souris optique USB, comme le suggérait ProgElecT.

    Sinon, nouveaux rebondissements dans l'affaire je crois avoir fait une découverte qui pourrait être intéressante :

    Si j'ouvre mon port COM, et que j'y écris puis que j'écoute, je reçois ce que j'y ai écrit. Rien de nouveau là-dedans, c'est le problème qui a motivé ce topic.

    Maintenant si j'ouvre mon port COM et que j'écoute sans y écrire de manière préalable, tout à l'air de bien fonctionner... Les écritures ensuite s'effectuent sans problème.

    Ce qui m'embête c'est que j'ai quand même besoin d'y écrire avant l'écoute, ne serait-ce que pour réinitialiser la carte.

    Avancerait-on ? ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] envoi de data directement en hexa sur port com
    Par stratus65 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/07/2013, 23h11
  2. Reception et envoi sur port COM RS232
    Par foujino dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/02/2009, 09h34
  3. Capteur InfraRouge sur port com
    Par PoOky dans le forum Composants VCL
    Réponses: 12
    Dernier message: 12/01/2006, 15h31
  4. Write puis read sur port com
    Par chourmo dans le forum API, COM et SDKs
    Réponses: 34
    Dernier message: 21/06/2005, 17h36
  5. Problème de reception sur Port COM
    Par Revan777 dans le forum C
    Réponses: 9
    Dernier message: 19/04/2005, 21h55

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