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

WinDev Discussion :

Lecture port COM problème


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut Lecture port COM problème
    Bonjour,

    J'utilise sEvénement pour lire les données provenant du port COM.

    Le problème est que les données ne sont pas lu en une seule fois. Normallement je devrais récupérer en une seule fois la chaine "Test1Test2" mais au lieu de ça j'obtiens un truc du style (résultat trace) :

    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
     
    Te
    st1T
    est2<\r><\n>
    Test
    1Tes
    t2<\r><\n>
    Te
    st1T
     
    est2
    <\r><\n>
    T
    est1
    Tes
    t2<\r><\n>
    Tes
    t1Te
    st2<\r>
    Si je test avec HyperTerminal j'ai bien la chaine "Test1Test2" en un seul tenant !!

    Pourquoi windev me fait des lectures/affichage aléatoire ?

    Merci

  2. #2
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour, pour voir plus clair, il est préférable de poster votre code. merci
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    bonjour,

    il faut se synchroniser sur le dernier caractère d'une ligne d'acquisition et buffériser ce qui arrive jusqu'à ce caractère. Voici un exemple :
    1 - Déclarer une variable globale qui enregistre une ligne d'acquisition :
    2 - Initialiser le port série et la gestion de l'évenement caractère reçu :
    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
    // Port COM  Cb_Port  ici 1 
    Cb_Port est un entier = 1
    // Vitesse  Cb_Vitesse ici 9600 bauds
    Cb_Vitesse est un entier = 9600
    LigneCom est un booléen
    // on ferme le port COM si il était ouvert
    sFerme(Cb_Port)
    LigneCom = sOuvre(Cb_Port, 6000, 6000,400,1)
    SI LigneCom = Vrai ALORS
    	// Paramétrage de COM   Cb_Vitesse vitesse de transmission
    	sFixeParamètre(Cb_Port, Cb_Vitesse, 0, 8, 0) // 8 bits sans parité 1 bit de stop
    	// Détection de caractères reçus sur le port COM choisi
    	sEvénement(Cb_Port,sEveCaractèreReçu,"LecturePortSérie") // on active la procédure de lecture sur évenement
    SINON
    		Erreur("Erreur d'ouverture du port COM")
    FIN
    3 - la procédure locale de réception sur évenement ligne série :
    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
    PROCEDURE LecturePortSérie(NumPort,Event)
    // J.P  Septembre 2012
    OctetsLus est un entier
    TempBuffer est un Buffer
    i est un entier
    OctetsLus = sDansFileEntrée (NumPort)
    TempBuffer = sLit (NumPort ,OctetsLus)
     
    POUR i = 1 A OctetsLus
    	// on se synchronise sur le  dernier caractère d'une ligne d'acquisition (ici line feed  \n 10)
    	SI TempBuffer[[i]]=Caract(10)ALORS
    		SI phrase <> "" ALORS
    			// on affiche une ligne d'acquisition
    			// on rajoute CR car on a pas stocké  le \r\n 
    			Trace(phrase,CR)	
    			// On vide la phrase							
    			phrase=""
    	FIN					
    	SINON
    		// on bufférise ce qu'on reçoit on ne stocke pas le Carriage Return \r 13
    		SI TempBuffer[[i]]<>Caract(13)ALORS phrase=phrase+TempBuffer[[i]]
    FIN
    Ami calmant, J.P ;-)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    sFixeParamètre(Cb_Port, Cb_Vitesse, 0, 8, 0) // 8 bits sans parité 1 bit de stop
    Le bit de stop n'est pas plutôt comme ça : 0,8,1 ??

    Je viens de tester ton code jurassic pork est cela ne marche pas. Voici le résultat du trace :

    >:Octets:1
    >:Buffer:T
    >:Octets:4
    >:Buffer:e
    >:Octets:4
    >:Buffer:s
    >:Octets:4
    >:Buffer:t
    >:Octets:4
    >:Buffer:1
    >:Octets:4
    >:Buffer:T
    >:Octets:4
    >:Buffer:e
    >:Octets:4
    >:Buffer:s
    >:Octets:4
    >:Buffer:t
    >:Octets:3
    >:Buffer:2
    >:Octets:3
    >:Buffer:<\r>
    >:Octets:3
    >:Buffer:<\n>
    2 <\r><\n>
    >:Octets:4
    >:Buffer:T
    >:Octets:4
    >:Buffer:e
    >:Octets:4
    >:Buffer:s
    >:Octets:4
    >:Buffer:t
    >:Octets:8
    >:Buffer:1
    >:Octets:8
    >:Buffer:T
    >:Octets:8
    >:Buffer:e
    >:Octets:8
    >:Buffer:s
    >:Octets:8
    >:Buffer:t
    >:Octets:8
    >:Buffer:2
    >:Octets:8
    >:Buffer:<\r>
    >:Octets:8
    >:Buffer:<\n>
    1Test2 <\r><\n>

  5. #5
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Moi, je trouve que ça marche pas mal.
    Il faut que tu ignores ce qu'il y a entre <\r> et <\r><\n>.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Un truc doit m'échaper... Je ne comprend pas, la phrase n'est pas complète !

    Le me retourne :

    t2 <\r><\n>
    2 <\r><\n>
    t2 <\r><\n>

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Essayes en augmentant la vitesse ... Il semble qu'il y a discordance entre la vitesse de lecture réelle et celle attendue par le logiciel !

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Je viens d'essayer mais ça ne fonctionne pas !!

    Sur mes tests avec d'autres softwares la vitesse est à 9600 et cela fonctionne du tonerre sauf avec Windev....

  9. #9
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    bonjour, le code de Jurassic me semble bon; vérifie si les paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sFixeParamètre(Cb_Port, Cb_Vitesse, 0, 8, 1)
    correspondent bien à la configuration de ton appareil.
    sinon, essaye d'ajouter après sLit un multitache(-1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TempBuffer = sLit (NumPort ,OctetsLus)
             Multitache(-1)
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Je suis bien en 0,8,1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sFixeParamètre(nCom,9600,0,8,1)

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    heu je voudrais pas passer pour un rabat-joie mais il faut bien mettre 0 en dernier paramètre pour avoir un bit de stop. Dans la doc c'est écrit :

    <NbBitsStop> : Entier
    Nombre de bits stop :


    0 -> 1 bit stop
    1 -> 1.5 bits stop
    2 -> 2 bits stop



    Ami calmant, J.P ;-)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 201
    Points : 48
    Points
    48
    Par défaut
    Oui effectivement dans la doc il est bien écrit 1bit = "0"
    Tandis que sous HyperTerminal c'est "1" pour 1 Bit... Plus simple

    Je n'utilise plus sEvénement !! J'ai remplacé par un TimerSys dans lequel je place mon slit.

    J'ai des résultats qui me conviennent déjà beaucoup mieux

    Par contre la lecture déraille de temps en temps uniquement avec Windev je ne comprend pas pourquoi :

    Nombre : 13 / 58.60:26.20<\r><\n>
    Nombre : 13 / 58.70:26.20<\r><\n>
    PB==> Nombre : 10 / 58.70:26.2<\r><\n>
    PB==> Nombre : 3 / 0<\r><\n>
    Nombre : 13 / 58.70:26.20<\r><\n>
    PB==> Nombre : 1 / 5<\r><\n>
    PB==> Nombre : 12 / 8.50:26.20<\r><\n>
    Nombre : 13 / 58.70:26.20<\r><\n>

  13. #13
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    Novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 725
    Points : 1 156
    Points
    1 156
    Par défaut
    essaye avec un "Multitache(-1)" après sLit !
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    bonjour,
    je ne comprend pas pourquoi ça ne marche pas avec Sevenement. Soit tu as une erreur dans ton code, soit tu as un problème de programmation de la ligne série. D' après les traces que tu nous a montrées, il semblerait que la variable phrase ne soit pas mémorisée entre deux passages dans la procédure LecturePortSérie ce qui serait le cas si tu n'avais pas déclaré la variable phrase en globale mais en locale.

    Ami calmant, J.P ;-)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. [WD20] Ecriture et lecture port COM
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 5
    Dernier message: 12/04/2015, 04h29
  2. lecture port COM sur event
    Par fantasiopop dans le forum Développement OS X
    Réponses: 0
    Dernier message: 09/10/2014, 09h15
  3. lecture port com
    Par vinowan dans le forum VB.NET
    Réponses: 11
    Dernier message: 30/07/2008, 09h22
  4. [débutant]Lecture port COM avec configue
    Par kyoleroi dans le forum C++
    Réponses: 0
    Dernier message: 22/04/2008, 12h02
  5. Problème de lecture sur port COM
    Par Marthym dans le forum MFC
    Réponses: 10
    Dernier message: 11/04/2006, 15h36

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