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 :

Accélérer la communication avec un port série ?


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Par défaut Accélérer la communication avec un port série ?
    Bonjour à tous !
    Je souhaite programmer un générateur électrique (celui-ci : http://cp.literature.agilent.com/lit...3250-90002.pdf ), et pour cela j'utilise un script Python qui génère une liste de points avant de l'envoyer à l'appareil par un port série.

    Pour l'instant j'utilise ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ser = serial.Serial(port='COM1', baudrate=115200, bytesize=8, parity='N', stopbits=2, timeout=1, xonxoff=0,dsrdtr=1, rtscts=0)
    pour ouvrir le port

    J'ai mis le baudrate maximum supporté par le générateur, et je transmets mes données sous forme de listes d'entiers entre -2047 et 2047 (cela double la vitesse de transfert par rapport à une liste en ASCII) , mais le transfert dure quand même plus de 10 minutes contre les 23s "optimales" annoncées par le constructeur...

    Auriez-vous des suggestions pour améliorer la vitesse de transfert?
    Merci !

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Peux-tu nous montrer un extrait minimaliste de ton code pour comprendre quelle quantité de données tu envoies et de quelle manière tu envoies tout ça ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Par défaut
    Malheureusement je n'ai que mon téléphone actuellement, je ne pourrais envoyer le code que plus tard...

    Cependant si cela peut t'aider j'utilise un ser.write("data:dac... ") avec à la place des trois petits points une suite de nombres séparés par des virgules, le tout en string. Ils sont sur une même ligne et on termine par un \r\n pour indiquer que c'est fini
    Il y a 32k entiers à transférer
    S'il te faut d'autres détails j'essaierai de les retrouver

    (et encore merci pour ton aide)

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonsoir,

    Le contrôle de flux joue beaucoup sur la vitesse de transfert.

    Est-ce que vous êtes certain qu'il est bien réglé sur l'AWG ?

    Handshake Mode: DTR/DSR (factory setting)

    À défaut d'avoir un oscilloscope pour s'assurer qu'il est bien supporté par le port et la librairie serial, il faudrait essayer en mode RTS/CTS. xonxoff=0, dsrdtr=0, rtscts=1

    Et si le problème est le même, problème de câble par exemple il est possible d'utiliser le contrôle de flux directement en données avec le mode XON/XOFF, mais dans ce mode on ne peut plus utiliser la communication en binaire étant donné que les valeurs 0x11 (XON) et 0x13 (XOFF) sont réservées. xonxoff=1, dsrdtr=0, rtscts=0

    Les différents protocoles sont très bien expliqués dans le manuel en page 221 : RS-232 Handshake Methods

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Par défaut
    Bonjour !
    Merci pour ces éléments de réponse, malheureusement cela ne change pas grand chose : j'ai beau changer le baudrate et les protocoles, le temps de transfert reste quasi inchangé (52 +-1s pour 8192 points)


    Le cable qui fait la communication a le schéma suivant, si ce n'est que les broches 1 ne sont reliées à rien :
    https://en.wikipedia.org/wiki/Null_m...dem_Wiring.png
    Le problème pourrait-il venir de là?

    Edit : Deux détails : la modification du baudrate du port peut quand même influer si l'on descend en dessous des 9600. J'ai changé le baudrate du port dans le panneau de configuration pour le mettre à 115200 mais cela n'a rien changé.
    Le fait de changer le "stopbits entre 1 et 2 ne semble avoir aucun effet, alors que le manuel stipule que c'est important et qu'il y a toujours "un startbit et un stopbit".

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 725
    Par défaut
    Salut,

    Votre sujet est tellement spécifique au matériel qu'il serait sage de poster ces questions dans un forum d'utilisateurs de ces générateurs de signaux.
    A vous de voir.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Citation Envoyé par Afanthommme Voir le message
    Bonjour !

    Edit : Deux détails : la modification du baudrate du port peut quand même influer si l'on descend en dessous des 9600.
    Bonsoir,

    Ça ressemble fortement au cas d'un contrôle de flux absent.

    Vous devriez essayer avec un logiciel dédié à la validation de port série, quelque chose de plus complet que l'hyperterminal, exemple ci-dessous qui permet de tester à la volé plusieurs confs changer et voir les status de la ligne.

    Est-ce que le signal transféré est bien valide une fois chargé sur l'AWG? Aucune perte ? Il faudrait essayer de le récupérer pour vérifier.

    Nom : Terminal v1.9b.png
Affichages : 308
Taille : 19,6 Ko

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Par défaut
    Salut YCL-1!
    Je vais essayer de trouver quelque chose dans ce goût là, ça sera en effet plus pratique !

    Sinon le signal reçu sur l'awg est tout à fait convenable, je n'ai pas vérifié à un niveau suffisamment fin pour détecter des erreurs sur un point mais l'allure globale est très fidèle à ce qui est attendu

    Edit: en fait c'était une fonction appelée dans la ligne de l'envoi qui faisait tout ralentir.

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

Discussions similaires

  1. Communication avec un port série
    Par Yann_69 dans le forum Android
    Réponses: 0
    Dernier message: 03/04/2013, 17h27
  2. Communication avec un port série
    Par Artist dans le forum VB.NET
    Réponses: 3
    Dernier message: 04/06/2011, 18h34
  3. Communication avec le port série
    Par Jackyzgood dans le forum C
    Réponses: 2
    Dernier message: 12/02/2011, 21h38
  4. Problème de communication avec un port série
    Par hélène2 dans le forum C#
    Réponses: 8
    Dernier message: 22/04/2009, 09h26
  5. Code VBA pour communication avec un port série dans EXCEL
    Par Fbroom dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2008, 10h14

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