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 :

Utilisation de MSCOMM OnComm en émission réception


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut Gestion du time-out pour MSCOMM ou pour les Sockets
    Bonjour à tous,

    Je dois créer une classe de communication vers un Port COM et pour Ethernet afin de remplacer une vieille dll de notre conception mais créée à l’époque de Windows 95 voire avant.. qui commence à nous pourrir nos logiciel sous les Windows récents et surtout 64 bits.


    Pour le moment je suis sur MSCOMM
    J'ai besoin de gérer les timeout de communication, mais je ne vois pas comment initialiser une valeur de ce timeout, pourtant j'ai apparemment plusieurs retours d'erreur possibles à ce sujet.

    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
        Select Case MSComm1.CommEvent
     
            'liste des erreurs possibles
            Case comEventBreak      ' On a reçu un signal d’interruption (Break)
            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 comEvReceive       ' Si on reçoit des données
                tampon = MSComm1.Input
                Call Traitement(tampon) ' Routine de traitement
     
            Case comEvSend          ' Il y a des caractères à envoyer
            Case comEvEOF           ' On a reçu le caractère EOF
     
        End Select
    Si vous avez des info la dessus merci.

    En attendant je voulais créer un timer dynamiquement dans ma classe, mais je n'arrive pas à l'initialiser.

    Merci

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    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 077
    Points : 17 185
    Points
    17 185
    Par défaut
    Salut

    Citation Envoyé par MSDN
    Settings, propriété

    Définit et renvoie les paramètres de parité, de vitesse de transmission en bauds, le nombre de bits de données et le nombre de bits d'arrêt.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Salut
    Bonjour,

    Je me sert de Settings, mais effectivement j'indique la vitesse de Com, la parité, le nombre de bits et d’arrêt mais je vais regarder s'il y a aussi le time-out.


    J'arrive maintenant à communiquer avec mon système en créant dynamiquement mon MSComm mais pour le moment l'événement OnComm ne se déclenche pas.

  4. #4
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Bon mon OnComm se déclenche bien mais uniquement dans comEvSend et aucune en comEvReceive

    C'est un peu gênant.

  5. #5
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut Utilisation de MSCOMM OnComm en émission réception
    Bonjour,

    J'ai un petit souci qui m'agace avec l’événement oncomm de MSCOMM.

    Mon appli communique avec un système embarqué par le port COM. J'envoie une requête et le système me répond, le system ne prend jamais l’initiative. Actuellement cela fonctionne parfaitement mais j'utilise pas l’événement oncomm, si bien que j'attend d'avoir une trame dans le buffer pour la lire.

    Mon souci avec oncomm :
    Lorsque je l'utilise je n'est qu'un seul événement, c'est au moment de l'envoi de la trame (comEvSend) mais je n'est rien d'autre. Si après cet événement j'attend qu'il y est bien des info dans le buffer cela arrive bien mais cela ne déclenche pas l'événement.

    J'ai testé avec 2 appli l'une qui envoie et l'autre qui réceptionne, la oncomm a bien l'événement comEvReceive d'ailleurs il en a plusieurs autres avant. (ICI pour exemple et base de mon programme)


    Merci

  6. #6
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    J'ai réussi,

    Sur les exemples trouvés avec 2 apli, l'une en émission et l'autre en réception. il est indiqué: ICI

    Partie du code exemple à modifier (le principe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Form_Load()
    Form1.Caption = "App2"
    With MSComm1
    .CommPort = 2 'on utilise le port COM2: car on utilise 1 PC avec 2 ports COM:
    'si vous avez 2 PC, changez en .CommPort=1 !!!
    .Handshaking = 2
    .RThreshold = 1
    .RTSEnable = True
    .Settings = "9600,n,8,1"
    .SThreshold = 1
    .PortOpen = True
    End With
    Text1.Text = ""
    End Sub
    Hors cela fonctionne parfaitement si c'est utilisé avec ce contexte de 2 apli.
    Mais dans mon cas avec une application qui communique avec un système et attend une réponse le OnComm était actif uniquement pour l’émission des données.

    En supprimant SThreshold = 1, j'ai bien mon OnComm qui fonctionne maintenant sur réception des données et uniquement sur réception.
    Je ne sais pas qu'il y a un conflit avec .RThreshold = 1 mais en laissant juste ce dernier cela fonctionne parfaitement.

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

Discussions similaires

  1. Émission-réception depuis carte d'acquisition
    Par nabil ATSII dans le forum Signal
    Réponses: 0
    Dernier message: 04/11/2011, 22h15
  2. [Débutant] Émission-réception depuis carte d'acquisition
    Par infoest dans le forum MATLAB
    Réponses: 0
    Dernier message: 10/05/2011, 22h24
  3. Utilisation de MSCOMM sans passer par un userform
    Par jeje86 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/12/2008, 08h56
  4. Problème réception avec MsComm
    Par Jap dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/12/2005, 11h20

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