Bonjour,
Je souhaite utiliser ce composant pour ma liaison série RS232 en complément de mon composant TComport. Comment dois-je faire pour récupérer dans un Edit ou autre ma trame reçue ? :calim2:
D'avance merci
Version imprimable
Bonjour,
Je souhaite utiliser ce composant pour ma liaison série RS232 en complément de mon composant TComport. Comment dois-je faire pour récupérer dans un Edit ou autre ma trame reçue ? :calim2:
D'avance merci
J'ai réussi à récupérer ma trame avec un ComTerminal(sans passage à la ligne automatique), le souci c'est que lorsque je veux récupérer ma trame reçu dans un Mémo, au bout du 14ème caractère, retour à la ligne automatique :cry:
J'utilise ce morceau de code pour copier ma trame reçu dans mon Mémo:
Merci d'avance pour vos conseils précieuxCode:
1
2
3
4 procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: String); begin Memo1.Lines.Add('Rec: '+Str); end;
Si ta trame ne contient ni #10 ni #13, c'est WordWrap qui est à true et que ton mémo est trop petit pour afficher plus de 14 caractères sur une ligne ?
Soit agrandi le mémo, tu auras le problème plus tard
Soit passe WordWrap à false, cela sera définitivement résolu
Pense à la ScrollBar aussi !
Un petit conseil, fouille un peu plus dans l'aide ou les tutoriel TComPort avant de poser des questions !
La 1ère c'est bien, tu as trouvé la réponse, preuve qu'il n'était pas utile d'en poser une !
WordWrap est le dernier membre de TMemo, tu aurais certe passé du temps à le trouver dans l'aide mais tu aurais au passage découvert un tas de propriété !
C'est comme cela que l'on apprend !
Merci pour ta réponse rapide mais...
Mon WordWrap est bien à False et mon mémo est suffisamment grand. J'ai essayé avec RichEdit (même cas qu'avec le Mémo) et Edit1 (j'ai la dernière ligne)
Normalement, ma trame est de ce type:
>1D2;€2X0=00[Dè
Mais à partir du 14ème caractères, que ce soit cette trame ou une autre: retour ligne et qui me donne:
>1D2;€2X0=00[
Dè
Je pourrais rajouter que j'utilise Comport et Comterminal (celui-ci m'affiche correctement la trame) mais je ne sais pas comment récupérer la trame que j'ai envoyée. Ce qui me faciliterais la tâche tout en sachant que je dois exporter toutes trames émises et reçues dans un fichier texte.
Pense que Lines.Add ajoute un retour charriot, si tu reçois >1D2;€2X0=00[ et Dè séparément (deux appels à OnPacket)
tu obtiens ?
ouCode:
1
2 >1D2;2X0=00[ Dè
ouCode:
1
2 Rec: >1D2;2X0=00[ Dè
Code:
1
2 Rec: >1D2;2X0=00[ Rec: Dè
Utilise Pos pour vérifier si tu n'as pas #13 ou #10 dans ta chaine !
Lorsque je copie colle ta chaîne, j'ai un caractère "carré" entre €2 et X0 !
C'est étrange !
Version de ton Delphi 3 à 2007 ou 2009/2010/XE
Attention avec 2009+, pense que c'est de l'Unicode pour le type String !
Je n'ai jamais utilisé le TComPort et J'ignore encore plus comment fonctionne TComPort avec l'Unicode, j'ai toujours préféré l'utilisation de array of byte, c'est tellement plus fiable qu'une string !
tu devrais utiliser OnRxChar et Read (normalement fonctionne en octet et non en char)
Sinon Windows founi "Microsoft Comm Control 6.0" de mscomm32.ocx (élement du HyperTerminal et des éléments redistribuables de Microsoft Visual Basic 6.0)
C'est le composant que l'on utilise où je travaille actuellement pour la gestion du Port COM
J'obtiens la troisième solution:
Rec: >1D2;€2X0=00[
Rec: Dè
et lorsque j'utilise un label, je n'obtiens que Dè. La première partie de la trame envolée
Tu as mal analysé la situation, ce n'est pas "retour à la ligne automatique" mais une fragmentation de la donnée !
Tu reçois la chaine en deux parties, tu as donc deux fois OnPacket, maintenant pourquoi ?
TComDataPacket permet de "filtrer" automatiquement pour appeler OnPacket lors de certaines circonstances, vérifie StartString, StopString, Size ... ce dernier ne serait pas à 14 ?
Mais je te conseille vivement d'utiliser TComport.OnRxChar et la méthode Read !
Sinon, le plus efficace reste CreateFile et WaitCommEvent, là au moins, c'est du fichier, c'est brut de fonderie !
Code:CreateFile(PChar(Format('\\.\COM%d', PortNum)), GENERIC_READ or GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
je crois que tes données reçu sont des données binaire pas une chaine normale que n'importe éditeur l’affichera, sa veux dire que ta chaine sera coupé dés qu'il y a un caractère <#30 et je crois même qu'il a un caractère #0
si tu veux vérifier mon hypothèse, met un point d'arrêt dans la procedure "ComDataPacket1Packet" et regarde ce que contient "str", :aie::aie:
[edit]
à prpos tu lis les données envoyer par quel matérielle? et surement il u caractére de fin de transmisssion, alors mieux utilisé la ma méthode prposé par ShaiLeTroll:etCitation:
Mais je te conseille vivement d'utiliser TComport.OnRxChar et la méthode Read !
Code:
1
2 ComPort1.Events:=[evRxChar]; ComPort1.EventChar:=c; //ton caractére de fin