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

Lazarus Pascal Discussion :

TLazserial freeze à l'émission de données [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut TLazserial freeze à l'émission de données
    Bonjour

    Comme l'indique le titre j'ai un petit problème de blocage du port COM à l’émission de données.
    En cherchant j'ai trouvé qu'on pouvait voir s'il y avait des données reçues etc., mais ce que je n'ai pas trouvé c'est la méthode à utiliser pour savoir si le buffer TX est vide ou non.
    Je pense que j'envoie des données alors que la 1ere communication n'est pas encore terminée, si quelqu'un pouvait m'expliquer la méthode à suivre je pourrais améliorer mon Hexapode

    Bestiole que vous pouvez voir ici :


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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    tu peux essayer d'utiliser le test du canwrite ou alors un flush. Mais cela m'étonne que le buffer de sortie soit bloqué. Peux-tu nous montrer le code d'envoi de données ? La vitesse de la liaison série est-elle suffisante par rapport au volume de données à envoyer ? Le buffer de sortie est-il suffisant ? Y a -t il plusieurs sources d'envoi de données ?

    Pour le flush :
    procedure Flush; virtual;
    Waits until all data to is sent and buffers are emptied. Warning: On Windows systems is this method returns when all buffers are flushed to the serial port controller, before the last byte is sent!
    Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Str := Str +  inttohex(checksum(Str),2)+ Char(13)+ Char(10);  
    Serial.SynSer.Flush;  
    Serial.WriteData(Str);

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

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Hello jurassic pork

    Merci pour tes conseils !
    mon code est simple ... c'est dans le style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for cnt := 1 to 20 do
      if SerialConnected then
         SerialPort.WriteBuffer(BusServoBufffer[cnt],nbytes);
    nbyte c'est environ 10 bytes ...
    Mais j'ai tout changé et a la place d'envoyer 20 x 10 bytes j'envois 1 x 200 bytes et la je n'ai plus de problèmes
    J'avais testé "canwrite" mais c'était pas trop concluant vu que dés fois canwrite restait à false alors que la Com était terminé ....
    Voila ... problème résolu

    Et la COM est en 115200bps.

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

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