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

Python Discussion :

serial :probleme de lecture


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut serial :probleme de lecture
    Je développe actuellement une application qui sert à lire des données d’un port com (appareil électronique de pesage)
    Et je rencontre un problème qui est le suivant:

    Apres la lecture des données j’obtiens le résultat sous forme de petit rectangle, est ce que c’est un caractère crypté ou encodé ou juste un une case vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import serial
    ser = serial.Serial(0, timeout=1)
    #sss=ser.open()
    print('open',ser)
    s = ser.read()
    #?s=list(s)
    print(s)
    while s!='':
        print('ok')
        print s
        s = ser.read(1024)
     
     
    ser.close()
    résultat
    piece jointe


    Et merci pour toute suggestion
    Images attachées Images attachées  

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Peut-être que comme celà ça marchera mieux?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import serial
    ser = serial.Serial(0, timeout=1)
    while 1:
        car = ser.read(1)
        # if car == ???:
        #     break 
        if car != '':
            print ("%02x"%ord(car),)
    ser.close()
    A+

    Pfeuh

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    salut p-feuh
    j'ai essayé le code que tu m'as donné, il m'afiche 2 zero
    ('00',) je ne sais toujours pas pourquoi
    N.B:
    j'utilise le port (RS232)

  4. #4
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par houma2001 Voir le message
    il m'afiche 2 zero
    ('00',) je ne sais toujours pas pourquoi
    Parce que un octet de valeur 0 a été reçu sur le port série.

    A ce stade, il faudrait te demander si les deux ports séries (du PC et de l'appareil électronique de pesage) sont configurés de la même façon (vitesse, nb de bits etc...) et potasser le protocole de communication: Sous quelle forme ton appareil envoi t-il les données? Entiers? Flottants? Textes? Trame complexes à décoder? Lui faut il une question pour qu'il réponde? Ou envoi t-il cycliquement sans question? Etc...

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    je n'ai pas la moindre idée sur le mode de fonctionnement de l'apareil
    que dois je faire à present ?

  6. #6
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par houma2001 Voir le message
    que dois je faire à present ?
    Comme dit plus haut potasser le protocole de communication de ton appareil... Si tu as son constructeur et sa référence, tu dois pouvoir trouver sa documentation (donc son protocole de communication) sur le net... Si tu ne l'as pas c'est une mission suicide... Ou alors faire du reverse engineering... Bon courage.

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par houma2001 Voir le message
    (appareil électronique de pesage)
    Citation Envoyé par pfeuh Voir le message
    Parce que un octet de valeur 0 a été reçu sur le port série.
    Une valeur de zero est sans doute possible.
    Cela donne quoi chargé ?
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    le code me renvoi zero alors que la balance est chargée
    je vais modifier les paramètre et voir ce que ça donne

  9. #9
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    un grand merci à vous .
    j'ai enfin pu configurer le port de l'appareil et tout fonctionne à merveille sauf
    qu'il me reste un truc

    je veux que le programme reste en veille tant qu'il n'y a rien a recevoir du port com
    et dés qu'il ya ya un flux d’informations qui passe il commence le traitement de données

    merci pour toutes suggestions

  10. #10
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Il est possible de positionner le paramètre timeout à None (Valeur par défaut). Ainsi un ser.read(1) attendras la lecture de 1 caractère sans limite de temps.
    Dans le cas ou c'est plusieurs caractères result = ser.read(1) vas attendre/stocker le premier caractère avant de poursuivre.
    Un nbchar = ser.inWaiting() vas permettre d'avoir le nombre de caractères suivants ce qui fait qu'un result += ser.read(nbchar) donneras tous les caractères lus sur le port.
    Il est possible qu'un time.sleep(x) soit utile entre le premier ser.read() et ser.inWaiting() : Histoire de tout récupérer.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  11. #11
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Avec du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import serial
    import time
     
     
    ser = serial.Serial(0)  # timeout=None donc
    while 1:
        toread = ser.read(1)
        # A tester avec un time.sleep(1)
        nbchar = ser.inWaiting()
        toread += ser.read(nbchar)
        # etc...
    ser.close()
    Merci d'utiliser le forum pour les questions techniques.

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

Discussions similaires

  1. [C#] Probleme de lecture de valeur nulle
    Par kenzo080 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 25/10/2010, 16h58
  2. Probleme de lecture d'image
    Par NicolasR dans le forum Java ME
    Réponses: 13
    Dernier message: 28/07/2005, 14h47
  3. [xml]probleme de lecture
    Par mavina dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 22/07/2005, 08h34
  4. Probleme de lecture de classe
    Par wkd dans le forum Composants
    Réponses: 5
    Dernier message: 21/05/2004, 15h20
  5. [LG]probleme de lecture de base de données
    Par jf dans le forum Langage
    Réponses: 14
    Dernier message: 26/06/2003, 15h57

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