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 :

MSComm.Output et passage de variable


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut MSComm.Output et passage de variable
    Bonjour,

    Je suis novice en programmation et je bute sur un problème avec la fonction
    MSComm qui permet d'utiliser un port série.
    Je n'arrive pas à faire passer une variable avec la commande Output de MSComm


    Le but de la manoeuvre c'est de faire une boucle for next qui incrémente une variable de 0 à 9999.
    charger la variable avec MSComm.Output pour l'expédier sur le port com vers un autre équipement RS232

    j'arrive à générer un dialogue sans aucun problème en écrivant directement la donnée dans le code
    par exemple [MSComm1.Output = "hi" & Chr$(13)] cette commande envoi hi et un retours chariot sur mon équipement connecte(hyperterminal pour l'instant)

    j'ai fais plusieurs essais mais la je sèche

    par exemple, un essais qui ne marche pas



    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim test1
    test1 = 0
    For test1 = 0 To 9999 Step 1
    MSComm1.Output = "hi" & Chr$(13)
    MSComm1.Output = Text1.Text & Chr$(13)
    MSComm1.Output = test1
    MSComm1.Output = (Chr$(13))
    Next test1
    Si vous pouvez me guider

    Merci

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Il faut avant toute chose ouvrir le port
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsComm1.PortOpen = True
    ' et à la fin le fermer
    MsComm1.PortOpen = False
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Tu as quoi dans le text1.text
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MSComm1.Output = Text1.Text & Chr$(13)

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Peut-être faut il rajouter un LineFeed (CHR$(10)) ? Si le protocole utilisé est RC/RF il attends les deux valeurs à la fin de ligne.

    Deuxièmement, il faut effectivement connaître la valeur de text1.text, et sans doute transformer la valeur numérique par Trim$(val(test1)) pour obtenir une chaîne de caractères.

  5. #5
    Expert éminent


    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
    Par défaut
    Bonjour,

    en voyant cette belle boucle FOR et tes écritures successives dans "Ouput" je me demande quand laisse tu le temps au contrôle MSComm de transmettre tes données vers le port série ..?

    as-tu examiné ce que tu arrivais à transmettre avec ce code ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut
    Bonjour,

    je vous remercie pour vos reponses, j'ai trouve la solution à 2heure du mat. en cherchant dans d'autre code.
    Mais la je ne suis pas sur le bon ordi. je vous mets ça plus tard, ça fonctionne en mode debug pas à pas et j'envoi bien les donnees vers mon autre ordi. sur hyperterminal mais je ne comprend pas bien pourquoi et ça me derange.

  7. #7
    Expert éminent


    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
    Par défaut
    voila avec le mode pas à pas tu as trouvé une solution pour :

    Citation Envoyé par bbil
    je me demande quand laisse tu le temps au contrôle MSComm de transmettre tes données vers le port série ..?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut
    Donc voila le code complet(pour l'instant)

    text1 c'est une zone ou je rentre une valeur pour adresser une carte electronique
    text2 c'est un affichage/modifiable de la variable TramEmis


    J'ai eu beaucoup de mal a trouver pour faire passer la variable TramEmis dans Output
    En lisant l'aide de VB6 pour cette fonction il indique que pour faire passer une variable avec Output il faut la déclarer en Variant, au debut je pensé que ct la déclaration par défaut (en Variant) si on ne l'indique pas après le Dim TramEmis As ,mais quand j'ai écrit As Variant le programme à fonctionné

    Recopie de l'aide VB6
    La propriété Output peut transmettre des données texte ou binaires. Pour envoyer des données texte à l'aide de la propriété Output, vous devez indiquer une variable de type Variant contenant une chaîne. Pour envoyer des données binaires, vous devez transmettre une variable de type Variant contenant un tableau d'octets à la propriété Output.

    voila avec le mode pas à pas tu as trouvé une solution pour :
    oui effectivement en mode debug pas a pas ma carte électronique répond sans problème ,j'ai bricole un câble RS232 pour faire un espion de la ligne TX de la carte et je renvoie les trames sur Hyperterminal de l'autre ordi ma carte reçois et répond parfaitement en pas a pas

    Par contre bien sur elle plante si je fait exécuter

    c'est trop rapide il faut maintenant que je gère un dialogue dans les 2sens
    je vais chercher dans se sens:
    j'envoie une requête à la carte
    réponse de la carte bien reçue et prêt a recevoir nouvelle requête
    j'envoie une nouvelle requête
    etc.
    etc.
    j'imagine que c'est comme cela qu'il faut faire ?





    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
    Option Explicit
    Private Sub Form_Load()
    Form1.Caption = "App1"
    With MSComm1 'configuration du port
    .CommPort = 1 'On utilise le port COM1:
    .Handshaking = 0
    .RThreshold = 1
    .RTSEnable = True 'mieux pour le port COM:
    .Settings = "9600,n,8,1"
    .SThreshold = 1
    .PortOpen = True 'ouverture du port
    End With
     
     
    Command1.Caption = "&Send"
    Text1.Text = "tapez l'adresse de la carte ici"
     
     
    End Sub
     
    Private Sub Command1_Click()
     
    Dim TramEmis As Variant
     
     
    For TramEmis = 1 To 9999
    Text2.Text = TramEmis
     
    MSComm1.Output = "hi" & Chr$(13)
    MSComm1.Output = Text1.Text & Chr$(13)
    MSComm1.Output = TramEmis & (Chr$(13))
    Next TramEmis
     
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
    MSComm1.PortOpen = False 'on ferme le port à la fermeture de l'appli
    End Sub

  9. #9
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For TramEmis = 1 To 9999
    Text2.Text = TramEmis
     
    MSComm1.Output = "hi" & Chr$(13)
    Doevents
    MSComm1.Output = Text1.Text & Chr$(13)
    Doevents
    MSComm1.Output = TramEmis & (Chr$(13))
    Doevents
    Next TramEmis
    9999 * 3 transmissions sans donner la main pour les autres processus, grosse surcharge pour le processeur, Doevents pourrait améliorer les choss.
    Le mieux serait de surveiller le buffeur de transmission dans ta boucle For.... Next
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut
    Bonsoir

    Merci ProgElect c'est aussi en regardent ton code dans PilotPortCom que j'ai compris le principe de MSCom.Ouput tu dois reconnaître ta variable TramEmis

  11. #11
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Citation Envoyé par Mmkio Voir le message
    Bonsoir

    Merci ProgElect ........... tu dois reconnaître ta variable TramEmis
    Ben oui, j'espère que cela t'a rendu service.
    As tu le même problème avec pour passer une trame ?
    Pour ma part je ne peut plus me servir de mon câble USB->Serie depuis que je suis en Windows 7 64 bits, les drivers n'existent pas pour cette version, dommage car j'aurai aimé faire des essais avec ton code.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut
    Ben oui, j'espère que cela t'a rendu service.
    As tu le même problème avec pour passer une trame ?
    Pour ma part je ne peut plus me servir de mon câble USB->Serie depuis que je suis en Windows 7 64 bits, les drivers n'existent pas pour cette version, dommage car j'aurai aimé faire des essais avec ton code.
    Oui c'est bon la variable passe avec MSComm.Output depuis que je la déclare en Variant

    Je vais réécrire complètement le code, je suis mal parti ,il faut que je structure mieux mon programme
    en tout cas je vous remercie pour votre aide ,et si j'ai d'autre questions je n'hésiterais pas à poster

    A+

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

Discussions similaires

  1. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 12h25
  2. Passage de variable dans un lien asp
    Par VirginieGE dans le forum ASP
    Réponses: 4
    Dernier message: 27/07/2004, 10h06
  3. [Kylix] passage de variable en Libc
    Par zheng dans le forum EDI
    Réponses: 11
    Dernier message: 06/05/2004, 14h14
  4. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03
  5. [langage] Passage de variables...
    Par martijan dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2003, 09h48

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