Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Futur 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 : 16
    Points
    16

    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 :
    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 832
    Points : 1 061
    Points
    1 061

    Par défaut

    Salut,

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

    Code :
    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
    Futur 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 : 16
    Points
    16

    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 832
    Points : 1 061
    Points
    1 061

    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
    Futur 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 : 16
    Points
    16

    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 832
    Points : 1 061
    Points
    1 061

    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 599
    Points
    3 599

    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
    Futur 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 : 16
    Points
    16

    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
    Futur 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 : 16
    Points
    16

    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 599
    Points
    3 599

    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 599
    Points
    3 599

    Par défaut

    Avec du code
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •