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

API, COM et SDKs Delphi Discussion :

Write puis read sur port com


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut Write puis read sur port com
    bonjour
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       comport1.Connected:= true ;
       ComPort1.WriteStr(#$0D+#$F2+#$00+#$00+#$07...) ;
       Comport1.Timeouts.ReadTotalConstant := 5000;
       comport1.ClearBuffer(true,false);
       ComPort1.ReadStr( tramereponse,8);
       showmessage('taille : '+inttostr(length(tramereponse)));
       Edit1.Text:=inttohex(ord(tramereponse[1]),2);
       Edit2.Text:=inttohex(ord(tramereponse[2]),2);
       comport1.Connected:= false ;
    l'appli se comporte comme si elle ne recevait pas de trame de réponse, sauf que je suis sûr que l'appareil répond une trame (vérif avec multicom)

    ça fait deux heures que je cherche, si quelqu'un a une idée..
    merci
    Seb, débutant delphi
    Balises code ajoutées par Laurent Dardenne

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut Re: write puis read sur port com
    Citation Envoyé par chourmo
    si quelqu'un a une idée..
    Oui dans un premier temps utiliser les balises code !
    Merci de respecter les régles des forums.

  3. #3
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Pourquoi tu ne fais pas le Read dans le onRxChar ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    si je double clique sur OnRxChar dans l'inspecteur d'objet, il s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComPort1.ReadStr(Chaine,Count);
    .
    à la suite de cette ligne,est-ce que je rajoute ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Comport1.Timeouts.ReadTotalConstant := 5000;
    comport1.ClearBuffer(true,false);
    ComPort1.ReadStr( tramereponse,11);
    mon appli amène l'utilisateur à cliquer sur un bouton pour lancer une trame, recevoir une réponse instantanée puis afficher une info selon le contenu de la réponse. pour cela, j'ai donc fait writestr puis readstr dans la procedure click du bouton. est-ce possible de tout faire comme tu me le conseilles? (du moins la réception)

  5. #5
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Si quand tu doubles clique sur OnRxChar, il t'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComPort1.ReadStr(Chaine,Count);
    , c'est normal que ton premier code de marche pas, car ce Read te prend les caractères. Cependant, même si tu enlèves cette ligne, ton premier code ne sera pas correct.

    OnRxChar se déclenche lorsqu'un [ou plusieurs] caractères arrivent sur le port.

    Donc, ce qu'il faut que tu fasses. Lors du clic sur le bouton, tu envoies les infos. Puis tu ne fais plus rien. Lorsque ta machine répond, elle va déclencher le onRxChar, avec, dans le paramètre Count, le nombre de caractères reçus. Donc, dans l'évènement, il faut que tu fasses un ReadStr avec le paramètres count.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    voici mon code :
    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
     
     
    procedure Tfm03_DialogueRS232.btnEnvoiPersoClick(Sender: TObject);
    var
     //........
    begin
     comport1.Connected:= true ;
     ComPort1.WriteStr(#$0D+#$F2+....);
     comport1.Connected:= false ;
    end;
     
    procedure Tfm03_DialogueRS232.ComPort1RxChar(Sender: TObject;
      Count: Integer);
    Var Chaine:String;
    begin
      ComPort1.ReadStr(Chaine,count);
      edit1.text:=inttohex(ord(chaine[1]),2);
    end;
    ça ne marche pas plus. quelle est l'influence de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comport1.Connected:= false ;
    sur l'évènement onrxchar ?

  7. #7
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Si tu déconnectes le port, il ne va rien recevoir, donc pas d'évènement onRxChar
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    ok j'ai enlevé cette ligne.
    si j'utilise un autre PC pour envoyer la trame de réponse, je vois la led de propriété ledsignal "isrx" qui s'allume succinctement. j'ai donc reçu quelque chose. mais rien ne remplit edit1
    le problème ne pourrait il pas venir du fait que j'ai à la fois le composant comdatapacket1 et comport1 ? je pense que les deux sont nécessaires mais au point où j'en suis...

  9. #9
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Enlève le comdatapacket1, en effet, ici, c'est lui qui doit te bloquer
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  10. #10
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    fait un point d'arrêt sur ComPort1RxChar et voir le contenus de count et chaine ,fait pas à pas et voir se qui ce passe.
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    j'ai bien mis un showmessage dans ComPort1RxChar mais je pense que le problème est du côté du timing. car si je simule la réponse avec un autre PC, le showmessage s'affiche, si je connecte mon matériel, rien ne s'affihce, peut il répondre trop vite ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    tout porte à croire que c'est le matériel qui ne marche pas mais si j'envoies la même trame avec un logiciel d'envoi de data sur port com, le matériel répond comme il faut !
    et j'ai bien vérifié d'envoyer la même trame "à la main" (avec l'autre PC) ou avec mon appli

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    par contre y a un truc qui m'intrigue c'est que le showmessage qu'il y a dans ComPort1RxChar s'affiche deux fois quand je simule avec un autre PC. si ma réponse fait 4 octets et que le showmessage montre la taille de la répopnse, alors le showmessage affiche d'abord 1 je clique sur OK puis il affiche 3.
    ça vous parle ?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    merci pour le coup de pouce, à demain peut être
    bonne soirée

  15. #15
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    c'est normal et je pense que MD Software peut vous expliqué mieux que moi
    par contre tu peut pas nous dire le type de réponse que vs attendé ,largeur cartére de début et de fin??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    je dois effectuer plusieurs dialogues successifs dont les trames sont de longueur variable.
    je dois :
    - rentrer en relation avec l'appareil connecté, qui me répond sa version et son n° de série, puis
    - j'envoies la trame qui lui indique que je veux programmer sa 2EPROM, puis il me répond OK puis
    - j'envoies la prog et il acquitte cette prog.
    le format de la trame PC vers matériel est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    (STX  // de valeur #$F2
    +#$.. //  longueur de trame depuis le code fction jusqu'à la dernière data
    +#$..      //  code fonction
    +#$00  //  valeur fixe
    +#$00  //   n° de bloc
    +#$00+#$00  //   adresse premier octet mémoire
    +#$..  //nombre d'octet de la chaine data
    +#$..  //data
    +ETX  // de valeur #$03
    +CHK     //checksum
    +EOT);   // de valeur #$04
    LA réponse est du même style.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    l'impression que j'ai c'est que l'appareil répond trop vite pour le PC. si je simule avec un autre PC (et un logiciel d'envoi de data RS232), je vois la réponse de mon matériel instantanément. est-ce possible que le port com ne s'ouvre pas assez vite ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    après divers espionnage, je me rends compte que le problème se situe lors de l'envoi. avec mon appli, j'envoies la bonne trame (vu que je la vois sur un PC espion) mais l'appareil ne répond pas.
    si j'envoies la même trame "à la main" (c'est à dire avec un logiciel d'envoi de data RS232), le matériel répond une certaine trame.
    quel paramètre sur delphi en configuration d'émission de data pourrait causer ce problème ?
    merci pour tout aide

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Points : 78
    Points
    78
    Par défaut
    que font les évènements "onRxBuf", "onRxFlag",... du comport ?

  20. #20
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    As-tu bien vérifié les paramètres de vitesse, parité et tout ce qui va avec ?

    Pour les évènements, onRxFlag, survient lorsque l'état d'un indicateur du port à changé [style CTS ou RTS]. onRXBuf, c'est la même idée que onRxChar, mais au lieu de parler en caractères, il parle en buffer.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [vb6] Evénement de réception/envoi sur port COM
    Par Original Prankster dans le forum VB 6 et antérieur
    Réponses: 31
    Dernier message: 13/12/2006, 00h05
  2. comment détecter l'absence de connexion sur port COM ?
    Par nicoboud2 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/04/2006, 14h41
  3. Problème de lecture sur port COM
    Par Marthym dans le forum MFC
    Réponses: 10
    Dernier message: 11/04/2006, 15h36
  4. Capteur InfraRouge sur port com
    Par PoOky dans le forum Composants VCL
    Réponses: 12
    Dernier message: 12/01/2006, 15h31
  5. Problème de reception sur Port COM
    Par Revan777 dans le forum C
    Réponses: 9
    Dernier message: 19/04/2005, 21h55

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